Commit 56529d33 authored by Mark Tyneway's avatar Mark Tyneway

contracts-bedrock: L1CrossDomainMessenger single impl

parent 42ac06a8
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
| msgNonce | uint240 | 205 | 0 | 30 | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger | | msgNonce | uint240 | 205 | 0 | 30 | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
| failedMessages | mapping(bytes32 => bool) | 206 | 0 | 32 | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger | | failedMessages | mapping(bytes32 => bool) | 206 | 0 | 32 | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
| __gap | uint256[42] | 207 | 0 | 1344 | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger | | __gap | uint256[42] | 207 | 0 | 1344 | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
| _PORTAL | contract OptimismPortal | 249 | 0 | 20 | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
======================= =======================
➡ src/L1/L1StandardBridge.sol:L1StandardBridge ➡ src/L1/L1StandardBridge.sol:L1StandardBridge
......
...@@ -277,12 +277,13 @@ contract Deploy is Deployer { ...@@ -277,12 +277,13 @@ contract Deploy is Deployer {
/// @notice Deploy the L1CrossDomainMessenger /// @notice Deploy the L1CrossDomainMessenger
function deployL1CrossDomainMessenger() broadcast() public returns (address) { function deployL1CrossDomainMessenger() broadcast() public returns (address) {
address portal = mustGetAddress("OptimismPortalProxy"); L1CrossDomainMessenger messenger = new L1CrossDomainMessenger();
L1CrossDomainMessenger messenger = new L1CrossDomainMessenger({
_portal: OptimismPortal(payable(portal)) require(address(messenger.PORTAL()) == address(0));
}); require(address(messenger.portal()) == address(0));
require(address(messenger.PORTAL()) == portal); bytes32 xdmSenderSlot = vm.load(address(messenger), bytes32(uint256(204)));
require(address(uint160(uint256(xdmSenderSlot))) == Constants.DEFAULT_L2_SENDER);
save("L1CrossDomainMessenger", address(messenger)); save("L1CrossDomainMessenger", address(messenger));
console.log("L1CrossDomainMessenger deployed at %s", address(messenger)); console.log("L1CrossDomainMessenger deployed at %s", address(messenger));
...@@ -619,7 +620,12 @@ contract Deploy is Deployer { ...@@ -619,7 +620,12 @@ contract Deploy is Deployer {
proxyAdmin.upgradeAndCall({ proxyAdmin.upgradeAndCall({
_proxy: payable(l1CrossDomainMessengerProxy), _proxy: payable(l1CrossDomainMessengerProxy),
_implementation: l1CrossDomainMessenger, _implementation: l1CrossDomainMessenger,
_data: abi.encodeCall(L1CrossDomainMessenger.initialize, ()) _data: abi.encodeCall(
L1CrossDomainMessenger.initialize,
(
OptimismPortal(payable(optimismPortalProxy))
)
)
}); });
L1CrossDomainMessenger messenger = L1CrossDomainMessenger(l1CrossDomainMessengerProxy); L1CrossDomainMessenger messenger = L1CrossDomainMessenger(l1CrossDomainMessengerProxy);
...@@ -627,6 +633,9 @@ contract Deploy is Deployer { ...@@ -627,6 +633,9 @@ contract Deploy is Deployer {
console.log("L1CrossDomainMessenger version: %s", version); console.log("L1CrossDomainMessenger version: %s", version);
require(address(messenger.PORTAL()) == optimismPortalProxy); require(address(messenger.PORTAL()) == optimismPortalProxy);
require(address(messenger.portal()) == address(0));
bytes32 xdmSenderSlot = vm.load(address(messenger), bytes32(uint256(204)));
require(address(uint160(uint256(xdmSenderSlot))) == Constants.DEFAULT_L2_SENDER);
} }
/// @notice Initialize the L2OutputOracle /// @notice Initialize the L2OutputOracle
......
...@@ -13,24 +13,37 @@ import { Semver } from "../universal/Semver.sol"; ...@@ -13,24 +13,37 @@ import { Semver } from "../universal/Semver.sol";
/// interface instead of interacting with lower-level contracts directly. /// interface instead of interacting with lower-level contracts directly.
contract L1CrossDomainMessenger is CrossDomainMessenger, Semver { contract L1CrossDomainMessenger is CrossDomainMessenger, Semver {
/// @notice Address of the OptimismPortal. /// @notice Address of the OptimismPortal.
OptimismPortal public immutable PORTAL; OptimismPortal internal _PORTAL;
/// @custom:semver 1.4.1 /// @custom:semver 1.5.0
/// @notice Constructs the L1CrossDomainMessenger contract. /// @notice Constructs the L1CrossDomainMessenger contract.
/// @param _portal Address of the OptimismPortal contract on this network. constructor()
constructor(OptimismPortal _portal) Semver(1, 5, 0)
Semver(1, 4, 1)
CrossDomainMessenger(Predeploys.L2_CROSS_DOMAIN_MESSENGER) CrossDomainMessenger(Predeploys.L2_CROSS_DOMAIN_MESSENGER)
{ {
PORTAL = _portal; initialize({
initialize(); _portal: OptimismPortal(payable(0))
});
} }
/// @notice Initializes the contract. /// @notice Initializes the contract.
function initialize() public initializer { /// @param _portal Address of the OptimismPortal contract on this network.
function initialize(OptimismPortal _portal) public reinitializer(2) {
_PORTAL = _portal;
__CrossDomainMessenger_init(); __CrossDomainMessenger_init();
} }
/// @notice Getter for the OptimismPortal address.
/// @custom:legacy
function PORTAL() external view returns (address) {
return address(_PORTAL);
}
/// @notice Getter for the OptimismPortal address.
function portal() external view returns (address) {
return address(_PORTAL);
}
/// @inheritdoc CrossDomainMessenger /// @inheritdoc CrossDomainMessenger
function _sendMessage( function _sendMessage(
address _to, address _to,
...@@ -38,16 +51,16 @@ contract L1CrossDomainMessenger is CrossDomainMessenger, Semver { ...@@ -38,16 +51,16 @@ contract L1CrossDomainMessenger is CrossDomainMessenger, Semver {
uint256 _value, uint256 _value,
bytes memory _data bytes memory _data
) internal override { ) internal override {
PORTAL.depositTransaction{ value: _value }(_to, _value, _gasLimit, false, _data); _PORTAL.depositTransaction{ value: _value }(_to, _value, _gasLimit, false, _data);
} }
/// @inheritdoc CrossDomainMessenger /// @inheritdoc CrossDomainMessenger
function _isOtherMessenger() internal view override returns (bool) { function _isOtherMessenger() internal view override returns (bool) {
return msg.sender == address(PORTAL) && PORTAL.l2Sender() == OTHER_MESSENGER; return msg.sender == address(_PORTAL) && _PORTAL.l2Sender() == OTHER_MESSENGER;
} }
/// @inheritdoc CrossDomainMessenger /// @inheritdoc CrossDomainMessenger
function _isUnsafeTarget(address _target) internal view override returns (bool) { function _isUnsafeTarget(address _target) internal view override returns (bool) {
return _target == address(this) || _target == address(PORTAL); return _target == address(this) || _target == address(_PORTAL);
} }
} }
...@@ -272,7 +272,7 @@ contract Messenger_Initializer is Portal_Initializer { ...@@ -272,7 +272,7 @@ contract Messenger_Initializer is Portal_Initializer {
addressManager = new AddressManager(); addressManager = new AddressManager();
// Setup implementation // Setup implementation
L1CrossDomainMessenger L1MessengerImpl = new L1CrossDomainMessenger(op); L1CrossDomainMessenger L1MessengerImpl = new L1CrossDomainMessenger();
// Setup the address manager and proxy // Setup the address manager and proxy
vm.prank(multisig); vm.prank(multisig);
...@@ -282,7 +282,7 @@ contract Messenger_Initializer is Portal_Initializer { ...@@ -282,7 +282,7 @@ contract Messenger_Initializer is Portal_Initializer {
"OVM_L1CrossDomainMessenger" "OVM_L1CrossDomainMessenger"
); );
L1Messenger = L1CrossDomainMessenger(address(proxy)); L1Messenger = L1CrossDomainMessenger(address(proxy));
L1Messenger.initialize(); L1Messenger.initialize(op);
vm.etch( vm.etch(
Predeploys.L2_CROSS_DOMAIN_MESSENGER, Predeploys.L2_CROSS_DOMAIN_MESSENGER,
......
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