@@ -33,6 +33,31 @@ contract TransferToken {
3333
3434}
3535
36+ struct CollectionSecurityPolicyV3 {
37+ bool disableAuthorizationMode;
38+ bool authorizersCannotSetWildcardOperators;
39+ uint8 transferSecurityLevel;
40+ uint120 listId;
41+ bool enableAccountFreezingMode;
42+ uint16 tokenType;
43+ }
44+
45+ interface CreatorTokenTransferValidator is ITransferValidator {
46+
47+ function setTransferSecurityLevelOfCollection (
48+ address collection ,
49+ uint8 transferSecurityLevel ,
50+ bool isTransferRestricted ,
51+ bool isTransferWithRestrictedRecipient ,
52+ bool isTransferWithRestrictedToken
53+ ) external ;
54+ function getCollectionSecurityPolicy (address collection )
55+ external
56+ view
57+ returns (CollectionSecurityPolicyV3 memory );
58+
59+ }
60+
3661contract CreatorTokenERC20Test is Test {
3762
3863 ERC20Core public core;
@@ -43,7 +68,8 @@ contract CreatorTokenERC20Test is Test {
4368
4469 TransferToken public transferTokenContract;
4570
46- ITransferValidator public mockTransferValidator;
71+ CreatorTokenTransferValidator public mockTransferValidator;
72+ uint8 TRANSFER_SECURITY_LEVEL_SEVEN = 7 ;
4773
4874 uint256 ownerPrivateKey = 1 ;
4975 address public owner;
@@ -120,7 +146,7 @@ contract CreatorTokenERC20Test is Test {
120146 vm.prank (owner);
121147 core.grantRoles (owner, Role._MINTER_ROLE);
122148
123- mockTransferValidator = ITransferValidator (0x721C0078c2328597Ca70F5451ffF5A7B38D4E947 );
149+ mockTransferValidator = CreatorTokenTransferValidator (0x721C0078c2328597Ca70F5451ffF5A7B38D4E947 );
124150 vm.etch (address (mockTransferValidator), TRANSFER_VALIDATOR_DEPLOYED_BYTECODE);
125151 }
126152
@@ -176,7 +202,7 @@ contract CreatorTokenERC20Test is Test {
176202 }
177203 _mintToken ();
178204
179- assertEq (1 , core.balanceOf (owner));
205+ assertEq (100 , core.balanceOf (owner));
180206
181207 // set transfer validator
182208 vm.prank (owner);
@@ -192,6 +218,61 @@ contract CreatorTokenERC20Test is Test {
192218 assertEq (0 , core.balanceOf (permissionedActor));
193219 }
194220
221+ /*///////////////////////////////////////////////////////////////
222+ Unit tests: `setTransferPolicy`
223+ //////////////////////////////////////////////////////////////*/
224+
225+ function test_setTransferSecurityLevel () public {
226+ if (evmVersionHash != keccak256 (abi.encode ('evm_version = "cancun" ' ))) {
227+ //skip test if evm version is not cancun
228+ return ;
229+ }
230+
231+ // set transfer validator
232+ vm.prank (owner);
233+ CreatorTokenERC20 (address (core)).setTransferValidator (address (mockTransferValidator));
234+
235+ vm.prank (owner);
236+ core.grantRoles (permissionedActor, Role._MANAGER_ROLE);
237+
238+ vm.prank (permissionedActor);
239+ mockTransferValidator.setTransferSecurityLevelOfCollection (
240+ address (core), TRANSFER_SECURITY_LEVEL_SEVEN, true , false , false
241+ );
242+
243+ assertEq (
244+ mockTransferValidator.getCollectionSecurityPolicy (address (core)).transferSecurityLevel,
245+ TRANSFER_SECURITY_LEVEL_SEVEN
246+ );
247+ }
248+
249+ function test_revert_setTransferSecurityLevel () public {
250+ if (evmVersionHash != keccak256 (abi.encode ('evm_version = "cancun" ' ))) {
251+ //skip test if evm version is not cancun
252+ return ;
253+ }
254+ vm.prank (owner);
255+ core.grantRoles (permissionedActor, Role._MANAGER_ROLE);
256+
257+ // revert due to msg.sender not being the transfer validator
258+ vm.expectRevert ();
259+ vm.prank (permissionedActor);
260+ mockTransferValidator.setTransferSecurityLevelOfCollection (
261+ address (core), TRANSFER_SECURITY_LEVEL_SEVEN, true , false , false
262+ );
263+
264+ // set transfer validator
265+ vm.prank (owner);
266+ CreatorTokenERC20 (address (core)).setTransferValidator (address (mockTransferValidator));
267+
268+ // revert due to incorrect permissions
269+ vm.prank (unpermissionedActor);
270+ vm.expectRevert ();
271+ mockTransferValidator.setTransferSecurityLevelOfCollection (
272+ address (core), TRANSFER_SECURITY_LEVEL_SEVEN, true , false , false
273+ );
274+ }
275+
195276 function _mintToken () internal {
196277 address saleRecipient = address (0x987 );
197278
0 commit comments