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