1
+ // SPDX-License-Identifier: BUSL-1.1
2
+ pragma solidity ^ 0.8.27 ;
3
+
4
+ import "forge-std/Test.sol " ;
5
+ import "src/contracts/mixins/SignatureUtils.sol " ;
6
+
7
+ contract MockSigner {
8
+ mapping (bytes32 => mapping (bytes => bool )) public validSignatures;
9
+
10
+ function setValidSignature (bytes32 digest , bytes memory signature , bool valid ) public {
11
+ validSignatures[digest][signature] = valid;
12
+ }
13
+
14
+ function isValidSignatureNow (bytes32 digest , bytes memory signature ) public view returns (bool ) {
15
+ return validSignatures[digest][signature];
16
+ }
17
+ }
18
+
19
+ contract SignatureUtilsUnit is Test , SignatureUtils {
20
+ uint256 signerPk;
21
+ address signer;
22
+ bytes32 hash;
23
+ bytes32 digest;
24
+ bytes32 expectedDomainSeparator;
25
+
26
+ function setUp () public {
27
+ vm.chainId (1 );
28
+
29
+ signerPk = 1 ;
30
+ signer = vm.addr (signerPk);
31
+
32
+ hash = keccak256 ("" );
33
+ digest = _calculateSignableDigest (hash);
34
+
35
+ expectedDomainSeparator = keccak256 (
36
+ abi.encode (
37
+ keccak256 ("EIP712Domain(string name,uint256 chainId,address verifyingContract) " ),
38
+ keccak256 (bytes ("EigenLayer " )),
39
+ block .chainid ,
40
+ address (this )
41
+ )
42
+ );
43
+ }
44
+
45
+ function test_domainSeparator_NonZero () public {
46
+ assertTrue (_INITIAL_DOMAIN_SEPARATOR != 0 , "The initial domain separator should be non-zero " );
47
+ assertTrue (domainSeparator () != 0 , "The domain separator should be non-zero " );
48
+ assertTrue (domainSeparator () == expectedDomainSeparator, "The domain separator should be as expected " );
49
+ }
50
+
51
+ function test_domainSeparator_NewChainId () public {
52
+ bytes32 initialDomainSeparator = domainSeparator ();
53
+
54
+ // Change the chain ID
55
+ vm.chainId (9999 );
56
+
57
+ bytes32 newDomainSeparator = domainSeparator ();
58
+
59
+ assertTrue (newDomainSeparator != 0 , "The new domain separator should be non-zero " );
60
+ assertTrue (
61
+ initialDomainSeparator != newDomainSeparator,
62
+ "The domain separator should change when the chain ID changes "
63
+ );
64
+ }
65
+
66
+ function test_checkIsValidSignatureNow_Expired () public {
67
+ (uint8 v , bytes32 r , bytes32 s ) = vm.sign (signerPk, digest);
68
+
69
+ vm.expectRevert (ISignatureUtils.SignatureExpired.selector );
70
+ _checkIsValidSignatureNow (signer, digest, abi.encode (r, s, v), block .timestamp - 1 );
71
+ }
72
+
73
+ function testFail_checkIsValidSignatureNow_InvalidSignature () public {
74
+ _checkIsValidSignatureNow (signer, digest, "" , block .timestamp );
75
+ }
76
+ }
0 commit comments