@@ -33,6 +33,31 @@ contract TransferToken {
33
33
34
34
}
35
35
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
+
36
61
contract CreatorTokenERC20Test is Test {
37
62
38
63
ERC20Core public core;
@@ -43,7 +68,8 @@ contract CreatorTokenERC20Test is Test {
43
68
44
69
TransferToken public transferTokenContract;
45
70
46
- ITransferValidator public mockTransferValidator;
71
+ CreatorTokenTransferValidator public mockTransferValidator;
72
+ uint8 TRANSFER_SECURITY_LEVEL_SEVEN = 7 ;
47
73
48
74
uint256 ownerPrivateKey = 1 ;
49
75
address public owner;
@@ -120,7 +146,7 @@ contract CreatorTokenERC20Test is Test {
120
146
vm.prank (owner);
121
147
core.grantRoles (owner, Role._MINTER_ROLE);
122
148
123
- mockTransferValidator = ITransferValidator (0x721C0078c2328597Ca70F5451ffF5A7B38D4E947 );
149
+ mockTransferValidator = CreatorTokenTransferValidator (0x721C0078c2328597Ca70F5451ffF5A7B38D4E947 );
124
150
vm.etch (address (mockTransferValidator), TRANSFER_VALIDATOR_DEPLOYED_BYTECODE);
125
151
}
126
152
@@ -176,7 +202,7 @@ contract CreatorTokenERC20Test is Test {
176
202
}
177
203
_mintToken ();
178
204
179
- assertEq (1 , core.balanceOf (owner));
205
+ assertEq (100 , core.balanceOf (owner));
180
206
181
207
// set transfer validator
182
208
vm.prank (owner);
@@ -192,6 +218,61 @@ contract CreatorTokenERC20Test is Test {
192
218
assertEq (0 , core.balanceOf (permissionedActor));
193
219
}
194
220
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
+
195
276
function _mintToken () internal {
196
277
address saleRecipient = address (0x987 );
197
278
0 commit comments