Commit a5cf7441 authored by Maurelian's avatar Maurelian

fix(ctb): Refactor and fix L1 bridge tests

chore(ctb): Add comments, rebuild

fix(ctb): Refactor and fix the L2 bridge tests

fix(ctb): Ensure consistent event ordering using super

The _emit methods in child contracts now use super to
call emit the new events.
The legacy events now always precedes the new event.

test(ctb): Use kwargs syntax in _preBridgeX() funcs

chore(ctb): Improve doc comments on _emit funcs
parent 358c37cf
GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_0() (gas: 261344) GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_0() (gas: 261344)
GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_1() (gas: 75851) GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_1() (gas: 75851)
GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 348207) GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 348296)
GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 112639) GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 112728)
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 348229) GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 348318)
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 112660) GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 112749)
GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (gas: 40502) GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (gas: 40853)
GasBenchMark_L2OutputOracle:test_proposeL2Output_benchmark() (gas: 88513) GasBenchMark_L2OutputOracle:test_proposeL2Output_benchmark() (gas: 88513)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 74998) GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 74998)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 36156) GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 36156)
...@@ -92,23 +92,25 @@ L1ERC721Bridge_Test:test_finalizeBridgeERC721_notFromRemoteMessenger_reverts() ( ...@@ -92,23 +92,25 @@ L1ERC721Bridge_Test:test_finalizeBridgeERC721_notFromRemoteMessenger_reverts() (
L1ERC721Bridge_Test:test_finalizeBridgeERC721_notViaLocalMessenger_reverts() (gas: 16093) L1ERC721Bridge_Test:test_finalizeBridgeERC721_notViaLocalMessenger_reverts() (gas: 16093)
L1ERC721Bridge_Test:test_finalizeBridgeERC721_selfToken_reverts() (gas: 17593) L1ERC721Bridge_Test:test_finalizeBridgeERC721_selfToken_reverts() (gas: 17593)
L1ERC721Bridge_Test:test_finalizeBridgeERC721_succeeds() (gas: 323814) L1ERC721Bridge_Test:test_finalizeBridgeERC721_succeeds() (gas: 323814)
L1StandardBridge_DepositERC20To_Test:test_depositERC20To_succeeds() (gas: 624908) L1StandardBridge_BridgeETHTo_Test:test_bridgeETHTo_succeeds() (gas: 419609)
L1StandardBridge_DepositERC20_Test:test_depositERC20_succeeds() (gas: 622587) L1StandardBridge_BridgeETH_Test:test_bridgeETH_succeeds() (gas: 406785)
L1StandardBridge_DepositERC20To_Test:test_depositERC20To_succeeds() (gas: 625056)
L1StandardBridge_DepositERC20_Test:test_depositERC20_succeeds() (gas: 622735)
L1StandardBridge_DepositERC20_TestFail:test_depositERC20_notEoa_reverts() (gas: 22320) L1StandardBridge_DepositERC20_TestFail:test_depositERC20_notEoa_reverts() (gas: 22320)
L1StandardBridge_DepositETHTo_Test:test_depositETHTo_succeeds() (gas: 359219) L1StandardBridge_DepositETHTo_Test:test_depositETHTo_succeeds() (gas: 419642)
L1StandardBridge_DepositETH_Test:test_depositETH_succeeds() (gas: 405236) L1StandardBridge_DepositETH_Test:test_depositETH_succeeds() (gas: 406880)
L1StandardBridge_DepositETH_TestFail:test_depositETH_notEoa_reverts() (gas: 40780) L1StandardBridge_DepositETH_TestFail:test_depositETH_notEoa_reverts() (gas: 40780)
L1StandardBridge_FinalizeBridgeETH_Test:test_finalizeBridgeETH_succeeds() (gas: 48788) L1StandardBridge_FinalizeBridgeETH_Test:test_finalizeBridgeETH_succeeds() (gas: 51674)
L1StandardBridge_FinalizeBridgeETH_TestFail:test_finalizeBridgeETH_incorrectValue_reverts() (gas: 34207) L1StandardBridge_FinalizeBridgeETH_TestFail:test_finalizeBridgeETH_incorrectValue_reverts() (gas: 34207)
L1StandardBridge_FinalizeBridgeETH_TestFail:test_finalizeBridgeETH_sendToMessenger_reverts() (gas: 34288) L1StandardBridge_FinalizeBridgeETH_TestFail:test_finalizeBridgeETH_sendToMessenger_reverts() (gas: 34288)
L1StandardBridge_FinalizeBridgeETH_TestFail:test_finalizeBridgeETH_sendToSelf_reverts() (gas: 34257) L1StandardBridge_FinalizeBridgeETH_TestFail:test_finalizeBridgeETH_sendToSelf_reverts() (gas: 34257)
L1StandardBridge_FinalizeERC20Withdrawal_Test:test_finalizeERC20Withdrawal_succeeds() (gas: 496088) L1StandardBridge_FinalizeERC20Withdrawal_Test:test_finalizeERC20Withdrawal_succeeds() (gas: 496417)
L1StandardBridge_FinalizeERC20Withdrawal_TestFail:test_finalizeERC20Withdrawal_notMessenger_reverts() (gas: 31148) L1StandardBridge_FinalizeERC20Withdrawal_TestFail:test_finalizeERC20Withdrawal_notMessenger_reverts() (gas: 31148)
L1StandardBridge_FinalizeERC20Withdrawal_TestFail:test_finalizeERC20Withdrawal_notOtherBridge_reverts() (gas: 31504) L1StandardBridge_FinalizeERC20Withdrawal_TestFail:test_finalizeERC20Withdrawal_notOtherBridge_reverts() (gas: 31504)
L1StandardBridge_FinalizeETHWithdrawal_Test:test_finalizeETHWithdrawal_succeeds() (gas: 61815) L1StandardBridge_FinalizeETHWithdrawal_Test:test_finalizeETHWithdrawal_succeeds() (gas: 62166)
L1StandardBridge_Getter_Test:test_getters_succeeds() (gas: 32151) L1StandardBridge_Getter_Test:test_getters_succeeds() (gas: 32151)
L1StandardBridge_Initialize_Test:test_initialize_succeeds() (gas: 22005) L1StandardBridge_Initialize_Test:test_initialize_succeeds() (gas: 22005)
L1StandardBridge_Receive_Test:test_receive_succeeds() (gas: 520249) L1StandardBridge_Receive_Test:test_receive_succeeds() (gas: 520338)
L2CrossDomainMessenger_Test:test_messageVersion_succeeds() (gas: 8389) L2CrossDomainMessenger_Test:test_messageVersion_succeeds() (gas: 8389)
L2CrossDomainMessenger_Test:test_pause_notOwner_reverts() (gas: 10837) L2CrossDomainMessenger_Test:test_pause_notOwner_reverts() (gas: 10837)
L2CrossDomainMessenger_Test:test_pause_succeeds() (gas: 31846) L2CrossDomainMessenger_Test:test_pause_succeeds() (gas: 31846)
...@@ -164,18 +166,20 @@ L2OutputOracleUpgradeable_Test:test_initValuesOnProxy_succeeds() (gas: 26093) ...@@ -164,18 +166,20 @@ L2OutputOracleUpgradeable_Test:test_initValuesOnProxy_succeeds() (gas: 26093)
L2OutputOracleUpgradeable_Test:test_initializeImpl_alreadyInitialized_reverts() (gas: 15149) L2OutputOracleUpgradeable_Test:test_initializeImpl_alreadyInitialized_reverts() (gas: 15149)
L2OutputOracleUpgradeable_Test:test_initializeProxy_alreadyInitialized_reverts() (gas: 20131) L2OutputOracleUpgradeable_Test:test_initializeProxy_alreadyInitialized_reverts() (gas: 20131)
L2OutputOracleUpgradeable_Test:test_upgrading_succeeds() (gas: 180413) L2OutputOracleUpgradeable_Test:test_upgrading_succeeds() (gas: 180413)
L2StandardBridge_FinalizeBridgeETH_Test:test_finalizeBridgeETH_succeeds() (gas: 36076) L2StandardBridge_BridgeERC20To_Test:test_bridgeERC20To_succeeds() (gas: 387969)
L2StandardBridge_Test:test_finalizeBridgeETH_incorrectValue_reverts() (gas: 23865) L2StandardBridge_BridgeERC20To_Test:test_withdrawTo_withdrawingERC20_succeeds() (gas: 388200)
L2StandardBridge_Test:test_finalizeBridgeETH_sendToMessenger_reverts() (gas: 23960) L2StandardBridge_BridgeERC20_Test:test_bridgeERC20_succeeds() (gas: 383692)
L2StandardBridge_Test:test_finalizeBridgeETH_sendToSelf_reverts() (gas: 23826) L2StandardBridge_BridgeERC20_Test:test_withdraw_notEOA_reverts() (gas: 251790)
L2StandardBridge_Test:test_finalizeDeposit_depositingERC20_succeeds() (gas: 90619) L2StandardBridge_BridgeERC20_Test:test_withdraw_withdrawingERC20_succeeds() (gas: 383877)
L2StandardBridge_Test:test_finalizeDeposit_depositingETH_succeeds() (gas: 89451) L2StandardBridge_Bridge_Test:test_finalizeBridgeETH_incorrectValue_reverts() (gas: 23798)
L2StandardBridge_Test:test_initialize_succeeds() (gas: 24270) L2StandardBridge_Bridge_Test:test_finalizeBridgeETH_sendToMessenger_reverts() (gas: 23960)
L2StandardBridge_Test:test_receive_succeeds() (gas: 177206) L2StandardBridge_Bridge_Test:test_finalizeBridgeETH_sendToSelf_reverts() (gas: 23848)
L2StandardBridge_Test:test_withdrawTo_withdrawingERC20_succeeds() (gas: 386492) L2StandardBridge_Bridge_Test:test_finalizeDeposit_depositingERC20_succeeds() (gas: 90989)
L2StandardBridge_Test:test_withdraw_insufficientValue_reverts() (gas: 19649) L2StandardBridge_Bridge_Test:test_finalizeDeposit_depositingETH_succeeds() (gas: 89821)
L2StandardBridge_Test:test_withdraw_notEOA_reverts() (gas: 251799) L2StandardBridge_FinalizeBridgeETH_Test:test_finalizeBridgeETH_succeeds() (gas: 43155)
L2StandardBridge_Test:test_withdraw_withdrawingERC20_succeeds() (gas: 384536) L2StandardBridge_Test:test_initialize_succeeds() (gas: 24247)
L2StandardBridge_Test:test_receive_succeeds() (gas: 177145)
L2StandardBridge_Test:test_withdraw_insufficientValue_reverts() (gas: 19615)
L2ToL1MessagePasserTest:test_burn_succeeds() (gas: 112572) L2ToL1MessagePasserTest:test_burn_succeeds() (gas: 112572)
L2ToL1MessagePasserTest:test_initiateWithdrawal_fromContract_succeeds() (gas: 70423) L2ToL1MessagePasserTest:test_initiateWithdrawal_fromContract_succeeds() (gas: 70423)
L2ToL1MessagePasserTest:test_initiateWithdrawal_fromEOA_succeeds() (gas: 75874) L2ToL1MessagePasserTest:test_initiateWithdrawal_fromEOA_succeeds() (gas: 75874)
...@@ -385,7 +389,7 @@ SequencerFeeVault_Test:test_constructor_succeeds() (gas: 5504) ...@@ -385,7 +389,7 @@ SequencerFeeVault_Test:test_constructor_succeeds() (gas: 5504)
SequencerFeeVault_Test:test_minWithdrawalAmount_succeeds() (gas: 5420) SequencerFeeVault_Test:test_minWithdrawalAmount_succeeds() (gas: 5420)
SequencerFeeVault_Test:test_receive_succeeds() (gas: 17336) SequencerFeeVault_Test:test_receive_succeeds() (gas: 17336)
SequencerFeeVault_Test:test_withdraw_notEnough_reverts() (gas: 9309) SequencerFeeVault_Test:test_withdraw_notEnough_reverts() (gas: 9309)
SequencerFeeVault_Test:test_withdraw_succeeds() (gas: 159816) SequencerFeeVault_Test:test_withdraw_succeeds() (gas: 163169)
SystemConfig_Initialize_TestFail:test_initialize_lowGasLimit_reverts() (gas: 61966) SystemConfig_Initialize_TestFail:test_initialize_lowGasLimit_reverts() (gas: 61966)
SystemConfig_Setters_TestFail:test_setBatcherHash_notOwner_reverts() (gas: 10545) SystemConfig_Setters_TestFail:test_setBatcherHash_notOwner_reverts() (gas: 10545)
SystemConfig_Setters_TestFail:test_setGasConfig_notOwner_reverts() (gas: 10532) SystemConfig_Setters_TestFail:test_setGasConfig_notOwner_reverts() (gas: 10532)
......
...@@ -295,6 +295,9 @@ contract L1StandardBridge is StandardBridge, Semver { ...@@ -295,6 +295,9 @@ contract L1StandardBridge is StandardBridge, Semver {
} }
/** /**
* @notice Emits the legacy ETHDepositInitiated event followed by the ETHBridgeInitiated event.
* This is necessary for backwards compatibility with the legacy bridge.
*
* @inheritdoc StandardBridge * @inheritdoc StandardBridge
*/ */
function _emitETHBridgeInitiated( function _emitETHBridgeInitiated(
...@@ -304,10 +307,13 @@ contract L1StandardBridge is StandardBridge, Semver { ...@@ -304,10 +307,13 @@ contract L1StandardBridge is StandardBridge, Semver {
bytes memory _extraData bytes memory _extraData
) internal override { ) internal override {
emit ETHDepositInitiated(_from, _to, _amount, _extraData); emit ETHDepositInitiated(_from, _to, _amount, _extraData);
emit ETHBridgeInitiated(_from, _to, _amount, _extraData); super._emitETHBridgeInitiated(_from, _to, _amount, _extraData);
} }
/** /**
* @notice Emits the legacy ETHWithdrawalFinalized event followed by the ETHBridgeFinalized
* event. This is necessary for backwards compatibility with the legacy bridge.
*
* @inheritdoc StandardBridge * @inheritdoc StandardBridge
*/ */
function _emitETHBridgeFinalized( function _emitETHBridgeFinalized(
...@@ -317,10 +323,13 @@ contract L1StandardBridge is StandardBridge, Semver { ...@@ -317,10 +323,13 @@ contract L1StandardBridge is StandardBridge, Semver {
bytes memory _extraData bytes memory _extraData
) internal override { ) internal override {
emit ETHWithdrawalFinalized(_from, _to, _amount, _extraData); emit ETHWithdrawalFinalized(_from, _to, _amount, _extraData);
emit ETHBridgeFinalized(_from, _to, _amount, _extraData); super._emitETHBridgeFinalized(_from, _to, _amount, _extraData);
} }
/** /**
* @notice Emits the legacy ERC20DepositInitiated event followed by the ERC20BridgeInitiated
* event. This is necessary for backwards compatibility with the legacy bridge.
*
* @inheritdoc StandardBridge * @inheritdoc StandardBridge
*/ */
function _emitERC20BridgeInitiated( function _emitERC20BridgeInitiated(
...@@ -332,10 +341,13 @@ contract L1StandardBridge is StandardBridge, Semver { ...@@ -332,10 +341,13 @@ contract L1StandardBridge is StandardBridge, Semver {
bytes memory _extraData bytes memory _extraData
) internal override { ) internal override {
emit ERC20DepositInitiated(_localToken, _remoteToken, _from, _to, _amount, _extraData); emit ERC20DepositInitiated(_localToken, _remoteToken, _from, _to, _amount, _extraData);
emit ERC20BridgeInitiated(_localToken, _remoteToken, _from, _to, _amount, _extraData); super._emitERC20BridgeInitiated(_localToken, _remoteToken, _from, _to, _amount, _extraData);
} }
/** /**
* @notice Emits the legacy ERC20WithdrawalFinalized event followed by the ERC20BridgeFinalized
* event. This is necessary for backwards compatibility with the legacy bridge.
*
* @inheritdoc StandardBridge * @inheritdoc StandardBridge
*/ */
function _emitERC20BridgeFinalized( function _emitERC20BridgeFinalized(
...@@ -347,6 +359,6 @@ contract L1StandardBridge is StandardBridge, Semver { ...@@ -347,6 +359,6 @@ contract L1StandardBridge is StandardBridge, Semver {
bytes memory _extraData bytes memory _extraData
) internal override { ) internal override {
emit ERC20WithdrawalFinalized(_localToken, _remoteToken, _from, _to, _amount, _extraData); emit ERC20WithdrawalFinalized(_localToken, _remoteToken, _from, _to, _amount, _extraData);
emit ERC20BridgeFinalized(_localToken, _remoteToken, _from, _to, _amount, _extraData); super._emitERC20BridgeFinalized(_localToken, _remoteToken, _from, _to, _amount, _extraData);
} }
} }
...@@ -188,6 +188,9 @@ contract L2StandardBridge is StandardBridge, Semver { ...@@ -188,6 +188,9 @@ contract L2StandardBridge is StandardBridge, Semver {
} }
/** /**
* @notice Emits the legacy WithdrawalInitiated event followed by the ETHBridgeInitiated event.
* This is necessary for backwards compatibility with the legacy bridge.
*
* @inheritdoc StandardBridge * @inheritdoc StandardBridge
*/ */
function _emitETHBridgeInitiated( function _emitETHBridgeInitiated(
...@@ -196,7 +199,6 @@ contract L2StandardBridge is StandardBridge, Semver { ...@@ -196,7 +199,6 @@ contract L2StandardBridge is StandardBridge, Semver {
uint256 _amount, uint256 _amount,
bytes memory _extraData bytes memory _extraData
) internal override { ) internal override {
emit ETHBridgeInitiated(_from, _to, _amount, _extraData);
emit WithdrawalInitiated( emit WithdrawalInitiated(
address(0), address(0),
Predeploys.LEGACY_ERC20_ETH, Predeploys.LEGACY_ERC20_ETH,
...@@ -205,9 +207,13 @@ contract L2StandardBridge is StandardBridge, Semver { ...@@ -205,9 +207,13 @@ contract L2StandardBridge is StandardBridge, Semver {
_amount, _amount,
_extraData _extraData
); );
super._emitETHBridgeInitiated(_from, _to, _amount, _extraData);
} }
/** /**
* @notice Emits the legacy DepositFinalized event followed by the ETHBridgeFinalized event.
* This is necessary for backwards compatibility with the legacy bridge.
*
* @inheritdoc StandardBridge * @inheritdoc StandardBridge
*/ */
function _emitETHBridgeFinalized( function _emitETHBridgeFinalized(
...@@ -216,7 +222,6 @@ contract L2StandardBridge is StandardBridge, Semver { ...@@ -216,7 +222,6 @@ contract L2StandardBridge is StandardBridge, Semver {
uint256 _amount, uint256 _amount,
bytes memory _extraData bytes memory _extraData
) internal override { ) internal override {
emit ETHBridgeFinalized(_from, _to, _amount, _extraData);
emit DepositFinalized( emit DepositFinalized(
address(0), address(0),
Predeploys.LEGACY_ERC20_ETH, Predeploys.LEGACY_ERC20_ETH,
...@@ -225,9 +230,13 @@ contract L2StandardBridge is StandardBridge, Semver { ...@@ -225,9 +230,13 @@ contract L2StandardBridge is StandardBridge, Semver {
_amount, _amount,
_extraData _extraData
); );
super._emitETHBridgeFinalized(_from, _to, _amount, _extraData);
} }
/** /**
* @notice Emits the legacy WithdrawalInitiated event followed by the ERC20BridgeInitiated
* event. This is necessary for backwards compatibility with the legacy bridge.
*
* @inheritdoc StandardBridge * @inheritdoc StandardBridge
*/ */
function _emitERC20BridgeInitiated( function _emitERC20BridgeInitiated(
...@@ -239,10 +248,13 @@ contract L2StandardBridge is StandardBridge, Semver { ...@@ -239,10 +248,13 @@ contract L2StandardBridge is StandardBridge, Semver {
bytes memory _extraData bytes memory _extraData
) internal override { ) internal override {
emit WithdrawalInitiated(_remoteToken, _localToken, _from, _to, _amount, _extraData); emit WithdrawalInitiated(_remoteToken, _localToken, _from, _to, _amount, _extraData);
emit ERC20BridgeInitiated(_localToken, _remoteToken, _from, _to, _amount, _extraData); super._emitERC20BridgeInitiated(_localToken, _remoteToken, _from, _to, _amount, _extraData);
} }
/** /**
* @notice Emits the legacy DepositFinalized event followed by the ERC20BridgeFinalized event.
* This is necessary for backwards compatibility with the legacy bridge.
*
* @inheritdoc StandardBridge * @inheritdoc StandardBridge
*/ */
function _emitERC20BridgeFinalized( function _emitERC20BridgeFinalized(
...@@ -253,7 +265,7 @@ contract L2StandardBridge is StandardBridge, Semver { ...@@ -253,7 +265,7 @@ contract L2StandardBridge is StandardBridge, Semver {
uint256 _amount, uint256 _amount,
bytes memory _extraData bytes memory _extraData
) internal override { ) internal override {
emit ERC20BridgeFinalized(_localToken, _remoteToken, _from, _to, _amount, _extraData);
emit DepositFinalized(_remoteToken, _localToken, _from, _to, _amount, _extraData); emit DepositFinalized(_remoteToken, _localToken, _from, _to, _amount, _extraData);
super._emitERC20BridgeFinalized(_localToken, _remoteToken, _from, _to, _amount, _extraData);
} }
} }
...@@ -71,29 +71,37 @@ contract L1StandardBridge_Receive_Test is Bridge_Initializer { ...@@ -71,29 +71,37 @@ contract L1StandardBridge_Receive_Test is Bridge_Initializer {
contract L1StandardBridge_Receive_TestFail {} contract L1StandardBridge_Receive_TestFail {}
contract L1StandardBridge_DepositETH_Test is Bridge_Initializer { contract PreBridgeETH is Bridge_Initializer {
function _preDepositETH() internal { function _preBridgeETH(bool isLegacy) internal {
assertEq(address(op).balance, 0); assertEq(address(op).balance, 0);
uint256 nonce = L1Messenger.messageNonce(); uint256 nonce = L1Messenger.messageNonce();
uint256 version = 0; // Internal constant in the OptimismPortal: DEPOSIT_VERSION uint256 version = 0; // Internal constant in the OptimismPortal: DEPOSIT_VERSION
address l1MessengerAliased = AddressAliasHelper.applyL1ToL2Alias(address(L1Messenger)); address l1MessengerAliased = AddressAliasHelper.applyL1ToL2Alias(address(L1Messenger));
vm.expectEmit(true, true, true, true, address(L1Bridge));
emit ETHDepositInitiated(alice, alice, 500, hex"ff");
vm.expectEmit(true, true, true, true, address(L1Bridge));
emit ETHBridgeInitiated(alice, alice, 500, hex"ff");
bytes memory message = abi.encodeWithSelector( bytes memory message = abi.encodeWithSelector(
StandardBridge.finalizeBridgeETH.selector, StandardBridge.finalizeBridgeETH.selector,
alice, alice,
alice, alice,
500, 500,
hex"ff" hex"dead"
); );
if (isLegacy) {
vm.expectCall(
address(L1Bridge),
500,
abi.encodeWithSelector(L1Bridge.depositETH.selector, 50000, hex"dead")
);
} else {
vm.expectCall(
address(L1Bridge),
500,
abi.encodeWithSelector(L1Bridge.bridgeETH.selector, 50000, hex"dead")
);
}
vm.expectCall( vm.expectCall(
address(L1Messenger), address(L1Messenger),
500,
abi.encodeWithSelector( abi.encodeWithSelector(
CrossDomainMessenger.sendMessage.selector, CrossDomainMessenger.sendMessage.selector,
address(L2Bridge), address(L2Bridge),
...@@ -115,6 +123,7 @@ contract L1StandardBridge_DepositETH_Test is Bridge_Initializer { ...@@ -115,6 +123,7 @@ contract L1StandardBridge_DepositETH_Test is Bridge_Initializer {
uint64 baseGas = L1Messenger.baseGas(message, 50000); uint64 baseGas = L1Messenger.baseGas(message, 50000);
vm.expectCall( vm.expectCall(
address(op), address(op),
500,
abi.encodeWithSelector( abi.encodeWithSelector(
OptimismPortal.depositTransaction.selector, OptimismPortal.depositTransaction.selector,
address(L2Messenger), address(L2Messenger),
...@@ -133,6 +142,12 @@ contract L1StandardBridge_DepositETH_Test is Bridge_Initializer { ...@@ -133,6 +142,12 @@ contract L1StandardBridge_DepositETH_Test is Bridge_Initializer {
innerMessage innerMessage
); );
vm.expectEmit(true, true, true, true, address(L1Bridge));
emit ETHDepositInitiated(alice, alice, 500, hex"dead");
vm.expectEmit(true, true, true, true, address(L1Bridge));
emit ETHBridgeInitiated(alice, alice, 500, hex"dead");
// OptimismPortal emits a TransactionDeposited event on `depositTransaction` call // OptimismPortal emits a TransactionDeposited event on `depositTransaction` call
vm.expectEmit(true, true, true, true, address(op)); vm.expectEmit(true, true, true, true, address(op));
emit TransactionDeposited(l1MessengerAliased, address(L2Messenger), version, opaqueData); emit TransactionDeposited(l1MessengerAliased, address(L2Messenger), version, opaqueData);
...@@ -147,7 +162,9 @@ contract L1StandardBridge_DepositETH_Test is Bridge_Initializer { ...@@ -147,7 +162,9 @@ contract L1StandardBridge_DepositETH_Test is Bridge_Initializer {
vm.prank(alice, alice); vm.prank(alice, alice);
} }
}
contract L1StandardBridge_DepositETH_Test is PreBridgeETH {
// depositETH // depositETH
// - emits ETHDepositInitiated // - emits ETHDepositInitiated
// - emits ETHBridgeInitiated // - emits ETHBridgeInitiated
...@@ -155,13 +172,13 @@ contract L1StandardBridge_DepositETH_Test is Bridge_Initializer { ...@@ -155,13 +172,13 @@ contract L1StandardBridge_DepositETH_Test is Bridge_Initializer {
// - only EOA // - only EOA
// - ETH ends up in the optimismPortal // - ETH ends up in the optimismPortal
function test_depositETH_succeeds() external { function test_depositETH_succeeds() external {
_preDepositETH(); _preBridgeETH({ isLegacy: true });
L1Bridge.depositETH{ value: 500 }(50000, hex"ff"); L1Bridge.depositETH{ value: 500 }(50000, hex"dead");
assertEq(address(op).balance, 500); assertEq(address(op).balance, 500);
} }
} }
contract L1StandardBridge_BridgeETH_Test is L1StandardBridge_DepositETH_Test { contract L1StandardBridge_BridgeETH_Test is PreBridgeETH {
// BridgeETH // BridgeETH
// - emits ETHDepositInitiated // - emits ETHDepositInitiated
// - emits ETHBridgeInitiated // - emits ETHBridgeInitiated
...@@ -169,8 +186,8 @@ contract L1StandardBridge_BridgeETH_Test is L1StandardBridge_DepositETH_Test { ...@@ -169,8 +186,8 @@ contract L1StandardBridge_BridgeETH_Test is L1StandardBridge_DepositETH_Test {
// - only EOA // - only EOA
// - ETH ends up in the optimismPortal // - ETH ends up in the optimismPortal
function test_bridgeETH_succeeds() external { function test_bridgeETH_succeeds() external {
_preDepositETH(); _preBridgeETH({ isLegacy: false });
L1Bridge.bridgeETH{ value: 500 }(50000, hex"ff"); L1Bridge.bridgeETH{ value: 500 }(50000, hex"dead");
assertEq(address(op).balance, 500); assertEq(address(op).balance, 500);
} }
} }
...@@ -186,24 +203,26 @@ contract L1StandardBridge_DepositETH_TestFail is Bridge_Initializer { ...@@ -186,24 +203,26 @@ contract L1StandardBridge_DepositETH_TestFail is Bridge_Initializer {
} }
} }
contract L1StandardBridge_DepositETHTo_Test is Bridge_Initializer { contract PreBridgeETHTo is Bridge_Initializer {
function _preDepositETHTo() internal { function _preBridgeETHTo(bool isLegacy) internal {
assertEq(address(op).balance, 0); assertEq(address(op).balance, 0);
uint256 nonce = L1Messenger.messageNonce(); uint256 nonce = L1Messenger.messageNonce();
uint256 version = 0; // Internal constant in the OptimismPortal: DEPOSIT_VERSION uint256 version = 0; // Internal constant in the OptimismPortal: DEPOSIT_VERSION
address l1MessengerAliased = AddressAliasHelper.applyL1ToL2Alias(address(L1Messenger)); address l1MessengerAliased = AddressAliasHelper.applyL1ToL2Alias(address(L1Messenger));
vm.expectEmit(true, true, true, true, address(L1Bridge)); if (isLegacy) {
emit ETHDepositInitiated(alice, bob, 600, hex"dead");
vm.expectEmit(true, true, true, true, address(L1Bridge));
emit ETHBridgeInitiated(alice, bob, 600, hex"dead");
// depositETHTo on the L1 bridge should be called
vm.expectCall( vm.expectCall(
address(L1Bridge), address(L1Bridge),
abi.encodeWithSelector(L1Bridge.depositETHTo.selector, bob, 1000, hex"dead") 600,
abi.encodeWithSelector(L1Bridge.depositETHTo.selector, bob, 60000, hex"dead")
);
} else {
vm.expectCall(
address(L1Bridge),
600,
abi.encodeWithSelector(L1Bridge.bridgeETHTo.selector, bob, 60000, hex"dead")
); );
}
bytes memory message = abi.encodeWithSelector( bytes memory message = abi.encodeWithSelector(
StandardBridge.finalizeBridgeETH.selector, StandardBridge.finalizeBridgeETH.selector,
...@@ -221,7 +240,7 @@ contract L1StandardBridge_DepositETHTo_Test is Bridge_Initializer { ...@@ -221,7 +240,7 @@ contract L1StandardBridge_DepositETHTo_Test is Bridge_Initializer {
CrossDomainMessenger.sendMessage.selector, CrossDomainMessenger.sendMessage.selector,
address(L2Bridge), address(L2Bridge),
message, message,
1000 60000
) )
); );
...@@ -231,11 +250,11 @@ contract L1StandardBridge_DepositETHTo_Test is Bridge_Initializer { ...@@ -231,11 +250,11 @@ contract L1StandardBridge_DepositETHTo_Test is Bridge_Initializer {
address(L1Bridge), address(L1Bridge),
address(L2Bridge), address(L2Bridge),
600, 600,
1000, 60000,
message message
); );
uint64 baseGas = L1Messenger.baseGas(message, 1000); uint64 baseGas = L1Messenger.baseGas(message, 60000);
vm.expectCall( vm.expectCall(
address(op), address(op),
abi.encodeWithSelector( abi.encodeWithSelector(
...@@ -256,13 +275,19 @@ contract L1StandardBridge_DepositETHTo_Test is Bridge_Initializer { ...@@ -256,13 +275,19 @@ contract L1StandardBridge_DepositETHTo_Test is Bridge_Initializer {
innerMessage innerMessage
); );
vm.expectEmit(true, true, true, true, address(L1Bridge));
emit ETHDepositInitiated(alice, bob, 600, hex"dead");
vm.expectEmit(true, true, true, true, address(L1Bridge));
emit ETHBridgeInitiated(alice, bob, 600, hex"dead");
// OptimismPortal emits a TransactionDeposited event on `depositTransaction` call // OptimismPortal emits a TransactionDeposited event on `depositTransaction` call
vm.expectEmit(true, true, true, true, address(op)); vm.expectEmit(true, true, true, true, address(op));
emit TransactionDeposited(l1MessengerAliased, address(L2Messenger), version, opaqueData); emit TransactionDeposited(l1MessengerAliased, address(L2Messenger), version, opaqueData);
// SentMessage event emitted by the CrossDomainMessenger // SentMessage event emitted by the CrossDomainMessenger
vm.expectEmit(true, true, true, true, address(L1Messenger)); vm.expectEmit(true, true, true, true, address(L1Messenger));
emit SentMessage(address(L2Bridge), address(L1Bridge), message, nonce, 1000); emit SentMessage(address(L2Bridge), address(L1Bridge), message, nonce, 60000);
// SentMessageExtension1 event emitted by the CrossDomainMessenger // SentMessageExtension1 event emitted by the CrossDomainMessenger
vm.expectEmit(true, true, true, true, address(L1Messenger)); vm.expectEmit(true, true, true, true, address(L1Messenger));
...@@ -271,19 +296,22 @@ contract L1StandardBridge_DepositETHTo_Test is Bridge_Initializer { ...@@ -271,19 +296,22 @@ contract L1StandardBridge_DepositETHTo_Test is Bridge_Initializer {
// deposit eth to bob // deposit eth to bob
vm.prank(alice, alice); vm.prank(alice, alice);
} }
}
contract L1StandardBridge_DepositETHTo_Test is PreBridgeETHTo {
// depositETHTo // depositETHTo
// - emits ETHDepositInitiated // - emits ETHDepositInitiated
// - calls optimismPortal.depositTransaction // - calls optimismPortal.depositTransaction
// - EOA or contract can call // - EOA or contract can call
// - ETH ends up in the optimismPortal // - ETH ends up in the optimismPortal
function test_depositETHTo_succeeds() external { function test_depositETHTo_succeeds() external {
_preDepositETHTo(); _preBridgeETHTo({ isLegacy: true });
L1Bridge.depositETHTo{ value: 600 }(bob, 1000, hex"dead"); L1Bridge.depositETHTo{ value: 600 }(bob, 60000, hex"dead");
assertEq(address(op).balance, 600);
} }
} }
contract L1StandardBridge_BridgeETHTo_Test is L1StandardBridge_DepositETHTo_Test { contract L1StandardBridge_BridgeETHTo_Test is PreBridgeETHTo {
// BridgeETHTo // BridgeETHTo
// - emits ETHDepositInitiated // - emits ETHDepositInitiated
// - emits ETHBridgeInitiated // - emits ETHBridgeInitiated
...@@ -291,9 +319,9 @@ contract L1StandardBridge_BridgeETHTo_Test is L1StandardBridge_DepositETHTo_Test ...@@ -291,9 +319,9 @@ contract L1StandardBridge_BridgeETHTo_Test is L1StandardBridge_DepositETHTo_Test
// - only EOA // - only EOA
// - ETH ends up in the optimismPortal // - ETH ends up in the optimismPortal
function test_bridgeETHTo_succeeds() external { function test_bridgeETHTo_succeeds() external {
_preDepositETHTo(); _preBridgeETHTo({ isLegacy: false });
L1Bridge.bridgeETHTo{ value: 500 }(bob, 50000, hex"ff"); L1Bridge.bridgeETHTo{ value: 600 }(bob, 60000, hex"dead");
assertEq(address(op).balance, 500); assertEq(address(op).balance, 600);
} }
} }
......
...@@ -301,6 +301,8 @@ abstract contract StandardBridge { ...@@ -301,6 +301,8 @@ abstract contract StandardBridge {
require(_to != address(this), "StandardBridge: cannot send to self"); require(_to != address(this), "StandardBridge: cannot send to self");
require(_to != address(MESSENGER), "StandardBridge: cannot send to messenger"); require(_to != address(MESSENGER), "StandardBridge: cannot send to messenger");
// Emit the correct events. By default this will be _amount, but child
// contracts may override this function in order to emit legacy events as well.
_emitETHBridgeFinalized(_from, _to, _amount, _extraData); _emitETHBridgeFinalized(_from, _to, _amount, _extraData);
bool success = SafeCall.call(_to, gasleft(), _amount, hex""); bool success = SafeCall.call(_to, gasleft(), _amount, hex"");
...@@ -340,6 +342,8 @@ abstract contract StandardBridge { ...@@ -340,6 +342,8 @@ abstract contract StandardBridge {
IERC20(_localToken).safeTransfer(_to, _amount); IERC20(_localToken).safeTransfer(_to, _amount);
} }
// Emit the correct events. By default this will be ERC20BridgeFinalized, but child
// contracts may override this function in order to emit legacy events as well.
_emitERC20BridgeFinalized(_localToken, _remoteToken, _from, _to, _amount, _extraData); _emitERC20BridgeFinalized(_localToken, _remoteToken, _from, _to, _amount, _extraData);
} }
...@@ -366,6 +370,8 @@ abstract contract StandardBridge { ...@@ -366,6 +370,8 @@ abstract contract StandardBridge {
"StandardBridge: bridging ETH must include sufficient ETH value" "StandardBridge: bridging ETH must include sufficient ETH value"
); );
// Emit the correct events. By default this will be _amount, but child
// contracts may override this function in order to emit legacy events as well.
_emitETHBridgeInitiated(_from, _to, _amount, _extraData); _emitETHBridgeInitiated(_from, _to, _amount, _extraData);
MESSENGER.sendMessage{ value: _amount }( MESSENGER.sendMessage{ value: _amount }(
...@@ -414,6 +420,8 @@ abstract contract StandardBridge { ...@@ -414,6 +420,8 @@ abstract contract StandardBridge {
deposits[_localToken][_remoteToken] = deposits[_localToken][_remoteToken] + _amount; deposits[_localToken][_remoteToken] = deposits[_localToken][_remoteToken] + _amount;
} }
// Emit the correct events. By default this will be ERC20BridgeInitiated, but child
// contracts may override this function in order to emit legacy events as well.
_emitERC20BridgeInitiated(_localToken, _remoteToken, _from, _to, _amount, _extraData); _emitERC20BridgeInitiated(_localToken, _remoteToken, _from, _to, _amount, _extraData);
MESSENGER.sendMessage( MESSENGER.sendMessage(
...@@ -540,6 +548,6 @@ abstract contract StandardBridge { ...@@ -540,6 +548,6 @@ abstract contract StandardBridge {
uint256 _amount, uint256 _amount,
bytes memory _extraData bytes memory _extraData
) internal virtual { ) internal virtual {
emit ERC20BridgeFinalized(_remoteToken, _localToken, _from, _to, _amount, _extraData); emit ERC20BridgeFinalized(_localToken, _remoteToken, _from, _to, _amount, _extraData);
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment