From 9c598cf655b1d9bd69da7bd06b672b585550092c Mon Sep 17 00:00:00 2001 From: Kelvin Fichter Date: Tue, 19 Jul 2022 14:30:12 +0200 Subject: [PATCH] feat(ctb): introduce extra data event to XDM Introduces a new SentMessageExtraData event to the CrossDomainMessenger base contract. We need this event so that we can properly find all relevant message data in the SDK. SDK cannot function without this event. We also cannot add to the old SentMessage event without breaking the ABI of our contract, so we're stuck adding an extra data event. --- .changeset/dull-coats-tap.md | 5 ++ packages/contracts-bedrock/.gas-snapshot | 46 +++++++++---------- .../contracts/test/CommonTest.t.sol | 5 ++ .../test/L1CrossDomainMessenger.t.sol | 4 ++ .../universal/CrossDomainMessenger.sol | 10 ++++ 5 files changed, 47 insertions(+), 23 deletions(-) create mode 100644 .changeset/dull-coats-tap.md diff --git a/.changeset/dull-coats-tap.md b/.changeset/dull-coats-tap.md new file mode 100644 index 0000000000000..9b61fd7e0b118 --- /dev/null +++ b/.changeset/dull-coats-tap.md @@ -0,0 +1,5 @@ +--- +'@eth-optimism/contracts-bedrock': patch +--- + +Adds a new event SentMessageExtension1 to the CrossDomainMessenger contract. Includes additional data that's being attached to messages sent after the Bedrock upgrade. diff --git a/packages/contracts-bedrock/.gas-snapshot b/packages/contracts-bedrock/.gas-snapshot index df8cc797c068a..21763758c72b8 100644 --- a/packages/contracts-bedrock/.gas-snapshot +++ b/packages/contracts-bedrock/.gas-snapshot @@ -1,9 +1,9 @@ -GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_0() (gas: 262012) -GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_1() (gas: 76172) -GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 352984) -GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 117162) -GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 353006) -GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 117137) +GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_0() (gas: 263435) +GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_1() (gas: 77595) +GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 354407) +GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 118585) +GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 354429) +GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 118560) GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (gas: 45432) GasBenchMark_L2OutputOracle:test_proposeL2Output_benchmark() (gas: 68671) GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 74964) @@ -43,16 +43,16 @@ L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageSucceeds() (gas: 77841) L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageToSystemContract() (gas: 67957) L1CrossDomainMessenger_Test:test_L1MessengerRelayShouldRevertIfPaused() (gas: 60463) L1CrossDomainMessenger_Test:test_L1MessengerReplayMessageWithValue() (gas: 38169) -L1CrossDomainMessenger_Test:test_L1MessengerSendMessage() (gas: 298226) -L1CrossDomainMessenger_Test:test_L1MessengerTwiceSendMessage() (gas: 1489724) +L1CrossDomainMessenger_Test:test_L1MessengerSendMessage() (gas: 301583) +L1CrossDomainMessenger_Test:test_L1MessengerTwiceSendMessage() (gas: 1492570) L1CrossDomainMessenger_Test:test_L1MessengerUnpause() (gas: 40872) L1CrossDomainMessenger_Test:test_L1MessengerXDomainSenderReverts() (gas: 24316) L1CrossDomainMessenger_Test:test_L1MessengerxDomainMessageSenderResets() (gas: 86376) -L1StandardBridge_Test:test_depositERC20() (gas: 578067) -L1StandardBridge_Test:test_depositERC20To() (gas: 580274) -L1StandardBridge_Test:test_depositETH() (gas: 372525) -L1StandardBridge_Test:test_depositETHTo() (gas: 329661) -L1StandardBridge_Test:test_finalizeBridgeERC20FailSendBack() (gas: 680307) +L1StandardBridge_Test:test_depositERC20() (gas: 579490) +L1StandardBridge_Test:test_depositERC20To() (gas: 581697) +L1StandardBridge_Test:test_depositETH() (gas: 373948) +L1StandardBridge_Test:test_depositETHTo() (gas: 331084) +L1StandardBridge_Test:test_finalizeBridgeERC20FailSendBack() (gas: 681445) L1StandardBridge_Test:test_finalizeERC20Withdrawal() (gas: 490132) L1StandardBridge_Test:test_finalizeETHWithdrawal() (gas: 64273) L1StandardBridge_Test:test_initialize() (gas: 26334) @@ -60,7 +60,7 @@ L1StandardBridge_Test:test_onlyEOADepositERC20() (gas: 22376) L1StandardBridge_Test:test_onlyEOADepositETH() (gas: 40859) L1StandardBridge_Test:test_onlyL2BridgeFinalizeERC20Withdrawal() (gas: 36268) L1StandardBridge_Test:test_onlyPortalFinalizeERC20Withdrawal() (gas: 35573) -L1StandardBridge_Test:test_receive() (gas: 519143) +L1StandardBridge_Test:test_receive() (gas: 520566) L2CrossDomainMessenger_Test:testCannot_L2MessengerPause() (gas: 10845) L2CrossDomainMessenger_Test:test_L1MessengerRelayMessageRevertsOnReentrancy() (gas: 171930) L2CrossDomainMessenger_Test:test_L2MessengerMessageVersion() (gas: 8411) @@ -69,8 +69,8 @@ L2CrossDomainMessenger_Test:test_L2MessengerRelayMessageFirstStuckSecondSucceeds L2CrossDomainMessenger_Test:test_L2MessengerRelayMessageSucceeds() (gas: 57372) L2CrossDomainMessenger_Test:test_L2MessengerRelayMessageToSystemContract() (gas: 36193) L2CrossDomainMessenger_Test:test_L2MessengerRelayShouldRevertIfPaused() (gas: 41619) -L2CrossDomainMessenger_Test:test_L2MessengerSendMessage() (gas: 120254) -L2CrossDomainMessenger_Test:test_L2MessengerTwiceSendMessage() (gas: 133398) +L2CrossDomainMessenger_Test:test_L2MessengerSendMessage() (gas: 121522) +L2CrossDomainMessenger_Test:test_L2MessengerTwiceSendMessage() (gas: 135934) L2CrossDomainMessenger_Test:test_L2MessengerXDomainSenderReverts() (gas: 10609) L2CrossDomainMessenger_Test:test_L2MessengerxDomainMessageSenderResets() (gas: 54887) L2OutputOracleTest:testCannot_ProposeWithUnmatchedBlockhash() (gas: 26829) @@ -96,15 +96,15 @@ L2OutputOracleUpgradeable_Test:test_cannotInitImpl() (gas: 19428) L2OutputOracleUpgradeable_Test:test_cannotInitProxy() (gas: 24427) L2OutputOracleUpgradeable_Test:test_initValuesOnProxy() (gas: 39086) L2OutputOracleUpgradeable_Test:test_upgrading() (gas: 230843) -L2StandardBridge_Test:test_ERC20BridgeFailed_whenLocalTokenIsBridge() (gas: 132928) +L2StandardBridge_Test:test_ERC20BridgeFailed_whenLocalTokenIsBridge() (gas: 134196) L2StandardBridge_Test:test_cannotWithdrawEthWithoutSendingIt() (gas: 21619) -L2StandardBridge_Test:test_finalizeBridgeERC20FailSendBack() (gas: 498305) +L2StandardBridge_Test:test_finalizeBridgeERC20FailSendBack() (gas: 499320) L2StandardBridge_Test:test_finalizeDeposit() (gas: 93125) -L2StandardBridge_Test:test_finalizeDeposit_failsToCompleteOutboundTransfer() (gas: 139943) +L2StandardBridge_Test:test_finalizeDeposit_failsToCompleteOutboundTransfer() (gas: 141211) L2StandardBridge_Test:test_initialize() (gas: 14823) -L2StandardBridge_Test:test_receive() (gas: 136491) -L2StandardBridge_Test:test_withdraw() (gas: 352294) -L2StandardBridge_Test:test_withdrawTo() (gas: 353049) +L2StandardBridge_Test:test_receive() (gas: 137760) +L2StandardBridge_Test:test_withdraw() (gas: 353308) +L2StandardBridge_Test:test_withdrawTo() (gas: 354064) L2StandardBridge_Test:test_withdraw_onlyEOA() (gas: 251674) L2ToL1MessagePasserTest:test_burn() (gas: 112246) L2ToL1MessagePasserTest:test_initiateWithdrawal_fromContract() (gas: 68198) @@ -272,4 +272,4 @@ SequencerFeeVault_Test:test_constructor() (gas: 7678) SequencerFeeVault_Test:test_minWithdrawalAmount() (gas: 5440) SequencerFeeVault_Test:test_receive() (gas: 17338) SequencerFeeVault_Test:test_revertWithdraw() (gas: 9342) -SequencerFeeVault_Test:test_withdraw() (gas: 147354) +SequencerFeeVault_Test:test_withdraw() (gas: 148623) diff --git a/packages/contracts-bedrock/contracts/test/CommonTest.t.sol b/packages/contracts-bedrock/contracts/test/CommonTest.t.sol index b4dadd50bd172..34fe1d8c12c7a 100644 --- a/packages/contracts-bedrock/contracts/test/CommonTest.t.sol +++ b/packages/contracts-bedrock/contracts/test/CommonTest.t.sol @@ -185,6 +185,11 @@ contract Messenger_Initializer is L2OutputOracle_Initializer { uint256 gasLimit ); + event SentMessageExtension1( + address indexed sender, + uint256 value + ); + event WithdrawalInitiated( uint256 indexed nonce, address indexed sender, diff --git a/packages/contracts-bedrock/contracts/test/L1CrossDomainMessenger.t.sol b/packages/contracts-bedrock/contracts/test/L1CrossDomainMessenger.t.sol index 973e79be66907..95b7acbddfa3b 100644 --- a/packages/contracts-bedrock/contracts/test/L1CrossDomainMessenger.t.sol +++ b/packages/contracts-bedrock/contracts/test/L1CrossDomainMessenger.t.sol @@ -107,6 +107,10 @@ contract L1CrossDomainMessenger_Test is Messenger_Initializer { vm.expectEmit(true, true, true, true); emit SentMessage(recipient, alice, hex"ff", L1Messenger.messageNonce(), 100); + // SentMessageExtension1 event + vm.expectEmit(true, true, true, true); + emit SentMessageExtension1(alice, 0); + vm.prank(alice); L1Messenger.sendMessage(recipient, hex"ff", uint32(100)); } diff --git a/packages/contracts-bedrock/contracts/universal/CrossDomainMessenger.sol b/packages/contracts-bedrock/contracts/universal/CrossDomainMessenger.sol index 3f56a32dd1b6b..ec84bbd6984bc 100644 --- a/packages/contracts-bedrock/contracts/universal/CrossDomainMessenger.sol +++ b/packages/contracts-bedrock/contracts/universal/CrossDomainMessenger.sol @@ -131,6 +131,15 @@ abstract contract CrossDomainMessenger is uint256 gasLimit ); + /** + * @notice Additional event data to emit, required as of Bedrock. Cannot be merged with the + * SentMessage event without breaking the ABI of this contract, this is good enough. + * + * @param sender Address of the sender of the message. + * @param value ETH value sent along with the message to the recipient. + */ + event SentMessageExtension1(address indexed sender, uint256 value); + /** * @notice Emitted whenever a message is successfully relayed on this chain. * @@ -193,6 +202,7 @@ abstract contract CrossDomainMessenger is ); emit SentMessage(_target, msg.sender, _message, messageNonce(), _minGasLimit); + emit SentMessageExtension1(msg.sender, msg.value); unchecked { ++msgNonce;