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;