Skip to content

Commit

Permalink
Merge pull request #711 from matter-labs/sb-reduce-owner-footprint-on…
Browse files Browse the repository at this point in the history
…-genesis

Reduce owner footprint on genesis
  • Loading branch information
StanislavBreadless authored Aug 20, 2024
2 parents d50bf31 + 1b8393b commit a91bc7a
Show file tree
Hide file tree
Showing 17 changed files with 222 additions and 87 deletions.
3 changes: 3 additions & 0 deletions l1-contracts/contracts/bridgehub/Bridgehub.sol
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,9 @@ contract Bridgehub is IBridgehub, ReentrancyGuard, Ownable2StepUpgradeable, Paus
// TODO(EVM-703): This logic should be revised once interchain communication is implemented.

address sender = L1_CHAIN_ID == block.chainid ? msg.sender : AddressAliasHelper.undoL1ToL2Alias(msg.sender);
// This method can be accessed by STMDeployer only
require(sender == address(stmDeployer), "BH: not stm deployer");

bytes32 assetInfo = keccak256(abi.encode(L1_CHAIN_ID, sender, _additionalData));
stmAssetIdToAddress[assetInfo] = _assetAddress;
emit AssetRegistered(assetInfo, _assetAddress, _additionalData, msg.sender);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -407,7 +407,12 @@ contract StateTransitionManager is IStateTransitionManager, ReentrancyGuard, Own
require(forceDeploymentHash == initialForceDeploymentHash, "STM: initial force deployment mismatch");
}
// genesis upgrade, deploys some contracts, sets chainId
IAdmin(hyperchainAddress).genesisUpgrade(l1GenesisUpgrade, _forceDeploymentData, _factoryDeps);
IAdmin(hyperchainAddress).genesisUpgrade(
l1GenesisUpgrade,
address(IBridgehub(BRIDGE_HUB).stmDeployer()),
_forceDeploymentData,
_factoryDeps
);
}

/// @param _chainId the chainId of the chain
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ contract AdminFacet is ZkSyncHyperchainBase, IAdmin {
/// @dev we have to set the chainId at genesis, as blockhashzero is the same for all chains with the same chainId
function genesisUpgrade(
address _l1GenesisUpgrade,
address _stmDeployer,
bytes calldata _forceDeploymentData,
bytes[] calldata _factoryDeps
) external onlyStateTransitionManager {
Expand All @@ -189,7 +190,7 @@ contract AdminFacet is ZkSyncHyperchainBase, IAdmin {
initAddress: _l1GenesisUpgrade,
initCalldata: abi.encodeCall(
IL1GenesisUpgrade.genesisUpgrade,
(_l1GenesisUpgrade, s.chainId, s.protocolVersion, _forceDeploymentData, _factoryDeps)
(_l1GenesisUpgrade, s.chainId, s.protocolVersion, _stmDeployer, _forceDeploymentData, _factoryDeps)
)
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ interface IAdmin is IZkSyncHyperchainBase {

function genesisUpgrade(
address _l1GenesisUpgrade,
address _stmDeployer,
bytes calldata _forceDeploymentData,
bytes[] calldata _factoryDeps
) external;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,11 @@ struct ForceDeployment {
/// @author Matter Labs
/// @custom:security-contact [email protected]
interface IL2GenesisUpgrade {
function genesisUpgrade(uint256 _chainId, bytes calldata _forceDeploymentsData) external payable;
event UpgradeComplete(uint256 _chainId);

function genesisUpgrade(
uint256 _chainId,
address _stmDeployer,
bytes calldata _forceDeploymentsData
) external payable;
}
1 change: 1 addition & 0 deletions l1-contracts/contracts/upgrades/IL1GenesisUpgrade.sol
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ interface IL1GenesisUpgrade {
address _l1GenesisUpgrade,
uint256 _chainId,
uint256 _protocolVersion,
address _stmDeployerAddress,
bytes calldata _forceDeployments,
bytes[] calldata _factoryDeps
) external returns (bytes32);
Expand Down
3 changes: 2 additions & 1 deletion l1-contracts/contracts/upgrades/L1GenesisUpgrade.sol
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ contract L1GenesisUpgrade is IL1GenesisUpgrade, BaseZkSyncUpgradeGenesis {
address _l1GenesisUpgrade,
uint256 _chainId,
uint256 _protocolVersion,
address _stmDeployerAddress,
bytes calldata _forceDeploymentsData,
bytes[] calldata _factoryDeps
) public override returns (bytes32) {
Expand All @@ -36,7 +37,7 @@ contract L1GenesisUpgrade is IL1GenesisUpgrade, BaseZkSyncUpgradeGenesis {
{
bytes memory l2GenesisUpgradeCalldata = abi.encodeCall(
IL2GenesisUpgrade.genesisUpgrade,
(_chainId, _forceDeploymentsData)
(_chainId, _stmDeployerAddress, _forceDeploymentsData)
);
complexUpgraderCalldata = abi.encodeCall(
IComplexUpgrader.upgrade,
Expand Down
34 changes: 2 additions & 32 deletions l2-contracts/src/deploy-shared-bridge-on-l2-through-l1.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,14 @@ import { Command } from "commander";
import type { BigNumberish } from "ethers";
import { Wallet } from "ethers";
import { formatUnits, parseUnits } from "ethers/lib/utils";
import { provider, publishBytecodeFromL1, priorityTxMaxGasLimit } from "./utils";
import { provider, publishBytecodeFromL1 } from "./utils";

import { ethTestConfig } from "./deploy-utils";

import { Deployer } from "../../l1-contracts/src.ts/deploy";
import { GAS_MULTIPLIER } from "../../l1-contracts/scripts/utils";
import * as hre from "hardhat";
import {
ADDRESS_ONE,
L2_ASSET_ROUTER_ADDRESS,
L2_BRIDGEHUB_ADDRESS,
L2_MESSAGE_ROOT_ADDRESS,
L2_NATIVE_TOKEN_VAULT_ADDRESS,
} from "../../l1-contracts/src.ts/utils";

import { BridgehubFactory } from "../../l1-contracts/typechain";
import { L2_ASSET_ROUTER_ADDRESS, L2_NATIVE_TOKEN_VAULT_ADDRESS } from "../../l1-contracts/src.ts/utils";

export const L2_SHARED_BRIDGE_ABI = hre.artifacts.readArtifactSync("L2AssetRouter").abi;
export const L2_STANDARD_TOKEN_PROXY_BYTECODE = hre.artifacts.readArtifactSync("BeaconProxy").bytecode;
Expand Down Expand Up @@ -52,30 +44,8 @@ export async function publishL2NativeTokenVaultDependencyBytecodesOnL2(
}
}

async function setL2TokenBeacon(deployer: Deployer, chainId: string, gasPrice: BigNumberish) {
if (deployer.verbose) {
console.log("Setting L2 token beacon");
}
const bridgehub = BridgehubFactory.connect(L2_BRIDGEHUB_ADDRESS, deployer.deployWallet);
const receipt2 = await deployer.executeUpgradeOnL2(
chainId,
L2_BRIDGEHUB_ADDRESS,
gasPrice,
bridgehub.interface.encodeFunctionData("setAddresses", [
L2_ASSET_ROUTER_ADDRESS,
ADDRESS_ONE,
L2_MESSAGE_ROOT_ADDRESS,
]),
priorityTxMaxGasLimit
);
if (deployer.verbose) {
console.log("Set addresses in BH, upgrade hash", receipt2.transactionHash);
}
}

export async function deploySharedBridgeOnL2ThroughL1(deployer: Deployer, chainId: string, gasPrice: BigNumberish) {
await publishL2NativeTokenVaultDependencyBytecodesOnL2(deployer, chainId, gasPrice);
await setL2TokenBeacon(deployer, chainId, gasPrice);
if (deployer.verbose) {
console.log(`CONTRACTS_L2_NATIVE_TOKEN_VAULT_IMPL_ADDR=${L2_NATIVE_TOKEN_VAULT_ADDRESS}`);
console.log(`CONTRACTS_L2_NATIVE_TOKEN_VAULT_PROXY_ADDR=${L2_NATIVE_TOKEN_VAULT_ADDRESS}`);
Expand Down
54 changes: 27 additions & 27 deletions system-contracts/SystemContractsHashes.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,49 +3,49 @@
"contractName": "AccountCodeStorage",
"bytecodePath": "artifacts-zk/contracts-preprocessed/AccountCodeStorage.sol/AccountCodeStorage.json",
"sourceCodePath": "contracts-preprocessed/AccountCodeStorage.sol",
"bytecodeHash": "0x0100005d25ca74d6dd4855495f92b76a7542f3b9a1145129bef7c874d11de0cd",
"bytecodeHash": "0x0100005d869b05bd5c6fe4ccf5432e48ab7c505695cd3e9f443dec1edd0a0bd4",
"sourceCodeHash": "0xea3806fcaf7728463f559fe195d8acdc47a7659d58119e0a51efcf86a691b61b"
},
{
"contractName": "BootloaderUtilities",
"bytecodePath": "artifacts-zk/contracts-preprocessed/BootloaderUtilities.sol/BootloaderUtilities.json",
"sourceCodePath": "contracts-preprocessed/BootloaderUtilities.sol",
"bytecodeHash": "0x010007c7fe668eff6936a7eb0bfd603671014aaa47c52e4847ddc1f65e4940bf",
"bytecodeHash": "0x010007c7d8b18f9753dda1e93c94175725f77e3491c3ba01f9f6247dea61b5dd",
"sourceCodeHash": "0x9d2b7376c4cd9b143ddd5dfe001a9faae99b9125ccd45f2915c3ce0099643ed9"
},
{
"contractName": "ComplexUpgrader",
"bytecodePath": "artifacts-zk/contracts-preprocessed/ComplexUpgrader.sol/ComplexUpgrader.json",
"sourceCodePath": "contracts-preprocessed/ComplexUpgrader.sol",
"bytecodeHash": "0x0100004d0dcb8cebf6f81f46011cd8ec8984e7ee82448ddd99e2c15da45fcaa2",
"bytecodeHash": "0x0100004d20bb143624f5a44d60c636f898dda8b69bdba226cd5d5b96c05a8c79",
"sourceCodeHash": "0xdde7c49a94cc3cd34c3e7ced1b5ba45e4740df68d26243871edbe393e7298f7a"
},
{
"contractName": "Compressor",
"bytecodePath": "artifacts-zk/contracts-preprocessed/Compressor.sol/Compressor.json",
"sourceCodePath": "contracts-preprocessed/Compressor.sol",
"bytecodeHash": "0x0100013ffa6d46d34d3c93202665387eb170af768e5e40e4e98f4b3484dac3ca",
"bytecodeHash": "0x0100013f8f3f663566e51708b3b57baaa2723b2a3e494af272e02044af944eb8",
"sourceCodeHash": "0xb0cec0016f481ce023478f71727fbc0d82e967ddc0508e4d47f5c52292a3f790"
},
{
"contractName": "ContractDeployer",
"bytecodePath": "artifacts-zk/contracts-preprocessed/ContractDeployer.sol/ContractDeployer.json",
"sourceCodePath": "contracts-preprocessed/ContractDeployer.sol",
"bytecodeHash": "0x010004e5d1fbad7f0a7e656eaf78187f7c46b83122643853f132c61e8c431019",
"bytecodeHash": "0x010004e54b0c4edc582b3e4738b8ca035abed82245b1f7595446987da5c1366a",
"sourceCodeHash": "0xea9627fd5e6e905c268ba801e87bf2d9022bea036982d2b54425f2388b27e6b1"
},
{
"contractName": "Create2Factory",
"bytecodePath": "artifacts-zk/contracts-preprocessed/Create2Factory.sol/Create2Factory.json",
"sourceCodePath": "contracts-preprocessed/Create2Factory.sol",
"bytecodeHash": "0x0100004993b764833fd41d3324324b8a5408b83a79bca1c5f2218e25f6540e65",
"bytecodeHash": "0x01000049a87f580bf3b59ecac7590155eade469e0c58fc8b45009bcc3b3ee73e",
"sourceCodeHash": "0x217e65f55c8add77982171da65e0db8cc10141ba75159af582973b332a4e098a"
},
{
"contractName": "DefaultAccount",
"bytecodePath": "artifacts-zk/contracts-preprocessed/DefaultAccount.sol/DefaultAccount.json",
"sourceCodePath": "contracts-preprocessed/DefaultAccount.sol",
"bytecodeHash": "0x0100055dbf6d8f56faa896e4cc8e987aa24aaaee5fe85fc17243d908b9b74f69",
"bytecodeHash": "0x0100055dd4b983f1999e4591b19086b90a4c27d304424f2af57bea693526e4ca",
"sourceCodeHash": "0xeb5ac8fc83e1c8619db058a9b6973958bd6ed1b6f4938f8f4541d702f12e085d"
},
{
Expand All @@ -59,63 +59,63 @@
"contractName": "ImmutableSimulator",
"bytecodePath": "artifacts-zk/contracts-preprocessed/ImmutableSimulator.sol/ImmutableSimulator.json",
"sourceCodePath": "contracts-preprocessed/ImmutableSimulator.sol",
"bytecodeHash": "0x0100003b05ace5d6b4b0f296b19d72c048f79bdb8cb3ee647806b07f4e5bbcd8",
"bytecodeHash": "0x0100003b7ead50380da15f580d3d63bd1a917d9759f9eb645f3856cca8cd6a38",
"sourceCodeHash": "0x4212e99cbc1722887cfb5b4cb967f278ac8642834786f0e3c6f3b324a9316815"
},
{
"contractName": "KnownCodesStorage",
"bytecodePath": "artifacts-zk/contracts-preprocessed/KnownCodesStorage.sol/KnownCodesStorage.json",
"sourceCodePath": "contracts-preprocessed/KnownCodesStorage.sol",
"bytecodeHash": "0x0100006fa9bd44feb2af80203eb413026decdd7c1ccb52b539e7a8e8f2f42f29",
"bytecodeHash": "0x0100006fabb4505999bcc8584b9032107e196ee49caf4fa59ead9de8ddce81b9",
"sourceCodeHash": "0x8da495a9fc5aa0d7d20a165a4fc8bc77012bec29c472015ea5ecc0a2bd706137"
},
{
"contractName": "L1Messenger",
"bytecodePath": "artifacts-zk/contracts-preprocessed/L1Messenger.sol/L1Messenger.json",
"sourceCodePath": "contracts-preprocessed/L1Messenger.sol",
"bytecodeHash": "0x010001f5931d8a6310005972dbb01adb4211b29e5ad0a22c682d70f34c4b4e48",
"bytecodeHash": "0x010001f5b9a79d1092aced301458212706191fe3f09fe650ea42059762f96043",
"sourceCodeHash": "0xa275cd393320fba29e5c94f399c1ae6743b4221b05f13b395a00648dcedc2540"
},
{
"contractName": "L2BaseToken",
"bytecodePath": "artifacts-zk/contracts-preprocessed/L2BaseToken.sol/L2BaseToken.json",
"sourceCodePath": "contracts-preprocessed/L2BaseToken.sol",
"bytecodeHash": "0x010001052a89f68a2a3a2e4b4c67b740859d3fd95a0cde8317441047cf60db63",
"bytecodeHash": "0x01000105bbb0664a35ff550dd7a012b108ed5499545afc24f6fe1cc0bb877d6b",
"sourceCodeHash": "0x4cdafafd4cfdf410b31641e14487ea657be3af25e5ec1754fcd7ad67ec23d8be"
},
{
"contractName": "L2GenesisUpgrade",
"bytecodePath": "artifacts-zk/contracts-preprocessed/L2GenesisUpgrade.sol/L2GenesisUpgrade.json",
"sourceCodePath": "contracts-preprocessed/L2GenesisUpgrade.sol",
"bytecodeHash": "0x0100009732b021d0c301d499dde61446b021b62c0ea93c78f3e3cd8501bf09c5",
"sourceCodeHash": "0xcb190d0dfd41bbc809409a8aa04a4847b86edfe010b1d75e23b4c8d07b13a9d0"
"bytecodeHash": "0x010000d55f8396a49c313526d2605fb1eb49bb73da21db3782ad2d2763a033bc",
"sourceCodeHash": "0xaf71f2cf7638caa4fde97b6f7a7cafd7176807b155e4f6f70426753893e861c5"
},
{
"contractName": "MsgValueSimulator",
"bytecodePath": "artifacts-zk/contracts-preprocessed/MsgValueSimulator.sol/MsgValueSimulator.json",
"sourceCodePath": "contracts-preprocessed/MsgValueSimulator.sol",
"bytecodeHash": "0x0100005d2589089ef8e7f7af29293876bc496266bafaa2b704d09627bf271fbd",
"bytecodeHash": "0x0100005d0c18057e35ed3b801020df64001fb3cb091c17ed158c095dd973f1c7",
"sourceCodeHash": "0x4834adf62dbaefa1a1c15d36b5ad1bf2826e7d888a17be495f7ed4e4ea381aa8"
},
{
"contractName": "NonceHolder",
"bytecodePath": "artifacts-zk/contracts-preprocessed/NonceHolder.sol/NonceHolder.json",
"sourceCodePath": "contracts-preprocessed/NonceHolder.sol",
"bytecodeHash": "0x010000db506ed94921e7f4145fdacc21063000067bfe50e8af0f061519c04b6c",
"bytecodeHash": "0x010000db53a51b0d949381876c16a6af6d97de08384fea56d9f91d455f5395b3",
"sourceCodeHash": "0xaa2ed3a26af30032c00a612ac327e0cdf5288b7c932ae903462355f863f950cb"
},
{
"contractName": "PubdataChunkPublisher",
"bytecodePath": "artifacts-zk/contracts-preprocessed/PubdataChunkPublisher.sol/PubdataChunkPublisher.json",
"sourceCodePath": "contracts-preprocessed/PubdataChunkPublisher.sol",
"bytecodeHash": "0x010000494900cd3cd761e2676208fc86bc197228ce615e4665e5223bc31a9bd8",
"bytecodeHash": "0x010000498f6b6e03d364547f4fd97e62f375f517ed85e7d16e455e045dc53ba9",
"sourceCodeHash": "0x0da0d1279f906147a40e278f52bf3e4d5d4f24225935e4611cc04f4b387b5286"
},
{
"contractName": "SystemContext",
"bytecodePath": "artifacts-zk/contracts-preprocessed/SystemContext.sol/SystemContext.json",
"sourceCodePath": "contracts-preprocessed/SystemContext.sol",
"bytecodeHash": "0x010001a7d4d930ab07e144e2b7cf47ec3042b7c84bdfd6122ed13662e5ad790d",
"bytecodeHash": "0x010001a7e033078e28bd714d9d9d2ab88580d7e2ef66f4b680e100d4c4334efc",
"sourceCodeHash": "0x532a962209042f948e8a13e3f4cf12b6d53631e0fc5fa53083c7e2d8062771c0"
},
{
Expand Down Expand Up @@ -185,35 +185,35 @@
"contractName": "bootloader_test",
"bytecodePath": "bootloader/build/artifacts/bootloader_test.yul.zbin",
"sourceCodePath": "bootloader/build/bootloader_test.yul",
"bytecodeHash": "0x010003cbab1bb46695dfda825246f92120398b9573f355c1ff795c30184ac2b2",
"sourceCodeHash": "0x02b3e8d6c1d542a123d50aa6d04bc9736a92376e922c3304650001636e942a95"
"bytecodeHash": "0x010003cb4c28c983cc16f794dcd89109d240f1a04f1fcae37970ae58cced9a81",
"sourceCodeHash": "0xf06c8a7646d81dd5cf927da8000b034f8c7557559c56ea0fd68dba3bbf7c41d6"
},
{
"contractName": "fee_estimate",
"bytecodePath": "bootloader/build/artifacts/fee_estimate.yul.zbin",
"sourceCodePath": "bootloader/build/fee_estimate.yul",
"bytecodeHash": "0x0100095516027c64c3252e7193d9a6d6148100e2c7b9387f15d856e6713aa0e9",
"sourceCodeHash": "0x7a1d1d2a5534c659fcc343178e9f9d68ccb3f49ce8e54a81a6c20d15c46b2fd9"
"bytecodeHash": "0x01000955046ece262968fb084588494a52f7d8bd68357d4d95485f034472584a",
"sourceCodeHash": "0xb530b95021d38aa92a4e19b745ed445af7c345c03af3aa0cfb34bef9bf957693"
},
{
"contractName": "gas_test",
"bytecodePath": "bootloader/build/artifacts/gas_test.yul.zbin",
"sourceCodePath": "bootloader/build/gas_test.yul",
"bytecodeHash": "0x010008db6f54b61ecdb2c6a8f7575fa87c205402839318f429f6fa2beb8b00c2",
"sourceCodeHash": "0x37f3b77504a53d38ce29c8521264c10dc6f9bbc80f15814862a0e4a29f0f1612"
"bytecodeHash": "0x010008db2e24cda02f35f8a539845910a574745dc7f89daa9a696d2f1e54647c",
"sourceCodeHash": "0x0f35397fe492e462434164964fcd6e1d8c761d5c9029b9adb213e3afc5aa45f2"
},
{
"contractName": "playground_batch",
"bytecodePath": "bootloader/build/artifacts/playground_batch.yul.zbin",
"sourceCodePath": "bootloader/build/playground_batch.yul",
"bytecodeHash": "0x0100095b6cbccf0b0af548f8ccb027d02c90681ae9890a41a23ecf4b590e72c4",
"sourceCodeHash": "0x1c9b760bc9abd39183ecaf1397465c149c63c317e107214ac8e72737c49cd5da"
"bytecodeHash": "0x0100095b84a86487dfc9d5dd4e4c4f86e77129881ba1df92e79af7d638a66b82",
"sourceCodeHash": "0xb7c3772e37eafe28a260732adc129edb3cf4b0bd7bc83f7ff7f69282fe30f752"
},
{
"contractName": "proved_batch",
"bytecodePath": "bootloader/build/artifacts/proved_batch.yul.zbin",
"sourceCodePath": "bootloader/build/proved_batch.yul",
"bytecodeHash": "0x010008eb2ba1ec6290b553a401b9609363d9cc89796b3dd1aad8fb24cd88702e",
"sourceCodeHash": "0x3230de3b65d823d6f5142d7217a0597948d0f8744a8c1f0a9271b7eb40cfdf5b"
"bytecodeHash": "0x010008ebd07a24010d2cf7f75a10a73d387b84bd026586b6502e5059f4dbc475",
"sourceCodeHash": "0x1750c45068ba4911ed9dc145dffe3496c1f592262aef8c5cf248a0d9954f6260"
}
]
3 changes: 3 additions & 0 deletions system-contracts/contracts/Constants.sol
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {IContractDeployer} from "./interfaces/IContractDeployer.sol";
import {IKnownCodesStorage} from "./interfaces/IKnownCodesStorage.sol";
import {IImmutableSimulator} from "./interfaces/IImmutableSimulator.sol";
import {IBaseToken} from "./interfaces/IBaseToken.sol";
import {IBridgehub} from "./interfaces/IBridgehub.sol";
import {IL1Messenger} from "./interfaces/IL1Messenger.sol";
import {ISystemContext} from "./interfaces/ISystemContext.sol";
import {ICompressor} from "./interfaces/ICompressor.sol";
Expand Down Expand Up @@ -72,6 +73,8 @@ address constant MSG_VALUE_SYSTEM_CONTRACT = address(SYSTEM_CONTRACTS_OFFSET + 0
IBaseToken constant BASE_TOKEN_SYSTEM_CONTRACT = IBaseToken(address(SYSTEM_CONTRACTS_OFFSET + 0x0a));
IBaseToken constant REAL_BASE_TOKEN_SYSTEM_CONTRACT = IBaseToken(address(REAL_SYSTEM_CONTRACTS_OFFSET + 0x0a));

address constant L2_ASSET_ROUTER = address(USER_CONTRACTS_OFFSET + 0x03);
IBridgehub constant L2_BRIDDGE_HUB = IBridgehub(address(USER_CONTRACTS_OFFSET + 0x02));
IMessageRoot constant L2_MESSAGE_ROOT = IMessageRoot(address(USER_CONTRACTS_OFFSET + 0x05));

// Hardcoded because even for tests we should keep the address. (Instead `SYSTEM_CONTRACTS_OFFSET + 0x10`)
Expand Down
Loading

0 comments on commit a91bc7a

Please sign in to comment.