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

contracts-bedrock: L1CrossDomainMessenger single impl

parent 42ac06a8
......@@ -25,6 +25,7 @@
| msgNonce | uint240 | 205 | 0 | 30 | 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 |
| _PORTAL | contract OptimismPortal | 249 | 0 | 20 | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
=======================
➡ src/L1/L1StandardBridge.sol:L1StandardBridge
......
......@@ -277,12 +277,13 @@ contract Deploy is Deployer {
/// @notice Deploy the L1CrossDomainMessenger
function deployL1CrossDomainMessenger() broadcast() public returns (address) {
address portal = mustGetAddress("OptimismPortalProxy");
L1CrossDomainMessenger messenger = new L1CrossDomainMessenger({
_portal: OptimismPortal(payable(portal))
});
L1CrossDomainMessenger messenger = new L1CrossDomainMessenger();
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));
console.log("L1CrossDomainMessenger deployed at %s", address(messenger));
......@@ -619,7 +620,12 @@ contract Deploy is Deployer {
proxyAdmin.upgradeAndCall({
_proxy: payable(l1CrossDomainMessengerProxy),
_implementation: l1CrossDomainMessenger,
_data: abi.encodeCall(L1CrossDomainMessenger.initialize, ())
_data: abi.encodeCall(
L1CrossDomainMessenger.initialize,
(
OptimismPortal(payable(optimismPortalProxy))
)
)
});
L1CrossDomainMessenger messenger = L1CrossDomainMessenger(l1CrossDomainMessengerProxy);
......@@ -627,6 +633,9 @@ contract Deploy is Deployer {
console.log("L1CrossDomainMessenger version: %s", version);
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
......
......@@ -13,24 +13,37 @@ import { Semver } from "../universal/Semver.sol";
/// interface instead of interacting with lower-level contracts directly.
contract L1CrossDomainMessenger is CrossDomainMessenger, Semver {
/// @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.
/// @param _portal Address of the OptimismPortal contract on this network.
constructor(OptimismPortal _portal)
Semver(1, 4, 1)
constructor()
Semver(1, 5, 0)
CrossDomainMessenger(Predeploys.L2_CROSS_DOMAIN_MESSENGER)
{
PORTAL = _portal;
initialize();
initialize({
_portal: OptimismPortal(payable(0))
});
}
/// @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();
}
/// @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
function _sendMessage(
address _to,
......@@ -38,16 +51,16 @@ contract L1CrossDomainMessenger is CrossDomainMessenger, Semver {
uint256 _value,
bytes memory _data
) internal override {
PORTAL.depositTransaction{ value: _value }(_to, _value, _gasLimit, false, _data);
_PORTAL.depositTransaction{ value: _value }(_to, _value, _gasLimit, false, _data);
}
/// @inheritdoc CrossDomainMessenger
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
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 {
addressManager = new AddressManager();
// Setup implementation
L1CrossDomainMessenger L1MessengerImpl = new L1CrossDomainMessenger(op);
L1CrossDomainMessenger L1MessengerImpl = new L1CrossDomainMessenger();
// Setup the address manager and proxy
vm.prank(multisig);
......@@ -282,7 +282,7 @@ contract Messenger_Initializer is Portal_Initializer {
"OVM_L1CrossDomainMessenger"
);
L1Messenger = L1CrossDomainMessenger(address(proxy));
L1Messenger.initialize();
L1Messenger.initialize(op);
vm.etch(
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