@@ -41,6 +41,31 @@ contract TransferToken {
41
41
42
42
}
43
43
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
+
44
69
contract RoyaltyERC1155Test is Test {
45
70
46
71
ERC1155Core public core;
@@ -49,7 +74,8 @@ contract RoyaltyERC1155Test is Test {
49
74
50
75
MintableERC1155 public mintableModuleImplementation;
51
76
TransferToken public transferTokenContract;
52
- ITransferValidator public mockTransferValidator;
77
+ CreatorTokenTransferValidator public mockTransferValidator;
78
+ uint8 TRANSFER_SECURITY_LEVEL_SEVEN = 7 ;
53
79
54
80
uint256 ownerPrivateKey = 1 ;
55
81
address public owner;
@@ -133,7 +159,7 @@ contract RoyaltyERC1155Test is Test {
133
159
core.grantRoles (owner, Role._MINTER_ROLE);
134
160
135
161
// set up transfer validator
136
- mockTransferValidator = ITransferValidator (0x721C0078c2328597Ca70F5451ffF5A7B38D4E947 );
162
+ mockTransferValidator = CreatorTokenTransferValidator (0x721C0078c2328597Ca70F5451ffF5A7B38D4E947 );
137
163
vm.etch (address (mockTransferValidator), TRANSFER_VALIDATOR_DEPLOYED_BYTECODE);
138
164
}
139
165
@@ -247,7 +273,7 @@ contract RoyaltyERC1155Test is Test {
247
273
function test_revert_setTransferValidator_invalidContract () public {
248
274
// attempt to set the transfer validator to an invalid contract
249
275
vm.prank (owner);
250
- vm.expectRevert (RoyaltyERC1155.InvalidTransferValidatorContract .selector );
276
+ vm.expectRevert (RoyaltyERC1155.RoyaltyInvalidTransferValidatorContract .selector );
251
277
RoyaltyERC1155 (address (core)).setTransferValidator (address (11_111 ));
252
278
}
253
279
@@ -323,6 +349,61 @@ contract RoyaltyERC1155Test is Test {
323
349
assertEq (0 , core.balanceOf (permissionedActor, 1 ));
324
350
}
325
351
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
+
326
407
/*///////////////////////////////////////////////////////////////
327
408
UTILITY FUNCTIONS
328
409
//////////////////////////////////////////////////////////////*/
0 commit comments