Commit 472322e8 authored by Diego's avatar Diego Committed by GitHub

feat/L2ToL2CrossDomainMessenger: create (#10297)

* contracts-bedrock: create CrossL2Inbox

* contracts-bedrock: create ICrossL2Inbox

* contracts-bedrock: create tests for CrossL2Inbox

* contracts-bedrock: update CrossL2Inbox sol version to ^0.8.24

* contracts-bedrock: rename test to .t.sol ext

* contracts-bedrock: make snapshots

* contracts-bedrock: update semver-lock

* contracts-bedrock: drop snapshots for CrossL2InboxTest

* contracts-bedrock: update license for tests CrossL2Inbox

* contracts-bedrock: add CrossL2Inbox to predeploys

* contracts-bedrock: pin sol version of CrossL2Inbox to 0.8.25

* contracts-bedrock: update semver-lock for CrossL2Inbox

* contracts-bedrock: add CROSS_L2_INBOX to predeploys

* contracts-bedrock: make slots internal in CrossL2Inbox

* contracts-bedrock: add custom errors to CrossL2Inbox

* contracts-bedrock: refactor tests for CrossL2Inbox

* contracts-bedrock: use TransientContext in CrossL2Inbox

* contracts-bedrock: fix L2Genesis test

* contracts-bedrock: minor tweaks to documentation in tests for CrossL2Inbox

* contracts-bedrock: relabel BLOCKNUMBER_SLOT to BLOCK_NUMBER_SLOT in CrossL2Inbox

* contracts-bedrock: update snapshots for CrossL2Inbox

* contracts-bedrock: update semver-lock for CrossL2Inbox

* contracts-bedrock: improve documentation for CrossL2Inbox

* contracts-bedrock: update semver-lock for CrossL2Inbox

* contracts-bedrock: fix tests for CrossL2Inbox

* contracts-bedrock: update modifier in CrossL2Inbox

* contracts-bedrock: drop arguments in custom errors for CrossL2Inbox

* contracts-bedrock: update snapshots for CrossL2Inbox

* contracts-bedrock: update semver-lock for CrossL2Inbox

* contracts-bedrock: fix tests for CrossL2Inbox

* contracts-bedrock: remove redundant lines in CrossL2Inbox

* contracts-bedrock: add tests for CrossL2Inbox

* contracts-bedrock: update semver-lock for CrossL2Inbox

* contracts-bedrock: minor improvements to tests for CrossL2Inbox

* contracts-bedrock: remove ENTERED_SLOT in CrossL2Inbox

* contracts-bedrock: remove CrossL2Inbox from isSupportedPredeploy

* contracts-bedrock: update semver-lock for CrossL2Inbox

* contracts-bedrock: update CrossL2Inbox with eip3074 specs

* contracts-bedrock: update tests for CrossL2Inbox with eip3074 specs

* contracts-bedrock: improve doc in tests for CrossL2Inbox

* contracts-bedrock: update snapshots for CrossL2Inbox

* contracts-bedrock: update semver-lock for CrossL2Inbox

* contracts-bedrock: create L2ToL2CrossDomainMessenger

* contracts-bedrock: create IL2ToL2CrossDomainMessenger

* contracts-bedrock: create tests for L2ToL2CrossDomainMessenger

* contracts-bedrock: make snapshots for L2ToL2CrossDomainMessenger

* contracts-bedrock: add semver-lock for L2ToL2CrossDomainMessenger

* contracts-bedrock: add L2ToL2CrossDomainMessenger to predeploys

* contracts-bedrock: make slots in L2ToL2CrossDomainMessenger internal

* contracts-bedrock: add reentrancy protection to L2ToL2CrossDomainMessenger

* contracts-bedrock: pin sol version of L2ToL2CrossDomainMessenger to 0.8.25

* contracts-bedrock: add custom errors to L2ToL2CrossDomainMessenger

* contracts-bedrock: add missing documentation in L2ToL2CrossDomainMessenger

* contracts-bedrock: reorder imports for L2ToL2CrossDomainMessenger

* contracts-bedrock: rename errors for L2ToL2CrossDomainMessenger

* contracts-bedrock: reorder vars in L2ToL2CrossDomainMessenger

* contracts-bedrock: refactor tests for L2ToL2CrossDomainMessenger

* contracts-bedrock: add L2_TO_L2_CROSS_DOMAIN_MESSENGER to predeploys

* contracts-bedrock: fix tests for L2ToL2CrossDomainMessenger

* contracts-bedrock: make snapshots for L2ToL2CrossDomainMessenger

* contracts-bedrock: update semver-lock for L2ToL2CrossDomainMessenger

* contracts-bedrock: reorder functions in L2ToL2CrossDomainMessenger

* contracts-bedrock: mock calls to target contract for L2ToL2CrossDomainMessenger tests

* contracts-bedrock: add additional checks to sendMessage in L2ToL2CrossDomainMessenger

* contracts-bedrock: update semver-lock for L2ToL2CrossDomainMessenger

* contracts-bedrock: minor tweaks to tests for L2ToL2CrossDomainMessenger

* contracts-bedrock: add TransientContext to L2ToL2CrossDomainMessenger

* contracts-bedrock: add reentrancy test for L2ToL2CrossDomainMessenger

* contracts-bedrock: improve tests for L2ToL2CrossDomainMessenger

* contracts-bedrock: improve documentation of tests for L2ToL2CrossDomainMessenger

* contracts-bedrock: fix L2Genesis test

* contracts-bedrock: update snapshots for L2ToL2CrossDomainMessenger

* contracts-bedrock: update semver-lock for L2ToL2CrossDomainMessenger

* contracts-bedrock: improve documentation for L2ToL2CrossDomainMessenger

* contracts-bedrock: fix test for L2ToL2CrossDomainMessenger

* contracts-bedrock: update snapshots for L2ToL2CrossDomainMessenger

* contracts-bedrock: update semver-lock for L2ToL2CrossDomainMessenger

* contracts-bedrock: fix tests for L2ToL2CrossDomainMessenger

* contracts-bedrock: update modifier in L2ToL2CrossDomainMessenger

* contracts-bedrock: remove legacy line in L2ToL2CrossDomainMessenger

* contracts-bedrock: add additional tests for L2ToL2CrossDomainMessenger

* contracts-bedrock: add assumePayable in tests for L2ToL2CrossDomainMessenger

* contracts-bedrock: fix test for L2ToL2CrossDomainMessenger

* contracts-bedrock: remove args from custom errors in L2ToL2CrossDomainMessenger

* contracts-bedrock: update snapshots for L2ToL2CrossDomainMessenger

* contracts-bedrock: update semver-lock for L2ToL2CrossDomainMessenger

* contracts-bedrock: remove ENTERED_SLOT in L2ToL2CrossDomainMessenger

* contracts-bedrock: remove L2ToL2CrossDomainMessenger from isSupportedPredeploy

* contracts-bedrock: update semver-lock for L2ToL2CrossDomainMessenger

* contracts-bedrock: update L2ToL2CrossDomainMessenger with eip3074 specs

* contracts-bedrock: add tests for 3074 changes on L2ToL2CrossDomainMessenger

* contracts-bedrock: add missing checks for L2ToL2CrossDomainMessenger

* contracts-bedrock: update semver-lock for L2ToL2CrossDomainMessenger

* contracts-bedrock: make SentMessage anonymous in L2ToL2CrossDomainMessenger

* contracts-bedrock: update semver-lock for L2ToL2CrossDomainMessenger

* contracts-bedrock: update snapshots for L2ToL2CrossDomainMessenger

* contracts-bedrock: fix title for TransientContext

* contracts-bedrock: use messageVersion instead of MESSAGE_VERSION in L2ToL2CrossDomainMessenger

* contracts-bedrock: reintroduce ReentrancyGuard to L2ToL2CrossDomainMessenger

* contracts-bedrock: update snapshots for L2ToL2CrossDomainMessenger

* contracts-bedrock: update semver-lock for contracts-bedrock: update snapshots for L2ToL2CrossDomainMessenger

* contracts-bedrock: remove TransientContext from L2ToL2CrossDomainMessenger

* contracts-bedrock: update snapshots for L2ToL2CrossDomainMessenger

* contracts-bedrock: update semver-lock for L2ToL2CrossDomainMessenger

* contracts-bedrock: fix tests for L2ToL2CrossDomainMessenger

* contracts-bedrock: update semver-lock for L2ToL2CrossDomainMessenger

* contracts-bedrock: fix tstore in L2ToL2CrossDomainMessenger

* contracts-bedrock: improve logic in L2ToL2CrossDomainMessenger

* contracts-bedrock: update snapshots for L2ToL2CrossDomainMessenger

* contracts-bedrock: update semver-lock L2ToL2CrossDomainMessenger

* contracts-bedrock: improve logic for L2ToL2CrossDomainMessenger

* contracts-bedrock: update snapshots for L2ToL2CrossDomainMessenger

* contracts-bedrock: update semver-lock for L2ToL2CrossDomainMessenger

* contracts-bedrock: simplify vars in tests for L2ToL2CrossDomainMessenger
parent acd8cf8a
...@@ -87,6 +87,10 @@ ...@@ -87,6 +87,10 @@
"initCodeHash": "0x08bbede75cd6dfd076903b8f04d24f82fa7881576c135825098778632e37eebc", "initCodeHash": "0x08bbede75cd6dfd076903b8f04d24f82fa7881576c135825098778632e37eebc",
"sourceCodeHash": "0x8388b9b8075f31d580fed815b66b45394e40fb1a63cd8cda2272d2c390fc908c" "sourceCodeHash": "0x8388b9b8075f31d580fed815b66b45394e40fb1a63cd8cda2272d2c390fc908c"
}, },
"src/L2/L2ToL2CrossDomainMessenger.sol": {
"initCodeHash": "0x26995afaa790e4daa74deb8dc5088b915633d3d037a2feb5cd8dd2ec8d3c51fc",
"sourceCodeHash": "0x0cbdda4623c9c10653332af3c43ee37d9c4a6e4e0214f9a0fb51ae053b0b6220"
},
"src/L2/SequencerFeeVault.sol": { "src/L2/SequencerFeeVault.sol": {
"initCodeHash": "0xd62e193d89b1661d34031227a45ce1eade9c2a89b0bd7f362f511d03cceef294", "initCodeHash": "0xd62e193d89b1661d34031227a45ce1eade9c2a89b0bd7f362f511d03cceef294",
"sourceCodeHash": "0xa304b4b556162323d69662b4dd9a1d073d55ec661494465489bb67f1e465e7b3" "sourceCodeHash": "0xa304b4b556162323d69662b4dd9a1d073d55ec661494465489bb67f1e465e7b3"
......
[
{
"inputs": [],
"name": "crossDomainMessageSender",
"outputs": [
{
"internalType": "address",
"name": "_sender",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "crossDomainMessageSource",
"outputs": [
{
"internalType": "uint256",
"name": "_source",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "messageNonce",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "messageVersion",
"outputs": [
{
"internalType": "uint16",
"name": "",
"type": "uint16"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_destination",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_source",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_nonce",
"type": "uint256"
},
{
"internalType": "address",
"name": "_sender",
"type": "address"
},
{
"internalType": "address",
"name": "_target",
"type": "address"
},
{
"internalType": "bytes",
"name": "_message",
"type": "bytes"
}
],
"name": "relayMessage",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_destination",
"type": "uint256"
},
{
"internalType": "address",
"name": "_target",
"type": "address"
},
{
"internalType": "bytes",
"name": "_message",
"type": "bytes"
}
],
"name": "sendMessage",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"name": "successfulMessages",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "version",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "messageHash",
"type": "bytes32"
}
],
"name": "FailedRelayedMessage",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "messageHash",
"type": "bytes32"
}
],
"name": "RelayedMessage",
"type": "event"
},
{
"anonymous": true,
"inputs": [
{
"indexed": false,
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "SentMessage",
"type": "event"
},
{
"inputs": [],
"name": "CrossL2InboxOriginNotL2ToL2CrossDomainMessenger",
"type": "error"
},
{
"inputs": [],
"name": "MessageAlreadyRelayed",
"type": "error"
},
{
"inputs": [],
"name": "MessageDestinationNotRelayChain",
"type": "error"
},
{
"inputs": [],
"name": "MessageDestinationSameChain",
"type": "error"
},
{
"inputs": [],
"name": "MessageTargetCrossL2Inbox",
"type": "error"
},
{
"inputs": [],
"name": "MessageTargetL2ToL2CrossDomainMessenger",
"type": "error"
},
{
"inputs": [],
"name": "NotEntered",
"type": "error"
},
{
"inputs": [],
"name": "ReentrantCall",
"type": "error"
},
{
"inputs": [],
"name": "RelayMessageCallerNotCrossL2Inbox",
"type": "error"
}
]
\ No newline at end of file
[
{
"bytes": "32",
"label": "successfulMessages",
"offset": 0,
"slot": "0",
"type": "mapping(bytes32 => bool)"
},
{
"bytes": "30",
"label": "msgNonce",
"offset": 0,
"slot": "1",
"type": "uint240"
}
]
\ No newline at end of file
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/// @title IL2ToL2CrossDomainMessenger
/// @notice Interface for the L2ToL2CrossDomainMessenger contract.
interface IL2ToL2CrossDomainMessenger {
/// @notice Retrieves the sender of the current cross domain message.
/// @return _sender Address of the sender of the current cross domain message.
function crossDomainMessageSender() external view returns (address _sender);
/// @notice Retrieves the source of the current cross domain message.
/// @return _source Chain ID of the source of the current cross domain message.
function crossDomainMessageSource() external view returns (uint256 _source);
/// @notice Sends a message to some target address on a destination chain. Note that if the call
/// always reverts, then the message will be unrelayable, and any ETH sent will be
/// permanently locked. The same will occur if the target on the other chain is
/// considered unsafe (see the _isUnsafeTarget() function).
/// @param _destination Chain ID of the destination chain.
/// @param _target Target contract or wallet address.
/// @param _message Message to trigger the target address with.
function sendMessage(uint256 _destination, address _target, bytes calldata _message) external payable;
/// @notice Relays a message that was sent by the other CrossDomainMessenger contract. Can only
/// be executed via cross-chain call from the other messenger OR if the message was
/// already received once and is currently being replayed.
/// @param _destination Chain ID of the destination chain.
/// @param _nonce Nonce of the message being relayed.
/// @param _sender Address of the user who sent the message.
/// @param _source Chain ID of the source chain.
/// @param _target Address that the message is targeted at.
/// @param _message Message to send to the target.
function relayMessage(
uint256 _destination,
uint256 _source,
uint256 _nonce,
address _sender,
address _target,
bytes calldata _message
)
external
payable;
}
...@@ -86,6 +86,9 @@ library Predeploys { ...@@ -86,6 +86,9 @@ library Predeploys {
/// @notice Address of the CrossL2Inbox predeploy. /// @notice Address of the CrossL2Inbox predeploy.
address internal constant CROSS_L2_INBOX = 0x4200000000000000000000000000000000000022; address internal constant CROSS_L2_INBOX = 0x4200000000000000000000000000000000000022;
/// @notice Address of the L2ToL2CrossDomainMessenger predeploy.
address internal constant L2_TO_L2_CROSS_DOMAIN_MESSENGER = 0x4200000000000000000000000000000000000023;
/// @notice Returns the name of the predeploy at the given address. /// @notice Returns the name of the predeploy at the given address.
function getName(address _addr) internal pure returns (string memory out_) { function getName(address _addr) internal pure returns (string memory out_) {
require(isPredeployNamespace(_addr), "Predeploys: address must be a predeploy"); require(isPredeployNamespace(_addr), "Predeploys: address must be a predeploy");
...@@ -111,6 +114,7 @@ library Predeploys { ...@@ -111,6 +114,7 @@ library Predeploys {
if (_addr == GOVERNANCE_TOKEN) return "GovernanceToken"; if (_addr == GOVERNANCE_TOKEN) return "GovernanceToken";
if (_addr == LEGACY_ERC20_ETH) return "LegacyERC20ETH"; if (_addr == LEGACY_ERC20_ETH) return "LegacyERC20ETH";
if (_addr == CROSS_L2_INBOX) return "CrossL2Inbox"; if (_addr == CROSS_L2_INBOX) return "CrossL2Inbox";
if (_addr == L2_TO_L2_CROSS_DOMAIN_MESSENGER) return "L2ToL2CrossDomainMessenger";
revert("Predeploys: unnamed predeploy"); revert("Predeploys: unnamed predeploy");
} }
......
// SPDX-License-Identifier: MIT // SPDX-License-Identifier: MIT
pragma solidity ^0.8.24; pragma solidity ^0.8.24;
/// @title Transient /// @title TransientContext
/// @notice Library for transient storage. /// @notice Library for transient storage.
library TransientContext { library TransientContext {
/// @notice Slot for call depth. /// @notice Slot for call depth.
......
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