@@ -7,22 +7,27 @@ import {MockImplementation, RevertingInitializerMockImplementation} from "../moc
77import {ECDSA} from "openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol " ;
88
99contract InitializeTest is EIP7702ProxyBase {
10- function test_succeeds_withValidSignatureAndArgs () public {
11- bytes memory initArgs = _createInitArgs (_newOwner);
10+ function test_succeeds_withValidSignatureAndArgs (address newOwner ) public {
11+ vm.assume (newOwner != address (0 ));
12+ assumeNotPrecompile (newOwner);
13+
14+ bytes memory initArgs = _createInitArgs (newOwner);
1215 bytes memory signature = _signInitData (_EOA_PRIVATE_KEY, initArgs);
1316
1417 EIP7702Proxy (_eoa).initialize (initArgs, signature);
1518
16- // Verify implementation was set
17- assertEq (
18- _getERC1967Implementation (address (_eoa)),
19- address (_implementation),
20- "Implementation should be set after initialization "
19+ // Verify owner was set correctly
20+ assertTrue (
21+ MockImplementation (payable (_eoa)).owner () == newOwner,
22+ "Owner should be set to fuzzed address "
2123 );
2224 }
2325
24- function test_setsERC1967ImplementationSlot () public {
25- bytes memory initArgs = _createInitArgs (_newOwner);
26+ function test_setsERC1967ImplementationSlot (address newOwner ) public {
27+ vm.assume (newOwner != address (0 ));
28+ assumeNotPrecompile (newOwner);
29+
30+ bytes memory initArgs = _createInitArgs (newOwner);
2631 bytes memory signature = _signInitData (_EOA_PRIVATE_KEY, initArgs);
2732
2833 EIP7702Proxy (_eoa).initialize (initArgs, signature);
@@ -44,8 +49,8 @@ contract InitializeTest is EIP7702ProxyBase {
4449 EIP7702Proxy (_eoa).initialize (initArgs, signature);
4550 }
4651
47- function test_reverts_whenSignatureLengthInvalid () public {
48- bytes memory initArgs = _createInitArgs (_newOwner );
52+ function test_reverts_whenSignatureLengthInvalid (address newOwner ) public {
53+ bytes memory initArgs = _createInitArgs (newOwner );
4954 bytes memory signature = hex "deadbeef " ; // Too short to be valid ECDSA signature
5055
5156 vm.expectRevert (
@@ -54,17 +59,19 @@ contract InitializeTest is EIP7702ProxyBase {
5459 EIP7702Proxy (_eoa).initialize (initArgs, signature);
5560 }
5661
57- function test_reverts_whenSignatureInvalid () public {
58- bytes memory initArgs = _createInitArgs (_newOwner );
62+ function test_reverts_whenSignatureInvalid (address newOwner ) public {
63+ bytes memory initArgs = _createInitArgs (newOwner );
5964 // 65 bytes of invalid signature data
6065 bytes memory signature = new bytes (65 );
6166
6267 vm.expectRevert (abi.encodeWithSignature ("ECDSAInvalidSignature() " ));
6368 EIP7702Proxy (_eoa).initialize (initArgs, signature);
6469 }
6570
66- function test_reverts_whenSignerWrong () public {
67- uint256 wrongPk = 0xC0FFEE ;
71+ function test_reverts_whenSignerWrong (uint128 wrongPk ) public {
72+ vm.assume (wrongPk != 0 );
73+ vm.assume (wrongPk != _EOA_PRIVATE_KEY); // Not the valid signer
74+
6875 bytes memory initArgs = _createInitArgs (_newOwner);
6976 bytes32 initHash = keccak256 (abi.encode (_eoa, initArgs));
7077 (uint8 v , bytes32 r , bytes32 s ) = vm.sign (wrongPk, initHash);
@@ -74,7 +81,10 @@ contract InitializeTest is EIP7702ProxyBase {
7481 EIP7702Proxy (_eoa).initialize (initArgs, signature);
7582 }
7683
77- function test_reverts_whenDelegatecallFails () public {
84+ function test_reverts_whenDelegatecallFails (address newOwner ) public {
85+ vm.assume (newOwner != address (0 ));
86+ assumeNotPrecompile (newOwner);
87+
7888 // Deploy reverting implementation
7989 _implementation = new RevertingInitializerMockImplementation ();
8090 _initSelector = RevertingInitializerMockImplementation
@@ -91,34 +101,49 @@ contract InitializeTest is EIP7702ProxyBase {
91101 vm.etch (_eoa, proxyCode);
92102
93103 // Try to initialize with valid signature but reverting implementation
94- bytes memory initArgs = _createInitArgs (_newOwner );
104+ bytes memory initArgs = _createInitArgs (newOwner );
95105 bytes memory signature = _signInitData (_EOA_PRIVATE_KEY, initArgs);
96106
97107 vm.expectRevert ("InitializerReverted " );
98108 EIP7702Proxy (_eoa).initialize (initArgs, signature);
99109 }
100110
101- function test_reverts_whenSignatureReplayedWithDifferentProxy () public {
111+ function test_reverts_whenSignatureReplayedWithDifferentProxy (
112+ address payable secondProxy ,
113+ address newOwner
114+ ) public {
115+ vm.assume (address (secondProxy) != address (0 ));
116+ vm.assume (address (secondProxy) != address (_eoa));
117+ assumeNotPrecompile (address (secondProxy));
118+ assumeNotPrecompile (newOwner);
119+
102120 // Get signature for first proxy
103- bytes memory initArgs = _createInitArgs (_newOwner );
121+ bytes memory initArgs = _createInitArgs (newOwner );
104122 bytes memory signature = _signInitData (_EOA_PRIVATE_KEY, initArgs);
105123
106124 // Deploy a second proxy with same implementation
107- address payable secondProxy = payable (address (0xBEEF ));
108125 _deployProxy (secondProxy);
109126
110127 // Try to use same signature with different proxy
111128 vm.expectRevert (EIP7702Proxy.InvalidSignature.selector );
112129 EIP7702Proxy (secondProxy).initialize (initArgs, signature);
113130 }
114131
115- function test_reverts_whenSignatureReplayedWithDifferentArgs () public {
132+ function test_reverts_whenSignatureReplayedWithDifferentArgs (
133+ address differentOwner ,
134+ address newOwner
135+ ) public {
136+ vm.assume (differentOwner != address (0 ));
137+ vm.assume (differentOwner != newOwner);
138+ assumeNotPrecompile (differentOwner);
139+ assumeNotPrecompile (newOwner);
140+
116141 // Get signature for first initialization args
117- bytes memory initArgs = _createInitArgs (_newOwner );
142+ bytes memory initArgs = _createInitArgs (newOwner );
118143 bytes memory signature = _signInitData (_EOA_PRIVATE_KEY, initArgs);
119144
120145 // Try to use same signature with different args
121- bytes memory differentArgs = _createInitArgs (address ( 0xBEEF ) );
146+ bytes memory differentArgs = _createInitArgs (differentOwner );
122147 vm.expectRevert (EIP7702Proxy.InvalidSignature.selector );
123148 EIP7702Proxy (_eoa).initialize (differentArgs, signature);
124149 }
0 commit comments