@@ -41,6 +41,31 @@ contract TransferToken {
4141
4242}
4343
44+ struct CollectionSecurityPolicyV3 {
45+ bool disableAuthorizationMode;
46+ bool authorizersCannotSetWildcardOperators;
47+ uint8 transferSecurityLevel;
48+ uint120 listId;
49+ bool enableAccountFreezingMode;
50+ uint16 tokenType;
51+ }
52+
53+ interface CreatorTokenTransferValidator is ITransferValidator {
54+
55+ function setTransferSecurityLevelOfCollection (
56+ address collection ,
57+ uint8 transferSecurityLevel ,
58+ bool isTransferRestricted ,
59+ bool isTransferWithRestrictedRecipient ,
60+ bool isTransferWithRestrictedToken
61+ ) external ;
62+ function getCollectionSecurityPolicy (address collection )
63+ external
64+ view
65+ returns (CollectionSecurityPolicyV3 memory );
66+
67+ }
68+
4469contract RoyaltyERC1155Test is Test {
4570
4671 ERC1155Core public core;
@@ -49,7 +74,8 @@ contract RoyaltyERC1155Test is Test {
4974
5075 MintableERC1155 public mintableModuleImplementation;
5176 TransferToken public transferTokenContract;
52- ITransferValidator public mockTransferValidator;
77+ CreatorTokenTransferValidator public mockTransferValidator;
78+ uint8 TRANSFER_SECURITY_LEVEL_SEVEN = 7 ;
5379
5480 uint256 ownerPrivateKey = 1 ;
5581 address public owner;
@@ -133,7 +159,7 @@ contract RoyaltyERC1155Test is Test {
133159 core.grantRoles (owner, Role._MINTER_ROLE);
134160
135161 // set up transfer validator
136- mockTransferValidator = ITransferValidator (0x721C0078c2328597Ca70F5451ffF5A7B38D4E947 );
162+ mockTransferValidator = CreatorTokenTransferValidator (0x721C0078c2328597Ca70F5451ffF5A7B38D4E947 );
137163 vm.etch (address (mockTransferValidator), TRANSFER_VALIDATOR_DEPLOYED_BYTECODE);
138164 }
139165
@@ -247,7 +273,7 @@ contract RoyaltyERC1155Test is Test {
247273 function test_revert_setTransferValidator_invalidContract () public {
248274 // attempt to set the transfer validator to an invalid contract
249275 vm.prank (owner);
250- vm.expectRevert (RoyaltyERC1155.InvalidTransferValidatorContract .selector );
276+ vm.expectRevert (RoyaltyERC1155.RoyaltyInvalidTransferValidatorContract .selector );
251277 RoyaltyERC1155 (address (core)).setTransferValidator (address (11_111 ));
252278 }
253279
@@ -323,6 +349,61 @@ contract RoyaltyERC1155Test is Test {
323349 assertEq (0 , core.balanceOf (permissionedActor, 1 ));
324350 }
325351
352+ /*///////////////////////////////////////////////////////////////
353+ Unit tests: `setTransferPolicy`
354+ //////////////////////////////////////////////////////////////*/
355+
356+ function test_setTransferSecurityLevel () public {
357+ if (evmVersionHash != keccak256 (abi.encode ('evm_version = "cancun" ' ))) {
358+ //skip test if evm version is not cancun
359+ return ;
360+ }
361+
362+ // set transfer validator
363+ vm.prank (owner);
364+ RoyaltyERC1155 (address (core)).setTransferValidator (address (mockTransferValidator));
365+
366+ vm.prank (owner);
367+ core.grantRoles (permissionedActor, Role._MANAGER_ROLE);
368+
369+ vm.prank (permissionedActor);
370+ mockTransferValidator.setTransferSecurityLevelOfCollection (
371+ address (core), TRANSFER_SECURITY_LEVEL_SEVEN, true , false , false
372+ );
373+
374+ assertEq (
375+ mockTransferValidator.getCollectionSecurityPolicy (address (core)).transferSecurityLevel,
376+ TRANSFER_SECURITY_LEVEL_SEVEN
377+ );
378+ }
379+
380+ function test_revert_setTransferSecurityLevel () public {
381+ if (evmVersionHash != keccak256 (abi.encode ('evm_version = "cancun" ' ))) {
382+ //skip test if evm version is not cancun
383+ return ;
384+ }
385+ vm.prank (owner);
386+ core.grantRoles (permissionedActor, Role._MANAGER_ROLE);
387+
388+ // revert due to msg.sender not being the transfer validator
389+ vm.expectRevert ();
390+ vm.prank (permissionedActor);
391+ mockTransferValidator.setTransferSecurityLevelOfCollection (
392+ address (core), TRANSFER_SECURITY_LEVEL_SEVEN, true , false , false
393+ );
394+
395+ // set transfer validator
396+ vm.prank (owner);
397+ RoyaltyERC1155 (address (core)).setTransferValidator (address (mockTransferValidator));
398+
399+ // revert due to incorrect permissions
400+ vm.prank (unpermissionedActor);
401+ vm.expectRevert ();
402+ mockTransferValidator.setTransferSecurityLevelOfCollection (
403+ address (core), TRANSFER_SECURITY_LEVEL_SEVEN, true , false , false
404+ );
405+ }
406+
326407 /*///////////////////////////////////////////////////////////////
327408 UTILITY FUNCTIONS
328409 //////////////////////////////////////////////////////////////*/
0 commit comments