@@ -5,13 +5,13 @@ import {EIP7702ProxyBase} from "../base/EIP7702ProxyBase.sol";
55import {EIP7702Proxy} from "../../src/EIP7702Proxy.sol " ;
66import {CoinbaseSmartWallet} from "../../lib/smart-wallet/src/CoinbaseSmartWallet.sol " ;
77import {ECDSA} from "openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol " ;
8+ import {ERC1967Utils } from "openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol " ;
89
910contract InitializeTest is EIP7702ProxyBase {
1011 function testSucceedsWithValidSignature () public {
1112 bytes memory initArgs = _createInitArgs (_newOwner);
1213 bytes memory signature = _signInitData (_EOA_PRIVATE_KEY, initArgs);
1314
14- vm.prank (_eoa);
1515 EIP7702Proxy (_eoa).initialize (initArgs, signature);
1616
1717 // Verify initialization through implementation at the EOA's address
@@ -26,7 +26,6 @@ contract InitializeTest is EIP7702ProxyBase {
2626 bytes memory initArgs = _createInitArgs (_newOwner);
2727 bytes memory signature = hex "deadbeef " ; // Invalid signature
2828
29- vm.prank (_eoa);
3029 vm.expectRevert (); // Should revert with signature verification error
3130 EIP7702Proxy (_eoa).initialize (initArgs, signature);
3231 }
@@ -40,7 +39,6 @@ contract InitializeTest is EIP7702ProxyBase {
4039 (uint8 v , bytes32 r , bytes32 s ) = vm.sign (wrongPk, initHash);
4140 bytes memory signature = abi.encodePacked (r, s, v);
4241
43- vm.prank (_eoa);
4442 vm.expectRevert (); // Should revert with signature verification error
4543 EIP7702Proxy (_eoa).initialize (initArgs, signature);
4644 }
@@ -49,12 +47,33 @@ contract InitializeTest is EIP7702ProxyBase {
4947 bytes memory initArgs = _createInitArgs (_newOwner);
5048 bytes memory signature = _signInitData (_EOA_PRIVATE_KEY, initArgs);
5149
52- vm.prank (_eoa);
5350 EIP7702Proxy (_eoa).initialize (initArgs, signature);
5451
5552 // Try to initialize again
56- vm.prank (_eoa);
5753 vm.expectRevert (CoinbaseSmartWallet.Initialized.selector );
5854 EIP7702Proxy (_eoa).initialize (initArgs, signature);
5955 }
56+
57+ function testSetsERC1967ImplementationSlot () public {
58+ bytes memory initArgs = _createInitArgs (_newOwner);
59+ bytes memory signature = _signInitData (_EOA_PRIVATE_KEY, initArgs);
60+
61+ EIP7702Proxy (_eoa).initialize (initArgs, signature);
62+
63+ address storedImpl = _getERC1967Implementation (address (_eoa));
64+ assertEq (
65+ storedImpl,
66+ address (_implementation),
67+ "ERC1967 implementation slot should store implementation address "
68+ );
69+ }
70+
71+ function testEmitsUpgradedEvent () public {
72+ bytes memory initArgs = _createInitArgs (_newOwner);
73+ bytes memory signature = _signInitData (_EOA_PRIVATE_KEY, initArgs);
74+
75+ vm.expectEmit (true , false , false , false , address (_eoa));
76+ emit EIP7702Proxy.Upgraded (address (_implementation));
77+ EIP7702Proxy (_eoa).initialize (initArgs, signature);
78+ }
6079}
0 commit comments