-
Notifications
You must be signed in to change notification settings - Fork 179
Expand file tree
/
Copy pathIdRegistryTestSuite.sol
More file actions
109 lines (94 loc) · 3.37 KB
/
Copy pathIdRegistryTestSuite.sol
File metadata and controls
109 lines (94 loc) · 3.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.21;
import {IdRegistry} from "../../src/IdRegistry.sol";
import {TestSuiteSetup} from "../TestSuiteSetup.sol";
/* solhint-disable state-visibility */
abstract contract IdRegistryTestSuite is TestSuiteSetup {
IdRegistry idRegistry;
function setUp() public virtual override {
super.setUp();
idRegistry = new IdRegistry(migrator, owner);
vm.prank(owner);
idRegistry.unpause();
addKnownContract(address(idRegistry));
}
/*//////////////////////////////////////////////////////////////
TEST HELPERS
//////////////////////////////////////////////////////////////*/
function _register(
address caller
) internal returns (uint256 fid) {
fid = _registerWithRecovery(caller, address(0));
}
function _registerWithRecovery(address caller, address recovery) internal returns (uint256 fid) {
vm.prank(idRegistry.idGateway());
fid = idRegistry.register(caller, recovery);
}
function _pause() public {
vm.prank(owner);
idRegistry.pause();
assertEq(idRegistry.paused(), true);
}
function _signTransfer(
uint256 pk,
uint256 fid,
address to,
uint256 deadline
) internal view returns (bytes memory signature) {
address signer = vm.addr(pk);
bytes32 digest = idRegistry.hashTypedDataV4(
keccak256(abi.encode(idRegistry.TRANSFER_TYPEHASH(), fid, to, idRegistry.nonces(signer), deadline))
);
(uint8 v, bytes32 r, bytes32 s) = vm.sign(pk, digest);
signature = abi.encodePacked(r, s, v);
assertEq(signature.length, 65);
}
function _signTransferAndChangeRecovery(
uint256 pk,
uint256 fid,
address to,
address recovery,
uint256 deadline
) internal view returns (bytes memory signature) {
address signer = vm.addr(pk);
bytes32 digest = idRegistry.hashTypedDataV4(
keccak256(
abi.encode(
idRegistry.TRANSFER_AND_CHANGE_RECOVERY_TYPEHASH(),
fid,
to,
recovery,
idRegistry.nonces(signer),
deadline
)
)
);
(uint8 v, bytes32 r, bytes32 s) = vm.sign(pk, digest);
signature = abi.encodePacked(r, s, v);
assertEq(signature.length, 65);
}
function _signChangeRecoveryAddress(
uint256 pk,
uint256 fid,
address from,
address to,
uint256 deadline
) internal view returns (bytes memory signature) {
address signer = vm.addr(pk);
bytes32 digest = idRegistry.hashTypedDataV4(
keccak256(
abi.encode(
idRegistry.CHANGE_RECOVERY_ADDRESS_TYPEHASH(), fid, from, to, idRegistry.nonces(signer), deadline
)
)
);
(uint8 v, bytes32 r, bytes32 s) = vm.sign(pk, digest);
signature = abi.encodePacked(r, s, v);
assertEq(signature.length, 65);
}
function _signDigest(uint256 pk, bytes32 digest) internal pure returns (bytes memory signature) {
(uint8 v, bytes32 r, bytes32 s) = vm.sign(pk, digest);
signature = abi.encodePacked(r, s, v);
assertEq(signature.length, 65);
}
}