diff --git a/src/bridge/ERC20Inbox.sol b/src/bridge/ERC20Inbox.sol index 303397f29..8db56cf74 100644 --- a/src/bridge/ERC20Inbox.sol +++ b/src/bridge/ERC20Inbox.sol @@ -54,10 +54,15 @@ contract ERC20Inbox is AbsInbox, IERC20Inbox { dest = AddressAliasHelper.applyL1ToL2Alias(msg.sender); } - uint256 amountToMintOnL2 = _fromNativeTo18Decimals(amount); - return _deliverMessage( - L1MessageType_ethDeposit, msg.sender, abi.encodePacked(dest, amountToMintOnL2), amount - ); + return _depositERC20(dest, amount); + } + + /// @inheritdoc IERC20Inbox + function depositERC20( + address to, + uint256 amount + ) public whenNotPaused onlyAllowed returns (uint256) { + return _depositERC20(to, amount); } /// @inheritdoc IERC20Inbox @@ -119,6 +124,13 @@ contract ERC20Inbox is AbsInbox, IERC20Inbox { return 0; } + function _depositERC20(address dest, uint256 amount) internal returns (uint256) { + uint256 amountToMintOnL2 = _fromNativeTo18Decimals(amount); + return _deliverMessage( + L1MessageType_ethDeposit, msg.sender, abi.encodePacked(dest, amountToMintOnL2), amount + ); + } + function _deliverToBridge( uint8 kind, address sender, diff --git a/src/bridge/IERC20Inbox.sol b/src/bridge/IERC20Inbox.sol index d13f159df..cde889ace 100644 --- a/src/bridge/IERC20Inbox.sol +++ b/src/bridge/IERC20Inbox.sol @@ -18,6 +18,13 @@ interface IERC20Inbox is IInboxBase { uint256 amount ) external returns (uint256); + /** + * @notice Deposit native token from L1 to L2 to the specified destination address. The destination is never aliased. + * @dev This does not trigger the fallback function when receiving in the L2 side. + * Look into retryable tickets if you are interested in this functionality. + */ + function depositERC20(address to, uint256 amount) external returns (uint256); + /** * @notice Put a message in the L2 inbox that can be reexecuted for some fixed amount of time if it reverts * @dev all tokenTotalFeeAmount will be deposited to callValueRefundAddress on L2 diff --git a/src/bridge/IInbox.sol b/src/bridge/IInbox.sol index cea3bea3c..75a21959d 100644 --- a/src/bridge/IInbox.sol +++ b/src/bridge/IInbox.sol @@ -70,6 +70,15 @@ interface IInbox is IInboxBase { */ function depositEth() external payable returns (uint256); + /** + * @notice Deposit eth from L1 to L2 to the specified destination address. The destination is never aliased. + * @dev This does not trigger the fallback function when receiving in the L2 side. + * Look into retryable tickets if you are interested in this functionality. + */ + function depositEth( + address destination + ) external payable returns (uint256); + /** * @notice Put a message in the L2 inbox that can be reexecuted for some fixed amount of time if it reverts * @dev all msg.value will deposited to callValueRefundAddress on L2 diff --git a/src/bridge/Inbox.sol b/src/bridge/Inbox.sol index 079a9f8a8..b3144584b 100644 --- a/src/bridge/Inbox.sol +++ b/src/bridge/Inbox.sol @@ -208,9 +208,14 @@ contract Inbox is AbsInbox, IInbox { dest = AddressAliasHelper.applyL1ToL2Alias(msg.sender); } - return _deliverMessage( - L1MessageType_ethDeposit, msg.sender, abi.encodePacked(dest, msg.value), msg.value - ); + return _depositEth(dest); + } + + /// @inheritdoc IInbox + function depositEth( + address to + ) external payable whenNotPaused onlyAllowed returns (uint256) { + return _depositEth(to); } /// @notice deprecated in favour of depositEth with no parameters @@ -314,6 +319,14 @@ contract Inbox is AbsInbox, IInbox { return (1400 + 6 * dataLength) * (baseFee == 0 ? block.basefee : baseFee); } + function _depositEth( + address dest + ) internal returns (uint256) { + return _deliverMessage( + L1MessageType_ethDeposit, msg.sender, abi.encodePacked(dest, msg.value), msg.value + ); + } + function _deliverToBridge( uint8 kind, address sender, diff --git a/src/mocks/InboxStub.sol b/src/mocks/InboxStub.sol index ca56de318..2ebf8e15a 100644 --- a/src/mocks/InboxStub.sol +++ b/src/mocks/InboxStub.sol @@ -182,6 +182,12 @@ contract InboxStub is IInboxBase, IInbox { revert("NOT_IMPLEMENTED"); } + function depositEth( + address + ) external payable override returns (uint256) { + revert("NOT_IMPLEMENTED"); + } + function postUpgradeInit( IBridge _bridge ) external {} diff --git a/test/e2e/orbitChain.ts b/test/e2e/orbitChain.ts index 1b43efa93..45c1c655d 100644 --- a/test/e2e/orbitChain.ts +++ b/test/e2e/orbitChain.ts @@ -162,7 +162,7 @@ describe('Orbit Chain', () => { depositTx = await ERC20Inbox__factory.connect( l2Network.ethBridge.inbox, userL1Wallet - ).depositERC20(amountToDeposit) + )['depositERC20(uint256)'](amountToDeposit) } else { depositTx = await Inbox__factory.connect( l2Network.ethBridge.inbox, diff --git a/test/foundry/ERC20Inbox.t.sol b/test/foundry/ERC20Inbox.t.sol index b18796853..d70c7f1e3 100644 --- a/test/foundry/ERC20Inbox.t.sol +++ b/test/foundry/ERC20Inbox.t.sol @@ -44,94 +44,60 @@ contract ERC20InboxTest is AbsInboxTest { assertEq(IERC20(nativeToken).allowance(address(inbox), address(bridge)), type(uint256).max); } - function test_depositERC20_FromEOA() public { - uint256 depositAmount = 300; - - uint256 bridgeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); - uint256 userTokenBalanceBefore = nativeToken.balanceOf(address(user)); - uint256 delayedMsgCountBefore = bridge.delayedMessageCount(); - - // approve inbox to fetch tokens - vm.prank(user); - nativeToken.approve(address(inbox), depositAmount); - - // expect event - vm.expectEmit(true, true, true, true); - emit InboxMessageDelivered(0, abi.encodePacked(user, depositAmount)); - - // deposit tokens -> tx.origin == msg.sender - vm.prank(user, user); - erc20Inbox.depositERC20(depositAmount); - - //// checks - - uint256 bridgeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); - assertEq( - bridgeTokenBalanceAfter - bridgeTokenBalanceBefore, - depositAmount, - "Invalid bridge token balance" - ); - - uint256 userTokenBalanceAfter = nativeToken.balanceOf(address(user)); - assertEq( - userTokenBalanceBefore - userTokenBalanceAfter, - depositAmount, - "Invalid user token balance" - ); - - uint256 delayedMsgCountAfter = bridge.delayedMessageCount(); - assertEq(delayedMsgCountAfter - delayedMsgCountBefore, 1, "Invalid delayed message count"); - } - - function test_depositERC20_FromEOA_LessThan18Decimals() public { - uint8 decimals = 6; - ERC20 _nativeToken = new ERC20_6Decimals(); - + function _depositERC20( + IERC20 _nativeToken, + uint256 decimals, + uint256 depositAmount, + address sender, + address origin, + address to, + bool useTo, + address expectedDest + ) internal { IERC20Bridge _bridge = IERC20Bridge(TestUtil.deployProxy(address(new ERC20Bridge()))); IERC20Inbox _inbox = IERC20Inbox(TestUtil.deployProxy(address(new ERC20Inbox(MAX_DATA_SIZE)))); // init bridge and inbox - address _rollup = makeAddr("_rollup"); - _bridge.initialize(IOwnable(_rollup), address(_nativeToken)); - _inbox.initialize(_bridge, ISequencerInbox(makeAddr("_seqInbox"))); - vm.prank(_rollup); + { + address _rollup = makeAddr("_rollup"); + _bridge.initialize(IOwnable(_rollup), address(_nativeToken)); + _inbox.initialize(_bridge, ISequencerInbox(makeAddr("_seqInbox"))); + vm.prank(_rollup); + } _bridge.setDelayedInbox(address(_inbox), true); - // fund user account - ERC20_6Decimals(address(_nativeToken)).mint(user, 1000 * 10 ** decimals); - - uint256 depositAmount = 300 * 10 ** decimals; - uint256 bridgeTokenBalanceBefore = _nativeToken.balanceOf(address(_bridge)); - uint256 userTokenBalanceBefore = _nativeToken.balanceOf(address(user)); + uint256 userTokenBalanceBefore = _nativeToken.balanceOf(address(sender)); uint256 delayedMsgCountBefore = _bridge.delayedMessageCount(); // approve inbox to fetch tokens - vm.prank(user); + vm.prank(sender); _nativeToken.approve(address(_inbox), depositAmount); // expect event - uint256 expectedAmountToMintOnL2 = depositAmount * 10 ** (18 - decimals); + uint256 expectedAmountToMintOnL2 = decimals > 18 + ? depositAmount / 10 ** (decimals - 18) + : depositAmount * 10 ** (18 - decimals); vm.expectEmit(true, true, true, true); - emit InboxMessageDelivered(0, abi.encodePacked(user, expectedAmountToMintOnL2)); + emit InboxMessageDelivered( + delayedMsgCountBefore, abi.encodePacked(expectedDest, expectedAmountToMintOnL2) + ); // deposit tokens -> tx.origin == msg.sender - vm.prank(user, user); - _inbox.depositERC20(depositAmount); + vm.prank(sender, origin); + useTo ? _inbox.depositERC20(to, depositAmount) : _inbox.depositERC20(depositAmount); //// checks - uint256 bridgeTokenBalanceAfter = _nativeToken.balanceOf(address(_bridge)); assertEq( - bridgeTokenBalanceAfter - bridgeTokenBalanceBefore, + _nativeToken.balanceOf(address(_bridge)) - bridgeTokenBalanceBefore, depositAmount, "Invalid bridge token balance" ); - uint256 userTokenBalanceAfter = _nativeToken.balanceOf(address(user)); assertEq( - userTokenBalanceBefore - userTokenBalanceAfter, + userTokenBalanceBefore - _nativeToken.balanceOf(address(sender)), depositAmount, "Invalid user token balance" ); @@ -140,192 +106,116 @@ contract ERC20InboxTest is AbsInboxTest { assertEq(delayedMsgCountAfter - delayedMsgCountBefore, 1, "Invalid delayed message count"); } - function test_depositERC20_FromEOA_MoreThan18Decimals() public { - uint8 decimals = 20; - ERC20 _nativeToken = new ERC20_20Decimals(); - - IERC20Bridge _bridge = IERC20Bridge(TestUtil.deployProxy(address(new ERC20Bridge()))); - IERC20Inbox _inbox = - IERC20Inbox(TestUtil.deployProxy(address(new ERC20Inbox(MAX_DATA_SIZE)))); - - // init bridge and inbox - address _rollup = makeAddr("_rollup"); - _bridge.initialize(IOwnable(_rollup), address(_nativeToken)); - _inbox.initialize(_bridge, ISequencerInbox(makeAddr("_seqInbox"))); - vm.prank(_rollup); - _bridge.setDelayedInbox(address(_inbox), true); - - // fund user account - ERC20_20Decimals(address(_nativeToken)).mint(user, 1000 * 10 ** decimals); - - uint256 depositAmount = 300 * 10 ** decimals; - - uint256 bridgeTokenBalanceBefore = _nativeToken.balanceOf(address(_bridge)); - uint256 userTokenBalanceBefore = _nativeToken.balanceOf(address(user)); - uint256 delayedMsgCountBefore = _bridge.delayedMessageCount(); - - // approve inbox to fetch tokens - vm.prank(user); - _nativeToken.approve(address(_inbox), depositAmount); - - // expect event - uint256 expectedAmountToMintOnL2 = depositAmount / (10 ** (decimals - 18)); - vm.expectEmit(true, true, true, true); - emit InboxMessageDelivered(0, abi.encodePacked(user, expectedAmountToMintOnL2)); - - // deposit tokens -> tx.origin == msg.sender - vm.prank(user, user); - _inbox.depositERC20(depositAmount); + function test_depositERC20_WithDest() public { + _depositERC20({ + _nativeToken: nativeToken, + decimals: 18, + depositAmount: 300, + sender: user, + origin: user, + to: address(1234), + useTo: true, + expectedDest: address(1234) + }); - //// checks + _depositERC20({ + _nativeToken: nativeToken, + decimals: 18, + depositAmount: 300, + sender: user, + origin: tx.origin, + to: address(4321), + useTo: true, + expectedDest: address(4321) + }); + } - uint256 bridgeTokenBalanceAfter = _nativeToken.balanceOf(address(_bridge)); - assertEq( - bridgeTokenBalanceAfter - bridgeTokenBalanceBefore, - depositAmount, - "Invalid bridge token balance" - ); + function test_depositERC20_FromEOA() public { + _depositERC20({ + _nativeToken: nativeToken, + decimals: 18, + depositAmount: 300, + sender: user, + origin: user, + to: address(0), + useTo: false, + expectedDest: user + }); + } - uint256 userTokenBalanceAfter = _nativeToken.balanceOf(address(user)); - assertEq( - userTokenBalanceBefore - userTokenBalanceAfter, - depositAmount, - "Invalid user token balance" - ); + function test_depositERC20_FromEOA_LessThan18Decimals() public { + ERC20_6Decimals _nativeToken = new ERC20_6Decimals(); + _nativeToken.mint(user, 1000 * 10 ** 6); + _depositERC20({ + _nativeToken: _nativeToken, + decimals: 6, + depositAmount: 300 * 10 ** 6, + sender: user, + origin: user, + to: address(0), + useTo: false, + expectedDest: user + }); + } - uint256 delayedMsgCountAfter = _bridge.delayedMessageCount(); - assertEq(delayedMsgCountAfter - delayedMsgCountBefore, 1, "Invalid delayed message count"); + function test_depositERC20_FromEOA_MoreThan18Decimals() public { + ERC20_20Decimals _nativeToken = new ERC20_20Decimals(); + _nativeToken.mint(user, 1000 * 10 ** 20); + _depositERC20({ + _nativeToken: _nativeToken, + decimals: 20, + depositAmount: 300 * 10 ** 20, + sender: user, + origin: user, + to: address(0), + useTo: false, + expectedDest: user + }); } function test_depositERC20_FromEOA_NoDecimals() public { ERC20 _nativeToken = new ERC20NoDecimals(); - - IERC20Bridge _bridge = IERC20Bridge(TestUtil.deployProxy(address(new ERC20Bridge()))); - IERC20Inbox _inbox = - IERC20Inbox(TestUtil.deployProxy(address(new ERC20Inbox(MAX_DATA_SIZE)))); - - // init bridge and inbox - address _rollup = makeAddr("_rollup"); - _bridge.initialize(IOwnable(_rollup), address(_nativeToken)); - _inbox.initialize(_bridge, ISequencerInbox(makeAddr("_seqInbox"))); - vm.prank(_rollup); - _bridge.setDelayedInbox(address(_inbox), true); - - // fund user account - ERC20NoDecimals(address(_nativeToken)).mint(user, 1000); - - uint256 depositAmount = 300; - - uint256 bridgeTokenBalanceBefore = _nativeToken.balanceOf(address(_bridge)); - uint256 userTokenBalanceBefore = _nativeToken.balanceOf(address(user)); - uint256 delayedMsgCountBefore = _bridge.delayedMessageCount(); - - // approve inbox to fetch tokens - vm.prank(user); - _nativeToken.approve(address(_inbox), depositAmount); - - // expect event - uint256 expectedAmountToMintOnL2 = depositAmount * 10 ** 18; - vm.expectEmit(true, true, true, true); - emit InboxMessageDelivered(0, abi.encodePacked(user, expectedAmountToMintOnL2)); - - // deposit tokens -> tx.origin == msg.sender - vm.prank(user, user); - _inbox.depositERC20(depositAmount); - - //// checks - - uint256 bridgeTokenBalanceAfter = _nativeToken.balanceOf(address(_bridge)); - assertEq( - bridgeTokenBalanceAfter - bridgeTokenBalanceBefore, - depositAmount, - "Invalid bridge token balance" - ); - - uint256 userTokenBalanceAfter = _nativeToken.balanceOf(address(user)); - assertEq( - userTokenBalanceBefore - userTokenBalanceAfter, - depositAmount, - "Invalid user token balance" - ); - - uint256 delayedMsgCountAfter = _bridge.delayedMessageCount(); - assertEq(delayedMsgCountAfter - delayedMsgCountBefore, 1, "Invalid delayed message count"); + ERC20PresetMinterPauser(address(_nativeToken)).mint(user, 1000); + _depositERC20({ + _nativeToken: _nativeToken, + decimals: 0, + depositAmount: 300, + sender: user, + origin: user, + to: address(0), + useTo: false, + expectedDest: user + }); } function test_depositERC20_FromEOA_InboxPrefunded() public { uint256 depositAmount = 300; - - uint256 bridgeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); - uint256 userTokenBalanceBefore = nativeToken.balanceOf(address(user)); - uint256 delayedMsgCountBefore = bridge.delayedMessageCount(); - // prefund inbox with native token amount needed to pay for fees ERC20PresetMinterPauser(address(nativeToken)).mint(address(inbox), depositAmount); - // expect event - vm.expectEmit(true, true, true, true); - emit InboxMessageDelivered(0, abi.encodePacked(user, depositAmount)); - - // deposit tokens -> tx.origin == msg.sender - vm.prank(user, user); - erc20Inbox.depositERC20(depositAmount); - - //// checks - - uint256 bridgeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); - assertEq( - bridgeTokenBalanceAfter - bridgeTokenBalanceBefore, - depositAmount, - "Invalid bridge token balance" - ); - - uint256 userTokenBalanceAfter = nativeToken.balanceOf(address(user)); - assertEq(userTokenBalanceBefore, userTokenBalanceAfter, "Invalid user token balance"); - - uint256 delayedMsgCountAfter = bridge.delayedMessageCount(); - assertEq(delayedMsgCountAfter - delayedMsgCountBefore, 1, "Invalid delayed message count"); + _depositERC20({ + _nativeToken: nativeToken, + decimals: 18, + depositAmount: depositAmount, + sender: user, + origin: user, + to: address(0), + useTo: false, + expectedDest: user + }); } function test_depositERC20_FromContract() public { - uint256 depositAmount = 300; - - uint256 bridgeTokenBalanceBefore = nativeToken.balanceOf(address(bridge)); - uint256 userTokenBalanceBefore = nativeToken.balanceOf(address(user)); - uint256 delayedMsgCountBefore = bridge.delayedMessageCount(); - - // approve inbox to fetch tokens - vm.prank(user); - nativeToken.approve(address(inbox), depositAmount); - - // expect event - vm.expectEmit(true, true, true, true); - emit InboxMessageDelivered( - 0, abi.encodePacked(AddressAliasHelper.applyL1ToL2Alias(user), depositAmount) - ); - - // deposit tokens -> tx.origin != msg.sender - vm.prank(user); - erc20Inbox.depositERC20(depositAmount); - - //// checks - - uint256 bridgeTokenBalanceAfter = nativeToken.balanceOf(address(bridge)); - assertEq( - bridgeTokenBalanceAfter - bridgeTokenBalanceBefore, - depositAmount, - "Invalid bridge token balance" - ); - - uint256 userTokenBalanceAfter = nativeToken.balanceOf(address(user)); - assertEq( - userTokenBalanceBefore - userTokenBalanceAfter, - depositAmount, - "Invalid user token balance" - ); - - uint256 delayedMsgCountAfter = bridge.delayedMessageCount(); - assertEq(delayedMsgCountAfter - delayedMsgCountBefore, 1, "Invalid delayed message count"); + _depositERC20({ + _nativeToken: nativeToken, + decimals: 18, + depositAmount: 300, + sender: user, + origin: tx.origin, + to: address(0), + useTo: false, + expectedDest: AddressAliasHelper.applyL1ToL2Alias(user) + }); } function test_depositERC20_revert_DepositAmountTooLarge() public { diff --git a/test/foundry/Inbox.t.sol b/test/foundry/Inbox.t.sol index c557dec5a..36573da38 100644 --- a/test/foundry/Inbox.t.sol +++ b/test/foundry/Inbox.t.sol @@ -37,19 +37,30 @@ contract InboxTest is AbsInboxTest { assertEq((PausableUpgradeable(address(inbox))).paused(), false, "Invalid paused state"); } - function test_depositEth_FromEOA() public { + function _depositEth( + address sender, + address origin, + address to, + bool useTo, + address expectedDest, + uint256 expectedDelayedMessageCount + ) internal { uint256 depositAmount = 2 ether; uint256 bridgeEthBalanceBefore = address(bridge).balance; - uint256 userEthBalanceBefore = address(user).balance; + uint256 userEthBalanceBefore = address(sender).balance; // expect event vm.expectEmit(true, true, true, true); - emit InboxMessageDelivered(0, abi.encodePacked(user, depositAmount)); + emit InboxMessageDelivered( + expectedDelayedMessageCount - 1, abi.encodePacked(expectedDest, depositAmount) + ); // deposit tokens -> tx.origin == msg.sender - vm.prank(user, user); - ethInbox.depositEth{value: depositAmount}(); + vm.prank(sender, origin); + useTo + ? ethInbox.depositEth{value: depositAmount}(to) + : ethInbox.depositEth{value: depositAmount}(); //// checks @@ -60,45 +71,58 @@ contract InboxTest is AbsInboxTest { "Invalid bridge eth balance" ); - uint256 userEthBalanceAfter = address(user).balance; + uint256 userEthBalanceAfter = address(sender).balance; assertEq( userEthBalanceBefore - userEthBalanceAfter, depositAmount, "Invalid user eth balance" ); - assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); - } - - function test_depositEth_FromContract() public { - uint256 depositAmount = 1.2 ether; - - uint256 bridgeEthBalanceBefore = address(bridge).balance; - uint256 userEthBalanceBefore = address(user).balance; - - // expect event - vm.expectEmit(true, true, true, true); - emit InboxMessageDelivered( - 0, abi.encodePacked(AddressAliasHelper.applyL1ToL2Alias(user), depositAmount) + assertEq( + bridge.delayedMessageCount(), + expectedDelayedMessageCount, + "Invalid delayed message count" ); + } - // deposit tokens -> tx.origin != msg.sender - vm.prank(user); - ethInbox.depositEth{value: depositAmount}(); - - //// checks + function test_depositEth_FromEOA() public { + _depositEth({ + sender: user, + origin: user, + to: address(0), + useTo: false, + expectedDest: user, + expectedDelayedMessageCount: 1 + }); + } - uint256 bridgeEthBalanceAfter = address(bridge).balance; - assertEq( - bridgeEthBalanceAfter - bridgeEthBalanceBefore, - depositAmount, - "Invalid bridge eth balance" - ); + function test_depositEth_FromContract() public { + _depositEth({ + sender: user, + origin: tx.origin, + to: address(0), + useTo: false, + expectedDest: AddressAliasHelper.applyL1ToL2Alias(user), + expectedDelayedMessageCount: 1 + }); + } - uint256 userEthBalanceAfter = address(user).balance; - assertEq( - userEthBalanceBefore - userEthBalanceAfter, depositAmount, "Invalid eth token balance" - ); + function test_depositEth_WithDest() public { + _depositEth({ + sender: user, + origin: user, + to: address(1234), + useTo: true, + expectedDest: address(1234), + expectedDelayedMessageCount: 1 + }); - assertEq(bridge.delayedMessageCount(), 1, "Invalid delayed message count"); + _depositEth({ + sender: user, + origin: tx.origin, + to: address(4321), + useTo: true, + expectedDest: address(4321), + expectedDelayedMessageCount: 2 + }); } function test_depositEth_revert_EthTransferFails() public { diff --git a/test/signatures/ERC20Inbox b/test/signatures/ERC20Inbox index 510817081..af9aa4dbd 100644 --- a/test/signatures/ERC20Inbox +++ b/test/signatures/ERC20Inbox @@ -10,6 +10,8 @@ |----------------------------------------------------------------------------------------------------+------------| | createRetryableTicket(address,uint256,uint256,address,address,uint256,uint256,uint256,bytes) | 549e8426 | |----------------------------------------------------------------------------------------------------+------------| +| depositERC20(address,uint256) | 97feb926 | +|----------------------------------------------------------------------------------------------------+------------| | depositERC20(uint256) | b79092fd | |----------------------------------------------------------------------------------------------------+------------| | getProxyAdmin() | 8b3240a0 | diff --git a/test/signatures/Inbox b/test/signatures/Inbox index 031e477ad..48252330a 100644 --- a/test/signatures/Inbox +++ b/test/signatures/Inbox @@ -14,6 +14,8 @@ |----------------------------------------------------------------------------------------------------------+------------| | depositEth() | 439370b1 | |----------------------------------------------------------------------------------------------------------+------------| +| depositEth(address) | ad9d4ba3 | +|----------------------------------------------------------------------------------------------------------+------------| | depositEth(uint256) | 0f4d14e9 | |----------------------------------------------------------------------------------------------------------+------------| | getProxyAdmin() | 8b3240a0 |