From af12443c37260046fb574c6064c14e7326b23084 Mon Sep 17 00:00:00 2001 From: Morty Date: Wed, 16 Apr 2025 05:41:30 +0800 Subject: [PATCH 01/31] feat: add deterministic scripts --- .DS_Store | Bin 0 -> 10244 bytes scripts/deterministic/Configuration.sol | 237 +++ scripts/deterministic/Constants.sol | 36 + scripts/deterministic/DeployScroll.s.sol | 1380 +++++++++++++++++ .../deterministic/DeterministicDeployment.sol | 236 +++ scripts/deterministic/GenerateConfigs.s.sol | 219 +++ scripts/deterministic/GenerateGenesis.s.sol | 250 +++ .../config/config-contracts.toml | 60 + scripts/deterministic/config/config.toml | 134 ++ .../MultipleVersionRollupVerifierSetOwner.sol | 16 + .../contracts/ProxyAdminSetOwner.sol | 12 + .../ScrollStandardERC20FactorySetOwner.sol | 12 + scripts/deterministic/shell/deploy.sh | 52 + scripts/deterministic/shell/update-configs.sh | 29 + volume/admin-system-backend-config.yaml | 60 + volume/balance-checker-config.yaml | 43 + volume/bridge-history-config.yaml | 59 + volume/chain-monitor-config.yaml | 59 + volume/config-contracts.toml | 58 + volume/config.toml | 111 ++ volume/coordinator-config.yaml | 41 + volume/frontend-config.yaml | 51 + volume/genesis.yaml | 119 ++ volume/rollup-config.yaml | 131 ++ volume/rollup-explorer-backend-config.yaml | 6 + 25 files changed, 3411 insertions(+) create mode 100644 .DS_Store create mode 100644 scripts/deterministic/Configuration.sol create mode 100644 scripts/deterministic/Constants.sol create mode 100644 scripts/deterministic/DeployScroll.s.sol create mode 100644 scripts/deterministic/DeterministicDeployment.sol create mode 100644 scripts/deterministic/GenerateConfigs.s.sol create mode 100644 scripts/deterministic/GenerateGenesis.s.sol create mode 100644 scripts/deterministic/config/config-contracts.toml create mode 100644 scripts/deterministic/config/config.toml create mode 100644 scripts/deterministic/contracts/MultipleVersionRollupVerifierSetOwner.sol create mode 100644 scripts/deterministic/contracts/ProxyAdminSetOwner.sol create mode 100644 scripts/deterministic/contracts/ScrollStandardERC20FactorySetOwner.sol create mode 100644 scripts/deterministic/shell/deploy.sh create mode 100644 scripts/deterministic/shell/update-configs.sh create mode 100644 volume/admin-system-backend-config.yaml create mode 100644 volume/balance-checker-config.yaml create mode 100644 volume/bridge-history-config.yaml create mode 100644 volume/chain-monitor-config.yaml create mode 100644 volume/config-contracts.toml create mode 100644 volume/config.toml create mode 100644 volume/coordinator-config.yaml create mode 100644 volume/frontend-config.yaml create mode 100644 volume/genesis.yaml create mode 100644 volume/rollup-config.yaml create mode 100644 volume/rollup-explorer-backend-config.yaml diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..9c55fc10700e4d925eda98385fc42ba336f15d5e GIT binary patch literal 10244 zcmeI1&r4KM6vxk-8Ffkt%i37bBO)YFQV16XO)?1*fn;Dokz50_nyyu?|pZ?cZkRt zD5rXfTq26%61Ke!H=iQ>;_{S`t~m?qpgmO~TBdC@I&+Xy?*3~wqZADplP#o11 zRyB3>7Q<1^QSa)wn6?#VRdaIm=EKpM9lb+wWOnrL%5ZXG%G$eCz$)NXKp+D1%2XZ`2GPK{7`(G;h*`J3wRjIZOHb@yl0_NBt~>{gPZVc*@2uZiPDv);$QoJWNX{1;9Y$hgPJk~D zwiM{bp_e&x4t)CPAI16B7yG_!PHH|+e|!uZM{+*ukgI=_q)K8e(_A--cAo3fvYtn*53WW~jKSfI366;7 zFlGL3uHQQ__~G8#6fVnI(H4{Q^f|Ea&Qa zQhnDO#Mee@C-DY%t9xENFKeAQbc@Oq7W?if17XP?D9 zNkN;Nl#@?o5I`wDXL@`3RvX1~rtY6ZU#A!3_yzXO$8#s~ocm1pq2O-8SSB&P87kDT zP2}Y6c_TRE+s=a*k3Ex&b^UO%;3&?c|A!2Nr$|Yz8Xejg0*ChS{F#Aj{;Ib&ZeFjE z@5mB5#rjvGd3^RXR1h;gL$gNi)6+Nnqd3PU0%3*Ziu3;q z!N33SK5$E96|f5YH3ghVd?Y@A?)2HZr{fT6TwG(gL=kZnWn~lGM2M)D$MN_>9LIO* wI=Q*l&oON)%F5`+WPF*|G)kJAF|D=CjbBd literal 0 HcmV?d00001 diff --git a/scripts/deterministic/Configuration.sol b/scripts/deterministic/Configuration.sol new file mode 100644 index 00000000..1d743cf2 --- /dev/null +++ b/scripts/deterministic/Configuration.sol @@ -0,0 +1,237 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity =0.8.24; + +import {Script} from "forge-std/Script.sol"; +import {VmSafe} from "forge-std/Vm.sol"; +import {stdToml} from "forge-std/StdToml.sol"; + +import {CONFIG_PATH, CONFIG_CONTRACTS_PATH} from "./Constants.sol"; + +/// @notice Configuration allows inheriting contracts to read the TOML configuration file. +abstract contract Configuration is Script { + using stdToml for string; + + /******************* + * State variables * + *******************/ + + string internal cfg; + string internal contractsCfg; + + /**************************** + * Configuration parameters * + ****************************/ + + // general + string internal L1_RPC_ENDPOINT; + string internal L2_RPC_ENDPOINT; + + string internal CHAIN_NAME_L1; + string internal CHAIN_NAME_L2; + uint64 internal CHAIN_ID_L1; + uint64 internal CHAIN_ID_L2; + + uint256 internal MAX_TX_IN_CHUNK; + uint256 internal MAX_BLOCK_IN_CHUNK; + uint256 internal MAX_BATCH_IN_BUNDLE; + uint256 internal MAX_L1_MESSAGE_GAS_LIMIT; + + uint256 internal L1_CONTRACT_DEPLOYMENT_BLOCK; + + bool internal TEST_ENV_MOCK_FINALIZE_ENABLED; + uint256 internal TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC; + + // accounts + uint256 internal DEPLOYER_PRIVATE_KEY; + uint256 internal L1_COMMIT_SENDER_PRIVATE_KEY; + uint256 internal L1_FINALIZE_SENDER_PRIVATE_KEY; + uint256 internal L1_GAS_ORACLE_SENDER_PRIVATE_KEY; + uint256 internal L2_GAS_ORACLE_SENDER_PRIVATE_KEY; + + address internal DEPLOYER_ADDR; + address internal L1_COMMIT_SENDER_ADDR; + address internal L1_FINALIZE_SENDER_ADDR; + address internal L1_GAS_ORACLE_SENDER_ADDR; + address internal L2_GAS_ORACLE_SENDER_ADDR; + + address internal OWNER_ADDR; + + address internal L2GETH_SIGNER_ADDRESS; + + // db + string internal ROLLUP_EXPLORER_BACKEND_DB_CONNECTION_STRING; + + // genesis + uint256 internal L2_MAX_ETH_SUPPLY; + uint256 internal L2_DEPLOYER_INITIAL_BALANCE; + uint256 internal L2_SCROLL_MESSENGER_INITIAL_BALANCE; + + // contracts + string internal DEPLOYMENT_SALT; + + address internal L1_FEE_VAULT_ADDR; + + // coordinator + string internal CHUNK_COLLECTION_TIME_SEC; + string internal BATCH_COLLECTION_TIME_SEC; + string internal BUNDLE_COLLECTION_TIME_SEC; + string internal COORDINATOR_JWT_SECRET_KEY; + + // frontend + string internal EXTERNAL_RPC_URI_L1; + string internal EXTERNAL_RPC_URI_L2; + string internal BRIDGE_API_URI; + string internal ROLLUPSCAN_API_URI; + string internal EXTERNAL_EXPLORER_URI_L1; + string internal EXTERNAL_EXPLORER_URI_L2; + string internal ADMIN_SYSTEM_DASHBOARD_URI; + string internal GRAFANA_URI; + + /********************** + * Internal interface * + **********************/ + + function readConfig() internal { + cfg = vm.readFile(CONFIG_PATH); + contractsCfg = vm.readFile(CONFIG_CONTRACTS_PATH); + + L1_RPC_ENDPOINT = cfg.readString(".general.L1_RPC_ENDPOINT"); + L2_RPC_ENDPOINT = cfg.readString(".general.L2_RPC_ENDPOINT"); + + CHAIN_NAME_L1 = cfg.readString(".general.CHAIN_NAME_L1"); + CHAIN_NAME_L2 = cfg.readString(".general.CHAIN_NAME_L2"); + CHAIN_ID_L1 = uint64(cfg.readUint(".general.CHAIN_ID_L1")); + CHAIN_ID_L2 = uint64(cfg.readUint(".general.CHAIN_ID_L2")); + + MAX_TX_IN_CHUNK = cfg.readUint(".rollup.MAX_TX_IN_CHUNK"); + MAX_BLOCK_IN_CHUNK = cfg.readUint(".rollup.MAX_BLOCK_IN_CHUNK"); + MAX_BATCH_IN_BUNDLE = cfg.readUint(".rollup.MAX_BATCH_IN_BUNDLE"); + MAX_L1_MESSAGE_GAS_LIMIT = cfg.readUint(".rollup.MAX_L1_MESSAGE_GAS_LIMIT"); + + L1_CONTRACT_DEPLOYMENT_BLOCK = cfg.readUint(".general.L1_CONTRACT_DEPLOYMENT_BLOCK"); + + TEST_ENV_MOCK_FINALIZE_ENABLED = cfg.readBool(".rollup.TEST_ENV_MOCK_FINALIZE_ENABLED"); + TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC = cfg.readUint(".rollup.TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC"); + + DEPLOYER_PRIVATE_KEY = cfg.readUint(".accounts.DEPLOYER_PRIVATE_KEY"); + L1_COMMIT_SENDER_PRIVATE_KEY = cfg.readUint(".accounts.L1_COMMIT_SENDER_PRIVATE_KEY"); + L1_FINALIZE_SENDER_PRIVATE_KEY = cfg.readUint(".accounts.L1_FINALIZE_SENDER_PRIVATE_KEY"); + L1_GAS_ORACLE_SENDER_PRIVATE_KEY = cfg.readUint(".accounts.L1_GAS_ORACLE_SENDER_PRIVATE_KEY"); + L2_GAS_ORACLE_SENDER_PRIVATE_KEY = cfg.readUint(".accounts.L2_GAS_ORACLE_SENDER_PRIVATE_KEY"); + + DEPLOYER_ADDR = cfg.readAddress(".accounts.DEPLOYER_ADDR"); + L1_COMMIT_SENDER_ADDR = cfg.readAddress(".accounts.L1_COMMIT_SENDER_ADDR"); + L1_FINALIZE_SENDER_ADDR = cfg.readAddress(".accounts.L1_FINALIZE_SENDER_ADDR"); + L1_GAS_ORACLE_SENDER_ADDR = cfg.readAddress(".accounts.L1_GAS_ORACLE_SENDER_ADDR"); + L2_GAS_ORACLE_SENDER_ADDR = cfg.readAddress(".accounts.L2_GAS_ORACLE_SENDER_ADDR"); + + OWNER_ADDR = cfg.readAddress(".accounts.OWNER_ADDR"); + + L2GETH_SIGNER_ADDRESS = cfg.readAddress(".sequencer.L2GETH_SIGNER_ADDRESS"); + + ROLLUP_EXPLORER_BACKEND_DB_CONNECTION_STRING = cfg.readString(".db.ROLLUP_EXPLORER_DB_CONNECTION_STRING"); + + L2_MAX_ETH_SUPPLY = cfg.readUint(".genesis.L2_MAX_ETH_SUPPLY"); + L2_DEPLOYER_INITIAL_BALANCE = cfg.readUint(".genesis.L2_DEPLOYER_INITIAL_BALANCE"); + L2_SCROLL_MESSENGER_INITIAL_BALANCE = L2_MAX_ETH_SUPPLY - L2_DEPLOYER_INITIAL_BALANCE; + + DEPLOYMENT_SALT = cfg.readString(".contracts.DEPLOYMENT_SALT"); + + L1_FEE_VAULT_ADDR = cfg.readAddress(".contracts.L1_FEE_VAULT_ADDR"); + + CHUNK_COLLECTION_TIME_SEC = cfg.readString(".coordinator.CHUNK_COLLECTION_TIME_SEC"); + BATCH_COLLECTION_TIME_SEC = cfg.readString(".coordinator.BATCH_COLLECTION_TIME_SEC"); + BUNDLE_COLLECTION_TIME_SEC = cfg.readString(".coordinator.BUNDLE_COLLECTION_TIME_SEC"); + COORDINATOR_JWT_SECRET_KEY = cfg.readString(".coordinator.COORDINATOR_JWT_SECRET_KEY"); + + EXTERNAL_RPC_URI_L1 = cfg.readString(".frontend.EXTERNAL_RPC_URI_L1"); + EXTERNAL_RPC_URI_L2 = cfg.readString(".frontend.EXTERNAL_RPC_URI_L2"); + BRIDGE_API_URI = cfg.readString(".frontend.BRIDGE_API_URI"); + ROLLUPSCAN_API_URI = cfg.readString(".frontend.ROLLUPSCAN_API_URI"); + EXTERNAL_EXPLORER_URI_L1 = cfg.readString(".frontend.EXTERNAL_EXPLORER_URI_L1"); + EXTERNAL_EXPLORER_URI_L2 = cfg.readString(".frontend.EXTERNAL_EXPLORER_URI_L2"); + ADMIN_SYSTEM_DASHBOARD_URI = cfg.readString(".frontend.ADMIN_SYSTEM_DASHBOARD_URI"); + GRAFANA_URI = cfg.readString(".frontend.GRAFANA_URI"); + + runSanityCheck(); + } + + /// @dev Ensure that `addr` is not the zero address. + /// This helps catch bugs arising from incorrect deployment order. + function notnull(address addr) internal pure returns (address) { + require(addr != address(0), "null address"); + return addr; + } + + function tryGetOverride(string memory name) internal returns (address) { + address addr; + string memory key; + if (keccak256(abi.encodePacked(name)) == keccak256(abi.encodePacked("L1_GAS_TOKEN"))) { + key = string(abi.encodePacked(".gas-token.", name)); + } else { + key = string(abi.encodePacked(".contracts.overrides.", name)); + } + + if (!vm.keyExistsToml(cfg, key)) { + return address(0); + } + + addr = cfg.readAddress(key); + + if (addr.code.length == 0) { + (VmSafe.CallerMode callerMode, , ) = vm.readCallers(); + + // if we're ready to start broadcasting transactions, then we + // must ensure that the override contract has been deployed. + if (callerMode == VmSafe.CallerMode.Broadcast || callerMode == VmSafe.CallerMode.RecurrentBroadcast) { + revert( + string( + abi.encodePacked( + "[ERROR] override ", + name, + " = ", + vm.toString(addr), + " not deployed in broadcast mode" + ) + ) + ); + } + } + + return addr; + } + + /********************* + * Private functions * + *********************/ + + function runSanityCheck() private view { + verifyAccount("DEPLOYER", DEPLOYER_PRIVATE_KEY, DEPLOYER_ADDR); + verifyAccount("L1_COMMIT_SENDER", L1_COMMIT_SENDER_PRIVATE_KEY, L1_COMMIT_SENDER_ADDR); + verifyAccount("L1_FINALIZE_SENDER", L1_FINALIZE_SENDER_PRIVATE_KEY, L1_FINALIZE_SENDER_ADDR); + verifyAccount("L1_GAS_ORACLE_SENDER", L1_GAS_ORACLE_SENDER_PRIVATE_KEY, L1_GAS_ORACLE_SENDER_ADDR); + verifyAccount("L2_GAS_ORACLE_SENDER", L2_GAS_ORACLE_SENDER_PRIVATE_KEY, L2_GAS_ORACLE_SENDER_ADDR); + } + + function verifyAccount( + string memory name, + uint256 privateKey, + address addr + ) private pure { + if (vm.addr(privateKey) != addr) { + revert( + string( + abi.encodePacked( + "[ERROR] ", + name, + "_ADDR (", + vm.toString(addr), + ") does not match ", + name, + "_PRIVATE_KEY" + ) + ) + ); + } + } +} diff --git a/scripts/deterministic/Constants.sol b/scripts/deterministic/Constants.sol new file mode 100644 index 00000000..d25df143 --- /dev/null +++ b/scripts/deterministic/Constants.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity =0.8.24; + +/// @dev The default deterministic deployment salt prefix. +string constant DEFAULT_DEPLOYMENT_SALT = "ScrollStack"; + +/// @dev The address of DeterministicDeploymentProxy. +/// See https://github.com/Arachnid/deterministic-deployment-proxy. +address constant DETERMINISTIC_DEPLOYMENT_PROXY_ADDR = 0x4e59b44847b379578588920cA78FbF26c0B4956C; + +/// @dev The default minimum withdraw amount configured on L2TxFeeVault. +uint256 constant FEE_VAULT_MIN_WITHDRAW_AMOUNT = 1 ether; + +// input files +string constant CONFIG_PATH = "./contracts/scroll-contracts/scripts/deterministic/config/config.toml"; + +// output files +string constant CONFIG_CONTRACTS_PATH = "./contracts/scroll-contracts/scripts/deterministic/config/config-contracts.toml"; +string constant GENESIS_ALLOC_JSON_PATH = "./config/__genesis-alloc.json"; +string constant GENESIS_JSON_PATH = "./config/genesis/genesis.yaml"; +string constant ROLLUP_CONFIG_PATH = "./config/rollup-relayer/config.json.template"; +string constant COORDINATOR_API_CONFIG_PATH = "./config/coordinator-api/config.json.template"; +string constant COORDINATOR_CRON_CONFIG_PATH = "./config/coordinator-cron/config.json.template"; +string constant CHAIN_MONITOR_CONFIG_PATH = "./config/chain-monitorv2/config.json.template"; +string constant BRIDGE_HISTORY_API_CONFIG_PATH = "./config/bridge-historyv2-api/config.json.template"; +string constant BRIDGE_HISTORY_FETCHER_CONFIG_PATH = "./config/bridge-historyv2-fetcher/config.json.template"; +string constant BALANCE_CHECKER_CONFIG_PATH = "./config/balance-checker/config.json.template"; +string constant ROLLUP_EXPLORER_BACKEND_CONFIG_PATH = "./config/rollup-explorer-backend/config.json.template"; +string constant ADMIN_SYSTEM_BACKEND_CONFIG_PATH = "./config/scroll-admin-backend/config.json.template"; +string constant ADMIN_SYSTEM_CRON_CONFIG_PATH = "./config/scroll-admin-cron/config.json.template"; + +// plonk verifier configs +bytes32 constant V4_VERIFIER_DIGEST = 0x0a1904dbfff4614fb090b4b3864af4874f12680c32f07889e9ede8665097e5ec; + +// plonk verifier v0.13.1 creation code +bytes constant PLONK_VERIFIER_CREATION_CODE = hex"62000025565b60006040519050600081036200001a57606090505b818101604052919050565b6136a3620000338162000005565b816200003f82398181f3fe60017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd477f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610151565b60007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4782107f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47841080821692505050600082146000841480821780158481169450505050507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478384097f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478384097f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478482097f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47600382088381148581169550505050505092915050565b8060003506602052806020350660405280604035066060528060603506608052806080350660a0528060a0350660c0528060c0350660e0528060e0350661010052806101003506610120528061012035066101405280610140350661016052806101603506610180528061018035066101a052806101a035066101c052806101c035066101e052806101e0350661020052806102003506610220528061022035066102405280610240350661026052806102603506610280528061028035066102a052806102a035066102c052806102c035066102e052806102e0350661030052806103003506610320527f083d7f8552bdf1dd98458c19d469c458809424d40c483abc2e528b75a6f0f1466000526103203580610340526103403580610360528461027d8284610048565b169450505061038060002061038052610380518181066103a052806103c0525061036035806103e052610380358061040052846102ba8284610048565b169450505060606103c02061042052610420518181066104405280610460525060016104805360216104602061048052610480518181066104a052806104c052506103a035806104e0526103c0358061050052846103188284610048565b16945050506103e03580610520526104003580610540528461033a8284610048565b16945050506104203580610560526104403580610580528461035c8284610048565b169450505060e06104c0206105a0526105a0518181066105c052806105e05250610460358061060052610480358061062052846103998284610048565b16945050506104a03580610640526104c0358061066052846103bb8284610048565b16945050506104e035806106805261050035806106a052846103dd8284610048565b169450505061052035806106c05261054035806106e052846103ff8284610048565b16945050506101206105e0206107005261070051818106610720528061074052508061056035066107605280610580350661078052806105a035066107a052806105c035066107c052806105e035066107e0528061060035066108005280610620350661082052806106403506610840528061066035066108605280610680350661088052806106a035066108a052806106c035066108c052806106e035066108e052806107003506610900528061072035066109205280610740350661094052806107603506610960526102406107402061098052610980518181066109a052806109c0525060016109e05360216109c0206109e0526109e051818106610a005280610a2052506107803580610a40526107a03580610a6052846105248284610048565b16945050506060610a2020610a8052610a8051818106610aa05280610ac052506107c03580610ae0526107e03580610b0052846105618284610048565b169450505060205160405160581b8101905060605160b01b8101905080610b205260805160a05160581b8101905060c05160b01b8101905080610b4052846105a98284610048565b169450505060e0516101005160581b810190506101205160b01b8101905080610b6052610140516101605160581b810190506101805160b01b8101905080610b8052846105f68284610048565b169450505080610720516107205109610ba05280610ba051610ba05109610bc05280610bc051610bc05109610be05280610be051610be05109610c005280610c0051610c005109610c205280610c2051610c205109610c405280610c4051610c405109610c605280610c6051610c605109610c805280610c8051610c805109610ca05280610ca051610ca05109610cc05280610cc051610cc05109610ce05280610ce051610ce05109610d005280610d0051610d005109610d205280610d2051610d205109610d405280610d4051610d405109610d605280610d6051610d605109610d805280610d8051610d805109610da05280610da051610da05109610dc05280610dc051610dc05109610de05280610de051610de05109610e005280610e0051610e005109610e205280610e2051610e205109610e405280610e4051610e405109610e605280610e6051610e605109610e805280610e8051610e805109610ea05280610ea051610ea05109610ec052807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000610ec05108610ee052807f30644e66c81e03716be83b486d6feabcc7ddd0fe6cbf5e72d585d142f7829b05610ee05109610f0052807f2d19f86a2342079b8c1a6417471d461040256eaa689be51f08e6a92e1243ce65610f005109610f2052807f034a5608bdef988e2c35e19f3a64124ce80e799e111d8b723afb4c65ddbc319c6107205108610f4052807f24a1fcd63e9f03b27281db85fe631ec8e5c466f8178a4ee94d4942b7ccd90e1c610f005109610f6052807f0bc2519ca2929c7745ce6a30831e3994426f8150622f21a7f698b2dc2326f1e56107205108610f8052807f0d5eb4c216db2c3262de3f6a2ef71a9be95ff21a7a1a50ed069d6131e7d54e5f610f005109610fa052807f230599b0ca5673f75572064c528a3dc13ed3f62dff9f1fa43d449462082ab1a26107205108610fc052807f26501ebfe559ea5826f023d3e76e4b66f170cd940408eb5590a4075c80b498d6610f005109610fe052807f0a142fb2fbd7b5d1916021e29a130cf636c31ab475b0853bb33dee376f4b672b610720510861100052807f082a7bd4c0a7e4352229d332c27a160da18f0d7c651f3047df41b80345532f6e610f00510961102052807f2839d29e2089bbf496267283bf07424f86a4dacc149a404964a03d90aaacd093610720510861104052807f19277f31ecb5bfe8604677099c09556812b0b5c50cceb2b584098183a5a6c5c8610f00510961106052807f173ccf40f47be0415809ceace57802f5158332836ceabddbbfd874104a593a39610720510861108052807f20bab6e5f766b4edf82399e9c5ff0e40d4b6875321a3d8020e18521d8f5c7241610f0051096110a052807f0fa9978ce9caeb3bc02cabccbb824a1c537d60f55815988f35c9a37660a38dc061072051086110c052806001610f0051096110e052807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000610720510861110052807f1dba8b5bdd64ef6ce29a9039aca3c0e524395c43b9227b96c75090cc6cc7ec97610f00510961112052807f12a9c31703ccb0bcd5b5b57cd4dd977803fa8c04c096f4fa7c9164c78338136a610720510861114052807f0d94d63997367c97a8ed16c17adaae39262b9af83acb9e003f94c217303dd160610f00510961116052807f22cf783949fb23920f632ef506a6aa2402084d503eedd291044d337cbfc22ea1610720510861118052807f303a348fae5a4f041e5c056919bc140f68267e2fb55a522282b02d6a100e01a0610f0051096111a052807e2a19e332d7512599f4404d67c5444dc00d6a18c45f1e6ec131c829dff1fe6161072051086111c052807f1951441010b2b95a6e47a6075066a50a036f5ba978c050f2821df86636c0facb610f0051096111e052807f17130a62d07ee6cf4a089faf311ab35324c48c9f00f91f9ec1c3fd2db93f0536610720510861120052807f04fe6e3fa02c3830525c10d7bbf567639bfc836de8fe4e471c889a638d381c71610f00510961122052807f2b65e033410567f965f434dec58bf0f98c3764da90bb224a27595b3062c7e390610720510861124052807f24db2e49a2c215211bae763372d0d8b05d0140adbc6d9d63f2a226fb711fd873610f00510961126052807f0b8920293e6f8b089ca1cf830eb07faccb32a79abd4bd32d513fce987ee0278e610720510861128052807f0f6afbf59e2fef78443acf353ca6d17cfc07ebc6343141cd56a9102bd4864004610f0051096112a052807f20f9527d4301b0b17415768144da86e02c2bfc8245882ec3ed38e5681b79bffd61072051086112c052807f1283ba6f4b7b1a76ba2008fe823128bea4adb9269cbfd7c41c223be65bc60863610f0051096112e052807f1de0940395b685b2fe303cb7ff502f9e83862f21dcf998cd27bfb9ad9439f79e610720510861130052807f10e6c9ec7941500e1b1095e82fb0034bd9e95777ca9ae5ce296eadc089110518610f00510961132052807f1f7d848667f0501b9d3fafce51d155114e4a90d0af1e8ac31a7347d366eefae9610720510861134052807f25ad5db2a6bf79a14fd0d2ffd3d0927af7fdd30bce40f88fb46774fd262d7673610f00510961136052807f0ab6f0c03a722688687f72b6adb0c5e23036153cab7878018f7a8096c9d2898e610720510861138052807f2cd3ee06866876806a4a382f7a95576f34fd9ce6aad8bf350670ed33fe3259ac610f0051096113a052807f0390606c5ac929a94e060d8706ec00edf3364b61cee0b15c3d71085ff1cda65561072051086113c052807f2f835d9f4207df4efa4ffa0b2bbf9a4f54221c57cc506b7a5f8dae90bd2e3d0a610f0051096113e052807ee0f0d39f29c0dabe004bab55c1be0dd411cbf0ad690516e454470332d1c2f7610720510861140052807f30526acf1fa80f36309d80530d854ae7d52fc97bcb8d0a6a2a7f852e7b6e9d79610f00510961142052807e11e3a3c18990f387b2c56373fc0d7553041eccae2c66271962706574916288610720510861144052807f0af04af9c243a8b4b8767330b8dae01f562d7641cdf0a0c4d288e395c0aebb72610f00510961146052807f257403791eedf774ffd9d285c8a6783dd2067206abc8cfcc715911fe2f51448f610720510861148052807f2387d5be5175ba27fd2f8779b460ffdd830e06cd2f6bcf30c3715fbed25b1b67610f0051096114a052807f0cdc78b48fbbe601bb20be3ccd20587fa525e17b4a4da160807095d51da4e49a61072051086114c052807f18c95f1ae6514e11a1b30fd7923947c5ffcec5347f16e91b4dd654168326bede610f0051096114e052807f179aef57fae05218169d35deef48109728652313faa28775f60ba17d6cd94123610720510861150052807f1ed7bccd53b52d451436ae36d9f0225657083d7e909edb5560d7ea488aebe0d1610f00510961152052807f118c91a58d7c72e4a419977fa7913606d12baac9e91a953be30a0b4b65141f30610720510861154052807f0ba3551f265c0941ccb3766d47b26720ad620a597137ff3c84310bd3e28e26c9610f00510961156052807f24c0f953bad596e7eb9ccf4939cef13c7ad1ddef08817154bfb0e9c00d71d938610720510861158052807f0803f4ae22d04b4c9c282c70c843e12bfb2d84b89bd7ef84dc3b90d60053b1c8610f0051096115a052807f286059c4be6154dd1c281945b93d77312d06638fdde1810c67a664bdefac4e3961072051086115c052807f29aa84e8187de51daa6de67f44fe365fbb789d1e5f97bc95844628487ebd3a0d610f0051096115e052807f06b9c98ac8b3bb0c0de25f373c8321fd6cbb4b2a1a21b3fbbf9bcd4b7142c5f4610720510861160052807f0e4fc6c7e1947e44222db52506e305b8a9ad70f6a834db5a4778d4a30f1c6f92610f00510961162052807f221487aaff9d21e5962290917a9e52a47e867751d1849536fc6920f0e0e3906f610720510861164052807f20816bee57855658ecd8a204faf6bced826a725b63c6a1a388b4609a2478809f610f00510961166052807f0fe2e28489ac49d0cb77a3b1868a9b6fa5c975ed15f2ceedbb2d94f9cb877f62610720510861168052807f0d44b8855e09d5ae332469459793c1444814f6d137f9e93e780bd41c97e37caa610f0051096116a052807f231f95ed8327ca7b852bdc70e9ed9718e01ef17741bf8752cbd62177581c835761072051086116c052807f07fe49da5568a43070d955e0d212d956e1ff8abd41a763c737e292bee0476699610f0051096116e052807f286604988bc8fbf94776efd5af6e7f0646345d8b38120cca0bff62d50fb89968610720510861170052610f40518181610f805109905080611720528181610fc051099050806117405281816110005109905080611760528181611040510990508061178052818161108051099050806117a05281816110c051099050806117c052818161110051099050806117e0528181611140510990508061180052818161118051099050806118205281816111c051099050806118405281816112005109905080611860528181611240510990508061188052818161128051099050806118a05281816112c051099050806118c052818161130051099050806118e0528181611340510990508061190052818161138051099050806119205281816113c051099050806119405281816114005109905080611960528181611440510990508061198052818161148051099050806119a05281816114c051099050806119c052818161150051099050806119e05281816115405109905080611a005281816115805109905080611a205281816115c05109905080611a405281816116005109905080611a605281816116405109905080611a805281816116805109905080611aa05281816116c05109905080611ac05281816117005109905080611ae0528181610ee05109905080611b0052506020611b40526020611b60526020611b8052611b0051611ba0527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff611bc0527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001611be0528260016020611b2060c0611b4060055afa14169250611b20516000610ee05190508282611ae05109610ee0528282820991506117005190508282611ac05109611700528282820991506116c05190508282611aa051096116c0528282820991506116805190508282611a805109611680528282820991506116405190508282611a605109611640528282820991506116005190508282611a405109611600528282820991506115c05190508282611a2051096115c0528282820991506115805190508282611a0051096115805282828209915061154051905082826119e051096115405282828209915061150051905082826119c05109611500528282820991506114c051905082826119a051096114c0528282820991506114805190508282611980510961148052828282099150611440519050828261196051096114405282828209915061140051905082826119405109611400528282820991506113c0519050828261192051096113c052828282099150611380519050828261190051096113805282828209915061134051905082826118e051096113405282828209915061130051905082826118c05109611300528282820991506112c051905082826118a051096112c0528282820991506112805190508282611880510961128052828282099150611240519050828261186051096112405282828209915061120051905082826118405109611200528282820991506111c0519050828261182051096111c052828282099150611180519050828261180051096111805282828209915061114051905082826117e051096111405282828209915061110051905082826117c05109611100528282820991506110c051905082826117a051096110c052828282099150611080519050828261178051096110805282828209915061104051905082826117605109611040528282820991506110005190508282611740510961100052828282099150610fc051905082826117205109610fc052828282099150610f805190508282610f405109610f805282828209915081610f4052505080610f4051610f205109611c005280610f8051610f605109611c205280610fc051610fa05109611c40528061100051610fe05109611c605280611040516110205109611c805280611080516110605109611ca052806110c0516110a05109611cc05280611100516110e05109611ce05280611140516111205109611d005280611180516111605109611d2052806111c0516111a05109611d405280611200516111e05109611d605280611240516112205109611d805280611280516112605109611da052806112c0516112a05109611dc05280611300516112e05109611de05280611340516113205109611e005280611380516113605109611e2052806113c0516113a05109611e405280611400516113e05109611e605280611440516114205109611e805280611480516114605109611ea052806114c0516114a05109611ec05280611500516114e05109611ee05280611540516115205109611f005280611580516115605109611f2052806115c0516115a05109611f405280611600516115e05109611f605280611640516116205109611f805280611680516116605109611fa052806116c0516116a05109611fc05280611700516116e05109611fe05280602051611ce05109818183604051611d005109089050818183606051611d205109089050818183608051611d40510908905081818360a051611d60510908905081818360c051611d80510908905081818360e051611da0510908905081818361010051611dc0510908905081818361012051611de0510908905081818361014051611e00510908905081818361016051611e20510908905081818361018051611e4051090890508181836101a051611e6051090890508181836101c051611e8051090890508181836101e051611ea0510908905081818361020051611ec0510908905081818361022051611ee0510908905081818361024051611f00510908905081818361026051611f20510908905081818361028051611f4051090890508181836102a051611f6051090890508181836102c051611f8051090890508181836102e051611fa0510908905081818361030051611fc0510908905081818361032051611fe0510908905080612000525080610780516107a05109612020528061202051610760510861204052806107c0518203612040510861206052806108205161206051096120805280612080516105c051096120a052806108e05182036001086120c05280611ce0516120c051096120e052806120e0516120a051086121005280612100516105c0510961212052806108e0516108e0510961214052806108e051820361214051086121605280611c0051612160510961218052806121805161212051086121a052806121a0516105c051096121c05280611c005182036001086121e05280611c4051611c2051086122005280611c605161220051086122205280611c805161222051086122405280611ca05161224051086122605280611cc051612260510861228052806122805182036121e051086122a052806104405161088051096122c052806122c0516107e051086122e052806104a0516122e051086123005280610440516108a05109612320528061232051610760510861234052806104a051612340510861236052806123005161236051096123805280610440516108c051096123a052806123a05161200051086123c052806104a0516123c051086123e05280612380516123e05109612400528061090051612400510961242052806104405160010961244052806124405161072051096124605280612460516107e0510861248052806104a05161248051086124a05280610440517f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2096124c052806124c05161072051096124e052806124e051610760510861250052806104a051612500510861252052806124a05161252051096125405280610440517f13b360d4e82fe915fed16081038f98c211427b87a281bd733c277dbadf10372b09612560528061256051610720510961258052806125805161200051086125a052806104a0516125a051086125c05280612540516125c051096125e052806108e0516125e051096126005280612600518203612420510861262052806122a05161262051096126405280612640516121c051086126605280612660516105c051096126805280611ce05161092051096126a052806126a05161268051086126c052806126c0516105c051096126e05280611c005161092051096127005280612700516126e051086127205280612720516105c051096127405280610440516108005108612760528061084051610760510961278052806104405161278051086127a05280612760516127a051096127c0528061092051820361094051086127e052806127c0516127e051096128005280610960516127a05109612820528061282051820361276051086128405280612840518203612800510861286052806122a051612860510961288052806128805161274051086128a05280610ec051610ec051096128c05280610ec0516128c051096128e05280610ec0516128e051096129005280610ec05160010961292052806128c05160010961294052806128e0516001096129605280610ee0516128a05109612980528061072051610ba051096129a05280600161072051096129c052806129c0518203610aa051086129e052807f0d94d63997367c97a8ed16c17adaae39262b9af83acb9e003f94c217303dd1606107205109612a005280612a00518203610aa05108612a2052807f1dba8b5bdd64ef6ce29a9039aca3c0e524395c43b9227b96c75090cc6cc7ec976107205109612a405280612a40518203610aa05108612a6052807f303a348fae5a4f041e5c056919bc140f68267e2fb55a522282b02d6a100e01a06107205109612a805280612a80518203610aa05108612aa052807f2eedbf565be4b0b88a0e251d750f7559486d77bea4d5c9612ce3041295d380d5610aa051098181837f01768f1c854cef712e4220990c71e303dfc67089d4e3a73016fef1815a2c7f2c610720510908905080612ac05250807f0cf547ca658485dd9a20bd27b080d3147ec1caa826e725f7f7989fc9668dd16f610aa051098181837f077ebe9a531776ef7c9e90d5a0685181f70e74298eca38a6c92d84d4c0457ceb610720510908905080612ae05250807f077ebe9a531776ef7c9e90d5a0685181f70e74298eca38a6c92d84d4c0457ceb610aa051098181837e32f4eea6716d08d38119c3d378a36e865ffacfa73eb2357603f3f3368c88c6610720510908905080612b005250807f0d71dfba734c88cf774db4e0e4f959cb98acfbbb1fc789e5167bbca1fcafd24e610aa051098181837f25ea65fea4371c04dd1eaf23d69f2e0f9524ef5b9845d01cdb218e89a8052321610720510908905080612b205250806129e051600109612b405280612a6051612b405109612b605280612a2051612b605109612b805280612aa051612b805109612ba052807f12a9c31703ccb0bcd5b5b57cd4dd977803fa8c04c096f4fa7c9164c78338136b610aa051098181837f1dba8b5bdd64ef6ce29a9039aca3c0e524395c43b9227b96c75090cc6cc7ec96610720510908905080612bc05250807f1dba8b5bdd64ef6ce29a9039aca3c0e524395c43b9227b96c75090cc6cc7ec96610aa051098181837f1025b522462e72d539ad797831c912abfe0dc14b7e56dd9687bbceb53c8a1b37610720510908905080612be05250806001610aa051098181837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000610720510908905080612c005250612ac0518181612ae05109905080612c20528181612b005109905080612c40528181612b205109905080612c60528181612bc05109905080612c80528181612be05109905080612ca0528181612b605109905080612cc0528181612c005109905080612ce0528181612b405109905080612d0052506020612d40526020612d60526020612d8052612d0051612da0527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff612dc0527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001612de0528260016020612d2060c0612d4060055afa14169250612d20516000612b405190508282612ce05109612b4052828282099150612c005190508282612cc05109612c0052828282099150612b605190508282612ca05109612b6052828282099150612be05190508282612c805109612be052828282099150612bc05190508282612c605109612bc052828282099150612b205190508282612c405109612b2052828282099150612b005190508282612c205109612b0052828282099150612ae05190508282612ac05109612ae05282828209915081612ac0525050612ac0518181612ae0510890508181612b00510890508181612b205108905080612e00525080612b6051612ba05109612e2052612bc0518181612be05108905080612e40525080612b4051612ba05109612e6052612c005180612e805250612e00518181612e405109905080612ea0528181612e805109905080612ec052506020612f00526020612f20526020612f4052612ec051612f60527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff612f80527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001612fa0528260016020612ee060c0612f0060055afa14169250612ee0516000612e805190508282612ea05109612e8052828282099150612e405190508282612e005109612e405282828209915081612e0052505080612e4051612e205109612fc05280612e8051612e605109612fe052806109a0516109a0510961300052806109a051613000510961302052806109a051613020510961304052806109a051613040510961306052806109a051613060510961308052806109a05161308051096130a052806109a0516130a051096130c052806109a0516130c051096130e052806109a0516130e051096131005280610a0051610a0051096131205280610a005161312051096131405280612ac0516107605109818183612ae0516107805109089050818183612b00516107a05109089050818183612b20516107c0510908905080613160525080612e0051613160510961318052806001613180518303096131a0528060016131a051096131c05280612e20516001096131e05280612bc0516108e05109818183612be051610900510908905080613200525080612fc05161320051096132205280600161322051830309613240528060016131e051096132605280612bc0516109205109818183612be051610940510908905080613280525080612fc05161328051096132a052806109a0516132a0518303096132c052806109a0516131e051096132e052806132c05161324051086133005280610a005161330051096133205280610a005161326051096133405280610a00516132e051096133605280613320516131c051086133805280612e60516001096133a05280612c00516109605109806133c0525080612fe0516133c051096133e0528060016133e051830309613400528060016133a051096134205280612c00516107e0510980613440525080612fe051613440510961346052806109a0516134605183030961348052806109a0516133a051096134a052806134805161340051086134c05280612c00516108005109806134e0525080612fe0516134e05109613500528061300051613500518303096135205280613000516133a051096135405280613520516134c051086135605280612c0051610820510980613580525080612fe05161358051096135a05280613020516135a0518303096135c05280613020516133a051096135e052806135c05161356051086136005280612c0051610840510980613620525080612fe0516136205109613640528061304051613640518303096136605280613040516133a0510961368052806136605161360051086136a05280612c00516108805109806136c0525080612fe0516136c051096136e05280613060516136e0518303096137005280613060516133a051096137205280613700516136a051086137405280612c00516108a0510980613760525080612fe0516137605109613780528061308051613780518303096137a05280613080516133a051096137c052806137a05161374051086137e05280612c00516108c0510980613800525080612fe051613800510961382052806130a0516138205183030961384052806130a0516133a051096138605280613840516137e051086138805280612e605161292051096138a05280612e605161294051096138c05280612e605161296051096138e05280612c0051612980510980613900525080612fe051613900510961392052806130c0516139205183030961394052806130c0516133a0510961396052806130c0516138a0510961398052806130c0516138c051096139a052806130c0516138e051096139c052806139405161388051086139e05280612c0051610860510980613a00525080612fe051613a005109613a2052806130e051613a2051830309613a4052806130e0516133a05109613a605280613a40516139e05108613a80528061312051613a805109613aa05280613120516134205109613ac05280613120516134a05109613ae05280613120516135405109613b005280613120516135e05109613b205280613120516136805109613b405280613120516137205109613b605280613120516137c05109613b805280613120516138605109613ba05280613120516139605109613bc05280613120516139805109613be05280613120516139a05109613c005280613120516139c05109613c20528061312051613a605109613c405280613aa0516133805108613c605280612ba051600109613c805280610aa051600109613ca0526001613cc0526002613ce052613c6051613d00528260016040613cc06060613cc060075afa14169250613cc051613d2052613ce051613d405261034051613d605261036051613d80528260016040613d206080613d2060065afa141692506104e051613da05261050051613dc05261334051613de0528260016040613da06060613da060075afa14169250613d2051613e0052613d4051613e2052613da051613e4052613dc051613e60528260016040613e006080613e0060065afa1416925061052051613e805261054051613ea05261336051613ec0528260016040613e806060613e8060075afa14169250613e0051613ee052613e2051613f0052613e8051613f2052613ea051613f40528260016040613ee06080613ee060065afa141692506103e051613f605261040051613f8052613ac051613fa0528260016040613f606060613f6060075afa14169250613ee051613fc052613f0051613fe052613f605161400052613f8051614020528260016040613fc06080613fc060065afa141692507f2ad47afc517e78898ecd3a5c20c46975e6c50bf030951071878c7470e2f3f9f1614040527f1ceaca4426cdc11c593eee4db1e3981bfd8bd0eba770b93aa85f5f15dc16096061406052613ae051614080528260016040614040606061404060075afa14169250613fc0516140a052613fe0516140c052614040516140e052614060516141005282600160406140a060806140a060065afa141692507f0fb05ccb81603592ce60bd6199890470ef6f9caca3c17570df7701d70a2dd957614120527f1cc1301d6d462edf2e79083532a337ef3f087fbf0b9516d08074784017e10c7e61414052613b0051614160528260016040614120606061412060075afa141692506140a051614180526140c0516141a052614120516141c052614140516141e0528260016040614180608061418060065afa141692507f1e69edc3b54a25a5be1efb7515b5eaa259569e44cf6e7b99887bd2015311104f614200527f293e037f34e8ad87a6ebea272575c751f96a1e0acbf05bf5774e0581c3cc382361422052613b2051614240528260016040614200606061420060075afa1416925061418051614260526141a05161428052614200516142a052614220516142c0528260016040614260608061426060065afa141692507f0cf666852fd76b36f03572da1111ea68014217801887369fd35f9460f6bb13246142e0527f230bb407465f3dcda6711ec136903711485b30046005c0dd769bd85d1cc8a56761430052613b40516143205282600160406142e060606142e060075afa14169250614260516143405261428051614360526142e05161438052614300516143a0528260016040614340608061434060065afa141692507f2c2ef5dd4ea527c7b6a1adb979cf19e316cf50515b2225ecd040f40f46ad8fc66143c0527f2cd240820bffbbfa44c0832dfe16e8a40c4e75d800f58f7576733ca37a9c73696143e052613b60516144005282600160406143c060606143c060075afa14169250614340516144205261436051614440526143c051614460526143e051614480528260016040614420608061442060065afa141692507f1e2415bae32b721ff7b95b1766a3d0a4ea86d62fc8b4ed864092e8be29b375b46144a0527f0193d85fa914927d0567822f343ead8682e19e1948bdfe0d70e5ce64eaddf26a6144c052613b80516144e05282600160406144a060606144a060075afa14169250614420516145005261444051614520526144a051614540526144c051614560528260016040614500608061450060065afa141692507f02b01e53fe9c70fbc4e13606ffb809f58993a5b31d9e9a69e5c86b2833b52ac8614580527f21fe9d89f5e7d29aa77fb345a045fabbcc5f2be8bbd2f571306475118175ae306145a052613ba0516145c0528260016040614580606061458060075afa14169250614500516145e052614520516146005261458051614620526145a0516146405282600160406145e060806145e060065afa1416925061060051614660526106205161468052613bc0516146a0528260016040614660606061466060075afa141692506145e0516146c052614600516146e0526146605161470052614680516147205282600160406146c060806146c060065afa1416925061064051614740526106605161476052613be051614780528260016040614740606061474060075afa141692506146c0516147a0526146e0516147c052614740516147e052614760516148005282600160406147a060806147a060065afa1416925061068051614820526106a05161484052613c0051614860528260016040614820606061482060075afa141692506147a051614880526147c0516148a052614820516148c052614840516148e0528260016040614880608061488060065afa141692506106c051614900526106e05161492052613c2051614940528260016040614900606061490060075afa1416925061488051614960526148a05161498052614900516149a052614920516149c0528260016040614960608061496060065afa14169250610560516149e05261058051614a0052613c4051614a205282600160406149e060606149e060075afa1416925061496051614a405261498051614a60526149e051614a8052614a0051614aa0528260016040614a406080614a4060065afa14169250610a4051614ac052610a6051614ae052613c80518103614b00528260016040614ac06060614ac060075afa14169250614a4051614b2052614a6051614b4052614ac051614b6052614ae051614b80528260016040614b206080614b2060065afa14169250610ae051614ba052610b0051614bc052613ca051614be0528260016040614ba06060614ba060075afa14169250614b2051614c0052614b4051614c2052614ba051614c4052614bc051614c60528260016040614c006080614c0060065afa14169250614c0051614c8052614c2051614ca052610ae051614cc052610b0051614ce052610b2051614d0052610b4051614d2052610b6051614d4052610b8051614d6052610100614c8020614d805280614d805106614da05280614da051614da05109614dc05280614da051600109614de052614d0051614e0052614d2051614e2052614de051614e40528260016040614e006060614e0060075afa14169250614c8051614e6052614ca051614e8052614e0051614ea052614e2051614ec0528260016040614e606080614e6060065afa14169250614d4051614ee052614d6051614f0052614de051614f20528260016040614ee06060614ee060075afa14169250614cc051614f4052614ce051614f6052614ee051614f8052614f0051614fa0528260016040614f406080614f4060065afa14169250614e6051614fc052614e8051614fe0527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2615000527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed615020527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b615040527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa61506052614f405161508052614f60516150a0527f186282957db913abd99f91db59fe69922e95040603ef44c0bd7aa3adeef8f5ac6150c0527f17944351223333f260ddc3b4af45191b856689eda9eab5cbcddbbe570ce860d26150e0527f06d971ff4a7467c3ec596ed6efc674572e32fd6f52b721f97e35b0b3d3546753615100527f06ecdb9f9567f59ed2eee36e1e1d58797fd13cc97fafc2910f5e8a12f202fa9a615120528260016020614fc0610180614fc060085afa14169250826001614fc051141692508261369e57600080fd5b600080f3"; diff --git a/scripts/deterministic/DeployScroll.s.sol b/scripts/deterministic/DeployScroll.s.sol new file mode 100644 index 00000000..924ceabc --- /dev/null +++ b/scripts/deterministic/DeployScroll.s.sol @@ -0,0 +1,1380 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity =0.8.24; + +import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; +import {ProxyAdminSetOwner} from "./contracts/ProxyAdminSetOwner.sol"; +import {TransparentUpgradeableProxy, ITransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; + +import {EmptyContract} from "../../src/misc/EmptyContract.sol"; + +import {EnforcedTxGateway} from "../../src/L1/gateways/EnforcedTxGateway.sol"; +import {L1CustomERC20Gateway} from "../../src/L1/gateways/L1CustomERC20Gateway.sol"; +import {L1ERC1155Gateway} from "../../src/L1/gateways/L1ERC1155Gateway.sol"; +import {L1ERC721Gateway} from "../../src/L1/gateways/L1ERC721Gateway.sol"; +import {L1ETHGateway} from "../../src/L1/gateways/L1ETHGateway.sol"; +import {L1GatewayRouter} from "../../src/L1/gateways/L1GatewayRouter.sol"; +import {L1MessageQueueV1WithGasPriceOracle} from "../../src/L1/rollup/L1MessageQueueV1WithGasPriceOracle.sol"; +import {L1MessageQueueV2} from "../../src/L1/rollup/L1MessageQueueV2.sol"; +import {SystemConfig} from "../../src/L1/system-contract/SystemConfig.sol"; +import {L1ScrollMessenger} from "../../src/L1/L1ScrollMessenger.sol"; +import {L1StandardERC20Gateway} from "../../src/L1/gateways/L1StandardERC20Gateway.sol"; +import {L1WETHGateway} from "../../src/L1/gateways/L1WETHGateway.sol"; +import {L2GasPriceOracle} from "../../src/L1/rollup/L2GasPriceOracle.sol"; +import {MultipleVersionRollupVerifierSetOwner} from "./contracts/MultipleVersionRollupVerifierSetOwner.sol"; +import {ScrollChain} from "../../src/L1/rollup/ScrollChain.sol"; +import {ZkEvmVerifierV2} from "../../src/libraries/verifier/ZkEvmVerifierV2.sol"; +import {L2CustomERC20Gateway} from "../../src/L2/gateways/L2CustomERC20Gateway.sol"; +import {L2ERC1155Gateway} from "../../src/L2/gateways/L2ERC1155Gateway.sol"; +import {L2ERC721Gateway} from "../../src/L2/gateways/L2ERC721Gateway.sol"; +import {L2ETHGateway} from "../../src/L2/gateways/L2ETHGateway.sol"; +import {L2GatewayRouter} from "../../src/L2/gateways/L2GatewayRouter.sol"; +import {L2ScrollMessenger} from "../../src/L2/L2ScrollMessenger.sol"; +import {L2StandardERC20Gateway} from "../../src/L2/gateways/L2StandardERC20Gateway.sol"; +import {L2WETHGateway} from "../../src/L2/gateways/L2WETHGateway.sol"; +import {L1GasPriceOracle} from "../../src/L2/predeploys/L1GasPriceOracle.sol"; +import {L2MessageQueue} from "../../src/L2/predeploys/L2MessageQueue.sol"; +import {L2TxFeeVault} from "../../src/L2/predeploys/L2TxFeeVault.sol"; +import {Whitelist} from "../../src/L2/predeploys/Whitelist.sol"; +import {WrappedEther} from "../../src/L2/predeploys/WrappedEther.sol"; +import {ScrollStandardERC20} from "../../src/libraries/token/ScrollStandardERC20.sol"; +import {ScrollStandardERC20FactorySetOwner} from "./contracts/ScrollStandardERC20FactorySetOwner.sol"; + +import {ScrollChainMockFinalize} from "../../src/mocks/ScrollChainMockFinalize.sol"; + +import "./Constants.sol"; +import "./Configuration.sol"; +import "./DeterministicDeployment.sol"; + +/// @dev The minimum deployer account balance. +uint256 constant MINIMUM_DEPLOYER_BALANCE = 0.1 ether; + +contract DeployScroll is DeterministicDeployment { + using stdToml for string; + + /********* + * Types * + *********/ + + enum Layer { + None, + L1, + L2 + } + + /******************* + * State variables * + *******************/ + + // general configurations + Layer private broadcastLayer = Layer.None; + + /*********************** + * Contracts to deploy * + ***********************/ + + // L1 addresses + address internal L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR; + address internal L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR; + address internal L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR; + address internal L1_ENFORCED_TX_GATEWAY_PROXY_ADDR; + address internal L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR; + address internal L1_ERC1155_GATEWAY_PROXY_ADDR; + address internal L1_ERC721_GATEWAY_IMPLEMENTATION_ADDR; + address internal L1_ERC721_GATEWAY_PROXY_ADDR; + address internal L1_ETH_GATEWAY_IMPLEMENTATION_ADDR; + address internal L1_ETH_GATEWAY_PROXY_ADDR; + address internal L1_GATEWAY_ROUTER_IMPLEMENTATION_ADDR; + address internal L1_GATEWAY_ROUTER_PROXY_ADDR; + address internal L1_MESSAGE_QUEUE_V1_IMPLEMENTATION_ADDR; + address internal L1_MESSAGE_QUEUE_V1_PROXY_ADDR; + address internal L1_MESSAGE_QUEUE_V2_IMPLEMENTATION_ADDR; + address internal L1_MESSAGE_QUEUE_V2_PROXY_ADDR; + address internal L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR; + address internal L1_PROXY_ADMIN_ADDR; + address internal L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR; + address internal L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR; + address internal L1_SCROLL_CHAIN_PROXY_ADDR; + address internal L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR; + address internal L1_SCROLL_MESSENGER_PROXY_ADDR; + address internal L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR; + address internal L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR; + address internal L1_WETH_ADDR; + address internal L1_WETH_GATEWAY_IMPLEMENTATION_ADDR; + address internal L1_WETH_GATEWAY_PROXY_ADDR; + address internal L1_WHITELIST_ADDR; + address internal L1_PLONK_VERIFIER_ADDR; + address internal L1_ZKEVM_VERIFIER_V2_ADDR; + address internal L1_WRAPPED_TOKEN_GATEWAY_ADDR; + address internal SYSTEM_CONFIG_IMPLEMENTATION_ADDR; + address internal SYSTEM_CONFIG_PROXY_ADDR; + + // L2 addresses + address internal L1_GAS_PRICE_ORACLE_ADDR; + address internal L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR; + address internal L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR; + address internal L2_ERC1155_GATEWAY_IMPLEMENTATION_ADDR; + address internal L2_ERC1155_GATEWAY_PROXY_ADDR; + address internal L2_ERC721_GATEWAY_IMPLEMENTATION_ADDR; + address internal L2_ERC721_GATEWAY_PROXY_ADDR; + address internal L2_ETH_GATEWAY_IMPLEMENTATION_ADDR; + address internal L2_ETH_GATEWAY_PROXY_ADDR; + address internal L2_GATEWAY_ROUTER_IMPLEMENTATION_ADDR; + address internal L2_GATEWAY_ROUTER_PROXY_ADDR; + address internal L2_MESSAGE_QUEUE_ADDR; + address internal L2_PROXY_ADMIN_ADDR; + address internal L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR; + address internal L2_SCROLL_MESSENGER_IMPLEMENTATION_ADDR; + address internal L2_SCROLL_MESSENGER_PROXY_ADDR; + address internal L2_SCROLL_STANDARD_ERC20_ADDR; + address internal L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR; + address internal L2_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR; + address internal L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR; + address internal L2_TX_FEE_VAULT_ADDR; + address internal L2_WETH_ADDR; + address internal L2_WETH_GATEWAY_IMPLEMENTATION_ADDR; + address internal L2_WETH_GATEWAY_PROXY_ADDR; + address internal L2_WHITELIST_ADDR; + + /************* + * Utilities * + *************/ + + /// @dev Only broadcast code block if we run the script on the specified layer. + modifier broadcast(Layer layer) { + if (broadcastLayer == layer) { + vm.startBroadcast(DEPLOYER_PRIVATE_KEY); + } else { + // make sure we use the correct sender in simulation + vm.startPrank(DEPLOYER_ADDR); + } + + _; + + if (broadcastLayer == layer) { + vm.stopBroadcast(); + } else { + vm.stopPrank(); + } + } + + /// @dev Only execute block if we run the script on the specified layer. + modifier only(Layer layer) { + if (broadcastLayer != layer) { + return; + } + _; + } + + /// @dev Do not execute block if we run the script on the specified layer. + modifier skip(Layer layer) { + if (broadcastLayer == layer) { + return; + } + _; + } + + /*************** + * Entry point * + ***************/ + + function run(string memory layer, string memory scriptMode) public { + broadcastLayer = parseLayer(layer); + ScriptMode mode = parseScriptMode(scriptMode); + + DeterministicDeployment.initialize(mode); + + checkDeployerBalance(); + deployAllContracts(); + initializeL1Contracts(); + initializeL2Contracts(); + } + + /********************** + * Internal interface * + **********************/ + + function predictAllContracts() internal { + skipDeployment(); + deployAllContracts(); + } + + /********************* + * Private functions * + *********************/ + + function parseLayer(string memory raw) private pure returns (Layer) { + if (keccak256(bytes(raw)) == keccak256(bytes("L1"))) { + return Layer.L1; + } else if (keccak256(bytes(raw)) == keccak256(bytes("L2"))) { + return Layer.L2; + } else { + return Layer.None; + } + } + + function checkDeployerBalance() private { + // ignore balance during simulation + if (broadcastLayer == Layer.None) { + return; + } + + // check funds for deployment (L1 & L2) + if (DEPLOYER_ADDR.balance < MINIMUM_DEPLOYER_BALANCE) { + revert( + string( + abi.encodePacked( + "[ERROR] insufficient funds on deployer account for contract deployment (", + vm.toString(DEPLOYER_ADDR), + ") minimum ETH balance (in wei): ", + vm.toString(MINIMUM_DEPLOYER_BALANCE) + ) + ) + ); + } + + // check funds for initial deposit (L1, ETH as gas token) + if (broadcastLayer == Layer.L1) { + // note: L1_SCROLL_MESSENGER_PROXY_ADDR is not known at this point, + // so we read it directly from the generated configuration file. + address l1MessengerProxyAddr = notnull(contractsCfg.readAddress(".L1_SCROLL_MESSENGER_PROXY_ADDR")); + + uint256 l1MessengerBalance = l1MessengerProxyAddr.balance; + uint256 amountToLock = L2_DEPLOYER_INITIAL_BALANCE; + + uint256 amountToSend = 0; + if (l1MessengerBalance < amountToLock) { + amountToSend = amountToLock - l1MessengerBalance; + } + + uint256 minBalance = MINIMUM_DEPLOYER_BALANCE + amountToSend; + + if (DEPLOYER_ADDR.balance < minBalance) { + revert( + string( + abi.encodePacked( + "[ERROR] insufficient funds on deployer account for initial deposit (", + vm.toString(DEPLOYER_ADDR), + ") minimum ETH balance (in wei): ", + vm.toString(minBalance) + ) + ) + ); + } + } + } + + function transferOwnership(address addr, address newOwner) private { + if (Ownable(addr).owner() != newOwner) { + Ownable(addr).transferOwnership(newOwner); + } + } + + function deployAllContracts() private { + deployL1Contracts1stPass(); + deployL2Contracts1stPass(); + deployL1Contracts2ndPass(); + deployL2Contracts2ndPass(); + } + + // @notice deployL1Contracts1stPass deploys L1 contracts whose initialization does not depend on any L2 addresses. + function deployL1Contracts1stPass() private broadcast(Layer.L1) { + deployL1Weth(); + deployL1ProxyAdmin(); + deployL1PlaceHolder(); + deployL1Whitelist(); + deployL1ScrollChainProxy(); + deployL1ScrollMessengerProxy(); + deployL1EnforcedTxGateway(); + deployL1PlonkVerifier(); + deployL1ZkEvmVerifier(); + deployL1MultipleVersionRollupVerifier(); + deploySystemConfig(); + deployL1MessageQueue(); + deployL1ScrollChain(); + deployL1GatewayRouter(); + deployL1ETHGatewayProxy(); + deployL1WETHGatewayProxy(); + deployL1StandardERC20GatewayProxy(); + deployL1CustomERC20GatewayProxy(); + deployL1ERC721GatewayProxy(); + deployL1ERC1155GatewayProxy(); + } + + // @notice deployL2Contracts1stPass deploys L2 contracts whose initialization does not depend on any L1 addresses. + function deployL2Contracts1stPass() private broadcast(Layer.L2) { + deployL2MessageQueue(); + deployL1GasPriceOracle(); + deployL2Whitelist(); + deployL2Weth(); + deployTxFeeVault(); + deployL2ProxyAdmin(); + deployL2PlaceHolder(); + deployL2ScrollMessengerProxy(); + deployL2ETHGatewayProxy(); + deployL2WETHGatewayProxy(); + deployL2StandardERC20GatewayProxy(); + deployL2CustomERC20GatewayProxy(); + deployL2ERC721GatewayProxy(); + deployL2ERC1155GatewayProxy(); + deployScrollStandardERC20Factory(); + } + + // @notice deployL1Contracts2ndPass deploys L1 contracts whose initialization depends on some L2 addresses. + function deployL1Contracts2ndPass() private broadcast(Layer.L1) { + deployL1ScrollMessenger(); + deployL1StandardERC20Gateway(); + deployL1ETHGateway(); + deployL1WETHGateway(); + deployL1CustomERC20Gateway(); + deployL1ERC721Gateway(); + deployL1ERC1155Gateway(); + } + + // @notice deployL2Contracts2ndPass deploys L2 contracts whose initialization depends on some L1 addresses. + function deployL2Contracts2ndPass() private broadcast(Layer.L2) { + // upgradable + deployL2ScrollMessenger(); + deployL2GatewayRouter(); + deployL2StandardERC20Gateway(); + deployL2ETHGateway(); + deployL2WETHGateway(); + deployL2CustomERC20Gateway(); + deployL2ERC721Gateway(); + deployL2ERC1155Gateway(); + } + + // @notice initializeL1Contracts initializes contracts deployed on L1. + function initializeL1Contracts() private broadcast(Layer.L1) only(Layer.L1) { + initializeScrollChain(); + initializeL1MessageQueue(); + initializeL1ScrollMessenger(); + initializeEnforcedTxGateway(); + initializeL1GatewayRouter(); + initializeL1CustomERC20Gateway(); + initializeL1ERC1155Gateway(); + initializeL1ERC721Gateway(); + initializeL1ETHGateway(); + initializeL1StandardERC20Gateway(); + initializeL1WETHGateway(); + initializeL1Whitelist(); + + // lock tokens on L1 to ensure bridge parity, + // we lock ETH in L1ScrollMessenger + // note: this can only be done before transferring ownership + lockTokensOnL1(); + + transferL1ContractOwnership(); + } + + // @notice initializeL2Contracts initializes contracts deployed on L2. + function initializeL2Contracts() private broadcast(Layer.L2) only(Layer.L2) { + initializeL2MessageQueue(); + initializeL2TxFeeVault(); + initializeL1GasPriceOracle(); + initializeL2ScrollMessenger(); + initializeL2GatewayRouter(); + initializeL2CustomERC20Gateway(); + initializeL2ERC1155Gateway(); + initializeL2ERC721Gateway(); + initializeL2ETHGateway(); + initializeL2StandardERC20Gateway(); + initializeL2WETHGateway(); + initializeScrollStandardERC20Factory(); + initializeL2Whitelist(); + + transferL2ContractOwnership(); + } + + /*************************** + * L1: 1st pass deployment * + ***************************/ + + function deployL1Weth() private { + L1_WETH_ADDR = deploy("L1_WETH", type(WrappedEther).creationCode); + } + + function deployL1ProxyAdmin() private { + bytes memory args = abi.encode(DEPLOYER_ADDR); + L1_PROXY_ADMIN_ADDR = deploy("L1_PROXY_ADMIN", type(ProxyAdminSetOwner).creationCode, args); + } + + function deployL1PlaceHolder() private { + L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = deploy( + "L1_PROXY_IMPLEMENTATION_PLACEHOLDER", + type(EmptyContract).creationCode + ); + } + + function deployL1Whitelist() private { + bytes memory args = abi.encode(DEPLOYER_ADDR); + L1_WHITELIST_ADDR = deploy("L1_WHITELIST", type(Whitelist).creationCode, args); + } + + function deployL1ScrollChainProxy() private { + bytes memory args = abi.encode( + notnull(L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L1_SCROLL_CHAIN_PROXY_ADDR = deploy( + "L1_SCROLL_CHAIN_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL1ScrollMessengerProxy() private { + bytes memory args = abi.encode( + notnull(L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L1_SCROLL_MESSENGER_PROXY_ADDR = deploy( + "L1_SCROLL_MESSENGER_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL1EnforcedTxGateway() private { + bytes memory args = abi.encode(notnull(L1_MESSAGE_QUEUE_V2_PROXY_ADDR), notnull(L1_FEE_VAULT_ADDR)); + + L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION", + type(EnforcedTxGateway).creationCode, + args + ); + + bytes memory args2 = abi.encode( + notnull(L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L1_ENFORCED_TX_GATEWAY_PROXY_ADDR = deploy( + "L1_ENFORCED_TX_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args2 + ); + } + + function deployL1PlonkVerifier() private { + L1_PLONK_VERIFIER_ADDR = deploy("L1_PLONK_VERIFIER", PLONK_VERIFIER_CREATION_CODE); + } + + function deployL1ZkEvmVerifier() private { + bytes memory args = abi.encode(notnull(L1_PLONK_VERIFIER_ADDR), V4_VERIFIER_DIGEST); + L1_ZKEVM_VERIFIER_V2_ADDR = deploy("L1_ZKEVM_VERIFIER_V2", type(ZkEvmVerifierV2).creationCode, args); + } + + function deployL1MultipleVersionRollupVerifier() private { + uint256[] memory _versions = new uint256[](1); + address[] memory _verifiers = new address[](1); + + // register V4 verifier: DarwinV2 upgrade, plonk verifier v0.13.1 + _versions[0] = 4; + _verifiers[0] = notnull(L1_ZKEVM_VERIFIER_V2_ADDR); + + bytes memory args = abi.encode(DEPLOYER_ADDR, _versions, _verifiers); + + L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR = deploy( + "L1_MULTIPLE_VERSION_ROLLUP_VERIFIER", + type(MultipleVersionRollupVerifierSetOwner).creationCode, + args + ); + } + + function deploySystemConfig() private { + SYSTEM_CONFIG_IMPLEMENTATION_ADDR = deploy("SYSTEM_CONFIG_IMPLEMENTATION", type(SystemConfig).creationCode); + + bytes memory args = abi.encode( + notnull(SYSTEM_CONFIG_IMPLEMENTATION_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + SYSTEM_CONFIG_PROXY_ADDR = deploy("SYSTEM_CONFIG_PROXY", type(TransparentUpgradeableProxy).creationCode, args); + } + + function deployL1MessageQueue() private { + // deploy L1MessageQueueV1 + bytes memory args = abi.encode( + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR), + notnull(L1_SCROLL_CHAIN_PROXY_ADDR), + notnull(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR) + ); + + L1_MESSAGE_QUEUE_V1_IMPLEMENTATION_ADDR = deploy( + "L1_MESSAGE_QUEUE_V1_IMPLEMENTATION", + type(L1MessageQueueV1WithGasPriceOracle).creationCode, + args + ); + + bytes memory args2 = abi.encode( + notnull(L1_MESSAGE_QUEUE_V1_IMPLEMENTATION_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L1_MESSAGE_QUEUE_V1_PROXY_ADDR = deploy( + "L1_MESSAGE_QUEUE_V1_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args2 + ); + + // deploy L1MessageQueueV2 + bytes memory args3 = abi.encode( + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR), + notnull(L1_SCROLL_CHAIN_PROXY_ADDR), + notnull(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR), + notnull(L1_MESSAGE_QUEUE_V1_PROXY_ADDR), + notnull(SYSTEM_CONFIG_PROXY_ADDR) + ); + + L1_MESSAGE_QUEUE_V2_IMPLEMENTATION_ADDR = deploy( + "L1_MESSAGE_QUEUE_V2_IMPLEMENTATION", + type(L1MessageQueueV2).creationCode, + args3 + ); + + bytes memory args4 = abi.encode( + notnull(L1_MESSAGE_QUEUE_V2_IMPLEMENTATION_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L1_MESSAGE_QUEUE_V2_PROXY_ADDR = deploy( + "L1_MESSAGE_QUEUE_V2_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args4 + ); + } + + function deployL1ScrollChain() private { + bytes memory args = abi.encode( + CHAIN_ID_L2, + notnull(L1_MESSAGE_QUEUE_V2_PROXY_ADDR), + notnull(L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR) + ); + + bytes memory creationCode = type(ScrollChain).creationCode; + + if (TEST_ENV_MOCK_FINALIZE_ENABLED) { + creationCode = type(ScrollChainMockFinalize).creationCode; + } + + L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR = deploy("L1_SCROLL_CHAIN_IMPLEMENTATION", creationCode, args); + + upgrade(L1_PROXY_ADMIN_ADDR, L1_SCROLL_CHAIN_PROXY_ADDR, L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR); + } + + function deployL1GatewayRouter() private { + L1_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = deploy( + "L1_GATEWAY_ROUTER_IMPLEMENTATION", + type(L1GatewayRouter).creationCode + ); + + bytes memory args = abi.encode( + notnull(L1_GATEWAY_ROUTER_IMPLEMENTATION_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L1_GATEWAY_ROUTER_PROXY_ADDR = deploy( + "L1_GATEWAY_ROUTER_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL1ETHGatewayProxy() private { + bytes memory args = abi.encode( + notnull(L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L1_ETH_GATEWAY_PROXY_ADDR = deploy( + "L1_ETH_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL1WETHGatewayProxy() private { + bytes memory args = abi.encode( + notnull(L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L1_WETH_GATEWAY_PROXY_ADDR = deploy( + "L1_WETH_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL1StandardERC20GatewayProxy() private { + bytes memory args = abi.encode( + notnull(L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR = deploy( + "L1_STANDARD_ERC20_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL1CustomERC20GatewayProxy() private { + bytes memory args = abi.encode( + notnull(L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = deploy( + "L1_CUSTOM_ERC20_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL1ERC721GatewayProxy() private { + bytes memory args = abi.encode( + notnull(L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L1_ERC721_GATEWAY_PROXY_ADDR = deploy( + "L1_ERC721_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL1ERC1155GatewayProxy() private { + bytes memory args = abi.encode( + notnull(L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L1_ERC1155_GATEWAY_PROXY_ADDR = deploy( + "L1_ERC1155_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + /*************************** + * L2: 1st pass deployment * + ***************************/ + + function deployL2MessageQueue() private { + bytes memory args = abi.encode(DEPLOYER_ADDR); + L2_MESSAGE_QUEUE_ADDR = deploy("L2_MESSAGE_QUEUE", type(L2MessageQueue).creationCode, args); + } + + function deployL1GasPriceOracle() private { + bytes memory args = abi.encode(DEPLOYER_ADDR, true); + L1_GAS_PRICE_ORACLE_ADDR = deploy("L1_GAS_PRICE_ORACLE", type(L1GasPriceOracle).creationCode, args); + } + + function deployL2Whitelist() private { + bytes memory args = abi.encode(DEPLOYER_ADDR); + L2_WHITELIST_ADDR = deploy("L2_WHITELIST", type(Whitelist).creationCode, args); + } + + function deployL2Weth() private { + L2_WETH_ADDR = deploy("L2_WETH", type(WrappedEther).creationCode); + } + + function deployTxFeeVault() private { + bytes memory args = abi.encode(DEPLOYER_ADDR, L1_FEE_VAULT_ADDR, FEE_VAULT_MIN_WITHDRAW_AMOUNT); + L2_TX_FEE_VAULT_ADDR = deploy("L2_TX_FEE_VAULT", type(L2TxFeeVault).creationCode, args); + } + + function deployL2ProxyAdmin() private { + bytes memory args = abi.encode(DEPLOYER_ADDR); + L2_PROXY_ADMIN_ADDR = deploy("L2_PROXY_ADMIN", type(ProxyAdminSetOwner).creationCode, args); + } + + function deployL2PlaceHolder() private { + L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = deploy( + "L2_PROXY_IMPLEMENTATION_PLACEHOLDER", + type(EmptyContract).creationCode + ); + } + + function deployL2ScrollMessengerProxy() private { + bytes memory args = abi.encode( + notnull(L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L2_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L2_SCROLL_MESSENGER_PROXY_ADDR = deploy( + "L2_SCROLL_MESSENGER_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL2StandardERC20GatewayProxy() private { + bytes memory args = abi.encode( + notnull(L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L2_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR = deploy( + "L2_STANDARD_ERC20_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL2ETHGatewayProxy() private { + bytes memory args = abi.encode( + notnull(L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L2_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L2_ETH_GATEWAY_PROXY_ADDR = deploy( + "L2_ETH_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL2WETHGatewayProxy() private { + bytes memory args = abi.encode( + notnull(L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L2_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L2_WETH_GATEWAY_PROXY_ADDR = deploy( + "L2_WETH_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL2CustomERC20GatewayProxy() private { + bytes memory args = abi.encode( + notnull(L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L2_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = deploy( + "L2_CUSTOM_ERC20_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL2ERC721GatewayProxy() private { + bytes memory args = abi.encode( + notnull(L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L2_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L2_ERC721_GATEWAY_PROXY_ADDR = deploy( + "L2_ERC721_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL2ERC1155GatewayProxy() private { + bytes memory args = abi.encode( + notnull(L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L2_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L2_ERC1155_GATEWAY_PROXY_ADDR = deploy( + "L2_ERC1155_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployScrollStandardERC20Factory() private { + L2_SCROLL_STANDARD_ERC20_ADDR = deploy("L2_SCROLL_STANDARD_ERC20", type(ScrollStandardERC20).creationCode); + bytes memory args = abi.encode(DEPLOYER_ADDR, notnull(L2_SCROLL_STANDARD_ERC20_ADDR)); + + L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR = deploy( + "L2_SCROLL_STANDARD_ERC20_FACTORY", + type(ScrollStandardERC20FactorySetOwner).creationCode, + args + ); + } + + /*************************** + * L1: 2nd pass deployment * + ***************************/ + + function deployL1ScrollMessenger() private { + bytes memory args = abi.encode( + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR), + notnull(L1_SCROLL_CHAIN_PROXY_ADDR), + notnull(L1_MESSAGE_QUEUE_V2_PROXY_ADDR) + ); + + L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = deploy( + "L1_SCROLL_MESSENGER_IMPLEMENTATION", + type(L1ScrollMessenger).creationCode, + args + ); + + upgrade(L1_PROXY_ADMIN_ADDR, L1_SCROLL_MESSENGER_PROXY_ADDR, L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR); + } + + function deployL1ETHGateway() private { + bytes memory args = abi.encode( + notnull(L2_ETH_GATEWAY_PROXY_ADDR), + notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) + ); + + L1_ETH_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L1_ETH_GATEWAY_IMPLEMENTATION", + type(L1ETHGateway).creationCode, + args + ); + + upgrade(L1_PROXY_ADMIN_ADDR, L1_ETH_GATEWAY_PROXY_ADDR, L1_ETH_GATEWAY_IMPLEMENTATION_ADDR); + } + + function deployL1WETHGateway() private { + bytes memory args = abi.encode( + notnull(L1_WETH_ADDR), + notnull(L2_WETH_ADDR), + notnull(L2_WETH_GATEWAY_PROXY_ADDR), + notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) + ); + + L1_WETH_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L1_WETH_GATEWAY_IMPLEMENTATION", + type(L1WETHGateway).creationCode, + args + ); + + upgrade(L1_PROXY_ADMIN_ADDR, L1_WETH_GATEWAY_PROXY_ADDR, L1_WETH_GATEWAY_IMPLEMENTATION_ADDR); + } + + function deployL1StandardERC20Gateway() private { + bytes memory args = abi.encode( + notnull(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR), + notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR), + notnull(L2_SCROLL_STANDARD_ERC20_ADDR), + notnull(L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR) + ); + + L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION", + type(L1StandardERC20Gateway).creationCode, + args + ); + + upgrade( + L1_PROXY_ADMIN_ADDR, + L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR, + L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR + ); + } + + function deployL1CustomERC20Gateway() private { + bytes memory args = abi.encode( + notnull(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR), + notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) + ); + + L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION", + type(L1CustomERC20Gateway).creationCode, + args + ); + + upgrade(L1_PROXY_ADMIN_ADDR, L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR, L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR); + } + + function deployL1ERC721Gateway() private { + bytes memory args = abi.encode(notnull(L2_ERC721_GATEWAY_PROXY_ADDR), notnull(L1_SCROLL_MESSENGER_PROXY_ADDR)); + + L1_ERC721_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L1_ERC721_GATEWAY_IMPLEMENTATION", + type(L1ERC721Gateway).creationCode, + args + ); + + upgrade(L1_PROXY_ADMIN_ADDR, L1_ERC721_GATEWAY_PROXY_ADDR, L1_ERC721_GATEWAY_IMPLEMENTATION_ADDR); + } + + function deployL1ERC1155Gateway() private { + bytes memory args = abi.encode(notnull(L2_ERC1155_GATEWAY_PROXY_ADDR), notnull(L1_SCROLL_MESSENGER_PROXY_ADDR)); + + L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L1_ERC1155_GATEWAY_IMPLEMENTATION", + type(L1ERC1155Gateway).creationCode, + args + ); + + upgrade(L1_PROXY_ADMIN_ADDR, L1_ERC1155_GATEWAY_PROXY_ADDR, L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR); + } + + /*************************** + * L2: 2nd pass deployment * + ***************************/ + + function deployL2ScrollMessenger() private { + bytes memory args = abi.encode(notnull(L1_SCROLL_MESSENGER_PROXY_ADDR), notnull(L2_MESSAGE_QUEUE_ADDR)); + + L2_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = deploy( + "L2_SCROLL_MESSENGER_IMPLEMENTATION", + type(L2ScrollMessenger).creationCode, + args + ); + + upgrade(L2_PROXY_ADMIN_ADDR, L2_SCROLL_MESSENGER_PROXY_ADDR, L2_SCROLL_MESSENGER_IMPLEMENTATION_ADDR); + } + + function deployL2GatewayRouter() private { + L2_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = deploy( + "L2_GATEWAY_ROUTER_IMPLEMENTATION", + type(L2GatewayRouter).creationCode + ); + + bytes memory args = abi.encode( + notnull(L2_GATEWAY_ROUTER_IMPLEMENTATION_ADDR), + notnull(L2_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L2_GATEWAY_ROUTER_PROXY_ADDR = deploy( + "L2_GATEWAY_ROUTER_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL2StandardERC20Gateway() private { + bytes memory args = abi.encode( + notnull(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR), + notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR), + notnull(L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR) + ); + + L2_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L2_STANDARD_ERC20_GATEWAY_IMPLEMENTATION", + type(L2StandardERC20Gateway).creationCode, + args + ); + + upgrade( + L2_PROXY_ADMIN_ADDR, + L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR, + L2_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR + ); + } + + function deployL2ETHGateway() private { + address COUNTERPART = L1_ETH_GATEWAY_PROXY_ADDR; + bytes memory args = abi.encode( + notnull(COUNTERPART), + notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) + ); + + L2_ETH_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L2_ETH_GATEWAY_IMPLEMENTATION", + type(L2ETHGateway).creationCode, + args + ); + + upgrade(L2_PROXY_ADMIN_ADDR, L2_ETH_GATEWAY_PROXY_ADDR, L2_ETH_GATEWAY_IMPLEMENTATION_ADDR); + } + + function deployL2WETHGateway() private { + bytes memory args = abi.encode( + notnull(L2_WETH_ADDR), + notnull(L1_WETH_ADDR), + notnull(L1_WETH_GATEWAY_PROXY_ADDR), + notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) + ); + + L2_WETH_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L2_WETH_GATEWAY_IMPLEMENTATION", + type(L2WETHGateway).creationCode, + args + ); + + upgrade(L2_PROXY_ADMIN_ADDR, L2_WETH_GATEWAY_PROXY_ADDR, L2_WETH_GATEWAY_IMPLEMENTATION_ADDR); + } + + function deployL2CustomERC20Gateway() private { + bytes memory args = abi.encode( + notnull(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR), + notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) + ); + + L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION", + type(L2CustomERC20Gateway).creationCode, + args + ); + + upgrade(L2_PROXY_ADMIN_ADDR, L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR, L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR); + } + + function deployL2ERC721Gateway() private { + bytes memory args = abi.encode(notnull(L1_ERC721_GATEWAY_PROXY_ADDR), notnull(L2_SCROLL_MESSENGER_PROXY_ADDR)); + + L2_ERC721_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L2_ERC721_GATEWAY_IMPLEMENTATION", + type(L2ERC721Gateway).creationCode, + args + ); + + upgrade(L2_PROXY_ADMIN_ADDR, L2_ERC721_GATEWAY_PROXY_ADDR, L2_ERC721_GATEWAY_IMPLEMENTATION_ADDR); + } + + function deployL2ERC1155Gateway() private { + bytes memory args = abi.encode(notnull(L1_ERC1155_GATEWAY_PROXY_ADDR), notnull(L2_SCROLL_MESSENGER_PROXY_ADDR)); + + L2_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L2_ERC1155_GATEWAY_IMPLEMENTATION", + type(L2ERC1155Gateway).creationCode, + args + ); + + upgrade(L2_PROXY_ADMIN_ADDR, L2_ERC1155_GATEWAY_PROXY_ADDR, L2_ERC1155_GATEWAY_IMPLEMENTATION_ADDR); + } + + /********************** + * L1: initialization * + **********************/ + + function initializeScrollChain() private { + if (getInitializeCount(L1_SCROLL_CHAIN_PROXY_ADDR) == 0) { + ScrollChain(L1_SCROLL_CHAIN_PROXY_ADDR).initialize( + notnull(L1_MESSAGE_QUEUE_V2_PROXY_ADDR), + notnull(L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR), + MAX_TX_IN_CHUNK + ); + } + + if (!ScrollChain(L1_SCROLL_CHAIN_PROXY_ADDR).isSequencer(L1_COMMIT_SENDER_ADDR)) { + ScrollChain(L1_SCROLL_CHAIN_PROXY_ADDR).addSequencer(L1_COMMIT_SENDER_ADDR); + } + + if (!ScrollChain(L1_SCROLL_CHAIN_PROXY_ADDR).isProver(L1_FINALIZE_SENDER_ADDR)) { + ScrollChain(L1_SCROLL_CHAIN_PROXY_ADDR).addProver(L1_FINALIZE_SENDER_ADDR); + } + } + + function initializeL1MessageQueue() private { + if (getInitializeCount(L1_MESSAGE_QUEUE_V2_PROXY_ADDR) == 0) { + L1MessageQueueV2(L1_MESSAGE_QUEUE_V2_PROXY_ADDR).initialize(); + } + } + + function initializeL1ScrollMessenger() private { + if (getInitializeCount(L1_SCROLL_MESSENGER_PROXY_ADDR) == 0) { + L1ScrollMessenger(payable(L1_SCROLL_MESSENGER_PROXY_ADDR)).initialize( + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR), + notnull(L1_FEE_VAULT_ADDR), + notnull(L1_SCROLL_CHAIN_PROXY_ADDR), + notnull(L1_MESSAGE_QUEUE_V2_PROXY_ADDR) + ); + } + } + + function initializeEnforcedTxGateway() private { + if (getInitializeCount(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR) == 0) { + EnforcedTxGateway(payable(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR)).initialize(); + } + + // disable gateway + if (!EnforcedTxGateway(payable(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR)).paused()) { + EnforcedTxGateway(payable(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR)).setPause(true); + } + } + + function initializeL1GatewayRouter() private { + address L2_ETH_GATEWAY_COUNTERPART = L1_ETH_GATEWAY_PROXY_ADDR; + if (getInitializeCount(L1_GATEWAY_ROUTER_PROXY_ADDR) == 0) { + L1GatewayRouter(L1_GATEWAY_ROUTER_PROXY_ADDR).initialize( + notnull(L2_ETH_GATEWAY_COUNTERPART), + notnull(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR) + ); + } + } + + function initializeL1CustomERC20Gateway() private { + if (getInitializeCount(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR) == 0) { + L1CustomERC20Gateway(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR).initialize( + notnull(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR), + notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) + ); + } + } + + function initializeL1ERC1155Gateway() private { + if (getInitializeCount(L1_ERC1155_GATEWAY_PROXY_ADDR) == 0) { + L1ERC1155Gateway(L1_ERC1155_GATEWAY_PROXY_ADDR).initialize( + notnull(L2_ERC1155_GATEWAY_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) + ); + } + } + + function initializeL1ERC721Gateway() private { + if (getInitializeCount(L1_ERC721_GATEWAY_PROXY_ADDR) == 0) { + L1ERC721Gateway(L1_ERC721_GATEWAY_PROXY_ADDR).initialize( + notnull(L2_ERC721_GATEWAY_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) + ); + } + } + + function initializeL1ETHGateway() private { + if (getInitializeCount(L1_ETH_GATEWAY_PROXY_ADDR) == 0) { + L1ETHGateway(L1_ETH_GATEWAY_PROXY_ADDR).initialize( + notnull(L2_ETH_GATEWAY_PROXY_ADDR), + notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) + ); + } + } + + function initializeL1StandardERC20Gateway() private { + if (getInitializeCount(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR) == 0) { + L1StandardERC20Gateway(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR).initialize( + notnull(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR), + notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR), + notnull(L2_SCROLL_STANDARD_ERC20_ADDR), + notnull(L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR) + ); + } + } + + function initializeL1WETHGateway() private { + if (getInitializeCount(L1_WETH_GATEWAY_PROXY_ADDR) == 0) { + L1WETHGateway(payable(L1_WETH_GATEWAY_PROXY_ADDR)).initialize( + notnull(L2_WETH_GATEWAY_PROXY_ADDR), + notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) + ); + } + + // set WETH gateway in router + address[] memory _tokens = new address[](1); + _tokens[0] = notnull(L1_WETH_ADDR); + address[] memory _gateways = new address[](1); + _gateways[0] = notnull(L1_WETH_GATEWAY_PROXY_ADDR); + + if (L1GatewayRouter(L1_GATEWAY_ROUTER_PROXY_ADDR).ERC20Gateway(_tokens[0]) != _gateways[0]) { + L1GatewayRouter(L1_GATEWAY_ROUTER_PROXY_ADDR).setERC20Gateway(_tokens, _gateways); + } + } + + function initializeL1Whitelist() private { + address[] memory accounts = new address[](1); + accounts[0] = L1_GAS_ORACLE_SENDER_ADDR; + + if (!Whitelist(L1_WHITELIST_ADDR).isSenderAllowed(accounts[0])) { + Whitelist(L1_WHITELIST_ADDR).updateWhitelistStatus(accounts, true); + } + } + + function lockTokensOnL1() private { + uint256 l1MessengerBalance = address(L1_SCROLL_MESSENGER_PROXY_ADDR).balance; + uint256 amountToLock = L2_DEPLOYER_INITIAL_BALANCE; + + if (l1MessengerBalance < amountToLock) { + uint256 amountToSend = amountToLock - l1MessengerBalance; + (bool sent, bytes memory data) = payable(L1_SCROLL_MESSENGER_PROXY_ADDR).call{value: amountToSend}(""); + require(sent, "[ERROR] failed to lock tokens on layer 1"); + } + } + + function transferL1ContractOwnership() private { + transferOwnership(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L1_ERC1155_GATEWAY_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L1_ERC721_GATEWAY_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L1_GATEWAY_ROUTER_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L1_MESSAGE_QUEUE_V2_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L1_SCROLL_MESSENGER_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR, OWNER_ADDR); + transferOwnership(L1_PROXY_ADMIN_ADDR, OWNER_ADDR); + transferOwnership(L1_SCROLL_CHAIN_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L1_WHITELIST_ADDR, OWNER_ADDR); + transferOwnership(L1_ETH_GATEWAY_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L1_WETH_GATEWAY_PROXY_ADDR, OWNER_ADDR); + } + + /********************** + * L2: initialization * + **********************/ + + function initializeL2MessageQueue() private { + if (L2MessageQueue(L2_MESSAGE_QUEUE_ADDR).messenger() != notnull(L2_SCROLL_MESSENGER_PROXY_ADDR)) { + L2MessageQueue(L2_MESSAGE_QUEUE_ADDR).initialize(L2_SCROLL_MESSENGER_PROXY_ADDR); + } + } + + function initializeL2TxFeeVault() private { + if (L2TxFeeVault(payable(L2_TX_FEE_VAULT_ADDR)).messenger() != notnull(L2_SCROLL_MESSENGER_PROXY_ADDR)) { + L2TxFeeVault(payable(L2_TX_FEE_VAULT_ADDR)).updateMessenger(L2_SCROLL_MESSENGER_PROXY_ADDR); + } + } + + function initializeL1GasPriceOracle() private { + if (address(L1GasPriceOracle(L1_GAS_PRICE_ORACLE_ADDR).whitelist()) != notnull(L2_WHITELIST_ADDR)) { + L1GasPriceOracle(L1_GAS_PRICE_ORACLE_ADDR).updateWhitelist(L2_WHITELIST_ADDR); + } + } + + function initializeL2ScrollMessenger() private { + if (getInitializeCount(L2_SCROLL_MESSENGER_PROXY_ADDR) == 0) { + L2ScrollMessenger(payable(L2_SCROLL_MESSENGER_PROXY_ADDR)).initialize( + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) + ); + } + } + + function initializeL2GatewayRouter() private { + if (getInitializeCount(L2_GATEWAY_ROUTER_PROXY_ADDR) == 0) { + L2GatewayRouter(L2_GATEWAY_ROUTER_PROXY_ADDR).initialize( + notnull(L2_ETH_GATEWAY_PROXY_ADDR), + notnull(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR) + ); + } + } + + function initializeL2CustomERC20Gateway() private { + if (getInitializeCount(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR) == 0) { + L2CustomERC20Gateway(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR).initialize( + notnull(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR), + notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) + ); + } + } + + function initializeL2ERC1155Gateway() private { + if (getInitializeCount(L2_ERC1155_GATEWAY_PROXY_ADDR) == 0) { + L2ERC1155Gateway(L2_ERC1155_GATEWAY_PROXY_ADDR).initialize( + notnull(L1_ERC1155_GATEWAY_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) + ); + } + } + + function initializeL2ERC721Gateway() private { + if (getInitializeCount(L2_ERC721_GATEWAY_PROXY_ADDR) == 0) { + L2ERC721Gateway(L2_ERC721_GATEWAY_PROXY_ADDR).initialize( + notnull(L1_ERC721_GATEWAY_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) + ); + } + } + + function initializeL2ETHGateway() private { + address COUNTERPART = L1_ETH_GATEWAY_PROXY_ADDR; + if (getInitializeCount(L2_ETH_GATEWAY_PROXY_ADDR) == 0) { + L2ETHGateway(L2_ETH_GATEWAY_PROXY_ADDR).initialize( + notnull(COUNTERPART), + notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) + ); + } + } + + function initializeL2StandardERC20Gateway() private { + if (getInitializeCount(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR) == 0) { + L2StandardERC20Gateway(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR).initialize( + notnull(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR), + notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR), + notnull(L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR) + ); + } + } + + function initializeL2WETHGateway() private { + if (getInitializeCount(L2_WETH_GATEWAY_PROXY_ADDR) == 0) { + L2WETHGateway(payable(L2_WETH_GATEWAY_PROXY_ADDR)).initialize( + notnull(L1_WETH_GATEWAY_PROXY_ADDR), + notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) + ); + } + + // set WETH gateway in router + address[] memory _tokens = new address[](1); + _tokens[0] = notnull(L2_WETH_ADDR); + address[] memory _gateways = new address[](1); + _gateways[0] = notnull(L2_WETH_GATEWAY_PROXY_ADDR); + + if (L2GatewayRouter(L2_GATEWAY_ROUTER_PROXY_ADDR).ERC20Gateway(_tokens[0]) != _gateways[0]) { + L2GatewayRouter(L2_GATEWAY_ROUTER_PROXY_ADDR).setERC20Gateway(_tokens, _gateways); + } + } + + function initializeScrollStandardERC20Factory() private { + transferOwnership( + notnull(L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR), + notnull(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR) + ); + } + + function initializeL2Whitelist() private { + address[] memory accounts = new address[](1); + accounts[0] = L2_GAS_ORACLE_SENDER_ADDR; + + if (!Whitelist(L2_WHITELIST_ADDR).isSenderAllowed(accounts[0])) { + Whitelist(L2_WHITELIST_ADDR).updateWhitelistStatus(accounts, true); + } + } + + function transferL2ContractOwnership() private { + transferOwnership(L1_GAS_PRICE_ORACLE_ADDR, OWNER_ADDR); + transferOwnership(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L2_ERC1155_GATEWAY_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L2_ERC721_GATEWAY_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L2_ETH_GATEWAY_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L2_GATEWAY_ROUTER_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L2_MESSAGE_QUEUE_ADDR, OWNER_ADDR); + transferOwnership(L2_SCROLL_MESSENGER_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L2_TX_FEE_VAULT_ADDR, OWNER_ADDR); + transferOwnership(L2_PROXY_ADMIN_ADDR, OWNER_ADDR); + transferOwnership(L2_WHITELIST_ADDR, OWNER_ADDR); + transferOwnership(L2_WETH_GATEWAY_PROXY_ADDR, OWNER_ADDR); + } +} diff --git a/scripts/deterministic/DeterministicDeployment.sol b/scripts/deterministic/DeterministicDeployment.sol new file mode 100644 index 00000000..98390508 --- /dev/null +++ b/scripts/deterministic/DeterministicDeployment.sol @@ -0,0 +1,236 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity =0.8.24; + +import {console} from "forge-std/Script.sol"; +import {stdToml} from "forge-std/StdToml.sol"; + +import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +import {ITransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import {ERC1967Upgrade} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol"; + +import {CONFIG_CONTRACTS_PATH, DEFAULT_DEPLOYMENT_SALT, DETERMINISTIC_DEPLOYMENT_PROXY_ADDR} from "./Constants.sol"; +import {Configuration} from "./Configuration.sol"; + +/// @notice DeterministicDeployment provides utilities for deterministic contract deployments. +abstract contract DeterministicDeployment is Configuration { + using stdToml for string; + + /********* + * Types * + *********/ + + enum ScriptMode { + None, + LogAddresses, + WriteConfig, + VerifyConfig, + EmptyConfig + } + + /******************* + * State variables * + *******************/ + + ScriptMode private mode; + string private saltPrefix; + bool private skipDeploy; + + /********************** + * Internal interface * + **********************/ + + function initialize(ScriptMode _mode) internal { + mode = _mode; + skipDeploy = false; + + if (mode != ScriptMode.EmptyConfig) { + readConfig(); + } + + // salt prefix used for deterministic deployments + if (bytes(DEPLOYMENT_SALT).length != 0) { + saltPrefix = DEPLOYMENT_SALT; + } else { + saltPrefix = DEFAULT_DEPLOYMENT_SALT; + } + + // sanity check: make sure DeterministicDeploymentProxy exists + if (DETERMINISTIC_DEPLOYMENT_PROXY_ADDR.code.length == 0) { + revert( + string( + abi.encodePacked( + "[ERROR] DeterministicDeploymentProxy (", + vm.toString(DETERMINISTIC_DEPLOYMENT_PROXY_ADDR), + ") is not available" + ) + ) + ); + } + } + + function parseScriptMode(string memory scriptMode) internal pure returns (ScriptMode) { + if (keccak256(bytes(scriptMode)) == keccak256(bytes("log-addresses"))) { + return ScriptMode.LogAddresses; + } else if (keccak256(bytes(scriptMode)) == keccak256(bytes("write-config"))) { + return ScriptMode.WriteConfig; + } else if (keccak256(bytes(scriptMode)) == keccak256(bytes("verify-config"))) { + return ScriptMode.VerifyConfig; + } else { + return ScriptMode.None; + } + } + + function skipDeployment() internal { + skipDeploy = true; + } + + function deploy(string memory name, bytes memory codeWithArgs) internal returns (address) { + return _deploy(name, codeWithArgs); + } + + function deploy( + string memory name, + bytes memory code, + bytes memory args + ) internal returns (address) { + return _deploy(name, abi.encodePacked(code, args)); + } + + function predict(string memory name, bytes memory codeWithArgs) internal view returns (address) { + return _predict(name, codeWithArgs); + } + + function predict( + string memory name, + bytes memory code, + bytes memory args + ) internal view returns (address) { + return _predict(name, abi.encodePacked(code, args)); + } + + function upgrade( + address proxyAdminAddr, + address proxyAddr, + address implAddr + ) internal { + address addr = _getImplementation(proxyAddr); + + if (!skipDeploy && addr != implAddr) { + ProxyAdmin(notnull(proxyAdminAddr)).upgrade( + ITransparentUpgradeableProxy(notnull(proxyAddr)), + notnull(implAddr) + ); + } + } + + function getInitializeCount(address contractAddr) internal view returns (uint8) { + bytes32 slotValue = vm.load(address(contractAddr), bytes32(uint256(0))); + return uint8(uint256(slotValue)); + } + + /********************* + * Private functions * + *********************/ + + function _getSalt(string memory name) private view returns (bytes32) { + return keccak256(abi.encodePacked(saltPrefix, name)); + } + + function _deploy(string memory name, bytes memory codeWithArgs) private returns (address) { + // check override (mainly used with predeploys) + address addr = tryGetOverride(name); + + if (addr != address(0)) { + _label(name, addr); + return addr; + } + + // predict determinstic deployment address + addr = _predict(name, codeWithArgs); + _label(name, addr); + + if (skipDeploy) { + return addr; + } + + // skip if the contract is already deployed + if (addr.code.length > 0) { + return addr; + } + + // deploy contract + bytes32 salt = _getSalt(name); + bytes memory data = abi.encodePacked(salt, codeWithArgs); + (bool success, ) = DETERMINISTIC_DEPLOYMENT_PROXY_ADDR.call(data); + require(success, "call failed"); + require(addr.code.length != 0, "deployment address mismatch"); + + return addr; + } + + function _predict(string memory name, bytes memory codeWithArgs) private view returns (address) { + bytes32 salt = _getSalt(name); + + return + address( + uint160( + uint256( + keccak256( + abi.encodePacked( + bytes1(0xff), + DETERMINISTIC_DEPLOYMENT_PROXY_ADDR, + salt, + keccak256(codeWithArgs) + ) + ) + ) + ) + ); + } + + function _label(string memory name, address addr) internal { + vm.label(addr, name); + + if (mode == ScriptMode.None) { + return; + } + + if (mode == ScriptMode.LogAddresses) { + console.log(string(abi.encodePacked(name, "_ADDR=", vm.toString(address(addr))))); + return; + } + + string memory tomlPath = string(abi.encodePacked(".", name, "_ADDR")); + + if (mode == ScriptMode.WriteConfig) { + vm.writeToml(vm.toString(addr), CONFIG_CONTRACTS_PATH, tomlPath); + return; + } + + if (mode == ScriptMode.VerifyConfig) { + address expectedAddr = contractsCfg.readAddress(tomlPath); + + if (addr != expectedAddr) { + revert( + string( + abi.encodePacked( + "[ERROR] unexpected address for ", + name, + ", expected = ", + vm.toString(expectedAddr), + " (from toml config), got = ", + vm.toString(addr) + ) + ) + ); + } + } + } + + function _getImplementation(address proxyAddr) private view returns (address) { + // ERC1967Upgrade implementation slot + bytes32 _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; + // get implementation address + return address(uint160(uint256(vm.load(address(proxyAddr), _IMPLEMENTATION_SLOT)))); + } +} diff --git a/scripts/deterministic/GenerateConfigs.s.sol b/scripts/deterministic/GenerateConfigs.s.sol new file mode 100644 index 00000000..61718b82 --- /dev/null +++ b/scripts/deterministic/GenerateConfigs.s.sol @@ -0,0 +1,219 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity =0.8.24; + +import {stdToml} from "forge-std/StdToml.sol"; + +import {ADMIN_SYSTEM_BACKEND_CONFIG_PATH, ADMIN_SYSTEM_CRON_CONFIG_PATH, BALANCE_CHECKER_CONFIG_PATH, BRIDGE_HISTORY_API_CONFIG_PATH, BRIDGE_HISTORY_FETCHER_CONFIG_PATH, CHAIN_MONITOR_CONFIG_PATH, CONFIG_CONTRACTS_PATH, COORDINATOR_API_CONFIG_PATH, COORDINATOR_CRON_CONFIG_PATH, GENESIS_ALLOC_JSON_PATH, GENESIS_JSON_PATH, ROLLUP_CONFIG_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_PATH} from "./Constants.sol"; +import {DeployScroll} from "./DeployScroll.s.sol"; +import {DeterministicDeployment} from "./DeterministicDeployment.sol"; + +contract GenerateRollupConfig is DeployScroll { + using stdToml for string; + + /*************** + * Entry point * + ***************/ + + function run() public { + DeterministicDeployment.initialize(ScriptMode.VerifyConfig); + predictAllContracts(); + + generateRollupConfig(ROLLUP_CONFIG_PATH); + } + + /********************* + * Private functions * + *********************/ + + // prettier-ignore + function generateRollupConfig(string memory PATH) private { + // endpoints + vm.writeJson(L1_RPC_ENDPOINT, PATH, ".l1_config.endpoint"); + vm.writeJson(L2_RPC_ENDPOINT, PATH, ".l1_config.relayer_config.sender_config.endpoint"); + vm.writeJson(L2_RPC_ENDPOINT, PATH, ".l2_config.endpoint"); + vm.writeJson(L1_RPC_ENDPOINT, PATH, ".l2_config.relayer_config.sender_config.endpoint"); + + // contracts + vm.writeJson(vm.toString(L1_GAS_PRICE_ORACLE_ADDR), PATH, ".l1_config.relayer_config.gas_price_oracle_contract_address"); + vm.writeJson(vm.toString(L2_MESSAGE_QUEUE_ADDR), PATH, ".l2_config.l2_message_queue_address"); + vm.writeJson(vm.toString(L1_SCROLL_CHAIN_PROXY_ADDR), PATH, ".l2_config.relayer_config.rollup_contract_address"); + vm.writeJson(vm.toString(L1_MESSAGE_QUEUE_V2_PROXY_ADDR), PATH, ".l2_config.relayer_config.gas_price_oracle_contract_address"); + + // other + vm.writeJson(vm.toString(TEST_ENV_MOCK_FINALIZE_ENABLED), PATH, ".l2_config.relayer_config.enable_test_env_bypass_features"); + vm.writeJson(vm.toString(TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC), PATH, ".l2_config.relayer_config.finalize_batch_without_proof_timeout_sec"); + vm.writeJson(vm.toString(TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC), PATH, ".l2_config.relayer_config.finalize_bundle_without_proof_timeout_sec"); + + vm.writeJson(vm.toString(MAX_BLOCK_IN_CHUNK), PATH, ".l2_config.chunk_proposer_config.max_block_num_per_chunk"); + vm.writeJson(vm.toString(MAX_TX_IN_CHUNK), PATH, ".l2_config.chunk_proposer_config.max_tx_num_per_chunk"); + vm.writeJson(vm.toString(MAX_BATCH_IN_BUNDLE), PATH, ".l2_config.bundle_proposer_config.max_batch_num_per_bundle"); + } +} + +contract GenerateCoordinatorConfig is DeployScroll { + /*************** + * Entry point * + ***************/ + + function run() public { + DeterministicDeployment.initialize(ScriptMode.VerifyConfig); + predictAllContracts(); + + generateCoordinatorConfig(COORDINATOR_API_CONFIG_PATH); + generateCoordinatorConfig(COORDINATOR_CRON_CONFIG_PATH); + } + + /********************* + * Private functions * + *********************/ + + function generateCoordinatorConfig(string memory PATH) private { + // coordinator api + vm.writeJson(CHUNK_COLLECTION_TIME_SEC, PATH, ".prover_manager.chunk_collection_time_sec"); + vm.writeJson(BATCH_COLLECTION_TIME_SEC, PATH, ".prover_manager.batch_collection_time_sec"); + vm.writeJson(BUNDLE_COLLECTION_TIME_SEC, PATH, ".prover_manager.bundle_collection_time_sec"); + vm.writeJson(vm.toString(CHAIN_ID_L2), PATH, ".l2.chain_id"); + vm.writeJson(COORDINATOR_JWT_SECRET_KEY, PATH, ".auth.secret"); + + // coordinator cron + vm.writeJson(CHUNK_COLLECTION_TIME_SEC, PATH, ".prover_manager.chunk_collection_time_sec"); + vm.writeJson(BATCH_COLLECTION_TIME_SEC, PATH, ".prover_manager.batch_collection_time_sec"); + vm.writeJson(BUNDLE_COLLECTION_TIME_SEC, PATH, ".prover_manager.bundle_collection_time_sec"); + vm.writeJson(vm.toString(CHAIN_ID_L2), PATH, ".l2.chain_id"); + vm.writeJson(COORDINATOR_JWT_SECRET_KEY, PATH, ".auth.secret"); + } +} + +contract GenerateChainMonitorConfig is DeployScroll { + /*************** + * Entry point * + ***************/ + + function run() public { + DeterministicDeployment.initialize(ScriptMode.VerifyConfig); + predictAllContracts(); + + generateChainMonitorConfig(CHAIN_MONITOR_CONFIG_PATH); + } + + /********************* + * Private functions * + *********************/ + + // prettier-ignore + function generateChainMonitorConfig(string memory PATH) private { + // L1 + vm.writeJson(L1_RPC_ENDPOINT, PATH, ".l1_config.l1_url"); + vm.writeJson(vm.toString(L1_CONTRACT_DEPLOYMENT_BLOCK), PATH, ".l1_config.start_number"); + vm.writeJson(vm.toString(L1_ETH_GATEWAY_PROXY_ADDR), PATH, ".l1_config.l1_contracts.l1_gateways.eth_gateway"); + vm.writeJson(vm.toString(L1_WETH_GATEWAY_PROXY_ADDR), PATH, ".l1_config.l1_contracts.l1_gateways.weth_gateway"); + vm.writeJson(vm.toString(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR), PATH, ".l1_config.l1_contracts.l1_gateways.standard_erc20_gateway"); + vm.writeJson(vm.toString(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR), PATH, ".l1_config.l1_contracts.l1_gateways.custom_erc20_gateway"); + vm.writeJson(vm.toString(L1_ERC721_GATEWAY_PROXY_ADDR), PATH, ".l1_config.l1_contracts.l1_gateways.erc721_gateway"); + vm.writeJson(vm.toString(L1_ERC1155_GATEWAY_PROXY_ADDR), PATH, ".l1_config.l1_contracts.l1_gateways.erc1155_gateway"); + vm.writeJson(vm.toString(L1_SCROLL_MESSENGER_PROXY_ADDR), PATH, ".l1_config.l1_contracts.scroll_messenger"); + vm.writeJson(vm.toString(L1_MESSAGE_QUEUE_V2_PROXY_ADDR), PATH, ".l1_config.l1_contracts.message_queue"); + vm.writeJson(vm.toString(L1_SCROLL_CHAIN_PROXY_ADDR), PATH, ".l1_config.l1_contracts.scroll_chain"); + vm.writeJson(vm.toString(L2_DEPLOYER_INITIAL_BALANCE), PATH, ".l1_config.start_messenger_balance"); + + // L2 + vm.writeJson(L2_RPC_ENDPOINT, PATH, ".l2_config.l2_url"); + vm.writeJson(vm.toString(L2_ETH_GATEWAY_PROXY_ADDR), PATH, ".l2_config.l2_contracts.l2_gateways.eth_gateway"); + vm.writeJson(vm.toString(L2_WETH_GATEWAY_PROXY_ADDR), PATH, ".l2_config.l2_contracts.l2_gateways.weth_gateway"); + vm.writeJson(vm.toString(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR), PATH, ".l2_config.l2_contracts.l2_gateways.standard_erc20_gateway"); + vm.writeJson(vm.toString(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR), PATH, ".l2_config.l2_contracts.l2_gateways.custom_erc20_gateway"); + vm.writeJson(vm.toString(L2_ERC721_GATEWAY_PROXY_ADDR), PATH, ".l2_config.l2_contracts.l2_gateways.erc721_gateway"); + vm.writeJson(vm.toString(L2_ERC1155_GATEWAY_PROXY_ADDR), PATH, ".l2_config.l2_contracts.l2_gateways.erc1155_gateway"); + vm.writeJson(vm.toString(L2_SCROLL_MESSENGER_PROXY_ADDR), PATH, ".l2_config.l2_contracts.scroll_messenger"); + vm.writeJson(vm.toString(L2_MESSAGE_QUEUE_ADDR), PATH, ".l2_config.l2_contracts.message_queue"); + } +} + +contract GenerateBridgeHistoryConfig is DeployScroll { + /*************** + * Entry point * + ***************/ + + function run() public { + DeterministicDeployment.initialize(ScriptMode.VerifyConfig); + predictAllContracts(); + + generateBridgeHistoryConfig(BRIDGE_HISTORY_API_CONFIG_PATH); + generateBridgeHistoryConfig(BRIDGE_HISTORY_FETCHER_CONFIG_PATH); + } + + /********************* + * Private functions * + *********************/ + + // prettier-ignore + function generateBridgeHistoryConfig(string memory PATH) private { + // L1 contracts + vm.writeJson(vm.toString(L1_MESSAGE_QUEUE_V2_PROXY_ADDR), PATH, ".L1.MessageQueueAddr"); + vm.writeJson(vm.toString(L1_SCROLL_MESSENGER_PROXY_ADDR), PATH, ".L1.MessengerAddr"); + vm.writeJson(vm.toString(L1_SCROLL_CHAIN_PROXY_ADDR), PATH, ".L1.ScrollChainAddr"); + vm.writeJson(vm.toString(L1_GATEWAY_ROUTER_PROXY_ADDR), PATH, ".L1.GatewayRouterAddr"); + vm.writeJson(vm.toString(L1_ETH_GATEWAY_PROXY_ADDR), PATH, ".L1.ETHGatewayAddr"); + vm.writeJson(vm.toString(L1_WETH_GATEWAY_PROXY_ADDR), PATH, ".L1.WETHGatewayAddr"); + vm.writeJson(vm.toString(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR), PATH, ".L1.StandardERC20GatewayAddr"); + vm.writeJson(vm.toString(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR), PATH, ".L1.CustomERC20GatewayAddr"); + vm.writeJson(vm.toString(L1_ERC721_GATEWAY_PROXY_ADDR), PATH, ".L1.ERC721GatewayAddr"); + vm.writeJson(vm.toString(L1_ERC1155_GATEWAY_PROXY_ADDR), PATH, ".L1.ERC1155GatewayAddr"); + vm.writeJson(vm.toString(L1_WRAPPED_TOKEN_GATEWAY_ADDR), PATH, ".L1.WrappedTokenGatewayAddr"); + + // L2 contracts + vm.writeJson(vm.toString(L2_MESSAGE_QUEUE_ADDR), PATH, ".L2.MessageQueueAddr"); + vm.writeJson(vm.toString(L2_SCROLL_MESSENGER_PROXY_ADDR), PATH, ".L2.MessengerAddr"); + vm.writeJson(vm.toString(L2_GATEWAY_ROUTER_PROXY_ADDR), PATH, ".L2.GatewayRouterAddr"); + vm.writeJson(vm.toString(L2_ETH_GATEWAY_PROXY_ADDR), PATH, ".L2.ETHGatewayAddr"); + vm.writeJson(vm.toString(L2_WETH_GATEWAY_PROXY_ADDR), PATH, ".L2.WETHGatewayAddr"); + vm.writeJson(vm.toString(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR), PATH, ".L2.StandardERC20GatewayAddr"); + vm.writeJson(vm.toString(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR), PATH, ".L2.CustomERC20GatewayAddr"); + vm.writeJson(vm.toString(L2_ERC721_GATEWAY_PROXY_ADDR), PATH, ".L2.ERC721GatewayAddr"); + vm.writeJson(vm.toString(L2_ERC1155_GATEWAY_PROXY_ADDR), PATH, ".L2.ERC1155GatewayAddr"); + + // endpoints + vm.writeJson(L1_RPC_ENDPOINT, PATH, ".L1.endpoint"); + vm.writeJson(L2_RPC_ENDPOINT, PATH, ".L2.endpoint"); + + // others + vm.writeJson(vm.toString(L1_CONTRACT_DEPLOYMENT_BLOCK), PATH, ".L1.startHeight"); + } +} + +contract GenerateBalanceCheckerConfig is DeployScroll { + /*************** + * Entry point * + ***************/ + + function run() public { + DeterministicDeployment.initialize(ScriptMode.VerifyConfig); + predictAllContracts(); + + generateBalanceCheckerConfig(BALANCE_CHECKER_CONFIG_PATH); + } + + /********************* + * Private functions * + *********************/ + + function generateBalanceCheckerConfig(string memory PATH) private { + vm.writeJson(L1_RPC_ENDPOINT, PATH, ".addresses[0].rpc_url"); + vm.writeJson(vm.toString(L1_COMMIT_SENDER_ADDR), PATH, ".addresses[0].address"); + + vm.writeJson(L1_RPC_ENDPOINT, PATH, ".addresses[1].rpc_url"); + vm.writeJson(vm.toString(L1_FINALIZE_SENDER_ADDR), PATH, ".addresses[1].address"); + + vm.writeJson(L1_RPC_ENDPOINT, PATH, ".addresses[2].rpc_url"); + vm.writeJson(vm.toString(L1_GAS_ORACLE_SENDER_ADDR), PATH, ".addresses[2].address"); + + vm.writeJson(L1_RPC_ENDPOINT, PATH, ".addresses[3].rpc_url"); + vm.writeJson(vm.toString(L1_FEE_VAULT_ADDR), PATH, ".addresses[3].address"); + + vm.writeJson(L2_RPC_ENDPOINT, PATH, ".addresses[4].rpc_url"); + vm.writeJson(vm.toString(L2_GAS_ORACLE_SENDER_ADDR), PATH, ".addresses[4].address"); + + vm.writeJson(L2_RPC_ENDPOINT, PATH, ".addresses[5].rpc_url"); + vm.writeJson(vm.toString(L2_TX_FEE_VAULT_ADDR), PATH, ".addresses[5].address"); + } +} diff --git a/scripts/deterministic/GenerateGenesis.s.sol b/scripts/deterministic/GenerateGenesis.s.sol new file mode 100644 index 00000000..63dcfcb6 --- /dev/null +++ b/scripts/deterministic/GenerateGenesis.s.sol @@ -0,0 +1,250 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity =0.8.24; + +import {L1GasPriceOracle} from "../../src/L2/predeploys/L1GasPriceOracle.sol"; +import {L2MessageQueue} from "../../src/L2/predeploys/L2MessageQueue.sol"; +import {L2TxFeeVault} from "../../src/L2/predeploys/L2TxFeeVault.sol"; +import {Whitelist} from "../../src/L2/predeploys/Whitelist.sol"; +import {WrappedEther} from "../../src/L2/predeploys/WrappedEther.sol"; + +import {DETERMINISTIC_DEPLOYMENT_PROXY_ADDR, FEE_VAULT_MIN_WITHDRAW_AMOUNT, GENESIS_ALLOC_JSON_PATH, GENESIS_JSON_PATH} from "./Constants.sol"; +import {DeployScroll} from "./DeployScroll.s.sol"; +import {DeterministicDeployment} from "./DeterministicDeployment.sol"; + +contract GenerateGenesis is DeployScroll { + /*************** + * Entry point * + ***************/ + + function run() public { + DeterministicDeployment.initialize(ScriptMode.VerifyConfig); + predictAllContracts(); + + generateGenesisAlloc(); + generateGenesisJson(); + + // clean up temporary files + vm.removeFile(GENESIS_ALLOC_JSON_PATH); + } + + /********************* + * Private functions * + *********************/ + + function generateGenesisAlloc() private { + if (vm.exists(GENESIS_ALLOC_JSON_PATH)) { + vm.removeFile(GENESIS_ALLOC_JSON_PATH); + } + + // Scroll predeploys + setL2MessageQueue(); + setL1GasPriceOracle(); + setL2Whitelist(); + setL2Weth(); + setL2FeeVault(); + + // other predeploys + setDeterministicDeploymentProxy(); + + // reset sender + vm.resetNonce(msg.sender); + + // prefunded accounts + setL2ScrollMessenger(); + setL2Deployer(); + + // write to file + vm.dumpState(GENESIS_ALLOC_JSON_PATH); + sortJsonByKeys(GENESIS_ALLOC_JSON_PATH); + } + + function setL2MessageQueue() internal { + address predeployAddr = tryGetOverride("L2_MESSAGE_QUEUE"); + + if (predeployAddr == address(0)) { + return; + } + + // set code + L2MessageQueue _queue = new L2MessageQueue(DEPLOYER_ADDR); + vm.etch(predeployAddr, address(_queue).code); + + // set storage + bytes32 _ownerSlot = hex"0000000000000000000000000000000000000000000000000000000000000052"; + vm.store(predeployAddr, _ownerSlot, vm.load(address(_queue), _ownerSlot)); + + // reset so its not included state dump + vm.etch(address(_queue), ""); + vm.resetNonce(address(_queue)); + } + + function setL1GasPriceOracle() internal { + address predeployAddr = tryGetOverride("L1_GAS_PRICE_ORACLE"); + + if (predeployAddr == address(0)) { + return; + } + + // set code + L1GasPriceOracle _oracle = new L1GasPriceOracle(DEPLOYER_ADDR); + vm.etch(predeployAddr, address(_oracle).code); + + // set storage + bytes32 _ownerSlot = hex"0000000000000000000000000000000000000000000000000000000000000000"; + vm.store(predeployAddr, _ownerSlot, vm.load(address(_oracle), _ownerSlot)); + + bytes32 _isCurieSlot = hex"0000000000000000000000000000000000000000000000000000000000000008"; + vm.store(predeployAddr, _isCurieSlot, bytes32(uint256(1))); + + // reset so its not included state dump + vm.etch(address(_oracle), ""); + vm.resetNonce(address(_oracle)); + } + + function setL2Whitelist() internal { + address predeployAddr = tryGetOverride("L2_WHITELIST"); + + if (predeployAddr == address(0)) { + return; + } + + // set code + Whitelist _whitelist = new Whitelist(DEPLOYER_ADDR); + vm.etch(predeployAddr, address(_whitelist).code); + + // set storage + bytes32 _ownerSlot = hex"0000000000000000000000000000000000000000000000000000000000000000"; + vm.store(predeployAddr, _ownerSlot, vm.load(address(_whitelist), _ownerSlot)); + + // reset so its not included state dump + vm.etch(address(_whitelist), ""); + vm.resetNonce(address(_whitelist)); + } + + function setL2Weth() internal { + address predeployAddr = tryGetOverride("L2_WETH"); + + if (predeployAddr == address(0)) { + return; + } + + // set code + WrappedEther _weth = new WrappedEther(); + vm.etch(predeployAddr, address(_weth).code); + + // set storage + bytes32 _nameSlot = hex"0000000000000000000000000000000000000000000000000000000000000003"; + vm.store(predeployAddr, _nameSlot, vm.load(address(_weth), _nameSlot)); + + bytes32 _symbolSlot = hex"0000000000000000000000000000000000000000000000000000000000000004"; + vm.store(predeployAddr, _symbolSlot, vm.load(address(_weth), _symbolSlot)); + + // reset so its not included state dump + vm.etch(address(_weth), ""); + vm.resetNonce(address(_weth)); + } + + function setL2FeeVault() internal { + address predeployAddr = tryGetOverride("L2_TX_FEE_VAULT"); + + if (predeployAddr == address(0)) { + return; + } + + // set code + address _vaultAddr; + vm.prank(DEPLOYER_ADDR); + L2TxFeeVault _vault = new L2TxFeeVault(DEPLOYER_ADDR, L1_FEE_VAULT_ADDR, FEE_VAULT_MIN_WITHDRAW_AMOUNT); + vm.prank(DEPLOYER_ADDR); + _vault.updateMessenger(L2_SCROLL_MESSENGER_PROXY_ADDR); + _vaultAddr = address(_vault); + + vm.etch(predeployAddr, _vaultAddr.code); + + // set storage + bytes32 _ownerSlot = hex"0000000000000000000000000000000000000000000000000000000000000000"; + vm.store(predeployAddr, _ownerSlot, vm.load(_vaultAddr, _ownerSlot)); + + bytes32 _minWithdrawAmountSlot = hex"0000000000000000000000000000000000000000000000000000000000000001"; + vm.store(predeployAddr, _minWithdrawAmountSlot, vm.load(_vaultAddr, _minWithdrawAmountSlot)); + + bytes32 _messengerSlot = hex"0000000000000000000000000000000000000000000000000000000000000002"; + vm.store(predeployAddr, _messengerSlot, vm.load(_vaultAddr, _messengerSlot)); + + bytes32 _recipientSlot = hex"0000000000000000000000000000000000000000000000000000000000000003"; + vm.store(predeployAddr, _recipientSlot, vm.load(_vaultAddr, _recipientSlot)); + + bytes32 _ETHGatewaySlot = hex"0000000000000000000000000000000000000000000000000000000000000005"; + vm.store(predeployAddr, _ETHGatewaySlot, vm.load(_vaultAddr, _ETHGatewaySlot)); + + // reset so its not included state dump + vm.etch(_vaultAddr, ""); + vm.resetNonce(_vaultAddr); + } + + function setDeterministicDeploymentProxy() internal { + bytes + memory code = hex"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3"; + vm.etch(DETERMINISTIC_DEPLOYMENT_PROXY_ADDR, code); + } + + function setL2ScrollMessenger() internal { + vm.deal(L2_SCROLL_MESSENGER_PROXY_ADDR, L2_SCROLL_MESSENGER_INITIAL_BALANCE); + } + + function setL2Deployer() internal { + vm.deal(DEPLOYER_ADDR, L2_DEPLOYER_INITIAL_BALANCE); + } + + function generateGenesisJson() private { + // general config + vm.writeJson(vm.toString(CHAIN_ID_L2), GENESIS_JSON_PATH, ".config.chainId"); + + uint256 timestamp = vm.unixTime() / 1000; + vm.writeJson(vm.toString(bytes32(timestamp)), GENESIS_JSON_PATH, ".timestamp"); + + string memory extraData = string( + abi.encodePacked( + "0x0000000000000000000000000000000000000000000000000000000000000000", + vm.replace(vm.toString(L2GETH_SIGNER_ADDRESS), "0x", ""), + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ) + ); + + vm.writeJson(extraData, GENESIS_JSON_PATH, ".extraData"); + + // scroll-specific config + vm.writeJson(vm.toString(MAX_TX_IN_CHUNK), GENESIS_JSON_PATH, ".config.scroll.maxTxPerBlock"); + vm.writeJson(vm.toString(L2_TX_FEE_VAULT_ADDR), GENESIS_JSON_PATH, ".config.scroll.feeVaultAddress"); + + // serialize explicitly as string, otherwise foundry will serialize it as number + string memory l1ChainId = string(abi.encodePacked('"', vm.toString(CHAIN_ID_L1), '"')); + vm.writeJson(l1ChainId, GENESIS_JSON_PATH, ".config.scroll.l1Config.l1ChainId"); + + vm.writeJson( + vm.toString(L1_MESSAGE_QUEUE_V2_PROXY_ADDR), + GENESIS_JSON_PATH, + ".config.scroll.l1Config.l1MessageQueueAddress" + ); + + vm.writeJson( + vm.toString(L1_SCROLL_CHAIN_PROXY_ADDR), + GENESIS_JSON_PATH, + ".config.scroll.l1Config.scrollChainAddress" + ); + + // predeploys and prefunded accounts + string memory alloc = vm.readFile(GENESIS_ALLOC_JSON_PATH); + vm.writeJson(alloc, GENESIS_JSON_PATH, ".alloc"); + } + + /// @notice Sorts the allocs by address + // source: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/scripts/L2Genesis.s.sol + function sortJsonByKeys(string memory _path) private { + string[] memory commands = new string[](3); + commands[0] = "/bin/bash"; + commands[1] = "-c"; + commands[2] = string.concat("cat <<< $(jq -S '.' ", _path, ") > ", _path); + vm.ffi(commands); + } +} diff --git a/scripts/deterministic/config/config-contracts.toml b/scripts/deterministic/config/config-contracts.toml new file mode 100644 index 00000000..236e4692 --- /dev/null +++ b/scripts/deterministic/config/config-contracts.toml @@ -0,0 +1,60 @@ +L1_WETH_ADDR = "" +L1_PROXY_ADMIN_ADDR = "" +L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = "" +L1_WHITELIST_ADDR = "" +L1_SCROLL_CHAIN_PROXY_ADDR = "" +L1_SCROLL_MESSENGER_PROXY_ADDR = "" +L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_ENFORCED_TX_GATEWAY_PROXY_ADDR = "" +L1_PLONK_VERIFIER_ADDR = "" +L1_ZKEVM_VERIFIER_V2_ADDR = "" +L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR = "" +L1_MESSAGE_QUEUE_IMPLEMENTATION_ADDR = "" +L1_MESSAGE_QUEUE_PROXY_ADDR = "" +L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR = "" +L1_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = "" +L1_GATEWAY_ROUTER_PROXY_ADDR = "" +L1_ETH_GATEWAY_PROXY_ADDR = "" +L1_WETH_GATEWAY_PROXY_ADDR = "" +L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "" +L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "" +L1_ERC721_GATEWAY_PROXY_ADDR = "" +L1_ERC1155_GATEWAY_PROXY_ADDR = "" +L2_MESSAGE_QUEUE_ADDR = "" +L1_GAS_PRICE_ORACLE_ADDR = "" +L1_GAS_TOKEN_ADDR = "" +L1_GAS_TOKEN_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_GAS_TOKEN_GATEWAY_PROXY_ADDR = "" +L1_WRAPPED_TOKEN_GATEWAY_ADDR = "" +L2_WHITELIST_ADDR = "" +L2_WETH_ADDR = "" +L2_TX_FEE_VAULT_ADDR = "" +L2_PROXY_ADMIN_ADDR = "" +L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = "" +L2_SCROLL_MESSENGER_PROXY_ADDR = "" +L2_ETH_GATEWAY_PROXY_ADDR = "" +L2_WETH_GATEWAY_PROXY_ADDR = "" +L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "" +L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "" +L2_ERC721_GATEWAY_PROXY_ADDR = "" +L2_ERC1155_GATEWAY_PROXY_ADDR = "" +L2_SCROLL_STANDARD_ERC20_ADDR = "" +L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR = "" +L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = "" +L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_ETH_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_WETH_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_ERC721_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = "" +L2_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = "" +L2_GATEWAY_ROUTER_PROXY_ADDR = "" +L2_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_ETH_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_WETH_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_ERC721_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = "" +SYSTEM_CONFIG_IMPLEMENTATION_ADDR = "" +SYSTEM_CONFIG_PROXY_ADDR = "" \ No newline at end of file diff --git a/scripts/deterministic/config/config.toml b/scripts/deterministic/config/config.toml new file mode 100644 index 00000000..04c1816b --- /dev/null +++ b/scripts/deterministic/config/config.toml @@ -0,0 +1,134 @@ +[general] + +L1_RPC_ENDPOINT = "http://l1-devnet:8545" +L1_RPC_ENDPOINT_WEBSOCKET = "ws://l1-devnet:8546" +L2_RPC_ENDPOINT = "http://l2-sequencer:8545" + +CHAIN_NAME_L1="Ethereum" +CHAIN_NAME_L2="Scroll SDK" +CHAIN_ID_L1 = 111111 +CHAIN_ID_L2 = 221122 + +L1_CONTRACT_DEPLOYMENT_BLOCK = 0 + +[accounts] + +# note: for now we simply use Anvil's dev accounts + +DEPLOYER_PRIVATE_KEY = "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + +L1_COMMIT_SENDER_PRIVATE_KEY = "0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d" +L1_FINALIZE_SENDER_PRIVATE_KEY = "0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a" +L1_GAS_ORACLE_SENDER_PRIVATE_KEY = "0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6" +L2_GAS_ORACLE_SENDER_PRIVATE_KEY = "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + +DEPLOYER_ADDR = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" +OWNER_ADDR = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" + +L1_COMMIT_SENDER_ADDR = "0x70997970C51812dc3A010C7d01b50e0d17dc79C8" +L1_FINALIZE_SENDER_ADDR = "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC" +L1_GAS_ORACLE_SENDER_ADDR = "0x90F79bf6EB2c4f870365E785982E1f101E93b906" +L2_GAS_ORACLE_SENDER_ADDR = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" + +[db] + +ADMIN_SYSTEM_BACKEND_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable" +BLOCKSCOUT_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/blockscout" +BRIDGE_HISTORY_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable" +CHAIN_MONITOR_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable" +GAS_ORACLE_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable" +COORDINATOR_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable" +L1_EXPLORER_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/l1-explorer" +ROLLUP_NODE_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable" +ROLLUP_EXPLORER_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable" + +[gas-token] + +ALTERNATIVE_GAS_TOKEN_ENABLED = false +# EXAMPLE_GAS_TOKEN_DECIMAL = 6 +# L1_GAS_TOKEN = "0x68a041e7c20Afa4784b5d9C63246c89545Ac0E66" +GAS_ORACLE_INCORPORATE_TOKEN_EXCHANGE_RATE_ENANBLED = false +EXCHANGE_RATE_UPDATE_MODE = "Fixed" +FIXED_EXCHANGE_RATE = "0.01" +TOKEN_SYMBOL_PAIR = "UNIETH" + +[sequencer] + +L2GETH_SIGNER_ADDRESS = "0x756EA06BDEe36de11F22DCca45a31d8a178eF3c6" +L2GETH_KEYSTORE = '{"address":"756ea06bdee36de11f22dcca45a31d8a178ef3c6","crypto":{"cipher":"aes-128-ctr","ciphertext":"8bfb4e48c6b172f1f5794d2874476ca62f8184507c0916dbd45fe77a0056114c","cipherparams":{"iv":"509eb70e7379a776e0779634b6668277"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"ef0f0334e5db7c12d76993e1e9627593fd0d7cd44444b689e792c86bc8a5d75f"},"mac":"d766cac11d0bd563316f5655ebf07550b6fce98ba0ca3c13acdc1b65f5f185ca"},"id":"4459ad67-f2ce-48b2-8940-c0582106a4c6","version":3}' +L2GETH_PASSWORD = "scroll2022" +L2GETH_NODEKEY = "2f59ff2fdee1c42a3d8c8980c313bc8d6c2557463f7bb92b0f0bc89a6d3cbf01" +L2_GETH_STATIC_PEERS = '["enode://848a7d59dd8f60dd1a51160e6bc15c194937855443de9be4b2abd83e11a5c4ac21d61d065448c5c520826fe83f1f29eb5a452daccca27b8113aa897074132507@l2-sequencer:30303"]' +L2GETH_CCC_NUMWORKERS = 5 + +[rollup] + +MAX_TX_IN_CHUNK = 100 +MAX_BLOCK_IN_CHUNK = 100 +MAX_BATCH_IN_BUNDLE = 30 +MAX_L1_MESSAGE_GAS_LIMIT = 10_000_000 +TEST_ENV_MOCK_FINALIZE_ENABLED = true +TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC = 300 + +[frontend] + +EXTERNAL_RPC_URI_L1 = "http://l1-devnet.scrollsdk" +EXTERNAL_RPC_URI_L2 = "http://l2-rpc.scrollsdk" +BRIDGE_API_URI = "http://bridge-history-api.scrollsdk/api" +ROLLUPSCAN_API_URI = "http://rollup-explorer-backend.scrollsdk/api" +EXTERNAL_EXPLORER_URI_L1 = "http://l1-explorer.scrollsdk" +EXTERNAL_EXPLORER_URI_L2 = "http://blockscout.scrollsdk" +ADMIN_SYSTEM_DASHBOARD_URI = "http://admin-system-dashboard.scrollsdk" +GRAFANA_URI = "http://grafana.scrollsdk" + +[genesis] + +L2_MAX_ETH_SUPPLY = "226156424291633194186662080095093570025917938800079226639565593765455331328" +L2_DEPLOYER_INITIAL_BALANCE = 1000000000000000000 + +[contracts] + +DEPLOYMENT_SALT = "devnetSalt-000" + +# contracts deployed outside this script +L1_FEE_VAULT_ADDR = "0x0000000000000000000000000000000000000001" + +[contracts.overrides] + +# L1_WETH = "0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14" +# L1_PLONK_VERIFIER = "0x0000000000000000000000000000000000000001" + +L2_MESSAGE_QUEUE = "0x5300000000000000000000000000000000000000" +L1_GAS_PRICE_ORACLE = "0x5300000000000000000000000000000000000002" +L2_WHITELIST = "0x5300000000000000000000000000000000000003" +L2_WETH = "0x5300000000000000000000000000000000000004" +L2_TX_FEE_VAULT = "0x5300000000000000000000000000000000000005" + +[contracts.verify] + +VERIFIER_TYPE_L1 = "blockscout" +VERIFIER_TYPE_L2 = "blockscout" +EXPLORER_URI_L1 = "http://l1-explorer.scrollsdk" +EXPLORER_URI_L2 = "http://blockscout.scrollsdk" +RPC_URI_L1 = "http://l1-devnet.scrollsdk" +RPC_URI_L2 = "http://l2-rpc.scrollsdk" +EXPLORER_API_KEY_L1 = "" +EXPLORER_API_KEY_L2 = "" + +[coordinator] + +CHUNK_COLLECTION_TIME_SEC = 3600 +BATCH_COLLECTION_TIME_SEC = 1800 +BUNDLE_COLLECTION_TIME_SEC = 600 +COORDINATOR_JWT_SECRET_KEY = "e788b62d39254928a821ac1c76b274a8c835aa1e20ecfb6f50eb10e87847de44" + +[ingress] + +FRONTEND_HOST = "frontends.scrollsdk" +BRIDGE_HISTORY_API_HOST = "bridge-history-api.scrollsdk" +ROLLUP_EXPLORER_API_HOST = "rollup-explorer-backend.scrollsdk" +COORDINATOR_API_HOST = "coordinator-api.scrollsdk" +RPC_GATEWAY_HOST = "l2-rpc.scrollsdk" +BLOCKSCOUT_HOST = "blockscout.scrollsdk" +ADMIN_SYSTEM_DASHBOARD_HOST= "admin-system-dashboard.scrollsdk" +GRAFANA_HOST = "http://grafana.scrollsdk" \ No newline at end of file diff --git a/scripts/deterministic/contracts/MultipleVersionRollupVerifierSetOwner.sol b/scripts/deterministic/contracts/MultipleVersionRollupVerifierSetOwner.sol new file mode 100644 index 00000000..21eecac3 --- /dev/null +++ b/scripts/deterministic/contracts/MultipleVersionRollupVerifierSetOwner.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity =0.8.24; + +import {MultipleVersionRollupVerifier} from "../../../src/L1/rollup/MultipleVersionRollupVerifier.sol"; + +contract MultipleVersionRollupVerifierSetOwner is MultipleVersionRollupVerifier { + /// @dev allow setting the owner in the constructor, otherwise + /// DeterministicDeploymentProxy would become the owner. + constructor( + address owner, + uint256[] memory _versions, + address[] memory _verifiers + ) MultipleVersionRollupVerifier(_versions, _verifiers) { + _transferOwnership(owner); + } +} diff --git a/scripts/deterministic/contracts/ProxyAdminSetOwner.sol b/scripts/deterministic/contracts/ProxyAdminSetOwner.sol new file mode 100644 index 00000000..a3283346 --- /dev/null +++ b/scripts/deterministic/contracts/ProxyAdminSetOwner.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity =0.8.24; + +import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; + +contract ProxyAdminSetOwner is ProxyAdmin { + /// @dev allow setting the owner in the constructor, otherwise + /// DeterministicDeploymentProxy would become the owner. + constructor(address owner) { + _transferOwnership(owner); + } +} diff --git a/scripts/deterministic/contracts/ScrollStandardERC20FactorySetOwner.sol b/scripts/deterministic/contracts/ScrollStandardERC20FactorySetOwner.sol new file mode 100644 index 00000000..7b18d8cf --- /dev/null +++ b/scripts/deterministic/contracts/ScrollStandardERC20FactorySetOwner.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity =0.8.24; + +import {ScrollStandardERC20Factory} from "../../../src/libraries/token/ScrollStandardERC20Factory.sol"; + +contract ScrollStandardERC20FactorySetOwner is ScrollStandardERC20Factory { + /// @dev allow setting the owner in the constructor, otherwise + /// DeterministicDeploymentProxy would become the owner. + constructor(address owner, address _implementation) ScrollStandardERC20Factory(_implementation) { + _transferOwnership(owner); + } +} diff --git a/scripts/deterministic/shell/deploy.sh b/scripts/deterministic/shell/deploy.sh new file mode 100644 index 00000000..286dcd17 --- /dev/null +++ b/scripts/deterministic/shell/deploy.sh @@ -0,0 +1,52 @@ +#!/bin/sh + +export FOUNDRY_EVM_VERSION="cancun" +export FOUNDRY_BYTECODE_HASH="none" + +if [ "${L1_RPC_ENDPOINT}" = "" ]; then + echo "L1_RPC_ENDPOINT is not set" + L1_RPC_ENDPOINT="http://host.docker.internal:8543" +fi + +if [ "$L2_RPC_ENDPOINT" = "" ]; then + echo "L2_RPC_ENDPOINT is not set" + L2_RPC_ENDPOINT="http://host.docker.internal:8545" +fi + +if [ "${BATCH_SIZE}" = "" ]; then + BATCH_SIZE="100" +fi + +echo "using L1_RPC_ENDPOINT = $L1_RPC_ENDPOINT" +echo "using L2_RPC_ENDPOINT = $L2_RPC_ENDPOINT" + +# simulate L1 +echo "" +echo "simulating on L1" +forge script scripts/deterministic/DeployScroll.s.sol:DeployScroll --rpc-url "$L1_RPC_ENDPOINT" --sig "run(string,string)" "L1" "verify-config" || exit 1 + +# simulate L2 +echo "" +echo "simulating on L2" +forge script scripts/deterministic/DeployScroll.s.sol:DeployScroll --rpc-url "$L2_RPC_ENDPOINT" --sig "run(string,string)" "L2" "verify-config" --legacy || exit 1 + +# deploy L1 +echo "" +echo "deploying on L1" +forge script scripts/deterministic/DeployScroll.s.sol:DeployScroll --rpc-url "$L1_RPC_ENDPOINT" --batch-size "$BATCH_SIZE" --sig "run(string,string)" "L1" "verify-config" --broadcast || exit 1 + +# deploy L2 +echo "" +echo "deploying on L2" +forge script scripts/deterministic/DeployScroll.s.sol:DeployScroll --rpc-url "$L2_RPC_ENDPOINT" --batch-size "$BATCH_SIZE" --sig "run(string,string)" "L2" "verify-config" --broadcast --legacy || exit 1 + +# log broadcast files +echo "" +echo "Broadcast files:" +for file in broadcast/DeployScroll.s.sol/*/*; do + if [ -f "$file" ]; then + echo "$file:" + cat "$file" + echo "" + fi +done \ No newline at end of file diff --git a/scripts/deterministic/shell/update-configs.sh b/scripts/deterministic/shell/update-configs.sh new file mode 100644 index 00000000..87e91b0e --- /dev/null +++ b/scripts/deterministic/shell/update-configs.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +echo "" +echo "generating config-contracts.toml" +forge script scripts/deterministic/DeployScroll.s.sol:DeployScroll --sig "run(string,string)" "none" "write-config" || exit 1 + +echo "" +echo "updating genesis.yaml" +forge script scripts/deterministic/GenerateGenesis.s.sol:GenerateGenesis || exit 1 + +echo "" +echo "updating rollup-config.yaml" +forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateRollupConfig || exit 1 + +echo "" +echo "updating coordinator-config.yaml" +forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateCoordinatorConfig || exit 1 + +echo "" +echo "updating chain-monitor-config.yaml" +forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateChainMonitorConfig || exit 1 + +echo "" +echo "updating bridge-history-config.yaml" +forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateBridgeHistoryConfig || exit 1 + +echo "" +echo "updating balance-checker-config.yaml" +forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateBalanceCheckerConfig || exit 1 \ No newline at end of file diff --git a/volume/admin-system-backend-config.yaml b/volume/admin-system-backend-config.yaml new file mode 100644 index 00000000..5e77df49 --- /dev/null +++ b/volume/admin-system-backend-config.yaml @@ -0,0 +1,60 @@ +scrollConfig: | + { + "db_config": { + "driver_name": "postgres", + "dsn": "", + "max_open_connections": 200, + "max_idel_connections": 20 + }, + "read_only_db_config": { + "driver_name": "postgres", + "dsn": "", + "max_open_connections": 200, + "max_idel_connections": 20 + }, + "db_mappings": { + "default": "read_only", + "batch_chunk": "read_only", + "prover_block_list": "read_write" + }, + "auth_db_config": { + "driver_name": "postgres", + "dsn": "", + "max_open_connections": 200, + "max_idel_connections": 20 + }, + "authentication": { + "mode": "skip", + "jwt": { + "secret": "scroll admin system secret key", + "token_expire_seconds": 3600 + }, + "ldap": { + "endpoint": "ldap://xxx.xxx.com:389", + "bind_dn": "", + "bind_password": "", + "search_base_dn_list": [""], + "search_filter": "(mail=%s)" + }, + "otp": { + "issuer": "ScrollAdmin(Dev)", + "enabled": true, + "admin_only": true + } + }, + "authorization": { + "casbin": { + "model_path": "conf/model.conf", + "policy_path": "conf/policy.csv" + } + }, + "prometheus": { + "endpoint": "https://xxx.xxx.com/prometheus", + "user": "", + "password": "" + }, + "admin": { + "prover_becomes_offline_since_last_get_task_seconds": 3600, + "prover_becomes_idle_since_last_task_assigned_seconds": 1800 + } + } diff --git a/volume/balance-checker-config.yaml b/volume/balance-checker-config.yaml new file mode 100644 index 00000000..1d480f40 --- /dev/null +++ b/volume/balance-checker-config.yaml @@ -0,0 +1,43 @@ +scrollConfig: | + { + "addresses": [ + { + "rpc_url": "https://alien-flashy-arm.ethereum-sepolia.quiknode.pro/2aeb75414e5ee0e930b64c2e7feff59efb537f30", + "min_balance_ether": "10", + "address": "0x70997970C51812dc3A010C7d01b50e0d17dc79C8", + "name": "L1_COMMIT_SENDER" + }, + { + "rpc_url": "https://alien-flashy-arm.ethereum-sepolia.quiknode.pro/2aeb75414e5ee0e930b64c2e7feff59efb537f30", + "min_balance_ether": "10", + "address": "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC", + "name": "L1_FINALIZE_SENDER" + }, + { + "rpc_url": "https://alien-flashy-arm.ethereum-sepolia.quiknode.pro/2aeb75414e5ee0e930b64c2e7feff59efb537f30", + "min_balance_ether": "1.1", + "address": "0x90F79bf6EB2c4f870365E785982E1f101E93b906", + "name": "L1_GAS_ORACLE_SENDER" + }, + { + "rpc_url": "https://alien-flashy-arm.ethereum-sepolia.quiknode.pro/2aeb75414e5ee0e930b64c2e7feff59efb537f30", + "min_balance_ether": "0", + "address": "0x0000000000000000000000000000000000000001", + "name": "L1_SCROLL_FEE_VAULT" + }, + { + "rpc_url": "http://l2-sequencer:8545", + "min_balance_ether": "1.1", + "address": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "name": "L2_GAS_ORACLE_SENDER" + }, + { + "rpc_url": "http://l2-sequencer:8545", + "min_balance_ether": "0", + "address": "0x5300000000000000000000000000000000000005", + "name": "L2_TX_FEE_VAULT" + } + ], + "JOB_INTERVAL_SECS": 60, + "BIND_PORT": 8080 + } diff --git a/volume/bridge-history-config.yaml b/volume/bridge-history-config.yaml new file mode 100644 index 00000000..fe276626 --- /dev/null +++ b/volume/bridge-history-config.yaml @@ -0,0 +1,59 @@ +scrollConfig: | + { + "L1": { + "confirmation": 0, + "endpoint": "https://alien-flashy-arm.ethereum-sepolia.quiknode.pro/2aeb75414e5ee0e930b64c2e7feff59efb537f30", + "startHeight": 0, + "blockTime": 12, + "fetchLimit": 16, + "MessageQueueAddr": "0x74E69415630e35631eb0D2199AF6De5e010B58B2", + "MessengerAddr": "0xf5a927Ea81032Dbe3921424E18Ad81E3680C86ac", + "ScrollChainAddr": "0x3177d80e33919312244Fbbd70E4aA95eBB27070a", + "GatewayRouterAddr": "0xFeA8784A9f31f6f6895e65B65eE63fC85d324F5F", + "ETHGatewayAddr": "0x0000000000000000000000000000000000000000", + "WETHGatewayAddr": "0x0000000000000000000000000000000000000000", + "StandardERC20GatewayAddr": "0x8c7fff50e219E2795ccCF188bD9728d0C4009c1b", + "CustomERC20GatewayAddr": "0xCD832C95AabA0d2f50d7567b21A43a5d93a932b0", + "ERC721GatewayAddr": "0x75ce7004fF8a3dfF92Fd5a56dCb4f1eD5f26F8A7", + "ERC1155GatewayAddr": "0xC62dd7EC0907A750EBfEA84191Fd24550f6f3D0f", + "USDCGatewayAddr": "0x0000000000000000000000000000000000000000", + "LIDOGatewayAddr": "0x0000000000000000000000000000000000000000", + "DAIGatewayAddr": "0x0000000000000000000000000000000000000000", + "PufferGatewayAddr": "0x0000000000000000000000000000000000000000", + "GasTokenGatewayAddr": "0xD287a0Cf91D27E876BeAF0977093eB47d6Cc4381", + "WrappedTokenGatewayAddr": "0xA3d3011C108816B3eE0468c04aC61036bA06Fb6e" + }, + "L2": { + "confirmation": 0, + "endpoint": "http://l2-sequencer:8545", + "blockTime": 3, + "fetchLimit": 64, + "MessageQueueAddr": "0x5300000000000000000000000000000000000000", + "MessengerAddr": "0xd36B5A075cF7d22F46aa3E1C89d21d0C5cc16ebF", + "GatewayRouterAddr": "0xA26fEdaeA13041f7bc6c36774c03265b3d26c5ac", + "ETHGatewayAddr": "0xAd7de4158e155fBfDeA9C20aC682351C6e78a58f", + "WETHGatewayAddr": "0x0000000000000000000000000000000000000000", + "StandardERC20GatewayAddr": "0x0C2e35775Bd36d28A96da0D31C933A9C4773cE10", + "CustomERC20GatewayAddr": "0x1AE0E1685fD6b34382D10eE90C7d7e2B2D647A09", + "ERC721GatewayAddr": "0x9141345F6F7A1Fc6C143A8c50C233E44349A8bbA", + "ERC1155GatewayAddr": "0x3D196017cE171C77A406EcC066F2CeB595d3Cb5f", + "USDCGatewayAddr": "0x0000000000000000000000000000000000000000", + "LIDOGatewayAddr": "0x0000000000000000000000000000000000000000", + "DAIGatewayAddr": "0x0000000000000000000000000000000000000000", + "PufferGatewayAddr": "0x0000000000000000000000000000000000000000" + }, + "db": { + "dsn": "", + "driverName": "postgres", + "maxOpenNum": 200, + "maxIdleNum": 20 + }, + "redis": { + "address": "localhost:6379", + "username": "default", + "password": "", + "local": true, + "minIdleConns": 10, + "readTimeoutMs": 500 + } + } diff --git a/volume/chain-monitor-config.yaml b/volume/chain-monitor-config.yaml new file mode 100644 index 00000000..ea2b3d6e --- /dev/null +++ b/volume/chain-monitor-config.yaml @@ -0,0 +1,59 @@ +scrollConfig: | + { + "l1_config": { + "l1_url": "https://alien-flashy-arm.ethereum-sepolia.quiknode.pro/2aeb75414e5ee0e930b64c2e7feff59efb537f30", + "confirm": "0x20", + "start_number": 0, + "l1_contracts": { + "l1_gateways": { + "eth_gateway": "0x0000000000000000000000000000000000000000", + "weth_gateway": "0x0000000000000000000000000000000000000000", + "standard_erc20_gateway": "0x8c7fff50e219E2795ccCF188bD9728d0C4009c1b", + "custom_erc20_gateway": "0xCD832C95AabA0d2f50d7567b21A43a5d93a932b0", + "erc721_gateway": "0x75ce7004fF8a3dfF92Fd5a56dCb4f1eD5f26F8A7", + "erc1155_gateway": "0xC62dd7EC0907A750EBfEA84191Fd24550f6f3D0f", + "dai_gateway": "0x0000000000000000000000000000000000000000", + "usdc_gateway": "0x0000000000000000000000000000000000000000", + "lido_gateway": "0x0000000000000000000000000000000000000000", + "puffer_gateway": "0x0000000000000000000000000000000000000000", + "gas_token_gateway": "0xD287a0Cf91D27E876BeAF0977093eB47d6Cc4381" + }, + "scroll_messenger": "0xf5a927Ea81032Dbe3921424E18Ad81E3680C86ac", + "message_queue": "0x74E69415630e35631eb0D2199AF6De5e010B58B2", + "scroll_chain": "0x3177d80e33919312244Fbbd70E4aA95eBB27070a", + "gas_token": "0x8258c70A41de87A98d7fAD2BbF7c1009845a8A1D" + }, + "start_messenger_balance": 1000000000000000000 + }, + "l2_config": { + "l2_url": "http://l2-sequencer:8545", + "confirm": "0x80", + "l2_contracts": { + "l2_gateways": { + "eth_gateway": "0xAd7de4158e155fBfDeA9C20aC682351C6e78a58f", + "weth_gateway": "0x0000000000000000000000000000000000000000", + "standard_erc20_gateway": "0x0C2e35775Bd36d28A96da0D31C933A9C4773cE10", + "custom_erc20_gateway": "0x1AE0E1685fD6b34382D10eE90C7d7e2B2D647A09", + "erc721_gateway": "0x9141345F6F7A1Fc6C143A8c50C233E44349A8bbA", + "erc1155_gateway": "0x3D196017cE171C77A406EcC066F2CeB595d3Cb5f", + "dai_gateway": "0x0000000000000000000000000000000000000000", + "usdc_gateway": "0x0000000000000000000000000000000000000000", + "lido_gateway": "0x0000000000000000000000000000000000000000", + "puffer_gateway": "0x0000000000000000000000000000000000000000" + }, + "scroll_messenger": "0xd36B5A075cF7d22F46aa3E1C89d21d0C5cc16ebF", + "message_queue": "0x5300000000000000000000000000000000000000" + } + }, + "slack_webhook_config": { + "webhook_url": "http://localhost:1234", + "worker_count": 5, + "worker_buffer_size": 1000 + }, + "db_config": { + "driver_name": "postgres", + "dsn": "", + "maxOpenNum": 100, + "maxIdleNum": 20 + } + } diff --git a/volume/config-contracts.toml b/volume/config-contracts.toml new file mode 100644 index 00000000..3c0dbe91 --- /dev/null +++ b/volume/config-contracts.toml @@ -0,0 +1,58 @@ +L1_WETH_ADDR = "0x1e2C7DDe9400D2f3A9CcB05A678304e61B432C5A" +L1_PROXY_ADMIN_ADDR = "0x4672de1b20A1566BdbDD57ba8C08dDcFd06D541D" +L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = "0x69c5F48066956bF3e3c2c57F2cF8Fa807bF65E5c" +L1_WHITELIST_ADDR = "0xe0CD096bB35FD07994b66e709558Ec02F0c7c08D" +L1_SCROLL_CHAIN_PROXY_ADDR = "0x840c1F1fA60480d560d16a6f5Cb5ba423f7b5A60" +L1_SCROLL_MESSENGER_PROXY_ADDR = "0x6Cbf8d54132bDA43Cb299c938D6eB1A9da91EfDb" +L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR = "0x56308Cc9768dD68BaCE24567A71f4581FaD4492F" +L1_ENFORCED_TX_GATEWAY_PROXY_ADDR = "0x975e8bBc1B61b6b4F6eF9E83CAC6763E11E4a66F" +L1_PLONK_VERIFIER_ADDR = "0x9938C1eb012f65A1f49a620Ba5F5a2A598116D4F" +L1_ZKEVM_VERIFIER_V2_ADDR = "0x72283C5C41BAF3c82A60b085Eb81D310C1a38035" +L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR = "0x102B299619C8D8Ce3873Ea36a14c6e032ADeD4B7" +L1_MESSAGE_QUEUE_IMPLEMENTATION_ADDR = "0xC3AcF1bc026D43d73144afd0bE7BeF5d10577Be9" +L1_MESSAGE_QUEUE_PROXY_ADDR = "0xc8f8C1D85da5b6eAF13Df8f339f102c1797f398c" +L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR = "0xF39b72C5420C7247d129f1713257Db19d1A5436f" +L1_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = "0x68fa67416720ce80681BE13eBAAbC99e0e87f161" +L1_GATEWAY_ROUTER_PROXY_ADDR = "0xc72212f4015F544918b1B5A121e34413F211bcd2" +L1_ETH_GATEWAY_PROXY_ADDR = "0xe63a38E81B5Ba8567cAfc7485b1F738F1D9Ee39d" +L1_WETH_GATEWAY_PROXY_ADDR = "0xa4Ff12b8BFE04621a10857BbeE9f6c8fF420fB59" +L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "0x79eD883eb17dBf081bB7A3bE58FaF9B9A900bc0b" +L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "0x1B517ee08b101F4478678DCd1B813F713D8Ab8cf" +L1_ERC721_GATEWAY_PROXY_ADDR = "0x425db501531a0e938F609894c3Be1b3027a34B68" +L1_ERC1155_GATEWAY_PROXY_ADDR = "0x709B8DeaFf1E8653243AA0C6e134b0f7D397A846" +L2_MESSAGE_QUEUE_ADDR = "0x5300000000000000000000000000000000000000" +L1_GAS_PRICE_ORACLE_ADDR = "0x5300000000000000000000000000000000000002" +L1_GAS_TOKEN_ADDR = "" +L1_GAS_TOKEN_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_GAS_TOKEN_GATEWAY_PROXY_ADDR = "" +L1_WRAPPED_TOKEN_GATEWAY_ADDR = "" +L2_WHITELIST_ADDR = "0x5300000000000000000000000000000000000003" +L2_WETH_ADDR = "0x5300000000000000000000000000000000000004" +L2_TX_FEE_VAULT_ADDR = "0x5300000000000000000000000000000000000005" +L2_PROXY_ADMIN_ADDR = "0xAB37161630e0ef805e80f61Ca9A62a45B3b4Eb48" +L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = "0x3BeB9863d39bAbEcE836bd67c94f4EaeA4BFff7f" +L2_SCROLL_MESSENGER_PROXY_ADDR = "0x6345AdD8A6a7547c86a46723f04d4ce106F4113B" +L2_ETH_GATEWAY_PROXY_ADDR = "0xfF05411b7749cB68F521fe9fB3eDC6b81193C11e" +L2_WETH_GATEWAY_PROXY_ADDR = "0xa8A4BAFA44aC3acc537049329CF06182E8Cd27Bb" +L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "0x5a6797829303bA0308aaF48CFe0B3AA2F8ec9aB2" +L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "0x9de450AB6d03E6489E5515f2Dbe735d2e4e2812a" +L2_ERC721_GATEWAY_PROXY_ADDR = "0x9a09e593B23a9C1A5A86520cDaC1ecF3Ac729C35" +L2_ERC1155_GATEWAY_PROXY_ADDR = "0x6d37216d4831ee5c7A64eD142dC5Db2313600809" +L2_SCROLL_STANDARD_ERC20_ADDR = "0x7A10cA0733BEe05671228d61A3C7B43A30227A17" +L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR = "0xebDc0E06338E312b10252F5073b0E3B15a4De19F" +L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = "0xca7dd539bacCe6c6b93dCD3A06a17555f7b18bF9" +L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "0x29D9C2Af0f4C2d2988D366f55E289dF1F08c00e0" +L1_ETH_GATEWAY_IMPLEMENTATION_ADDR = "0xf66c788C211eBB8279321FCfF8A4Df58a652A25E" +L1_WETH_GATEWAY_IMPLEMENTATION_ADDR = "0xd28436F9a654176b1592173AE28665df2167e455" +L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "0x345461E52A112E9d408d00f93bbb7bfC70d43DAE" +L1_ERC721_GATEWAY_IMPLEMENTATION_ADDR = "0xDecbf1D8c00f8c0dBC04a444d9A725486C46169A" +L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = "0x0182aCe8b239f38948B3f265cee9C04240Cb9627" +L2_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = "0x20D16C3d6B61787e9660E5812e15b9fdce67C8E7" +L2_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = "0xcDb5641e79C75B80B98B199dBdA79Da85fF9C07E" +L2_GATEWAY_ROUTER_PROXY_ADDR = "0x221c6577bD4d8b7937b43F0017Af5dde59073879" +L2_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "0x789E2a3724516d43b2CF53c32CCAa62ab43e4EF7" +L2_ETH_GATEWAY_IMPLEMENTATION_ADDR = "0xf668d57bD1ff4A2f542A094b7c95Ca84F4352694" +L2_WETH_GATEWAY_IMPLEMENTATION_ADDR = "0x465401408F4b6aa4dB7B53CAcB3A9da5607e93C1" +L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "0x8E03CAF9E9ecf21F36166C79F9b6219F0d6862dd" +L2_ERC721_GATEWAY_IMPLEMENTATION_ADDR = "0xCB0B7032d4206E19ADAa4ae2ebc478Ef21715C75" +L2_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = "0x3Fa37eeA0B5Ce8782A25Fc0C0B1C8725277CFabE" diff --git a/volume/config.toml b/volume/config.toml new file mode 100644 index 00000000..7d822c03 --- /dev/null +++ b/volume/config.toml @@ -0,0 +1,111 @@ +[general] +L1_RPC_ENDPOINT = "https://sepolia-subway-proxied-stg.alt.technology" +L1_RPC_ENDPOINT_WEBSOCKET = "ws://l1-devnet:8546" +L2_RPC_ENDPOINT = "http://l2-rpc:8545" +CHAIN_NAME_L1 = "Sepolia" +CHAIN_NAME_L2 = "Scroll SDK" +CHAIN_ID_L1 = "11155111" +CHAIN_ID_L2 = 221_122 +L1_CONTRACT_DEPLOYMENT_BLOCK = "7162368" + +[accounts] +DEPLOYER_PRIVATE_KEY = "0x9daffeba4af8c823c0e16caa29ede9d7eecd6ae87878ce7d73733c82ac488633" +L1_COMMIT_SENDER_PRIVATE_KEY = "0xa583f0e5a4c7a515d3bf7b27ba8932cb142d37ac3bd593e27a253cb020624033" +L1_FINALIZE_SENDER_PRIVATE_KEY = "0x772738ec4ede7a03be1448dc15892b4ee7182851a2e6a1bda7a1992a003448f3" +L1_GAS_ORACLE_SENDER_PRIVATE_KEY = "0xc2b21d848892563d3a812ea043a1edf5c8506014c3ec78c5c3334ec1bd109721" +L2_GAS_ORACLE_SENDER_PRIVATE_KEY = "0x92f21740cbb8beaf566350d7a88e53ea95c8b0b02987925bde251d2547d89e7b" +DEPLOYER_ADDR = "0xe856F24E62552c350ADdD4b27C36F582F06DD2B7" +OWNER_ADDR = "0x731297b06c1b37bDE3545dE50De24cE9d82dF9c8" +L1_COMMIT_SENDER_ADDR = "0x7dfE1C3247e2a0de8Bd85BC33dC8C5BC253F277B" +L1_FINALIZE_SENDER_ADDR = "0x3F97C3F934dEc82C1600028f22f06654ebF33b07" +L1_GAS_ORACLE_SENDER_ADDR = "0xd182dF4a640fA213e2BBC5e8114952f843EbB461" +L2_GAS_ORACLE_SENDER_ADDR = "0x22F867bf69AB85c1A847F3de26f756d0C154765e" + +[db] +ADMIN_SYSTEM_DB_CONNECTION_STRING = "" +BLOCKSCOUT_DB_CONNECTION_STRING = "postgres://blockscout:.tyllv893aco@private-morty-11-7-3-do-user-9610937-0.i.db.ondigitalocean.com:25061/scroll_blockscout?sslmode=require" +BRIDGE_HISTORY_DB_CONNECTION_STRING = "postgres://bridge_history:.2fcmwgetuwu@private-morty-11-7-3-do-user-9610937-0.i.db.ondigitalocean.com:25061/scroll_bridge_history?sslmode=require" +CHAIN_MONITOR_DB_CONNECTION_STRING = "postgres://chain_monitor:.zqufpqr9bym@private-morty-11-7-3-do-user-9610937-0.i.db.ondigitalocean.com:25061/scroll_chain_monitor?sslmode=require" +GAS_ORACLE_DB_CONNECTION_STRING = "postgres://rollup_node:0.yxcrfv5pxj@private-morty-11-7-3-do-user-9610937-0.i.db.ondigitalocean.com:25061/scroll_rollup?sslmode=require" +COORDINATOR_DB_CONNECTION_STRING = "postgres://rollup_node:0.yxcrfv5pxj@private-morty-11-7-3-do-user-9610937-0.i.db.ondigitalocean.com:25061/scroll_rollup?sslmode=require" +L1_EXPLORER_DB_CONNECTION_STRING = "" +ROLLUP_NODE_DB_CONNECTION_STRING = "postgres://rollup_node:0.yxcrfv5pxj@private-morty-11-7-3-do-user-9610937-0.i.db.ondigitalocean.com:25061/scroll_rollup?sslmode=require" +ROLLUP_EXPLORER_DB_CONNECTION_STRING = "postgres://rollup_node:0.yxcrfv5pxj@private-morty-11-7-3-do-user-9610937-0.i.db.ondigitalocean.com:25061/scroll_rollup?sslmode=require" +SCROLL_DB_CONNECTION_STRING = "postgres://rollup_node:0.yxcrfv5pxj@private-morty-11-7-3-do-user-9610937-0.i.db.ondigitalocean.com:25061/scroll_rollup?sslmode=require" +ADMIN_SYSTEM_BACKEND_DB_CONNECTION_STRING = "postgres://rollup_node:0.yxcrfv5pxj@private-morty-11-7-3-do-user-9610937-0.i.db.ondigitalocean.com:25061/scroll_rollup?sslmode=require" + +[gas-token] +ALTERNATIVE_GAS_TOKEN_ENABLED = false +GAS_ORACLE_INCORPORATE_TOKEN_EXCHANGE_RATE_ENANBLED = false +EXCHANGE_RATE_UPDATE_MODE = "Fixed" +FIXED_EXCHANGE_RATE = "0.01" +TOKEN_SYMBOL_PAIR = "UNIETH" + +[sequencer] +L2_GETH_STATIC_PEERS = [ + "enode://12c7ff46eba4d0ffcd74ac8ea7b1ed1296bfd8b4c14e88ea0c9a6f0ce12a78683e2831c64ea4e3717ac668c13ad8119865c6ff16830b31a67e25477c1ebd62d5@l2-sequencer-0:30303", + "enode://b80e187b9029fbd6bb9b4737de32a8902645c855211e0a6e130b9ce8a957d6f33071a8a5de7df76dda18335588b46c9ccab61947337861740f0830f03a772688@l2-sequencer-1:30303" +] +L2GETH_SIGNER_ADDRESS = "0xEcAcDbcB9CE94A3ce6EBBdd7DAae00513C36Bf0d" +L2GETH_KEYSTORE = "{\"address\":\"ecacdbcb9ce94a3ce6ebbdd7daae00513c36bf0d\",\"id\":\"047c0b0d-8252-4aa7-a7de-b9ad4c2592bb\",\"version\":3,\"Crypto\":{\"cipher\":\"aes-128-ctr\",\"cipherparams\":{\"iv\":\"8504321a1dce8fc4c3e66a4a3d38e9c4\"},\"ciphertext\":\"48efcba2d0068dd633c3cf5111a4f2cde72b87b4d372ef5ae19fb6237fea86a9\",\"kdf\":\"scrypt\",\"kdfparams\":{\"salt\":\"c356350b36ba9b3e5a6bf8460635bc16551992b6837f6139f26d5459c860c39c\",\"n\":131072,\"dklen\":32,\"p\":1,\"r\":8},\"mac\":\"b0a89d13730d656a93b37f28b0047a9955f6bf32bc6711ac1e378c25cd9bdd7a\"},\"x-ethers\":{\"client\":\"ethers/6.13.4\",\"gethFilename\":\"UTC--2024-11-27T11-23-30.0Z--ecacdbcb9ce94a3ce6ebbdd7daae00513c36bf0d\",\"path\":\"m/44'/60'/0'/0/0\",\"locale\":\"en\",\"mnemonicCounter\":\"6696da285f3881dcaaa45702088a8689\",\"mnemonicCiphertext\":\"f8df0f62c92115a36306e5e999a8153c\",\"version\":\"0.1\"}}" +L2GETH_PASSWORD = "scrollsdk" +L2GETH_NODEKEY = "8dedf583f81ee39d5f6bb35ce34c5aae76c0d9ed2d6de57fed23cb7e726081a9" + + [sequencer.sequencer-1] + L2GETH_SIGNER_ADDRESS = "0xa21c0BdCc77a73b49b8b0822135bF43A4e725BF5" + L2GETH_KEYSTORE = "{\"address\":\"a21c0bdcc77a73b49b8b0822135bf43a4e725bf5\",\"id\":\"a4077f92-b222-4683-b805-99c515fa026c\",\"version\":3,\"Crypto\":{\"cipher\":\"aes-128-ctr\",\"cipherparams\":{\"iv\":\"035ffa714b59af4bf3dcf3249d4e29a5\"},\"ciphertext\":\"dc34f2fd76750a7bb0bba3b321ab9895aab7b0fefc8c7ae6e40ef91068a51506\",\"kdf\":\"scrypt\",\"kdfparams\":{\"salt\":\"da6ae8c0aa7e07b073f7f32ef99a4d1e777041c69d839dd73bc621bab252e2b0\",\"n\":131072,\"dklen\":32,\"p\":1,\"r\":8},\"mac\":\"355ff5dfa1d1977413c12edd71e9e27b5ca29dd36651f8f66ed466c690228713\"},\"x-ethers\":{\"client\":\"ethers/6.13.4\",\"gethFilename\":\"UTC--2024-11-27T11-23-33.0Z--a21c0bdcc77a73b49b8b0822135bf43a4e725bf5\",\"path\":\"m/44'/60'/0'/0/0\",\"locale\":\"en\",\"mnemonicCounter\":\"86dd4344e71d6a2cde113c549de2b229\",\"mnemonicCiphertext\":\"61946b8efc38ee0034bdcb7f93c065c6\",\"version\":\"0.1\"}}" + L2GETH_PASSWORD = "scrollsdk" + L2GETH_NODEKEY = "e49a1f025510fcf041e82eb0aa19b862b2aaeabe3fa32e62bf1d04cb1ba9852b" + +[bootnode.bootnode-0] +L2GETH_NODEKEY = "430d8097ebe8a6c234c5c5fdca7ea4bf8caad48841e684f83a01a436b352c61b" + +[rollup] +MAX_TX_IN_CHUNK = 100 +MAX_BLOCK_IN_CHUNK = 100 +MAX_BATCH_IN_BUNDLE = 30 +MAX_L1_MESSAGE_GAS_LIMIT = 10_000_000 +TEST_ENV_MOCK_FINALIZE_ENABLED = true +TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC = 300 + +[frontend] +EXTERNAL_RPC_URI_L1 = "https://rpc.ankr.com/eth_sepolia" +EXTERNAL_RPC_URI_L2 = "http://l2-rpc.scrollsdk" +BRIDGE_API_URI = "http://bridge-history-api.scrollsdk/api" +ROLLUPSCAN_API_URI = "http://rollup-explorer-backend.scrollsdk/api" +EXTERNAL_EXPLORER_URI_L1 = "https://sepolia.etherscan.io" +EXTERNAL_EXPLORER_URI_L2 = "http://blockscout.scrollsdk" +ADMIN_SYSTEM_DASHBOARD_URI = "http://admin-system-dashboard.scrollsdk" +GRAFANA_URI = "http://grafana.scrollsdk" + +[genesis] +L2_MAX_ETH_SUPPLY = "226156424291633194186662080095093570025917938800079226639565593765455331328" +L2_DEPLOYER_INITIAL_BALANCE = 1_000_000_000_000_000_000 + +[contracts] +DEPLOYMENT_SALT = "salt-morty-test-123123789645124" +L1_FEE_VAULT_ADDR = "0x731297b06c1b37bDE3545dE50De24cE9d82dF9c8" + + [contracts.overrides] + L2_MESSAGE_QUEUE = "0x5300000000000000000000000000000000000000" + L1_GAS_PRICE_ORACLE = "0x5300000000000000000000000000000000000002" + L2_WHITELIST = "0x5300000000000000000000000000000000000003" + L2_WETH = "0x5300000000000000000000000000000000000004" + L2_TX_FEE_VAULT = "0x5300000000000000000000000000000000000005" + +[coordinator] +CHUNK_COLLECTION_TIME_SEC = 3_600 +BATCH_COLLECTION_TIME_SEC = 1_800 +BUNDLE_COLLECTION_TIME_SEC = 600 +COORDINATOR_JWT_SECRET_KEY = "aa4c0ea79f5cc72c2b60723b50ace611247cc3977927e6e4ee8b4cdf25ec1042" + +[ingress] +FRONTEND_HOST = "frontends.scrollsdk" +BRIDGE_HISTORY_API_HOST = "bridge-history-api.scrollsdk" +ROLLUP_EXPLORER_API_HOST = "rollup-explorer-backend.scrollsdk" +COORDINATOR_API_HOST = "coordinator-api.scrollsdk" +RPC_GATEWAY_HOST = "l2-rpc.scrollsdk" +BLOCKSCOUT_HOST = "blockscout.scrollsdk" +BLOCKSCOUT_BACKEND_HOST = "blockscout-backend.scrollsdk" +ADMIN_SYSTEM_DASHBOARD_HOST = "admin-system-dashboard.scrollsdk" +GRAFANA_HOST = "grafana.scrollsdk" diff --git a/volume/coordinator-config.yaml b/volume/coordinator-config.yaml new file mode 100644 index 00000000..2e86adf9 --- /dev/null +++ b/volume/coordinator-config.yaml @@ -0,0 +1,41 @@ +scrollConfig: | + { + "prover_manager": { + "provers_per_session": 1, + "session_attempts": 100, + "chunk_collection_time_sec": 360, + "batch_collection_time_sec": 180, + "bundle_collection_time_sec": 60, + "verifier": { + "mock_mode": false, + "low_version_circuit": { + "params_path": "/verifier/params", + "assets_path": "/verifier/assets/lo", + "fork_name": "darwin", + "min_prover_version": "v4.4.43" + }, + "high_version_circuit": { + "params_path": "/verifier/params", + "assets_path": "/verifier/assets/hi", + "fork_name": "darwinV2", + "min_prover_version": "v4.4.56" + } + }, + "max_verifier_workers": 4, + "min_prover_version": "v4.3.41" + }, + "db": { + "driver_name": "postgres", + "dsn": "", + "maxOpenNum": 200, + "maxIdleNum": 20 + }, + "l2": { + "chain_id": 221122 + }, + "auth": { + "secret": "e788b62d39254928a821ac1c76b274a8c835aa1e20ecfb6f50eb10e87847de44", + "challenge_expire_duration_sec": 10, + "login_expire_duration_sec": 3600 + } + } diff --git a/volume/frontend-config.yaml b/volume/frontend-config.yaml new file mode 100644 index 00000000..74554e5f --- /dev/null +++ b/volume/frontend-config.yaml @@ -0,0 +1,51 @@ +scrollConfig: | + REACT_APP_ETH_SYMBOL = "ETH" + REACT_APP_BASE_CHAIN = "Ethereum" + REACT_APP_ROLLUP = "Scroll SDK" + REACT_APP_CHAIN_ID_L1 = "11155111" + REACT_APP_CHAIN_ID_L2 = "221122" + REACT_APP_CONNECT_WALLET_PROJECT_ID = "14efbaafcf5232a47d93a68229b71028" + + REACT_APP_EXTERNAL_RPC_URI_L1 = "http://l1-devnet.scrollsdk" + REACT_APP_EXTERNAL_RPC_URI_L2 = "http://l2-rpc.scrollsdk" + REACT_APP_BRIDGE_API_URI = "http://bridge-history-api.scrollsdk/api" + REACT_APP_ROLLUPSCAN_API_URI = "http://rollup-explorer-backend.scrollsdk/api" + REACT_APP_EXTERNAL_EXPLORER_URI_L1 = "http://l1-explorer.scrollsdk" + REACT_APP_EXTERNAL_EXPLORER_URI_L2 = "http://blockscout.scrollsdk" + ADMIN_SYSTEM_DASHBOARD_URI = "http://admin-system-dashboard.scrollsdk" + GRAFANA_URI = "http://grafana.scrollsdk" + + REACT_APP_L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "0xCD832C95AabA0d2f50d7567b21A43a5d93a932b0" + REACT_APP_L1_ETH_GATEWAY_PROXY_ADDR = "0x0000000000000000000000000000000000000000" + REACT_APP_L1_GAS_PRICE_ORACLE = "0x5300000000000000000000000000000000000002" + REACT_APP_L1_GATEWAY_ROUTER_PROXY_ADDR = "0xFeA8784A9f31f6f6895e65B65eE63fC85d324F5F" + REACT_APP_L1_MESSAGE_QUEUE = "0x74E69415630e35631eb0D2199AF6De5e010B58B2" + REACT_APP_L1_MESSAGE_QUEUE_WITH_GAS_PRICE_ORACLE = "0x74E69415630e35631eb0D2199AF6De5e010B58B2" + REACT_APP_L1_SCROLL_MESSENGER = "0xf5a927Ea81032Dbe3921424E18Ad81E3680C86ac" + REACT_APP_L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "0x8c7fff50e219E2795ccCF188bD9728d0C4009c1b" + REACT_APP_L1_WETH_GATEWAY_PROXY_ADDR = "0x0000000000000000000000000000000000000000" + REACT_APP_SCROLL_CHAIN = "0x3177d80e33919312244Fbbd70E4aA95eBB27070a" + REACT_APP_L1_GAS_TOKEN_GATEWAY = "0xD287a0Cf91D27E876BeAF0977093eB47d6Cc4381" + REACT_APP_L1_WRAPPED_TOKEN_GATEWAY = "0xA3d3011C108816B3eE0468c04aC61036bA06Fb6e" + REACT_APP_L1_GAS_TOKEN_ADDR = "0x8258c70A41de87A98d7fAD2BbF7c1009845a8A1D" + REACT_APP_L1_WETH_ADDR = "0x0e8fEBf2fa907513d10B433c01B5F444A5c113bF" + + REACT_APP_L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "0x1AE0E1685fD6b34382D10eE90C7d7e2B2D647A09" + REACT_APP_L2_ETH_GATEWAY_PROXY_ADDR = "0xAd7de4158e155fBfDeA9C20aC682351C6e78a58f" + REACT_APP_L2_GATEWAY_ROUTER_PROXY_ADDR = "0xA26fEdaeA13041f7bc6c36774c03265b3d26c5ac" + REACT_APP_L2_SCROLL_MESSENGER = "0xd36B5A075cF7d22F46aa3E1C89d21d0C5cc16ebF" + REACT_APP_L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "0x0C2e35775Bd36d28A96da0D31C933A9C4773cE10" + REACT_APP_L2_WETH_GATEWAY_PROXY_ADDR = "0x0000000000000000000000000000000000000000" + + REACT_APP_L1_USDC_GATEWAY_PROXY_ADDR = "" + REACT_APP_L2_USDC_GATEWAY_PROXY_ADDR = "" + REACT_APP_L1_DAI_GATEWAY_PROXY_ADDR = "" + REACT_APP_L2_DAI_GATEWAY_PROXY_ADDR = "" + REACT_APP_L1_LIDO_GATEWAY_PROXY_ADDR = "" + REACT_APP_L2_LIDO_GATEWAY_PROXY_ADDR = "" + REACT_APP_L1_PUFFER_GATEWAY_PROXY_ADDR = "" + REACT_APP_L2_PUFFER_GATEWAY_PROXY_ADDR = "" + + REACT_APP_SCROLL_ORIGINS_NFT = "" + REACT_APP_SCROLL_ORIGINS_NFT_V2 = "" + REACT_APP_L1_BATCH_BRIDGE_GATEWAY_PROXY_ADDR = "" diff --git a/volume/genesis.yaml b/volume/genesis.yaml new file mode 100644 index 00000000..0c93a792 --- /dev/null +++ b/volume/genesis.yaml @@ -0,0 +1,119 @@ +scrollConfig: | + { + "config": { + "chainId": 221122, + "homesteadBlock": 0, + "eip150Block": 0, + "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "archimedesBlock": 0, + "shanghaiBlock": 0, + "bernoulliBlock": 0, + "curieBlock": 0, + "darwinTime": 0, + "darwinV2Time": 0, + "clique": { + "period": 3, + "epoch": 30000, + "relaxed_period": true + }, + "scroll": { + "useZktrie": true, + "maxTxPerBlock": 100, + "maxTxPayloadBytesPerBlock": 122880, + "feeVaultAddress": "0x5300000000000000000000000000000000000005", + "l1Config": { + "l1ChainId": "11155111", + "l1MessageQueueAddress": "0x74E69415630e35631eb0D2199AF6De5e010B58B2", + "scrollChainAddress": "0x3177d80e33919312244Fbbd70E4aA95eBB27070a", + "numL1MessagesPerBlock": "10" + } + } + }, + "nonce": "0x0", + "timestamp": "0x00000000000000000000000000000000000000000000000000000000671f8616", + "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000756EA06BDEe36de11F22DCca45a31d8a178eF3c60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "10000000", + "difficulty": "0x1", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "alloc": { + "0x4e59b44847b379578588920ca78fbf26c0b4956c": { + "balance": "0x0", + "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3", + "nonce": "0x1", + "storage": {} + }, + "0x5300000000000000000000000000000000000000": { + "balance": "0x0", + "code": "0x608060405234801561000f575f80fd5b5060043610610090575f3560e01c806383cc76601161006357806383cc7660146100f85780638da5cb5b1461010b578063c4d66de81461011e578063d4b9f4fa14610131578063f2fde38b14610139575f80fd5b806326aad7b7146100945780633cb747bf146100b0578063600a2e77146100db578063715018a6146100ee575b5f80fd5b61009d60015481565b6040519081526020015b60405180910390f35b6053546100c3906001600160a01b031681565b6040516001600160a01b0390911681526020016100a7565b61009d6100e9366004610539565b61014c565b6100f66101ef565b005b61009d610106366004610539565b610224565b6052546100c3906001600160a01b031681565b6100f661012c366004610550565b61023a565b61009d5f5481565b6100f6610147366004610550565b6102d2565b6053545f906001600160a01b0316331461019e5760405162461bcd60e51b815260206004820152600e60248201526d37b7363c9036b2b9b9b2b733b2b960911b60448201526064015b60405180910390fd5b5f806101a98461035e565b60408051838152602081018890529294509092507ffaa617c2d8ce12c62637dbce76efcc18dae60574aa95709bdcedce7e76071693910160405180910390a19392505050565b6052546001600160a01b031633146102195760405162461bcd60e51b81526004016101959061057d565b6102225f610477565b565b602a8160288110610233575f80fd5b0154905081565b6052546001600160a01b031633146102645760405162461bcd60e51b81526004016101959061057d565b600154156102a85760405162461bcd60e51b815260206004820152601160248201527063616e6e6f7420696e697469616c697a6560781b6044820152606401610195565b6102b06104c8565b605380546001600160a01b0319166001600160a01b0392909216919091179055565b6052546001600160a01b031633146102fc5760405162461bcd60e51b81526004016101959061057d565b6001600160a01b0381166103525760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f20616464726573730000006044820152606401610195565b61035b81610477565b50565b6003545f9081906103b15760405162461bcd60e51b815260206004820152601a60248201527f63616c6c206265666f726520696e697469616c697a6174696f6e0000000000006044820152606401610195565b600154835f5b8215610448576103c86002846105c8565b5f036104125781602a82602881106103e2576103e26105b4565b015561040b82600283602881106103fb576103fb6105b4565b01545f9182526020526040902090565b915061043c565b610439602a8260288110610428576104286105b4565b0154835f9182526020526040902090565b91505b600192831c92016103b7565b81602a826028811061045c5761045c6105b4565b0155505f819055600180548082019091559590945092505050565b605280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f5b60286104d78260016105fb565b101561035b57610508600282602881106104f3576104f36105b4565b0154600283602881106103fb576103fb6105b4565b60026105158360016105fb565b60288110610525576105256105b4565b01558061053181610614565b9150506104ca565b5f60208284031215610549575f80fd5b5035919050565b5f60208284031215610560575f80fd5b81356001600160a01b0381168114610576575f80fd5b9392505050565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b5f826105e257634e487b7160e01b5f52601260045260245ffd5b500690565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561060e5761060e6105e7565b92915050565b5f60018201610625576106256105e7565b506001019056fea164736f6c6343000818000a", + "nonce": "0x0", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000052": "0x000000000000000000000000731297b06c1b37bde3545de50de24ce9d82df9c8" + } + }, + "0x5300000000000000000000000000000000000002": { + "balance": "0x0", + "code": "0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c8063715018a6116100b4578063a911d77f11610079578063a911d77f1461024c578063bede39b514610254578063de26c4a114610267578063e88a60ad1461027a578063f2fde38b1461028d578063f45e65d8146102a0575f80fd5b8063715018a6146101eb57806384189161146101f35780638da5cb5b146101fc57806393e59dc114610226578063944b247f14610239575f80fd5b80633d0f963e116100fa5780633d0f963e146101a057806349948e0e146101b3578063519b4bd3146101c65780636a5e67e5146101cf57806370465597146101d8575f80fd5b80630c18c1621461013657806313dad5be1461015257806323e524ac1461016f5780633577afc51461017857806339455d3a1461018d575b5f80fd5b61013f60025481565b6040519081526020015b60405180910390f35b60085461015f9060ff1681565b6040519015158152602001610149565b61013f60065481565b61018b6101863660046109b3565b6102a9565b005b61018b61019b3660046109ca565b61033b565b61018b6101ae3660046109ea565b610438565b61013f6101c1366004610a2b565b6104bb565b61013f60015481565b61013f60075481565b61018b6101e63660046109b3565b6104e0565b61018b61056e565b61013f60055481565b5f5461020e906001600160a01b031681565b6040516001600160a01b039091168152602001610149565b60045461020e906001600160a01b031681565b61018b6102473660046109b3565b6105a2565b61018b61062e565b61018b6102623660046109b3565b61068a565b61013f610275366004610a2b565b610747565b61018b6102883660046109b3565b610764565b61018b61029b3660046109ea565b6107f0565b61013f60035481565b5f546001600160a01b031633146102db5760405162461bcd60e51b81526004016102d290610ad6565b60405180910390fd5b621c9c388111156102ff57604051635742c80560e11b815260040160405180910390fd5b60028190556040518181527f32740b35c0ea213650f60d44366b4fb211c9033b50714e4a1d34e65d5beb9bb4906020015b60405180910390a150565b6004805460405163efc7840160e01b815233928101929092526001600160a01b03169063efc7840190602401602060405180830381865afa158015610382573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103a69190610b0d565b6103c3576040516326b3506d60e11b815260040160405180910390fd5b600182905560058190556040518281527f351fb23757bb5ea0546c85b7996ddd7155f96b939ebaa5ff7bc49c75f27f2c449060200160405180910390a16040518181527f9a14bfb5d18c4c3cf14cae19c23d7cf1bcede357ea40ca1f75cd49542c71c214906020015b60405180910390a15050565b5f546001600160a01b031633146104615760405162461bcd60e51b81526004016102d290610ad6565b600480546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f22d1c35fe072d2e42c3c8f9bd4a0d34aa84a0101d020a62517b33fdb3174e5f7910161042c565b6008545f9060ff16156104d7576104d18261087b565b92915050565b6104d1826108c1565b5f546001600160a01b031633146105095760405162461bcd60e51b81526004016102d290610ad6565b610519633b9aca006103e8610b40565b81111561053957604051631e44fdeb60e11b815260040160405180910390fd5b60038190556040518181527f3336cd9708eaf2769a0f0dc0679f30e80f15dcd88d1921b5a16858e8b85c591a90602001610330565b5f546001600160a01b031633146105975760405162461bcd60e51b81526004016102d290610ad6565b6105a05f610904565b565b5f546001600160a01b031633146105cb5760405162461bcd60e51b81526004016102d290610ad6565b6105d9633b9aca0080610b40565b8111156105f95760405163874f603160e01b815260040160405180910390fd5b60068190556040518181527f2ab3f5a4ebbcbf3c24f62f5454f52f10e1a8c9dcc5acac8f19199ce881a6a10890602001610330565b5f546001600160a01b031633146106575760405162461bcd60e51b81526004016102d290610ad6565b60085460ff161561067b576040516379f9c57560e01b815260040160405180910390fd5b6008805460ff19166001179055565b6004805460405163efc7840160e01b815233928101929092526001600160a01b03169063efc7840190602401602060405180830381865afa1580156106d1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106f59190610b0d565b610712576040516326b3506d60e11b815260040160405180910390fd5b60018190556040518181527f351fb23757bb5ea0546c85b7996ddd7155f96b939ebaa5ff7bc49c75f27f2c4490602001610330565b6008545f9060ff161561075b57505f919050565b6104d182610953565b5f546001600160a01b0316331461078d5760405162461bcd60e51b81526004016102d290610ad6565b61079b633b9aca0080610b40565b8111156107bb5760405163f37ec21560e01b815260040160405180910390fd5b60078190556040518181527f6b332a036d8c3ead57dcb06c87243bd7a2aed015ddf2d0528c2501dae56331aa90602001610330565b5f546001600160a01b031633146108195760405162461bcd60e51b81526004016102d290610ad6565b6001600160a01b03811661086f5760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f206164647265737300000060448201526064016102d2565b61087881610904565b50565b5f633b9aca0060055483516007546108939190610b40565b61089d9190610b40565b6001546006546108ad9190610b40565b6108b79190610b57565b6104d19190610b6a565b5f806108cc83610953565b90505f600154826108dd9190610b40565b9050633b9aca00600354826108f29190610b40565b6108fc9190610b6a565b949350505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80515f908190815b818110156109a45784818151811061097557610975610b89565b01602001516001600160f81b0319165f036109955760048301925061099c565b6010830192505b60010161095b565b50506002540160400192915050565b5f602082840312156109c3575f80fd5b5035919050565b5f80604083850312156109db575f80fd5b50508035926020909101359150565b5f602082840312156109fa575f80fd5b81356001600160a01b0381168114610a10575f80fd5b9392505050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215610a3b575f80fd5b813567ffffffffffffffff80821115610a52575f80fd5b818401915084601f830112610a65575f80fd5b813581811115610a7757610a77610a17565b604051601f8201601f19908116603f01168101908382118183101715610a9f57610a9f610a17565b81604052828152876020848701011115610ab7575f80fd5b826020860160208301375f928101602001929092525095945050505050565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b5f60208284031215610b1d575f80fd5b81518015158114610a10575f80fd5b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176104d1576104d1610b2c565b808201808211156104d1576104d1610b2c565b5f82610b8457634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffdfea164736f6c6343000818000a", + "nonce": "0x0", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000731297b06c1b37bde3545de50de24ce9d82df9c8", + "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + }, + "0x5300000000000000000000000000000000000003": { + "balance": "0x0", + "code": "0x608060405234801561000f575f80fd5b5060043610610055575f3560e01c8063715018a61461005957806379586dd7146100635780638da5cb5b14610076578063efc78401146100a5578063f2fde38b146100e0575b5f80fd5b6100616100f3565b005b61006161007136600461033a565b610130565b5f54610088906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100d06100b336600461040c565b6001600160a01b03165f9081526001602052604090205460ff1690565b604051901515815260200161009c565b6100616100ee36600461040c565b610222565b5f546001600160a01b031633146101255760405162461bcd60e51b815260040161011c9061042c565b60405180910390fd5b61012e5f6102ad565b565b5f546001600160a01b031633146101595760405162461bcd60e51b815260040161011c9061042c565b5f5b825181101561021d578160015f85848151811061017a5761017a610463565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff0219169083151502179055508281815181106101c9576101c9610463565b60200260200101516001600160a01b03167f8daaf060c3306c38e068a75c054bf96ecd85a3db1252712c4d93632744c42e0d8360405161020d911515815260200190565b60405180910390a260010161015b565b505050565b5f546001600160a01b0316331461024b5760405162461bcd60e51b815260040161011c9061042c565b6001600160a01b0381166102a15760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f2061646472657373000000604482015260640161011c565b6102aa816102ad565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b5f52604160045260245ffd5b80356001600160a01b0381168114610326575f80fd5b919050565b80358015158114610326575f80fd5b5f806040838503121561034b575f80fd5b823567ffffffffffffffff80821115610362575f80fd5b818501915085601f830112610375575f80fd5b8135602082821115610389576103896102fc565b8160051b604051601f19603f830116810181811086821117156103ae576103ae6102fc565b6040529283528183019350848101820192898411156103cb575f80fd5b948201945b838610156103f0576103e186610310565b855294820194938201936103d0565b96506103ff905087820161032b565b9450505050509250929050565b5f6020828403121561041c575f80fd5b61042582610310565b9392505050565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b634e487b7160e01b5f52603260045260245ffdfea164736f6c6343000818000a", + "nonce": "0x0", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000731297b06c1b37bde3545de50de24ce9d82df9c8" + } + }, + "0x5300000000000000000000000000000000000004": { + "balance": "0x0", + "code": "0x6080604052600436106100fd575f3560e01c806370a0823111610092578063a457c2d711610062578063a457c2d7146102a1578063a9059cbb146102c0578063d0e30db0146102df578063d505accf146102e7578063dd62ed3e14610306575f80fd5b806370a08231146102135780637ecebe001461024757806384b0196e1461026657806395d89b411461028d575f80fd5b80632e1a7d4d116100cd5780632e1a7d4d146101a6578063313ce567146101c55780633644e515146101e057806339509351146101f4575f80fd5b806306fdde0314610110578063095ea7b31461013a57806318160ddd1461016957806323b872dd14610187575f80fd5b3661010c5761010a610325565b005b5f80fd5b34801561011b575f80fd5b50610124610376565b6040516101319190611241565b60405180910390f35b348015610145575f80fd5b50610159610154366004611275565b610406565b6040519015158152602001610131565b348015610174575f80fd5b506002545b604051908152602001610131565b348015610192575f80fd5b506101596101a136600461129d565b61041f565b3480156101b1575f80fd5b5061010a6101c03660046112d6565b610442565b3480156101d0575f80fd5b5060405160128152602001610131565b3480156101eb575f80fd5b5061017961052f565b3480156101ff575f80fd5b5061015961020e366004611275565b61053d565b34801561021e575f80fd5b5061017961022d3660046112ed565b6001600160a01b03165f9081526020819052604090205490565b348015610252575f80fd5b506101796102613660046112ed565b61055e565b348015610271575f80fd5b5061027a61057b565b6040516101319796959493929190611306565b348015610298575f80fd5b50610124610602565b3480156102ac575f80fd5b506101596102bb366004611275565b610611565b3480156102cb575f80fd5b506101596102da366004611275565b61068b565b61010a610325565b3480156102f2575f80fd5b5061010a61030136600461139d565b610698565b348015610311575f80fd5b5061017961032036600461140a565b6107f9565b336103308134610823565b806001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405161036b91815260200190565b60405180910390a250565b6060600380546103859061143b565b80601f01602080910402602001604051908101604052809291908181526020018280546103b19061143b565b80156103fc5780601f106103d3576101008083540402835291602001916103fc565b820191905f5260205f20905b8154815290600101906020018083116103df57829003601f168201915b5050505050905090565b5f336104138185856108e0565b60019150505b92915050565b5f3361042c858285610a04565b610437858585610a7c565b506001949350505050565b3361044d8183610c1e565b5f816001600160a01b0316836040515f6040518083038185875af1925050503d805f8114610496576040519150601f19603f3d011682016040523d82523d5f602084013e61049b565b606091505b50509050806104e75760405162461bcd60e51b81526020600482015260136024820152721dda5d1a191c985dc81155120819985a5b1959606a1b60448201526064015b60405180910390fd5b816001600160a01b03167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b658460405161052291815260200190565b60405180910390a2505050565b5f610538610d46565b905090565b5f3361041381858561054f83836107f9565b610559919061146d565b6108e0565b6001600160a01b0381165f90815260076020526040812054610419565b5f606080828080836105ae7f577261707065642045746865720000000000000000000000000000000000000d6005610e6f565b6105d97f31000000000000000000000000000000000000000000000000000000000000016006610e6f565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6060600480546103859061143b565b5f338161061e82866107f9565b90508381101561067e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104de565b61043782868684036108e0565b5f33610413818585610a7c565b834211156106e85760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104de565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886107168c610f18565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61077082610f3f565b90505f61077f82878787610f6b565b9050896001600160a01b0316816001600160a01b0316146107e25760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104de565b6107ed8a8a8a6108e0565b50505050505050505050565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6001600160a01b0382166108795760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104de565b8060025f82825461088a919061146d565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0383166109425760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104de565b6001600160a01b0382166109a35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104de565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f610a0f84846107f9565b90505f198114610a765781811015610a695760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104de565b610a7684848484036108e0565b50505050565b6001600160a01b038316610ae05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104de565b6001600160a01b038216610b425760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104de565b6001600160a01b0383165f9081526020819052604090205481811015610bb95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104de565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610a76565b6001600160a01b038216610c7e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104de565b6001600160a01b0382165f9081526020819052604090205481811015610cf15760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104de565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016109f7565b5f306001600160a01b037f000000000000000000000000d85bdcdae4db1faeb8ef93331525fe68d7c8b3f016148015610d9e57507f0000000000000000000000000000000000000000000000000000000000007a6946145b15610dc857507fd2c591c2db8e7edcffc464f7eae06c0096c77bc8d4606e23c50b9f18fcee6e5290565b610538604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f00cd3d46df44f2cbb950cf84eb2e92aa2ddd23195b1a009173ea59a063357ed3918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b606060ff8314610e8957610e8283610f91565b9050610419565b818054610e959061143b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec19061143b565b8015610f0c5780601f10610ee357610100808354040283529160200191610f0c565b820191905f5260205f20905b815481529060010190602001808311610eef57829003601f168201915b50505050509050610419565b6001600160a01b0381165f9081526007602052604090208054600181018255905b50919050565b5f610419610f4b610d46565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f610f7a87878787610fce565b91509150610f878161108b565b5095945050505050565b60605f610f9d836111d7565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561100357505f90506003611082565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611054573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661107c575f60019250925050611082565b91505f90505b94509492505050565b5f81600481111561109e5761109e61148c565b036110a65750565b60018160048111156110ba576110ba61148c565b036111075760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104de565b600281600481111561111b5761111b61148c565b036111685760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104de565b600381600481111561117c5761117c61148c565b036111d45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104de565b50565b5f60ff8216601f81111561041957604051632cd44ac360e21b815260040160405180910390fd5b5f81518084525f5b8181101561122257602081850181015186830182015201611206565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f61125360208301846111fe565b9392505050565b80356001600160a01b0381168114611270575f80fd5b919050565b5f8060408385031215611286575f80fd5b61128f8361125a565b946020939093013593505050565b5f805f606084860312156112af575f80fd5b6112b88461125a565b92506112c66020850161125a565b9150604084013590509250925092565b5f602082840312156112e6575f80fd5b5035919050565b5f602082840312156112fd575f80fd5b6112538261125a565b60ff60f81b881681525f602060e0602084015261132660e084018a6111fe565b8381036040850152611338818a6111fe565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b8181101561138b5783518352928401929184019160010161136f565b50909c9b505050505050505050505050565b5f805f805f805f60e0888a0312156113b3575f80fd5b6113bc8861125a565b96506113ca6020890161125a565b95506040880135945060608801359350608088013560ff811681146113ed575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f806040838503121561141b575f80fd5b6114248361125a565b91506114326020840161125a565b90509250929050565b600181811c9082168061144f57607f821691505b602082108103610f3957634e487b7160e01b5f52602260045260245ffd5b8082018082111561041957634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52602160045260245ffdfea164736f6c6343000818000a", + "nonce": "0x0", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x577261707065642045746865720000000000000000000000000000000000001a", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x5745544800000000000000000000000000000000000000000000000000000008" + } + }, + "0x5300000000000000000000000000000000000005": { + "balance": "0x0", + "code": "0x6080604052600436106100dc575f3560e01c806384411d651161007c578063c1a3775911610057578063c1a377591461021f578063f2fde38b1461023e578063feec756c1461025d578063ff4f35461461027c575f80fd5b806384411d65146101cd5780638da5cb5b146101e25780639e7adc7914610200575f80fd5b8063457e1a49116100b7578063457e1a491461015857806366d003ac1461017b578063715018a61461019a57806374042229146101ae575f80fd5b80632e1a7d4d146100e75780633cb747bf146101085780633ccfd60b14610144575f80fd5b366100e357005b5f80fd5b3480156100f2575f80fd5b5061010661010136600461075d565b61029b565b005b348015610113575f80fd5b50600254610127906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561014f575f80fd5b506101066103fb565b348015610163575f80fd5b5061016d60015481565b60405190815260200161013b565b348015610186575f80fd5b50600354610127906001600160a01b031681565b3480156101a5575f80fd5b50610106610408565b3480156101b9575f80fd5b506101066101c8366004610774565b61043c565b3480156101d8575f80fd5b5061016d60045481565b3480156101ed575f80fd5b505f54610127906001600160a01b031681565b34801561020b575f80fd5b5061010661021a366004610774565b6104b6565b34801561022a575f80fd5b50600554610127906001600160a01b031681565b348015610249575f80fd5b50610106610258366004610774565b610530565b348015610268575f80fd5b50610106610277366004610774565b6105b8565b348015610287575f80fd5b5061010661029636600461075d565b610632565b60015481101561032b5760405162461bcd60e51b815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d20776974686472616064820152691dd85b08185b5bdd5b9d60b21b608482015260a4015b60405180910390fd5b478082111561038f5760405162461bcd60e51b815260206004820152602a60248201527f4665655661756c743a20696e73756666696369656e742062616c616e636520746044820152696f20776974686472617760b01b6064820152608401610322565b6004805483019055600354604080518481526001600160a01b0390921660208301523382820152517fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba9181900360600190a16003546103f7906001600160a01b0316836106a0565b5050565b476104058161029b565b50565b5f546001600160a01b031633146104315760405162461bcd60e51b8152600401610322906107a1565b61043a5f61070e565b565b5f546001600160a01b031633146104655760405162461bcd60e51b8152600401610322906107a1565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f1c928c417a10a21c3cddad148c5dba5d710e4b1442d6d8a36de345935ad84612905f90a35050565b5f546001600160a01b031633146104df5760405162461bcd60e51b8152600401610322906107a1565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f1c928c417a10a21c3cddad148c5dba5d710e4b1442d6d8a36de345935ad84612905f90a35050565b5f546001600160a01b031633146105595760405162461bcd60e51b8152600401610322906107a1565b6001600160a01b0381166105af5760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f20616464726573730000006044820152606401610322565b6104058161070e565b5f546001600160a01b031633146105e15760405162461bcd60e51b8152600401610322906107a1565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f7e1e96961a397c8aa26162fe259cc837afc95e33aad4945ddc61c18dabb7a6ad905f90a35050565b5f546001600160a01b0316331461065b5760405162461bcd60e51b8152600401610322906107a1565b600180549082905560408051828152602081018490527f0d3c80219fe57713b9f9c83d1e51426792d0c14d8e330e65b102571816140965910160405180910390a15050565b6005546040516317e614fd60e11b81526001600160a01b038481166004830152602482018490525f604483015290911690632fcc29fa9083906064015f604051808303818588803b1580156106f3575f80fd5b505af1158015610705573d5f803e3d5ffd5b50505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f6020828403121561076d575f80fd5b5035919050565b5f60208284031215610784575f80fd5b81356001600160a01b038116811461079a575f80fd5b9392505050565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e657200000000000000000060408201526060019056fea164736f6c6343000818000a", + "nonce": "0x0", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000731297b06c1b37bde3545de50de24ce9d82df9c8", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000005": "0x000000000000000000000000ad7de4158e155fbfdea9c20ac682351c6e78a58f" + } + }, + "0x731297b06c1b37bde3545de50de24ce9d82df9c8": { + "balance": "0xde0b6b3a7640000", + "code": "0x", + "nonce": "0x1", + "storage": {} + }, + "0xd36b5a075cf7d22f46aa3e1c89d21d0c5cc16ebf": { + "balance": "0x7ffffffffffffffffffffffffffffffffffffffffffffff21f494c589c0000", + "code": "0x", + "nonce": "0x0", + "storage": { + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "baseFeePerGas": null + } diff --git a/volume/rollup-config.yaml b/volume/rollup-config.yaml new file mode 100644 index 00000000..dbf705a7 --- /dev/null +++ b/volume/rollup-config.yaml @@ -0,0 +1,131 @@ +scrollConfig: | + { + "l1_config": { + "endpoint": "https://alien-flashy-arm.ethereum-sepolia.quiknode.pro/2aeb75414e5ee0e930b64c2e7feff59efb537f30", + "start_height": 0, + "relayer_config": { + "gas_price_oracle_contract_address": "0x5300000000000000000000000000000000000002", + "sender_config": { + "endpoint": "http://l2-sequencer:8545", + "escalate_blocks": 100, + "escalate_multiple_num": 11, + "escalate_multiple_den": 10, + "min_gas_tip": 1, + "max_gas_price": 10000000000000, + "tx_type": "DynamicFeeTx", + "check_pending_time": 3, + "confirmations": "0x0" + }, + "gas_oracle_config": { + "min_gas_price": 0, + "gas_price_diff": 50000, + "l1_base_fee_weight": 0.086, + "l1_blob_base_fee_weight": 0.030, + "check_committed_batches_window_minutes": 5, + "l1_base_fee_default": 15000000000, + "l1_blob_base_fee_default": 1, + "alternative_gas_token_config": { + "enabled": false, + "mode": "Fixed", + "fixed_exchange_rate": 0.001, + "token_symbol_pair": "" + } + }, + "gas_oracle_sender_signer_config": { + "signer_type": "PrivateKey", + "private_key_signer_config": { + "private_key": "1313131313131313131313131313131313131313131313131313131313131313" + } + } + } + }, + "l2_config": { + "confirmations": "0x10", + "endpoint": "http://l2-sequencer:8545", + "l2_message_queue_address": "0x5300000000000000000000000000000000000000", + "relayer_config": { + "rollup_contract_address": "0x3177d80e33919312244Fbbd70E4aA95eBB27070a", + "gas_price_oracle_contract_address": "0x74E69415630e35631eb0D2199AF6De5e010B58B2", + "sender_config": { + "endpoint": "https://alien-flashy-arm.ethereum-sepolia.quiknode.pro/2aeb75414e5ee0e930b64c2e7feff59efb537f30", + "escalate_blocks": 4, + "escalate_multiple_num": 12, + "escalate_multiple_den": 10, + "min_gas_tip": 100000000, + "max_gas_price": 200000000000, + "max_blob_gas_price": 200000000000, + "tx_type": "DynamicFeeTx", + "check_pending_time": 10, + "confirmations": "0x0", + "max_pending_blob_txs": 3 + }, + "gas_oracle_config": { + "min_gas_price": 0, + "gas_price_diff": 50000, + "alternative_gas_token_config": { + "enabled": false, + "mode": "Fixed", + "fixed_exchange_rate": 0.001, + "token_symbol_pair": "" + } + }, + "chain_monitor": { + "enabled": true, + "timeout": 3, + "try_times": 5, + "base_url": "http://chain-monitor:8080" + }, + "enable_test_env_bypass_features": false, + "finalize_batch_without_proof_timeout_sec": 300, + "finalize_bundle_without_proof_timeout_sec": 300, + "gas_oracle_sender_signer_config": { + "signer_type": "PrivateKey", + "private_key_signer_config": { + "private_key": "1313131313131313131313131313131313131313131313131313131313131313" + } + }, + "commit_sender_signer_config": { + "signer_type": "PrivateKey", + "private_key_signer_config": { + "private_key": "1414141414141414141414141414141414141414141414141414141414141414" + } + }, + "finalize_sender_signer_config": { + "signer_type": "PrivateKey", + "private_key_signer_config": { + "private_key": "1515151515151515151515151515151515151515151515151515151515151515" + } + }, + "l1_commit_gas_limit_multiplier": 1.2 + }, + "chunk_proposer_config": { + "propose_interval_milliseconds": 100, + "max_block_num_per_chunk": 100, + "max_tx_num_per_chunk": 100, + "max_l1_commit_gas_per_chunk": 5000000, + "max_l1_commit_calldata_size_per_chunk": 110000, + "chunk_timeout_sec": 2700, + "max_row_consumption_per_chunk": 1000000, + "gas_cost_increase_multiplier": 1.2, + "max_uncompressed_batch_bytes_size": 634880 + }, + "batch_proposer_config": { + "propose_interval_milliseconds": 1000, + "max_l1_commit_gas_per_batch": 5000000, + "max_l1_commit_calldata_size_per_batch": 110000, + "batch_timeout_sec": 2700, + "gas_cost_increase_multiplier": 1.2, + "max_uncompressed_batch_bytes_size": 634880 + }, + "bundle_proposer_config": { + "max_batch_num_per_bundle": 30, + "bundle_timeout_sec": 36000 + } + }, + "db_config": { + "driver_name": "postgres", + "dsn": "", + "maxOpenNum": 50, + "maxIdleNum": 20 + } + } diff --git a/volume/rollup-explorer-backend-config.yaml b/volume/rollup-explorer-backend-config.yaml new file mode 100644 index 00000000..ddb2b809 --- /dev/null +++ b/volume/rollup-explorer-backend-config.yaml @@ -0,0 +1,6 @@ +scrollConfig: | + { + "db_url": "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable", + "open_api_addr": "/rollupscan", + "max_per_page": 500 + } From b94355e7f5c3ee513b712fc20bef5be22f2c98e0 Mon Sep 17 00:00:00 2001 From: Morty Date: Wed, 16 Apr 2025 05:42:53 +0800 Subject: [PATCH 02/31] remove volume files --- volume/admin-system-backend-config.yaml | 60 ---------- volume/balance-checker-config.yaml | 43 ------- volume/bridge-history-config.yaml | 59 ---------- volume/chain-monitor-config.yaml | 59 ---------- volume/config-contracts.toml | 58 --------- volume/config.toml | 111 ----------------- volume/coordinator-config.yaml | 41 ------- volume/frontend-config.yaml | 51 -------- volume/genesis.yaml | 119 ------------------- volume/rollup-config.yaml | 131 --------------------- volume/rollup-explorer-backend-config.yaml | 6 - 11 files changed, 738 deletions(-) delete mode 100644 volume/admin-system-backend-config.yaml delete mode 100644 volume/balance-checker-config.yaml delete mode 100644 volume/bridge-history-config.yaml delete mode 100644 volume/chain-monitor-config.yaml delete mode 100644 volume/config-contracts.toml delete mode 100644 volume/config.toml delete mode 100644 volume/coordinator-config.yaml delete mode 100644 volume/frontend-config.yaml delete mode 100644 volume/genesis.yaml delete mode 100644 volume/rollup-config.yaml delete mode 100644 volume/rollup-explorer-backend-config.yaml diff --git a/volume/admin-system-backend-config.yaml b/volume/admin-system-backend-config.yaml deleted file mode 100644 index 5e77df49..00000000 --- a/volume/admin-system-backend-config.yaml +++ /dev/null @@ -1,60 +0,0 @@ -scrollConfig: | - { - "db_config": { - "driver_name": "postgres", - "dsn": "", - "max_open_connections": 200, - "max_idel_connections": 20 - }, - "read_only_db_config": { - "driver_name": "postgres", - "dsn": "", - "max_open_connections": 200, - "max_idel_connections": 20 - }, - "db_mappings": { - "default": "read_only", - "batch_chunk": "read_only", - "prover_block_list": "read_write" - }, - "auth_db_config": { - "driver_name": "postgres", - "dsn": "", - "max_open_connections": 200, - "max_idel_connections": 20 - }, - "authentication": { - "mode": "skip", - "jwt": { - "secret": "scroll admin system secret key", - "token_expire_seconds": 3600 - }, - "ldap": { - "endpoint": "ldap://xxx.xxx.com:389", - "bind_dn": "", - "bind_password": "", - "search_base_dn_list": [""], - "search_filter": "(mail=%s)" - }, - "otp": { - "issuer": "ScrollAdmin(Dev)", - "enabled": true, - "admin_only": true - } - }, - "authorization": { - "casbin": { - "model_path": "conf/model.conf", - "policy_path": "conf/policy.csv" - } - }, - "prometheus": { - "endpoint": "https://xxx.xxx.com/prometheus", - "user": "", - "password": "" - }, - "admin": { - "prover_becomes_offline_since_last_get_task_seconds": 3600, - "prover_becomes_idle_since_last_task_assigned_seconds": 1800 - } - } diff --git a/volume/balance-checker-config.yaml b/volume/balance-checker-config.yaml deleted file mode 100644 index 1d480f40..00000000 --- a/volume/balance-checker-config.yaml +++ /dev/null @@ -1,43 +0,0 @@ -scrollConfig: | - { - "addresses": [ - { - "rpc_url": "https://alien-flashy-arm.ethereum-sepolia.quiknode.pro/2aeb75414e5ee0e930b64c2e7feff59efb537f30", - "min_balance_ether": "10", - "address": "0x70997970C51812dc3A010C7d01b50e0d17dc79C8", - "name": "L1_COMMIT_SENDER" - }, - { - "rpc_url": "https://alien-flashy-arm.ethereum-sepolia.quiknode.pro/2aeb75414e5ee0e930b64c2e7feff59efb537f30", - "min_balance_ether": "10", - "address": "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC", - "name": "L1_FINALIZE_SENDER" - }, - { - "rpc_url": "https://alien-flashy-arm.ethereum-sepolia.quiknode.pro/2aeb75414e5ee0e930b64c2e7feff59efb537f30", - "min_balance_ether": "1.1", - "address": "0x90F79bf6EB2c4f870365E785982E1f101E93b906", - "name": "L1_GAS_ORACLE_SENDER" - }, - { - "rpc_url": "https://alien-flashy-arm.ethereum-sepolia.quiknode.pro/2aeb75414e5ee0e930b64c2e7feff59efb537f30", - "min_balance_ether": "0", - "address": "0x0000000000000000000000000000000000000001", - "name": "L1_SCROLL_FEE_VAULT" - }, - { - "rpc_url": "http://l2-sequencer:8545", - "min_balance_ether": "1.1", - "address": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "name": "L2_GAS_ORACLE_SENDER" - }, - { - "rpc_url": "http://l2-sequencer:8545", - "min_balance_ether": "0", - "address": "0x5300000000000000000000000000000000000005", - "name": "L2_TX_FEE_VAULT" - } - ], - "JOB_INTERVAL_SECS": 60, - "BIND_PORT": 8080 - } diff --git a/volume/bridge-history-config.yaml b/volume/bridge-history-config.yaml deleted file mode 100644 index fe276626..00000000 --- a/volume/bridge-history-config.yaml +++ /dev/null @@ -1,59 +0,0 @@ -scrollConfig: | - { - "L1": { - "confirmation": 0, - "endpoint": "https://alien-flashy-arm.ethereum-sepolia.quiknode.pro/2aeb75414e5ee0e930b64c2e7feff59efb537f30", - "startHeight": 0, - "blockTime": 12, - "fetchLimit": 16, - "MessageQueueAddr": "0x74E69415630e35631eb0D2199AF6De5e010B58B2", - "MessengerAddr": "0xf5a927Ea81032Dbe3921424E18Ad81E3680C86ac", - "ScrollChainAddr": "0x3177d80e33919312244Fbbd70E4aA95eBB27070a", - "GatewayRouterAddr": "0xFeA8784A9f31f6f6895e65B65eE63fC85d324F5F", - "ETHGatewayAddr": "0x0000000000000000000000000000000000000000", - "WETHGatewayAddr": "0x0000000000000000000000000000000000000000", - "StandardERC20GatewayAddr": "0x8c7fff50e219E2795ccCF188bD9728d0C4009c1b", - "CustomERC20GatewayAddr": "0xCD832C95AabA0d2f50d7567b21A43a5d93a932b0", - "ERC721GatewayAddr": "0x75ce7004fF8a3dfF92Fd5a56dCb4f1eD5f26F8A7", - "ERC1155GatewayAddr": "0xC62dd7EC0907A750EBfEA84191Fd24550f6f3D0f", - "USDCGatewayAddr": "0x0000000000000000000000000000000000000000", - "LIDOGatewayAddr": "0x0000000000000000000000000000000000000000", - "DAIGatewayAddr": "0x0000000000000000000000000000000000000000", - "PufferGatewayAddr": "0x0000000000000000000000000000000000000000", - "GasTokenGatewayAddr": "0xD287a0Cf91D27E876BeAF0977093eB47d6Cc4381", - "WrappedTokenGatewayAddr": "0xA3d3011C108816B3eE0468c04aC61036bA06Fb6e" - }, - "L2": { - "confirmation": 0, - "endpoint": "http://l2-sequencer:8545", - "blockTime": 3, - "fetchLimit": 64, - "MessageQueueAddr": "0x5300000000000000000000000000000000000000", - "MessengerAddr": "0xd36B5A075cF7d22F46aa3E1C89d21d0C5cc16ebF", - "GatewayRouterAddr": "0xA26fEdaeA13041f7bc6c36774c03265b3d26c5ac", - "ETHGatewayAddr": "0xAd7de4158e155fBfDeA9C20aC682351C6e78a58f", - "WETHGatewayAddr": "0x0000000000000000000000000000000000000000", - "StandardERC20GatewayAddr": "0x0C2e35775Bd36d28A96da0D31C933A9C4773cE10", - "CustomERC20GatewayAddr": "0x1AE0E1685fD6b34382D10eE90C7d7e2B2D647A09", - "ERC721GatewayAddr": "0x9141345F6F7A1Fc6C143A8c50C233E44349A8bbA", - "ERC1155GatewayAddr": "0x3D196017cE171C77A406EcC066F2CeB595d3Cb5f", - "USDCGatewayAddr": "0x0000000000000000000000000000000000000000", - "LIDOGatewayAddr": "0x0000000000000000000000000000000000000000", - "DAIGatewayAddr": "0x0000000000000000000000000000000000000000", - "PufferGatewayAddr": "0x0000000000000000000000000000000000000000" - }, - "db": { - "dsn": "", - "driverName": "postgres", - "maxOpenNum": 200, - "maxIdleNum": 20 - }, - "redis": { - "address": "localhost:6379", - "username": "default", - "password": "", - "local": true, - "minIdleConns": 10, - "readTimeoutMs": 500 - } - } diff --git a/volume/chain-monitor-config.yaml b/volume/chain-monitor-config.yaml deleted file mode 100644 index ea2b3d6e..00000000 --- a/volume/chain-monitor-config.yaml +++ /dev/null @@ -1,59 +0,0 @@ -scrollConfig: | - { - "l1_config": { - "l1_url": "https://alien-flashy-arm.ethereum-sepolia.quiknode.pro/2aeb75414e5ee0e930b64c2e7feff59efb537f30", - "confirm": "0x20", - "start_number": 0, - "l1_contracts": { - "l1_gateways": { - "eth_gateway": "0x0000000000000000000000000000000000000000", - "weth_gateway": "0x0000000000000000000000000000000000000000", - "standard_erc20_gateway": "0x8c7fff50e219E2795ccCF188bD9728d0C4009c1b", - "custom_erc20_gateway": "0xCD832C95AabA0d2f50d7567b21A43a5d93a932b0", - "erc721_gateway": "0x75ce7004fF8a3dfF92Fd5a56dCb4f1eD5f26F8A7", - "erc1155_gateway": "0xC62dd7EC0907A750EBfEA84191Fd24550f6f3D0f", - "dai_gateway": "0x0000000000000000000000000000000000000000", - "usdc_gateway": "0x0000000000000000000000000000000000000000", - "lido_gateway": "0x0000000000000000000000000000000000000000", - "puffer_gateway": "0x0000000000000000000000000000000000000000", - "gas_token_gateway": "0xD287a0Cf91D27E876BeAF0977093eB47d6Cc4381" - }, - "scroll_messenger": "0xf5a927Ea81032Dbe3921424E18Ad81E3680C86ac", - "message_queue": "0x74E69415630e35631eb0D2199AF6De5e010B58B2", - "scroll_chain": "0x3177d80e33919312244Fbbd70E4aA95eBB27070a", - "gas_token": "0x8258c70A41de87A98d7fAD2BbF7c1009845a8A1D" - }, - "start_messenger_balance": 1000000000000000000 - }, - "l2_config": { - "l2_url": "http://l2-sequencer:8545", - "confirm": "0x80", - "l2_contracts": { - "l2_gateways": { - "eth_gateway": "0xAd7de4158e155fBfDeA9C20aC682351C6e78a58f", - "weth_gateway": "0x0000000000000000000000000000000000000000", - "standard_erc20_gateway": "0x0C2e35775Bd36d28A96da0D31C933A9C4773cE10", - "custom_erc20_gateway": "0x1AE0E1685fD6b34382D10eE90C7d7e2B2D647A09", - "erc721_gateway": "0x9141345F6F7A1Fc6C143A8c50C233E44349A8bbA", - "erc1155_gateway": "0x3D196017cE171C77A406EcC066F2CeB595d3Cb5f", - "dai_gateway": "0x0000000000000000000000000000000000000000", - "usdc_gateway": "0x0000000000000000000000000000000000000000", - "lido_gateway": "0x0000000000000000000000000000000000000000", - "puffer_gateway": "0x0000000000000000000000000000000000000000" - }, - "scroll_messenger": "0xd36B5A075cF7d22F46aa3E1C89d21d0C5cc16ebF", - "message_queue": "0x5300000000000000000000000000000000000000" - } - }, - "slack_webhook_config": { - "webhook_url": "http://localhost:1234", - "worker_count": 5, - "worker_buffer_size": 1000 - }, - "db_config": { - "driver_name": "postgres", - "dsn": "", - "maxOpenNum": 100, - "maxIdleNum": 20 - } - } diff --git a/volume/config-contracts.toml b/volume/config-contracts.toml deleted file mode 100644 index 3c0dbe91..00000000 --- a/volume/config-contracts.toml +++ /dev/null @@ -1,58 +0,0 @@ -L1_WETH_ADDR = "0x1e2C7DDe9400D2f3A9CcB05A678304e61B432C5A" -L1_PROXY_ADMIN_ADDR = "0x4672de1b20A1566BdbDD57ba8C08dDcFd06D541D" -L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = "0x69c5F48066956bF3e3c2c57F2cF8Fa807bF65E5c" -L1_WHITELIST_ADDR = "0xe0CD096bB35FD07994b66e709558Ec02F0c7c08D" -L1_SCROLL_CHAIN_PROXY_ADDR = "0x840c1F1fA60480d560d16a6f5Cb5ba423f7b5A60" -L1_SCROLL_MESSENGER_PROXY_ADDR = "0x6Cbf8d54132bDA43Cb299c938D6eB1A9da91EfDb" -L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR = "0x56308Cc9768dD68BaCE24567A71f4581FaD4492F" -L1_ENFORCED_TX_GATEWAY_PROXY_ADDR = "0x975e8bBc1B61b6b4F6eF9E83CAC6763E11E4a66F" -L1_PLONK_VERIFIER_ADDR = "0x9938C1eb012f65A1f49a620Ba5F5a2A598116D4F" -L1_ZKEVM_VERIFIER_V2_ADDR = "0x72283C5C41BAF3c82A60b085Eb81D310C1a38035" -L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR = "0x102B299619C8D8Ce3873Ea36a14c6e032ADeD4B7" -L1_MESSAGE_QUEUE_IMPLEMENTATION_ADDR = "0xC3AcF1bc026D43d73144afd0bE7BeF5d10577Be9" -L1_MESSAGE_QUEUE_PROXY_ADDR = "0xc8f8C1D85da5b6eAF13Df8f339f102c1797f398c" -L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR = "0xF39b72C5420C7247d129f1713257Db19d1A5436f" -L1_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = "0x68fa67416720ce80681BE13eBAAbC99e0e87f161" -L1_GATEWAY_ROUTER_PROXY_ADDR = "0xc72212f4015F544918b1B5A121e34413F211bcd2" -L1_ETH_GATEWAY_PROXY_ADDR = "0xe63a38E81B5Ba8567cAfc7485b1F738F1D9Ee39d" -L1_WETH_GATEWAY_PROXY_ADDR = "0xa4Ff12b8BFE04621a10857BbeE9f6c8fF420fB59" -L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "0x79eD883eb17dBf081bB7A3bE58FaF9B9A900bc0b" -L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "0x1B517ee08b101F4478678DCd1B813F713D8Ab8cf" -L1_ERC721_GATEWAY_PROXY_ADDR = "0x425db501531a0e938F609894c3Be1b3027a34B68" -L1_ERC1155_GATEWAY_PROXY_ADDR = "0x709B8DeaFf1E8653243AA0C6e134b0f7D397A846" -L2_MESSAGE_QUEUE_ADDR = "0x5300000000000000000000000000000000000000" -L1_GAS_PRICE_ORACLE_ADDR = "0x5300000000000000000000000000000000000002" -L1_GAS_TOKEN_ADDR = "" -L1_GAS_TOKEN_GATEWAY_IMPLEMENTATION_ADDR = "" -L1_GAS_TOKEN_GATEWAY_PROXY_ADDR = "" -L1_WRAPPED_TOKEN_GATEWAY_ADDR = "" -L2_WHITELIST_ADDR = "0x5300000000000000000000000000000000000003" -L2_WETH_ADDR = "0x5300000000000000000000000000000000000004" -L2_TX_FEE_VAULT_ADDR = "0x5300000000000000000000000000000000000005" -L2_PROXY_ADMIN_ADDR = "0xAB37161630e0ef805e80f61Ca9A62a45B3b4Eb48" -L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = "0x3BeB9863d39bAbEcE836bd67c94f4EaeA4BFff7f" -L2_SCROLL_MESSENGER_PROXY_ADDR = "0x6345AdD8A6a7547c86a46723f04d4ce106F4113B" -L2_ETH_GATEWAY_PROXY_ADDR = "0xfF05411b7749cB68F521fe9fB3eDC6b81193C11e" -L2_WETH_GATEWAY_PROXY_ADDR = "0xa8A4BAFA44aC3acc537049329CF06182E8Cd27Bb" -L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "0x5a6797829303bA0308aaF48CFe0B3AA2F8ec9aB2" -L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "0x9de450AB6d03E6489E5515f2Dbe735d2e4e2812a" -L2_ERC721_GATEWAY_PROXY_ADDR = "0x9a09e593B23a9C1A5A86520cDaC1ecF3Ac729C35" -L2_ERC1155_GATEWAY_PROXY_ADDR = "0x6d37216d4831ee5c7A64eD142dC5Db2313600809" -L2_SCROLL_STANDARD_ERC20_ADDR = "0x7A10cA0733BEe05671228d61A3C7B43A30227A17" -L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR = "0xebDc0E06338E312b10252F5073b0E3B15a4De19F" -L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = "0xca7dd539bacCe6c6b93dCD3A06a17555f7b18bF9" -L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "0x29D9C2Af0f4C2d2988D366f55E289dF1F08c00e0" -L1_ETH_GATEWAY_IMPLEMENTATION_ADDR = "0xf66c788C211eBB8279321FCfF8A4Df58a652A25E" -L1_WETH_GATEWAY_IMPLEMENTATION_ADDR = "0xd28436F9a654176b1592173AE28665df2167e455" -L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "0x345461E52A112E9d408d00f93bbb7bfC70d43DAE" -L1_ERC721_GATEWAY_IMPLEMENTATION_ADDR = "0xDecbf1D8c00f8c0dBC04a444d9A725486C46169A" -L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = "0x0182aCe8b239f38948B3f265cee9C04240Cb9627" -L2_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = "0x20D16C3d6B61787e9660E5812e15b9fdce67C8E7" -L2_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = "0xcDb5641e79C75B80B98B199dBdA79Da85fF9C07E" -L2_GATEWAY_ROUTER_PROXY_ADDR = "0x221c6577bD4d8b7937b43F0017Af5dde59073879" -L2_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "0x789E2a3724516d43b2CF53c32CCAa62ab43e4EF7" -L2_ETH_GATEWAY_IMPLEMENTATION_ADDR = "0xf668d57bD1ff4A2f542A094b7c95Ca84F4352694" -L2_WETH_GATEWAY_IMPLEMENTATION_ADDR = "0x465401408F4b6aa4dB7B53CAcB3A9da5607e93C1" -L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "0x8E03CAF9E9ecf21F36166C79F9b6219F0d6862dd" -L2_ERC721_GATEWAY_IMPLEMENTATION_ADDR = "0xCB0B7032d4206E19ADAa4ae2ebc478Ef21715C75" -L2_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = "0x3Fa37eeA0B5Ce8782A25Fc0C0B1C8725277CFabE" diff --git a/volume/config.toml b/volume/config.toml deleted file mode 100644 index 7d822c03..00000000 --- a/volume/config.toml +++ /dev/null @@ -1,111 +0,0 @@ -[general] -L1_RPC_ENDPOINT = "https://sepolia-subway-proxied-stg.alt.technology" -L1_RPC_ENDPOINT_WEBSOCKET = "ws://l1-devnet:8546" -L2_RPC_ENDPOINT = "http://l2-rpc:8545" -CHAIN_NAME_L1 = "Sepolia" -CHAIN_NAME_L2 = "Scroll SDK" -CHAIN_ID_L1 = "11155111" -CHAIN_ID_L2 = 221_122 -L1_CONTRACT_DEPLOYMENT_BLOCK = "7162368" - -[accounts] -DEPLOYER_PRIVATE_KEY = "0x9daffeba4af8c823c0e16caa29ede9d7eecd6ae87878ce7d73733c82ac488633" -L1_COMMIT_SENDER_PRIVATE_KEY = "0xa583f0e5a4c7a515d3bf7b27ba8932cb142d37ac3bd593e27a253cb020624033" -L1_FINALIZE_SENDER_PRIVATE_KEY = "0x772738ec4ede7a03be1448dc15892b4ee7182851a2e6a1bda7a1992a003448f3" -L1_GAS_ORACLE_SENDER_PRIVATE_KEY = "0xc2b21d848892563d3a812ea043a1edf5c8506014c3ec78c5c3334ec1bd109721" -L2_GAS_ORACLE_SENDER_PRIVATE_KEY = "0x92f21740cbb8beaf566350d7a88e53ea95c8b0b02987925bde251d2547d89e7b" -DEPLOYER_ADDR = "0xe856F24E62552c350ADdD4b27C36F582F06DD2B7" -OWNER_ADDR = "0x731297b06c1b37bDE3545dE50De24cE9d82dF9c8" -L1_COMMIT_SENDER_ADDR = "0x7dfE1C3247e2a0de8Bd85BC33dC8C5BC253F277B" -L1_FINALIZE_SENDER_ADDR = "0x3F97C3F934dEc82C1600028f22f06654ebF33b07" -L1_GAS_ORACLE_SENDER_ADDR = "0xd182dF4a640fA213e2BBC5e8114952f843EbB461" -L2_GAS_ORACLE_SENDER_ADDR = "0x22F867bf69AB85c1A847F3de26f756d0C154765e" - -[db] -ADMIN_SYSTEM_DB_CONNECTION_STRING = "" -BLOCKSCOUT_DB_CONNECTION_STRING = "postgres://blockscout:.tyllv893aco@private-morty-11-7-3-do-user-9610937-0.i.db.ondigitalocean.com:25061/scroll_blockscout?sslmode=require" -BRIDGE_HISTORY_DB_CONNECTION_STRING = "postgres://bridge_history:.2fcmwgetuwu@private-morty-11-7-3-do-user-9610937-0.i.db.ondigitalocean.com:25061/scroll_bridge_history?sslmode=require" -CHAIN_MONITOR_DB_CONNECTION_STRING = "postgres://chain_monitor:.zqufpqr9bym@private-morty-11-7-3-do-user-9610937-0.i.db.ondigitalocean.com:25061/scroll_chain_monitor?sslmode=require" -GAS_ORACLE_DB_CONNECTION_STRING = "postgres://rollup_node:0.yxcrfv5pxj@private-morty-11-7-3-do-user-9610937-0.i.db.ondigitalocean.com:25061/scroll_rollup?sslmode=require" -COORDINATOR_DB_CONNECTION_STRING = "postgres://rollup_node:0.yxcrfv5pxj@private-morty-11-7-3-do-user-9610937-0.i.db.ondigitalocean.com:25061/scroll_rollup?sslmode=require" -L1_EXPLORER_DB_CONNECTION_STRING = "" -ROLLUP_NODE_DB_CONNECTION_STRING = "postgres://rollup_node:0.yxcrfv5pxj@private-morty-11-7-3-do-user-9610937-0.i.db.ondigitalocean.com:25061/scroll_rollup?sslmode=require" -ROLLUP_EXPLORER_DB_CONNECTION_STRING = "postgres://rollup_node:0.yxcrfv5pxj@private-morty-11-7-3-do-user-9610937-0.i.db.ondigitalocean.com:25061/scroll_rollup?sslmode=require" -SCROLL_DB_CONNECTION_STRING = "postgres://rollup_node:0.yxcrfv5pxj@private-morty-11-7-3-do-user-9610937-0.i.db.ondigitalocean.com:25061/scroll_rollup?sslmode=require" -ADMIN_SYSTEM_BACKEND_DB_CONNECTION_STRING = "postgres://rollup_node:0.yxcrfv5pxj@private-morty-11-7-3-do-user-9610937-0.i.db.ondigitalocean.com:25061/scroll_rollup?sslmode=require" - -[gas-token] -ALTERNATIVE_GAS_TOKEN_ENABLED = false -GAS_ORACLE_INCORPORATE_TOKEN_EXCHANGE_RATE_ENANBLED = false -EXCHANGE_RATE_UPDATE_MODE = "Fixed" -FIXED_EXCHANGE_RATE = "0.01" -TOKEN_SYMBOL_PAIR = "UNIETH" - -[sequencer] -L2_GETH_STATIC_PEERS = [ - "enode://12c7ff46eba4d0ffcd74ac8ea7b1ed1296bfd8b4c14e88ea0c9a6f0ce12a78683e2831c64ea4e3717ac668c13ad8119865c6ff16830b31a67e25477c1ebd62d5@l2-sequencer-0:30303", - "enode://b80e187b9029fbd6bb9b4737de32a8902645c855211e0a6e130b9ce8a957d6f33071a8a5de7df76dda18335588b46c9ccab61947337861740f0830f03a772688@l2-sequencer-1:30303" -] -L2GETH_SIGNER_ADDRESS = "0xEcAcDbcB9CE94A3ce6EBBdd7DAae00513C36Bf0d" -L2GETH_KEYSTORE = "{\"address\":\"ecacdbcb9ce94a3ce6ebbdd7daae00513c36bf0d\",\"id\":\"047c0b0d-8252-4aa7-a7de-b9ad4c2592bb\",\"version\":3,\"Crypto\":{\"cipher\":\"aes-128-ctr\",\"cipherparams\":{\"iv\":\"8504321a1dce8fc4c3e66a4a3d38e9c4\"},\"ciphertext\":\"48efcba2d0068dd633c3cf5111a4f2cde72b87b4d372ef5ae19fb6237fea86a9\",\"kdf\":\"scrypt\",\"kdfparams\":{\"salt\":\"c356350b36ba9b3e5a6bf8460635bc16551992b6837f6139f26d5459c860c39c\",\"n\":131072,\"dklen\":32,\"p\":1,\"r\":8},\"mac\":\"b0a89d13730d656a93b37f28b0047a9955f6bf32bc6711ac1e378c25cd9bdd7a\"},\"x-ethers\":{\"client\":\"ethers/6.13.4\",\"gethFilename\":\"UTC--2024-11-27T11-23-30.0Z--ecacdbcb9ce94a3ce6ebbdd7daae00513c36bf0d\",\"path\":\"m/44'/60'/0'/0/0\",\"locale\":\"en\",\"mnemonicCounter\":\"6696da285f3881dcaaa45702088a8689\",\"mnemonicCiphertext\":\"f8df0f62c92115a36306e5e999a8153c\",\"version\":\"0.1\"}}" -L2GETH_PASSWORD = "scrollsdk" -L2GETH_NODEKEY = "8dedf583f81ee39d5f6bb35ce34c5aae76c0d9ed2d6de57fed23cb7e726081a9" - - [sequencer.sequencer-1] - L2GETH_SIGNER_ADDRESS = "0xa21c0BdCc77a73b49b8b0822135bF43A4e725BF5" - L2GETH_KEYSTORE = "{\"address\":\"a21c0bdcc77a73b49b8b0822135bf43a4e725bf5\",\"id\":\"a4077f92-b222-4683-b805-99c515fa026c\",\"version\":3,\"Crypto\":{\"cipher\":\"aes-128-ctr\",\"cipherparams\":{\"iv\":\"035ffa714b59af4bf3dcf3249d4e29a5\"},\"ciphertext\":\"dc34f2fd76750a7bb0bba3b321ab9895aab7b0fefc8c7ae6e40ef91068a51506\",\"kdf\":\"scrypt\",\"kdfparams\":{\"salt\":\"da6ae8c0aa7e07b073f7f32ef99a4d1e777041c69d839dd73bc621bab252e2b0\",\"n\":131072,\"dklen\":32,\"p\":1,\"r\":8},\"mac\":\"355ff5dfa1d1977413c12edd71e9e27b5ca29dd36651f8f66ed466c690228713\"},\"x-ethers\":{\"client\":\"ethers/6.13.4\",\"gethFilename\":\"UTC--2024-11-27T11-23-33.0Z--a21c0bdcc77a73b49b8b0822135bf43a4e725bf5\",\"path\":\"m/44'/60'/0'/0/0\",\"locale\":\"en\",\"mnemonicCounter\":\"86dd4344e71d6a2cde113c549de2b229\",\"mnemonicCiphertext\":\"61946b8efc38ee0034bdcb7f93c065c6\",\"version\":\"0.1\"}}" - L2GETH_PASSWORD = "scrollsdk" - L2GETH_NODEKEY = "e49a1f025510fcf041e82eb0aa19b862b2aaeabe3fa32e62bf1d04cb1ba9852b" - -[bootnode.bootnode-0] -L2GETH_NODEKEY = "430d8097ebe8a6c234c5c5fdca7ea4bf8caad48841e684f83a01a436b352c61b" - -[rollup] -MAX_TX_IN_CHUNK = 100 -MAX_BLOCK_IN_CHUNK = 100 -MAX_BATCH_IN_BUNDLE = 30 -MAX_L1_MESSAGE_GAS_LIMIT = 10_000_000 -TEST_ENV_MOCK_FINALIZE_ENABLED = true -TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC = 300 - -[frontend] -EXTERNAL_RPC_URI_L1 = "https://rpc.ankr.com/eth_sepolia" -EXTERNAL_RPC_URI_L2 = "http://l2-rpc.scrollsdk" -BRIDGE_API_URI = "http://bridge-history-api.scrollsdk/api" -ROLLUPSCAN_API_URI = "http://rollup-explorer-backend.scrollsdk/api" -EXTERNAL_EXPLORER_URI_L1 = "https://sepolia.etherscan.io" -EXTERNAL_EXPLORER_URI_L2 = "http://blockscout.scrollsdk" -ADMIN_SYSTEM_DASHBOARD_URI = "http://admin-system-dashboard.scrollsdk" -GRAFANA_URI = "http://grafana.scrollsdk" - -[genesis] -L2_MAX_ETH_SUPPLY = "226156424291633194186662080095093570025917938800079226639565593765455331328" -L2_DEPLOYER_INITIAL_BALANCE = 1_000_000_000_000_000_000 - -[contracts] -DEPLOYMENT_SALT = "salt-morty-test-123123789645124" -L1_FEE_VAULT_ADDR = "0x731297b06c1b37bDE3545dE50De24cE9d82dF9c8" - - [contracts.overrides] - L2_MESSAGE_QUEUE = "0x5300000000000000000000000000000000000000" - L1_GAS_PRICE_ORACLE = "0x5300000000000000000000000000000000000002" - L2_WHITELIST = "0x5300000000000000000000000000000000000003" - L2_WETH = "0x5300000000000000000000000000000000000004" - L2_TX_FEE_VAULT = "0x5300000000000000000000000000000000000005" - -[coordinator] -CHUNK_COLLECTION_TIME_SEC = 3_600 -BATCH_COLLECTION_TIME_SEC = 1_800 -BUNDLE_COLLECTION_TIME_SEC = 600 -COORDINATOR_JWT_SECRET_KEY = "aa4c0ea79f5cc72c2b60723b50ace611247cc3977927e6e4ee8b4cdf25ec1042" - -[ingress] -FRONTEND_HOST = "frontends.scrollsdk" -BRIDGE_HISTORY_API_HOST = "bridge-history-api.scrollsdk" -ROLLUP_EXPLORER_API_HOST = "rollup-explorer-backend.scrollsdk" -COORDINATOR_API_HOST = "coordinator-api.scrollsdk" -RPC_GATEWAY_HOST = "l2-rpc.scrollsdk" -BLOCKSCOUT_HOST = "blockscout.scrollsdk" -BLOCKSCOUT_BACKEND_HOST = "blockscout-backend.scrollsdk" -ADMIN_SYSTEM_DASHBOARD_HOST = "admin-system-dashboard.scrollsdk" -GRAFANA_HOST = "grafana.scrollsdk" diff --git a/volume/coordinator-config.yaml b/volume/coordinator-config.yaml deleted file mode 100644 index 2e86adf9..00000000 --- a/volume/coordinator-config.yaml +++ /dev/null @@ -1,41 +0,0 @@ -scrollConfig: | - { - "prover_manager": { - "provers_per_session": 1, - "session_attempts": 100, - "chunk_collection_time_sec": 360, - "batch_collection_time_sec": 180, - "bundle_collection_time_sec": 60, - "verifier": { - "mock_mode": false, - "low_version_circuit": { - "params_path": "/verifier/params", - "assets_path": "/verifier/assets/lo", - "fork_name": "darwin", - "min_prover_version": "v4.4.43" - }, - "high_version_circuit": { - "params_path": "/verifier/params", - "assets_path": "/verifier/assets/hi", - "fork_name": "darwinV2", - "min_prover_version": "v4.4.56" - } - }, - "max_verifier_workers": 4, - "min_prover_version": "v4.3.41" - }, - "db": { - "driver_name": "postgres", - "dsn": "", - "maxOpenNum": 200, - "maxIdleNum": 20 - }, - "l2": { - "chain_id": 221122 - }, - "auth": { - "secret": "e788b62d39254928a821ac1c76b274a8c835aa1e20ecfb6f50eb10e87847de44", - "challenge_expire_duration_sec": 10, - "login_expire_duration_sec": 3600 - } - } diff --git a/volume/frontend-config.yaml b/volume/frontend-config.yaml deleted file mode 100644 index 74554e5f..00000000 --- a/volume/frontend-config.yaml +++ /dev/null @@ -1,51 +0,0 @@ -scrollConfig: | - REACT_APP_ETH_SYMBOL = "ETH" - REACT_APP_BASE_CHAIN = "Ethereum" - REACT_APP_ROLLUP = "Scroll SDK" - REACT_APP_CHAIN_ID_L1 = "11155111" - REACT_APP_CHAIN_ID_L2 = "221122" - REACT_APP_CONNECT_WALLET_PROJECT_ID = "14efbaafcf5232a47d93a68229b71028" - - REACT_APP_EXTERNAL_RPC_URI_L1 = "http://l1-devnet.scrollsdk" - REACT_APP_EXTERNAL_RPC_URI_L2 = "http://l2-rpc.scrollsdk" - REACT_APP_BRIDGE_API_URI = "http://bridge-history-api.scrollsdk/api" - REACT_APP_ROLLUPSCAN_API_URI = "http://rollup-explorer-backend.scrollsdk/api" - REACT_APP_EXTERNAL_EXPLORER_URI_L1 = "http://l1-explorer.scrollsdk" - REACT_APP_EXTERNAL_EXPLORER_URI_L2 = "http://blockscout.scrollsdk" - ADMIN_SYSTEM_DASHBOARD_URI = "http://admin-system-dashboard.scrollsdk" - GRAFANA_URI = "http://grafana.scrollsdk" - - REACT_APP_L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "0xCD832C95AabA0d2f50d7567b21A43a5d93a932b0" - REACT_APP_L1_ETH_GATEWAY_PROXY_ADDR = "0x0000000000000000000000000000000000000000" - REACT_APP_L1_GAS_PRICE_ORACLE = "0x5300000000000000000000000000000000000002" - REACT_APP_L1_GATEWAY_ROUTER_PROXY_ADDR = "0xFeA8784A9f31f6f6895e65B65eE63fC85d324F5F" - REACT_APP_L1_MESSAGE_QUEUE = "0x74E69415630e35631eb0D2199AF6De5e010B58B2" - REACT_APP_L1_MESSAGE_QUEUE_WITH_GAS_PRICE_ORACLE = "0x74E69415630e35631eb0D2199AF6De5e010B58B2" - REACT_APP_L1_SCROLL_MESSENGER = "0xf5a927Ea81032Dbe3921424E18Ad81E3680C86ac" - REACT_APP_L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "0x8c7fff50e219E2795ccCF188bD9728d0C4009c1b" - REACT_APP_L1_WETH_GATEWAY_PROXY_ADDR = "0x0000000000000000000000000000000000000000" - REACT_APP_SCROLL_CHAIN = "0x3177d80e33919312244Fbbd70E4aA95eBB27070a" - REACT_APP_L1_GAS_TOKEN_GATEWAY = "0xD287a0Cf91D27E876BeAF0977093eB47d6Cc4381" - REACT_APP_L1_WRAPPED_TOKEN_GATEWAY = "0xA3d3011C108816B3eE0468c04aC61036bA06Fb6e" - REACT_APP_L1_GAS_TOKEN_ADDR = "0x8258c70A41de87A98d7fAD2BbF7c1009845a8A1D" - REACT_APP_L1_WETH_ADDR = "0x0e8fEBf2fa907513d10B433c01B5F444A5c113bF" - - REACT_APP_L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "0x1AE0E1685fD6b34382D10eE90C7d7e2B2D647A09" - REACT_APP_L2_ETH_GATEWAY_PROXY_ADDR = "0xAd7de4158e155fBfDeA9C20aC682351C6e78a58f" - REACT_APP_L2_GATEWAY_ROUTER_PROXY_ADDR = "0xA26fEdaeA13041f7bc6c36774c03265b3d26c5ac" - REACT_APP_L2_SCROLL_MESSENGER = "0xd36B5A075cF7d22F46aa3E1C89d21d0C5cc16ebF" - REACT_APP_L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "0x0C2e35775Bd36d28A96da0D31C933A9C4773cE10" - REACT_APP_L2_WETH_GATEWAY_PROXY_ADDR = "0x0000000000000000000000000000000000000000" - - REACT_APP_L1_USDC_GATEWAY_PROXY_ADDR = "" - REACT_APP_L2_USDC_GATEWAY_PROXY_ADDR = "" - REACT_APP_L1_DAI_GATEWAY_PROXY_ADDR = "" - REACT_APP_L2_DAI_GATEWAY_PROXY_ADDR = "" - REACT_APP_L1_LIDO_GATEWAY_PROXY_ADDR = "" - REACT_APP_L2_LIDO_GATEWAY_PROXY_ADDR = "" - REACT_APP_L1_PUFFER_GATEWAY_PROXY_ADDR = "" - REACT_APP_L2_PUFFER_GATEWAY_PROXY_ADDR = "" - - REACT_APP_SCROLL_ORIGINS_NFT = "" - REACT_APP_SCROLL_ORIGINS_NFT_V2 = "" - REACT_APP_L1_BATCH_BRIDGE_GATEWAY_PROXY_ADDR = "" diff --git a/volume/genesis.yaml b/volume/genesis.yaml deleted file mode 100644 index 0c93a792..00000000 --- a/volume/genesis.yaml +++ /dev/null @@ -1,119 +0,0 @@ -scrollConfig: | - { - "config": { - "chainId": 221122, - "homesteadBlock": 0, - "eip150Block": 0, - "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "eip155Block": 0, - "eip158Block": 0, - "byzantiumBlock": 0, - "constantinopleBlock": 0, - "petersburgBlock": 0, - "istanbulBlock": 0, - "berlinBlock": 0, - "londonBlock": 0, - "archimedesBlock": 0, - "shanghaiBlock": 0, - "bernoulliBlock": 0, - "curieBlock": 0, - "darwinTime": 0, - "darwinV2Time": 0, - "clique": { - "period": 3, - "epoch": 30000, - "relaxed_period": true - }, - "scroll": { - "useZktrie": true, - "maxTxPerBlock": 100, - "maxTxPayloadBytesPerBlock": 122880, - "feeVaultAddress": "0x5300000000000000000000000000000000000005", - "l1Config": { - "l1ChainId": "11155111", - "l1MessageQueueAddress": "0x74E69415630e35631eb0D2199AF6De5e010B58B2", - "scrollChainAddress": "0x3177d80e33919312244Fbbd70E4aA95eBB27070a", - "numL1MessagesPerBlock": "10" - } - } - }, - "nonce": "0x0", - "timestamp": "0x00000000000000000000000000000000000000000000000000000000671f8616", - "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000756EA06BDEe36de11F22DCca45a31d8a178eF3c60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "gasLimit": "10000000", - "difficulty": "0x1", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "coinbase": "0x0000000000000000000000000000000000000000", - "alloc": { - "0x4e59b44847b379578588920ca78fbf26c0b4956c": { - "balance": "0x0", - "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3", - "nonce": "0x1", - "storage": {} - }, - "0x5300000000000000000000000000000000000000": { - "balance": "0x0", - "code": "0x608060405234801561000f575f80fd5b5060043610610090575f3560e01c806383cc76601161006357806383cc7660146100f85780638da5cb5b1461010b578063c4d66de81461011e578063d4b9f4fa14610131578063f2fde38b14610139575f80fd5b806326aad7b7146100945780633cb747bf146100b0578063600a2e77146100db578063715018a6146100ee575b5f80fd5b61009d60015481565b6040519081526020015b60405180910390f35b6053546100c3906001600160a01b031681565b6040516001600160a01b0390911681526020016100a7565b61009d6100e9366004610539565b61014c565b6100f66101ef565b005b61009d610106366004610539565b610224565b6052546100c3906001600160a01b031681565b6100f661012c366004610550565b61023a565b61009d5f5481565b6100f6610147366004610550565b6102d2565b6053545f906001600160a01b0316331461019e5760405162461bcd60e51b815260206004820152600e60248201526d37b7363c9036b2b9b9b2b733b2b960911b60448201526064015b60405180910390fd5b5f806101a98461035e565b60408051838152602081018890529294509092507ffaa617c2d8ce12c62637dbce76efcc18dae60574aa95709bdcedce7e76071693910160405180910390a19392505050565b6052546001600160a01b031633146102195760405162461bcd60e51b81526004016101959061057d565b6102225f610477565b565b602a8160288110610233575f80fd5b0154905081565b6052546001600160a01b031633146102645760405162461bcd60e51b81526004016101959061057d565b600154156102a85760405162461bcd60e51b815260206004820152601160248201527063616e6e6f7420696e697469616c697a6560781b6044820152606401610195565b6102b06104c8565b605380546001600160a01b0319166001600160a01b0392909216919091179055565b6052546001600160a01b031633146102fc5760405162461bcd60e51b81526004016101959061057d565b6001600160a01b0381166103525760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f20616464726573730000006044820152606401610195565b61035b81610477565b50565b6003545f9081906103b15760405162461bcd60e51b815260206004820152601a60248201527f63616c6c206265666f726520696e697469616c697a6174696f6e0000000000006044820152606401610195565b600154835f5b8215610448576103c86002846105c8565b5f036104125781602a82602881106103e2576103e26105b4565b015561040b82600283602881106103fb576103fb6105b4565b01545f9182526020526040902090565b915061043c565b610439602a8260288110610428576104286105b4565b0154835f9182526020526040902090565b91505b600192831c92016103b7565b81602a826028811061045c5761045c6105b4565b0155505f819055600180548082019091559590945092505050565b605280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f5b60286104d78260016105fb565b101561035b57610508600282602881106104f3576104f36105b4565b0154600283602881106103fb576103fb6105b4565b60026105158360016105fb565b60288110610525576105256105b4565b01558061053181610614565b9150506104ca565b5f60208284031215610549575f80fd5b5035919050565b5f60208284031215610560575f80fd5b81356001600160a01b0381168114610576575f80fd5b9392505050565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b5f826105e257634e487b7160e01b5f52601260045260245ffd5b500690565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561060e5761060e6105e7565b92915050565b5f60018201610625576106256105e7565b506001019056fea164736f6c6343000818000a", - "nonce": "0x0", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000052": "0x000000000000000000000000731297b06c1b37bde3545de50de24ce9d82df9c8" - } - }, - "0x5300000000000000000000000000000000000002": { - "balance": "0x0", - "code": "0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c8063715018a6116100b4578063a911d77f11610079578063a911d77f1461024c578063bede39b514610254578063de26c4a114610267578063e88a60ad1461027a578063f2fde38b1461028d578063f45e65d8146102a0575f80fd5b8063715018a6146101eb57806384189161146101f35780638da5cb5b146101fc57806393e59dc114610226578063944b247f14610239575f80fd5b80633d0f963e116100fa5780633d0f963e146101a057806349948e0e146101b3578063519b4bd3146101c65780636a5e67e5146101cf57806370465597146101d8575f80fd5b80630c18c1621461013657806313dad5be1461015257806323e524ac1461016f5780633577afc51461017857806339455d3a1461018d575b5f80fd5b61013f60025481565b6040519081526020015b60405180910390f35b60085461015f9060ff1681565b6040519015158152602001610149565b61013f60065481565b61018b6101863660046109b3565b6102a9565b005b61018b61019b3660046109ca565b61033b565b61018b6101ae3660046109ea565b610438565b61013f6101c1366004610a2b565b6104bb565b61013f60015481565b61013f60075481565b61018b6101e63660046109b3565b6104e0565b61018b61056e565b61013f60055481565b5f5461020e906001600160a01b031681565b6040516001600160a01b039091168152602001610149565b60045461020e906001600160a01b031681565b61018b6102473660046109b3565b6105a2565b61018b61062e565b61018b6102623660046109b3565b61068a565b61013f610275366004610a2b565b610747565b61018b6102883660046109b3565b610764565b61018b61029b3660046109ea565b6107f0565b61013f60035481565b5f546001600160a01b031633146102db5760405162461bcd60e51b81526004016102d290610ad6565b60405180910390fd5b621c9c388111156102ff57604051635742c80560e11b815260040160405180910390fd5b60028190556040518181527f32740b35c0ea213650f60d44366b4fb211c9033b50714e4a1d34e65d5beb9bb4906020015b60405180910390a150565b6004805460405163efc7840160e01b815233928101929092526001600160a01b03169063efc7840190602401602060405180830381865afa158015610382573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103a69190610b0d565b6103c3576040516326b3506d60e11b815260040160405180910390fd5b600182905560058190556040518281527f351fb23757bb5ea0546c85b7996ddd7155f96b939ebaa5ff7bc49c75f27f2c449060200160405180910390a16040518181527f9a14bfb5d18c4c3cf14cae19c23d7cf1bcede357ea40ca1f75cd49542c71c214906020015b60405180910390a15050565b5f546001600160a01b031633146104615760405162461bcd60e51b81526004016102d290610ad6565b600480546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f22d1c35fe072d2e42c3c8f9bd4a0d34aa84a0101d020a62517b33fdb3174e5f7910161042c565b6008545f9060ff16156104d7576104d18261087b565b92915050565b6104d1826108c1565b5f546001600160a01b031633146105095760405162461bcd60e51b81526004016102d290610ad6565b610519633b9aca006103e8610b40565b81111561053957604051631e44fdeb60e11b815260040160405180910390fd5b60038190556040518181527f3336cd9708eaf2769a0f0dc0679f30e80f15dcd88d1921b5a16858e8b85c591a90602001610330565b5f546001600160a01b031633146105975760405162461bcd60e51b81526004016102d290610ad6565b6105a05f610904565b565b5f546001600160a01b031633146105cb5760405162461bcd60e51b81526004016102d290610ad6565b6105d9633b9aca0080610b40565b8111156105f95760405163874f603160e01b815260040160405180910390fd5b60068190556040518181527f2ab3f5a4ebbcbf3c24f62f5454f52f10e1a8c9dcc5acac8f19199ce881a6a10890602001610330565b5f546001600160a01b031633146106575760405162461bcd60e51b81526004016102d290610ad6565b60085460ff161561067b576040516379f9c57560e01b815260040160405180910390fd5b6008805460ff19166001179055565b6004805460405163efc7840160e01b815233928101929092526001600160a01b03169063efc7840190602401602060405180830381865afa1580156106d1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106f59190610b0d565b610712576040516326b3506d60e11b815260040160405180910390fd5b60018190556040518181527f351fb23757bb5ea0546c85b7996ddd7155f96b939ebaa5ff7bc49c75f27f2c4490602001610330565b6008545f9060ff161561075b57505f919050565b6104d182610953565b5f546001600160a01b0316331461078d5760405162461bcd60e51b81526004016102d290610ad6565b61079b633b9aca0080610b40565b8111156107bb5760405163f37ec21560e01b815260040160405180910390fd5b60078190556040518181527f6b332a036d8c3ead57dcb06c87243bd7a2aed015ddf2d0528c2501dae56331aa90602001610330565b5f546001600160a01b031633146108195760405162461bcd60e51b81526004016102d290610ad6565b6001600160a01b03811661086f5760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f206164647265737300000060448201526064016102d2565b61087881610904565b50565b5f633b9aca0060055483516007546108939190610b40565b61089d9190610b40565b6001546006546108ad9190610b40565b6108b79190610b57565b6104d19190610b6a565b5f806108cc83610953565b90505f600154826108dd9190610b40565b9050633b9aca00600354826108f29190610b40565b6108fc9190610b6a565b949350505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80515f908190815b818110156109a45784818151811061097557610975610b89565b01602001516001600160f81b0319165f036109955760048301925061099c565b6010830192505b60010161095b565b50506002540160400192915050565b5f602082840312156109c3575f80fd5b5035919050565b5f80604083850312156109db575f80fd5b50508035926020909101359150565b5f602082840312156109fa575f80fd5b81356001600160a01b0381168114610a10575f80fd5b9392505050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215610a3b575f80fd5b813567ffffffffffffffff80821115610a52575f80fd5b818401915084601f830112610a65575f80fd5b813581811115610a7757610a77610a17565b604051601f8201601f19908116603f01168101908382118183101715610a9f57610a9f610a17565b81604052828152876020848701011115610ab7575f80fd5b826020860160208301375f928101602001929092525095945050505050565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b5f60208284031215610b1d575f80fd5b81518015158114610a10575f80fd5b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176104d1576104d1610b2c565b808201808211156104d1576104d1610b2c565b5f82610b8457634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffdfea164736f6c6343000818000a", - "nonce": "0x0", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000731297b06c1b37bde3545de50de24ce9d82df9c8", - "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000000000000000000000000000000000000000000001" - } - }, - "0x5300000000000000000000000000000000000003": { - "balance": "0x0", - "code": "0x608060405234801561000f575f80fd5b5060043610610055575f3560e01c8063715018a61461005957806379586dd7146100635780638da5cb5b14610076578063efc78401146100a5578063f2fde38b146100e0575b5f80fd5b6100616100f3565b005b61006161007136600461033a565b610130565b5f54610088906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100d06100b336600461040c565b6001600160a01b03165f9081526001602052604090205460ff1690565b604051901515815260200161009c565b6100616100ee36600461040c565b610222565b5f546001600160a01b031633146101255760405162461bcd60e51b815260040161011c9061042c565b60405180910390fd5b61012e5f6102ad565b565b5f546001600160a01b031633146101595760405162461bcd60e51b815260040161011c9061042c565b5f5b825181101561021d578160015f85848151811061017a5761017a610463565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff0219169083151502179055508281815181106101c9576101c9610463565b60200260200101516001600160a01b03167f8daaf060c3306c38e068a75c054bf96ecd85a3db1252712c4d93632744c42e0d8360405161020d911515815260200190565b60405180910390a260010161015b565b505050565b5f546001600160a01b0316331461024b5760405162461bcd60e51b815260040161011c9061042c565b6001600160a01b0381166102a15760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f2061646472657373000000604482015260640161011c565b6102aa816102ad565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b5f52604160045260245ffd5b80356001600160a01b0381168114610326575f80fd5b919050565b80358015158114610326575f80fd5b5f806040838503121561034b575f80fd5b823567ffffffffffffffff80821115610362575f80fd5b818501915085601f830112610375575f80fd5b8135602082821115610389576103896102fc565b8160051b604051601f19603f830116810181811086821117156103ae576103ae6102fc565b6040529283528183019350848101820192898411156103cb575f80fd5b948201945b838610156103f0576103e186610310565b855294820194938201936103d0565b96506103ff905087820161032b565b9450505050509250929050565b5f6020828403121561041c575f80fd5b61042582610310565b9392505050565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b634e487b7160e01b5f52603260045260245ffdfea164736f6c6343000818000a", - "nonce": "0x0", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000731297b06c1b37bde3545de50de24ce9d82df9c8" - } - }, - "0x5300000000000000000000000000000000000004": { - "balance": "0x0", - "code": "0x6080604052600436106100fd575f3560e01c806370a0823111610092578063a457c2d711610062578063a457c2d7146102a1578063a9059cbb146102c0578063d0e30db0146102df578063d505accf146102e7578063dd62ed3e14610306575f80fd5b806370a08231146102135780637ecebe001461024757806384b0196e1461026657806395d89b411461028d575f80fd5b80632e1a7d4d116100cd5780632e1a7d4d146101a6578063313ce567146101c55780633644e515146101e057806339509351146101f4575f80fd5b806306fdde0314610110578063095ea7b31461013a57806318160ddd1461016957806323b872dd14610187575f80fd5b3661010c5761010a610325565b005b5f80fd5b34801561011b575f80fd5b50610124610376565b6040516101319190611241565b60405180910390f35b348015610145575f80fd5b50610159610154366004611275565b610406565b6040519015158152602001610131565b348015610174575f80fd5b506002545b604051908152602001610131565b348015610192575f80fd5b506101596101a136600461129d565b61041f565b3480156101b1575f80fd5b5061010a6101c03660046112d6565b610442565b3480156101d0575f80fd5b5060405160128152602001610131565b3480156101eb575f80fd5b5061017961052f565b3480156101ff575f80fd5b5061015961020e366004611275565b61053d565b34801561021e575f80fd5b5061017961022d3660046112ed565b6001600160a01b03165f9081526020819052604090205490565b348015610252575f80fd5b506101796102613660046112ed565b61055e565b348015610271575f80fd5b5061027a61057b565b6040516101319796959493929190611306565b348015610298575f80fd5b50610124610602565b3480156102ac575f80fd5b506101596102bb366004611275565b610611565b3480156102cb575f80fd5b506101596102da366004611275565b61068b565b61010a610325565b3480156102f2575f80fd5b5061010a61030136600461139d565b610698565b348015610311575f80fd5b5061017961032036600461140a565b6107f9565b336103308134610823565b806001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c3460405161036b91815260200190565b60405180910390a250565b6060600380546103859061143b565b80601f01602080910402602001604051908101604052809291908181526020018280546103b19061143b565b80156103fc5780601f106103d3576101008083540402835291602001916103fc565b820191905f5260205f20905b8154815290600101906020018083116103df57829003601f168201915b5050505050905090565b5f336104138185856108e0565b60019150505b92915050565b5f3361042c858285610a04565b610437858585610a7c565b506001949350505050565b3361044d8183610c1e565b5f816001600160a01b0316836040515f6040518083038185875af1925050503d805f8114610496576040519150601f19603f3d011682016040523d82523d5f602084013e61049b565b606091505b50509050806104e75760405162461bcd60e51b81526020600482015260136024820152721dda5d1a191c985dc81155120819985a5b1959606a1b60448201526064015b60405180910390fd5b816001600160a01b03167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b658460405161052291815260200190565b60405180910390a2505050565b5f610538610d46565b905090565b5f3361041381858561054f83836107f9565b610559919061146d565b6108e0565b6001600160a01b0381165f90815260076020526040812054610419565b5f606080828080836105ae7f577261707065642045746865720000000000000000000000000000000000000d6005610e6f565b6105d97f31000000000000000000000000000000000000000000000000000000000000016006610e6f565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6060600480546103859061143b565b5f338161061e82866107f9565b90508381101561067e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016104de565b61043782868684036108e0565b5f33610413818585610a7c565b834211156106e85760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e6500000060448201526064016104de565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886107168c610f18565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61077082610f3f565b90505f61077f82878787610f6b565b9050896001600160a01b0316816001600160a01b0316146107e25760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e6174757265000060448201526064016104de565b6107ed8a8a8a6108e0565b50505050505050505050565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6001600160a01b0382166108795760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104de565b8060025f82825461088a919061146d565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0383166109425760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104de565b6001600160a01b0382166109a35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104de565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f610a0f84846107f9565b90505f198114610a765781811015610a695760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104de565b610a7684848484036108e0565b50505050565b6001600160a01b038316610ae05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104de565b6001600160a01b038216610b425760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104de565b6001600160a01b0383165f9081526020819052604090205481811015610bb95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016104de565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610a76565b6001600160a01b038216610c7e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104de565b6001600160a01b0382165f9081526020819052604090205481811015610cf15760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016104de565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016109f7565b5f306001600160a01b037f000000000000000000000000d85bdcdae4db1faeb8ef93331525fe68d7c8b3f016148015610d9e57507f0000000000000000000000000000000000000000000000000000000000007a6946145b15610dc857507fd2c591c2db8e7edcffc464f7eae06c0096c77bc8d4606e23c50b9f18fcee6e5290565b610538604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f00cd3d46df44f2cbb950cf84eb2e92aa2ddd23195b1a009173ea59a063357ed3918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b606060ff8314610e8957610e8283610f91565b9050610419565b818054610e959061143b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec19061143b565b8015610f0c5780601f10610ee357610100808354040283529160200191610f0c565b820191905f5260205f20905b815481529060010190602001808311610eef57829003601f168201915b50505050509050610419565b6001600160a01b0381165f9081526007602052604090208054600181018255905b50919050565b5f610419610f4b610d46565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f610f7a87878787610fce565b91509150610f878161108b565b5095945050505050565b60605f610f9d836111d7565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561100357505f90506003611082565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611054573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661107c575f60019250925050611082565b91505f90505b94509492505050565b5f81600481111561109e5761109e61148c565b036110a65750565b60018160048111156110ba576110ba61148c565b036111075760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104de565b600281600481111561111b5761111b61148c565b036111685760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104de565b600381600481111561117c5761117c61148c565b036111d45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104de565b50565b5f60ff8216601f81111561041957604051632cd44ac360e21b815260040160405180910390fd5b5f81518084525f5b8181101561122257602081850181015186830182015201611206565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f61125360208301846111fe565b9392505050565b80356001600160a01b0381168114611270575f80fd5b919050565b5f8060408385031215611286575f80fd5b61128f8361125a565b946020939093013593505050565b5f805f606084860312156112af575f80fd5b6112b88461125a565b92506112c66020850161125a565b9150604084013590509250925092565b5f602082840312156112e6575f80fd5b5035919050565b5f602082840312156112fd575f80fd5b6112538261125a565b60ff60f81b881681525f602060e0602084015261132660e084018a6111fe565b8381036040850152611338818a6111fe565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b8181101561138b5783518352928401929184019160010161136f565b50909c9b505050505050505050505050565b5f805f805f805f60e0888a0312156113b3575f80fd5b6113bc8861125a565b96506113ca6020890161125a565b95506040880135945060608801359350608088013560ff811681146113ed575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f806040838503121561141b575f80fd5b6114248361125a565b91506114326020840161125a565b90509250929050565b600181811c9082168061144f57607f821691505b602082108103610f3957634e487b7160e01b5f52602260045260245ffd5b8082018082111561041957634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52602160045260245ffdfea164736f6c6343000818000a", - "nonce": "0x0", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000003": "0x577261707065642045746865720000000000000000000000000000000000001a", - "0x0000000000000000000000000000000000000000000000000000000000000004": "0x5745544800000000000000000000000000000000000000000000000000000008" - } - }, - "0x5300000000000000000000000000000000000005": { - "balance": "0x0", - "code": "0x6080604052600436106100dc575f3560e01c806384411d651161007c578063c1a3775911610057578063c1a377591461021f578063f2fde38b1461023e578063feec756c1461025d578063ff4f35461461027c575f80fd5b806384411d65146101cd5780638da5cb5b146101e25780639e7adc7914610200575f80fd5b8063457e1a49116100b7578063457e1a491461015857806366d003ac1461017b578063715018a61461019a57806374042229146101ae575f80fd5b80632e1a7d4d146100e75780633cb747bf146101085780633ccfd60b14610144575f80fd5b366100e357005b5f80fd5b3480156100f2575f80fd5b5061010661010136600461075d565b61029b565b005b348015610113575f80fd5b50600254610127906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561014f575f80fd5b506101066103fb565b348015610163575f80fd5b5061016d60015481565b60405190815260200161013b565b348015610186575f80fd5b50600354610127906001600160a01b031681565b3480156101a5575f80fd5b50610106610408565b3480156101b9575f80fd5b506101066101c8366004610774565b61043c565b3480156101d8575f80fd5b5061016d60045481565b3480156101ed575f80fd5b505f54610127906001600160a01b031681565b34801561020b575f80fd5b5061010661021a366004610774565b6104b6565b34801561022a575f80fd5b50600554610127906001600160a01b031681565b348015610249575f80fd5b50610106610258366004610774565b610530565b348015610268575f80fd5b50610106610277366004610774565b6105b8565b348015610287575f80fd5b5061010661029636600461075d565b610632565b60015481101561032b5760405162461bcd60e51b815260206004820152604a60248201527f4665655661756c743a207769746864726177616c20616d6f756e74206d75737460448201527f2062652067726561746572207468616e206d696e696d756d20776974686472616064820152691dd85b08185b5bdd5b9d60b21b608482015260a4015b60405180910390fd5b478082111561038f5760405162461bcd60e51b815260206004820152602a60248201527f4665655661756c743a20696e73756666696369656e742062616c616e636520746044820152696f20776974686472617760b01b6064820152608401610322565b6004805483019055600354604080518481526001600160a01b0390921660208301523382820152517fc8a211cc64b6ed1b50595a9fcb1932b6d1e5a6e8ef15b60e5b1f988ea9086bba9181900360600190a16003546103f7906001600160a01b0316836106a0565b5050565b476104058161029b565b50565b5f546001600160a01b031633146104315760405162461bcd60e51b8152600401610322906107a1565b61043a5f61070e565b565b5f546001600160a01b031633146104655760405162461bcd60e51b8152600401610322906107a1565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f1c928c417a10a21c3cddad148c5dba5d710e4b1442d6d8a36de345935ad84612905f90a35050565b5f546001600160a01b031633146104df5760405162461bcd60e51b8152600401610322906107a1565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f1c928c417a10a21c3cddad148c5dba5d710e4b1442d6d8a36de345935ad84612905f90a35050565b5f546001600160a01b031633146105595760405162461bcd60e51b8152600401610322906107a1565b6001600160a01b0381166105af5760405162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f20616464726573730000006044820152606401610322565b6104058161070e565b5f546001600160a01b031633146105e15760405162461bcd60e51b8152600401610322906107a1565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f7e1e96961a397c8aa26162fe259cc837afc95e33aad4945ddc61c18dabb7a6ad905f90a35050565b5f546001600160a01b0316331461065b5760405162461bcd60e51b8152600401610322906107a1565b600180549082905560408051828152602081018490527f0d3c80219fe57713b9f9c83d1e51426792d0c14d8e330e65b102571816140965910160405180910390a15050565b6005546040516317e614fd60e11b81526001600160a01b038481166004830152602482018490525f604483015290911690632fcc29fa9083906064015f604051808303818588803b1580156106f3575f80fd5b505af1158015610705573d5f803e3d5ffd5b50505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f6020828403121561076d575f80fd5b5035919050565b5f60208284031215610784575f80fd5b81356001600160a01b038116811461079a575f80fd5b9392505050565b60208082526017908201527f63616c6c6572206973206e6f7420746865206f776e657200000000000000000060408201526060019056fea164736f6c6343000818000a", - "nonce": "0x0", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000731297b06c1b37bde3545de50de24ce9d82df9c8", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000de0b6b3a7640000", - "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000003": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000005": "0x000000000000000000000000ad7de4158e155fbfdea9c20ac682351c6e78a58f" - } - }, - "0x731297b06c1b37bde3545de50de24ce9d82df9c8": { - "balance": "0xde0b6b3a7640000", - "code": "0x", - "nonce": "0x1", - "storage": {} - }, - "0xd36b5a075cf7d22f46aa3e1c89d21d0c5cc16ebf": { - "balance": "0x7ffffffffffffffffffffffffffffffffffffffffffffff21f494c589c0000", - "code": "0x", - "nonce": "0x0", - "storage": { - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000000000000000000000000000000000000000000000" - } - } - }, - "number": "0x0", - "gasUsed": "0x0", - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "baseFeePerGas": null - } diff --git a/volume/rollup-config.yaml b/volume/rollup-config.yaml deleted file mode 100644 index dbf705a7..00000000 --- a/volume/rollup-config.yaml +++ /dev/null @@ -1,131 +0,0 @@ -scrollConfig: | - { - "l1_config": { - "endpoint": "https://alien-flashy-arm.ethereum-sepolia.quiknode.pro/2aeb75414e5ee0e930b64c2e7feff59efb537f30", - "start_height": 0, - "relayer_config": { - "gas_price_oracle_contract_address": "0x5300000000000000000000000000000000000002", - "sender_config": { - "endpoint": "http://l2-sequencer:8545", - "escalate_blocks": 100, - "escalate_multiple_num": 11, - "escalate_multiple_den": 10, - "min_gas_tip": 1, - "max_gas_price": 10000000000000, - "tx_type": "DynamicFeeTx", - "check_pending_time": 3, - "confirmations": "0x0" - }, - "gas_oracle_config": { - "min_gas_price": 0, - "gas_price_diff": 50000, - "l1_base_fee_weight": 0.086, - "l1_blob_base_fee_weight": 0.030, - "check_committed_batches_window_minutes": 5, - "l1_base_fee_default": 15000000000, - "l1_blob_base_fee_default": 1, - "alternative_gas_token_config": { - "enabled": false, - "mode": "Fixed", - "fixed_exchange_rate": 0.001, - "token_symbol_pair": "" - } - }, - "gas_oracle_sender_signer_config": { - "signer_type": "PrivateKey", - "private_key_signer_config": { - "private_key": "1313131313131313131313131313131313131313131313131313131313131313" - } - } - } - }, - "l2_config": { - "confirmations": "0x10", - "endpoint": "http://l2-sequencer:8545", - "l2_message_queue_address": "0x5300000000000000000000000000000000000000", - "relayer_config": { - "rollup_contract_address": "0x3177d80e33919312244Fbbd70E4aA95eBB27070a", - "gas_price_oracle_contract_address": "0x74E69415630e35631eb0D2199AF6De5e010B58B2", - "sender_config": { - "endpoint": "https://alien-flashy-arm.ethereum-sepolia.quiknode.pro/2aeb75414e5ee0e930b64c2e7feff59efb537f30", - "escalate_blocks": 4, - "escalate_multiple_num": 12, - "escalate_multiple_den": 10, - "min_gas_tip": 100000000, - "max_gas_price": 200000000000, - "max_blob_gas_price": 200000000000, - "tx_type": "DynamicFeeTx", - "check_pending_time": 10, - "confirmations": "0x0", - "max_pending_blob_txs": 3 - }, - "gas_oracle_config": { - "min_gas_price": 0, - "gas_price_diff": 50000, - "alternative_gas_token_config": { - "enabled": false, - "mode": "Fixed", - "fixed_exchange_rate": 0.001, - "token_symbol_pair": "" - } - }, - "chain_monitor": { - "enabled": true, - "timeout": 3, - "try_times": 5, - "base_url": "http://chain-monitor:8080" - }, - "enable_test_env_bypass_features": false, - "finalize_batch_without_proof_timeout_sec": 300, - "finalize_bundle_without_proof_timeout_sec": 300, - "gas_oracle_sender_signer_config": { - "signer_type": "PrivateKey", - "private_key_signer_config": { - "private_key": "1313131313131313131313131313131313131313131313131313131313131313" - } - }, - "commit_sender_signer_config": { - "signer_type": "PrivateKey", - "private_key_signer_config": { - "private_key": "1414141414141414141414141414141414141414141414141414141414141414" - } - }, - "finalize_sender_signer_config": { - "signer_type": "PrivateKey", - "private_key_signer_config": { - "private_key": "1515151515151515151515151515151515151515151515151515151515151515" - } - }, - "l1_commit_gas_limit_multiplier": 1.2 - }, - "chunk_proposer_config": { - "propose_interval_milliseconds": 100, - "max_block_num_per_chunk": 100, - "max_tx_num_per_chunk": 100, - "max_l1_commit_gas_per_chunk": 5000000, - "max_l1_commit_calldata_size_per_chunk": 110000, - "chunk_timeout_sec": 2700, - "max_row_consumption_per_chunk": 1000000, - "gas_cost_increase_multiplier": 1.2, - "max_uncompressed_batch_bytes_size": 634880 - }, - "batch_proposer_config": { - "propose_interval_milliseconds": 1000, - "max_l1_commit_gas_per_batch": 5000000, - "max_l1_commit_calldata_size_per_batch": 110000, - "batch_timeout_sec": 2700, - "gas_cost_increase_multiplier": 1.2, - "max_uncompressed_batch_bytes_size": 634880 - }, - "bundle_proposer_config": { - "max_batch_num_per_bundle": 30, - "bundle_timeout_sec": 36000 - } - }, - "db_config": { - "driver_name": "postgres", - "dsn": "", - "maxOpenNum": 50, - "maxIdleNum": 20 - } - } diff --git a/volume/rollup-explorer-backend-config.yaml b/volume/rollup-explorer-backend-config.yaml deleted file mode 100644 index ddb2b809..00000000 --- a/volume/rollup-explorer-backend-config.yaml +++ /dev/null @@ -1,6 +0,0 @@ -scrollConfig: | - { - "db_url": "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable", - "open_api_addr": "/rollupscan", - "max_per_page": 500 - } From c1bfcf5de9701a22dd4edc5e5980eecd3f6fdc9e Mon Sep 17 00:00:00 2001 From: Morty Date: Wed, 16 Apr 2025 05:43:51 +0800 Subject: [PATCH 03/31] remove .DS_Store --- .DS_Store | Bin 10244 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 9c55fc10700e4d925eda98385fc42ba336f15d5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10244 zcmeI1&r4KM6vxk-8Ffkt%i37bBO)YFQV16XO)?1*fn;Dokz50_nyyu?|pZ?cZkRt zD5rXfTq26%61Ke!H=iQ>;_{S`t~m?qpgmO~TBdC@I&+Xy?*3~wqZADplP#o11 zRyB3>7Q<1^QSa)wn6?#VRdaIm=EKpM9lb+wWOnrL%5ZXG%G$eCz$)NXKp+D1%2XZ`2GPK{7`(G;h*`J3wRjIZOHb@yl0_NBt~>{gPZVc*@2uZiPDv);$QoJWNX{1;9Y$hgPJk~D zwiM{bp_e&x4t)CPAI16B7yG_!PHH|+e|!uZM{+*ukgI=_q)K8e(_A--cAo3fvYtn*53WW~jKSfI366;7 zFlGL3uHQQ__~G8#6fVnI(H4{Q^f|Ea&Qa zQhnDO#Mee@C-DY%t9xENFKeAQbc@Oq7W?if17XP?D9 zNkN;Nl#@?o5I`wDXL@`3RvX1~rtY6ZU#A!3_yzXO$8#s~ocm1pq2O-8SSB&P87kDT zP2}Y6c_TRE+s=a*k3Ex&b^UO%;3&?c|A!2Nr$|Yz8Xejg0*ChS{F#Aj{;Ib&ZeFjE z@5mB5#rjvGd3^RXR1h;gL$gNi)6+Nnqd3PU0%3*Ziu3;q z!N33SK5$E96|f5YH3ghVd?Y@A?)2HZr{fT6TwG(gL=kZnWn~lGM2M)D$MN_>9LIO* wI=Q*l&oON)%F5`+WPF*|G)kJAF|D=CjbBd From cfa25e78c4b451559bc0c0a77b5cb0fed97b220e Mon Sep 17 00:00:00 2001 From: Morty Date: Wed, 16 Apr 2025 05:44:30 +0800 Subject: [PATCH 04/31] update .gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 88e59a65..a03e3d68 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,6 @@ broadcast # Visual Studio Code .vscode + +# OS +.DS_Store \ No newline at end of file From 06a8c77791adae9aad9470e5a569bb30cc01ab72 Mon Sep 17 00:00:00 2001 From: Morty Date: Wed, 16 Apr 2025 16:07:12 +0800 Subject: [PATCH 05/31] fix: deploy issues --- foundry.toml | 13 ++- scripts/deterministic/Constants.sol | 4 +- scripts/deterministic/DeployScroll.s.sol | 34 +++--- .../config/config-contracts.toml | 108 +++++++++--------- scripts/deterministic/shell/update-configs.sh | 0 5 files changed, 88 insertions(+), 71 deletions(-) mode change 100644 => 100755 scripts/deterministic/shell/update-configs.sh diff --git a/foundry.toml b/foundry.toml index d2d6dd4b..413826fe 100644 --- a/foundry.toml +++ b/foundry.toml @@ -14,8 +14,7 @@ optimizer = true # enable or disabl optimizer_runs = 200 # the number of optimizer runs verbosity = 2 # the verbosity of tests ignored_error_codes = [] # a list of ignored solc error codes -fuzz_runs = 256 # the number of fuzz runs for tests -ffi = false # whether to enable ffi or not +fuzz_runs = 256 # the number of fuzz runs for tests # whether to enable ffi or not sender = '0x00a329c0648769a73afac7f9381e08fb43dbea72' # the address of `msg.sender` in tests tx_origin = '0x00a329c0648769a73afac7f9381e08fb43dbea72' # the address of `tx.origin` in tests initial_balance = '0xffffffffffffffffffffffff' # the initial balance of the test contract @@ -28,3 +27,13 @@ block_timestamp = 0 # the value of `bl block_difficulty = 0 # the value of `block.difficulty` in tests gas_reports = ["L2GasPriceOracle"] + +# remove bytecode hash for reliable deterministic addresses +bytecode_hash = 'none' + +# file system permissions +ffi = true + +fs_permissions = [ + { access='read-write', path='./scripts/deterministic/config' }, +] \ No newline at end of file diff --git a/scripts/deterministic/Constants.sol b/scripts/deterministic/Constants.sol index d25df143..d50ac5fa 100644 --- a/scripts/deterministic/Constants.sol +++ b/scripts/deterministic/Constants.sol @@ -12,10 +12,10 @@ address constant DETERMINISTIC_DEPLOYMENT_PROXY_ADDR = 0x4e59b44847b379578588920 uint256 constant FEE_VAULT_MIN_WITHDRAW_AMOUNT = 1 ether; // input files -string constant CONFIG_PATH = "./contracts/scroll-contracts/scripts/deterministic/config/config.toml"; +string constant CONFIG_PATH = "./scripts/deterministic/config/config.toml"; // output files -string constant CONFIG_CONTRACTS_PATH = "./contracts/scroll-contracts/scripts/deterministic/config/config-contracts.toml"; +string constant CONFIG_CONTRACTS_PATH = "./scripts/deterministic/config/config-contracts.toml"; string constant GENESIS_ALLOC_JSON_PATH = "./config/__genesis-alloc.json"; string constant GENESIS_JSON_PATH = "./config/genesis/genesis.yaml"; string constant ROLLUP_CONFIG_PATH = "./config/rollup-relayer/config.json.template"; diff --git a/scripts/deterministic/DeployScroll.s.sol b/scripts/deterministic/DeployScroll.s.sol index 924ceabc..feb15e61 100644 --- a/scripts/deterministic/DeployScroll.s.sol +++ b/scripts/deterministic/DeployScroll.s.sol @@ -285,7 +285,7 @@ contract DeployScroll is DeterministicDeployment { deployL1Whitelist(); deployL1ScrollChainProxy(); deployL1ScrollMessengerProxy(); - deployL1EnforcedTxGateway(); + deployL1EnforcedTxGatewayProxy(); deployL1PlonkVerifier(); deployL1ZkEvmVerifier(); deployL1MultipleVersionRollupVerifier(); @@ -322,6 +322,7 @@ contract DeployScroll is DeterministicDeployment { // @notice deployL1Contracts2ndPass deploys L1 contracts whose initialization depends on some L2 addresses. function deployL1Contracts2ndPass() private broadcast(Layer.L1) { + deployL1EnforcedTxGateway(); deployL1ScrollMessenger(); deployL1StandardERC20Gateway(); deployL1ETHGateway(); @@ -439,6 +440,20 @@ contract DeployScroll is DeterministicDeployment { ); } + function deployL1EnforcedTxGatewayProxy() private { + bytes memory args = abi.encode( + notnull(L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L1_ENFORCED_TX_GATEWAY_PROXY_ADDR = deploy( + "L1_ENFORCED_TX_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + function deployL1EnforcedTxGateway() private { bytes memory args = abi.encode(notnull(L1_MESSAGE_QUEUE_V2_PROXY_ADDR), notnull(L1_FEE_VAULT_ADDR)); @@ -448,17 +463,7 @@ contract DeployScroll is DeterministicDeployment { args ); - bytes memory args2 = abi.encode( - notnull(L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR), - notnull(L1_PROXY_ADMIN_ADDR), - new bytes(0) - ); - - L1_ENFORCED_TX_GATEWAY_PROXY_ADDR = deploy( - "L1_ENFORCED_TX_GATEWAY_PROXY", - type(TransparentUpgradeableProxy).creationCode, - args2 - ); + upgrade(L1_PROXY_ADMIN_ADDR, L1_ENFORCED_TX_GATEWAY_PROXY_ADDR, L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR); } function deployL1PlonkVerifier() private { @@ -556,8 +561,10 @@ contract DeployScroll is DeterministicDeployment { function deployL1ScrollChain() private { bytes memory args = abi.encode( CHAIN_ID_L2, + notnull(L1_MESSAGE_QUEUE_V1_PROXY_ADDR), notnull(L1_MESSAGE_QUEUE_V2_PROXY_ADDR), - notnull(L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR) + notnull(L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR), + notnull(SYSTEM_CONFIG_PROXY_ADDR) ); bytes memory creationCode = type(ScrollChain).creationCode; @@ -831,6 +838,7 @@ contract DeployScroll is DeterministicDeployment { bytes memory args = abi.encode( notnull(L2_SCROLL_MESSENGER_PROXY_ADDR), notnull(L1_SCROLL_CHAIN_PROXY_ADDR), + notnull(L1_MESSAGE_QUEUE_V1_PROXY_ADDR), notnull(L1_MESSAGE_QUEUE_V2_PROXY_ADDR) ); diff --git a/scripts/deterministic/config/config-contracts.toml b/scripts/deterministic/config/config-contracts.toml index 236e4692..c27299f4 100644 --- a/scripts/deterministic/config/config-contracts.toml +++ b/scripts/deterministic/config/config-contracts.toml @@ -1,60 +1,60 @@ -L1_WETH_ADDR = "" -L1_PROXY_ADMIN_ADDR = "" -L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = "" -L1_WHITELIST_ADDR = "" -L1_SCROLL_CHAIN_PROXY_ADDR = "" -L1_SCROLL_MESSENGER_PROXY_ADDR = "" -L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR = "" -L1_ENFORCED_TX_GATEWAY_PROXY_ADDR = "" -L1_PLONK_VERIFIER_ADDR = "" -L1_ZKEVM_VERIFIER_V2_ADDR = "" -L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR = "" +L1_WETH_ADDR = "0x69299f8c33503807aB21b1fCfAF0A271fdC2B73B" +L1_PROXY_ADMIN_ADDR = "0x9bCA0051930c66383604AE55076A72A8262C0198" +L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = "0xc87D1fEE8Fb73B0B18014dd812DaaA58D95B8039" +L1_WHITELIST_ADDR = "0x4f2Bb4C333Da4f9A5398f93C5756753A310d10d7" +L1_SCROLL_CHAIN_PROXY_ADDR = "0xEeb02827DB217733b05e4D6275a849D922bec326" +L1_SCROLL_MESSENGER_PROXY_ADDR = "0xEd07bbda5D53AA599E693602E45c2d985026eD1c" +L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR = "0xcebcfCb9F2c102edA425fe37a2f184E2D559404d" +L1_ENFORCED_TX_GATEWAY_PROXY_ADDR = "0x1E8439d12829c245780498E0FbDA41454F66B809" +L1_PLONK_VERIFIER_ADDR = "0xEb061ec343Fa11A9F6e27A939b5C28E05DbF8367" +L1_ZKEVM_VERIFIER_V2_ADDR = "0x668a15AaAa9087e5599c130856370907CC0e714A" +L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR = "0x876065D237c4Cf3586cE27078F3846407eF1c498" L1_MESSAGE_QUEUE_IMPLEMENTATION_ADDR = "" L1_MESSAGE_QUEUE_PROXY_ADDR = "" -L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR = "" -L1_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = "" -L1_GATEWAY_ROUTER_PROXY_ADDR = "" -L1_ETH_GATEWAY_PROXY_ADDR = "" -L1_WETH_GATEWAY_PROXY_ADDR = "" -L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "" -L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "" -L1_ERC721_GATEWAY_PROXY_ADDR = "" -L1_ERC1155_GATEWAY_PROXY_ADDR = "" -L2_MESSAGE_QUEUE_ADDR = "" -L1_GAS_PRICE_ORACLE_ADDR = "" +L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR = "0xdCD6b70522d12aA758Ae2c17504864CC42C6cacc" +L1_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = "0x47CE6470dBB1195d420d79756aC32cA7e59Ed4c7" +L1_GATEWAY_ROUTER_PROXY_ADDR = "0xd94Ef24103c73ea4D86cDA8572482dC367De480C" +L1_ETH_GATEWAY_PROXY_ADDR = "0xfacA424Ac33a7b1851EDE6cC8fE766E0913bDfca" +L1_WETH_GATEWAY_PROXY_ADDR = "0xeDFD371FC9350A5F08967fDD50Cd7B8D174CDff7" +L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "0xACDE506A16e0A616547211a545DaD7Eef056A902" +L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "0x579c9f48A9332dc78F4163552f1D3Aab357453c8" +L1_ERC721_GATEWAY_PROXY_ADDR = "0xb61b2237C366EdaFD77D8a2E891A9460C1b21762" +L1_ERC1155_GATEWAY_PROXY_ADDR = "0x06F7cbB5161eFE9e32EFf6EcE703C9798785f7D7" +L2_MESSAGE_QUEUE_ADDR = "0x5300000000000000000000000000000000000000" +L1_GAS_PRICE_ORACLE_ADDR = "0x5300000000000000000000000000000000000002" L1_GAS_TOKEN_ADDR = "" L1_GAS_TOKEN_GATEWAY_IMPLEMENTATION_ADDR = "" L1_GAS_TOKEN_GATEWAY_PROXY_ADDR = "" L1_WRAPPED_TOKEN_GATEWAY_ADDR = "" -L2_WHITELIST_ADDR = "" -L2_WETH_ADDR = "" -L2_TX_FEE_VAULT_ADDR = "" -L2_PROXY_ADMIN_ADDR = "" -L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = "" -L2_SCROLL_MESSENGER_PROXY_ADDR = "" -L2_ETH_GATEWAY_PROXY_ADDR = "" -L2_WETH_GATEWAY_PROXY_ADDR = "" -L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "" -L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "" -L2_ERC721_GATEWAY_PROXY_ADDR = "" -L2_ERC1155_GATEWAY_PROXY_ADDR = "" -L2_SCROLL_STANDARD_ERC20_ADDR = "" -L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR = "" -L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = "" -L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" -L1_ETH_GATEWAY_IMPLEMENTATION_ADDR = "" -L1_WETH_GATEWAY_IMPLEMENTATION_ADDR = "" -L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" -L1_ERC721_GATEWAY_IMPLEMENTATION_ADDR = "" -L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = "" -L2_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = "" -L2_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = "" -L2_GATEWAY_ROUTER_PROXY_ADDR = "" -L2_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" -L2_ETH_GATEWAY_IMPLEMENTATION_ADDR = "" -L2_WETH_GATEWAY_IMPLEMENTATION_ADDR = "" -L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" -L2_ERC721_GATEWAY_IMPLEMENTATION_ADDR = "" -L2_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = "" -SYSTEM_CONFIG_IMPLEMENTATION_ADDR = "" -SYSTEM_CONFIG_PROXY_ADDR = "" \ No newline at end of file +L2_WHITELIST_ADDR = "0x5300000000000000000000000000000000000003" +L2_WETH_ADDR = "0x5300000000000000000000000000000000000004" +L2_TX_FEE_VAULT_ADDR = "0x5300000000000000000000000000000000000005" +L2_PROXY_ADMIN_ADDR = "0xCd207f758043902D1f28006762b8c08F2b5457F8" +L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = "0xC20024f61383dABCA58dBe7b971C08D8B45fF4D0" +L2_SCROLL_MESSENGER_PROXY_ADDR = "0xd7d858a4960f962E5f5F2ef62349bF83e54bea01" +L2_ETH_GATEWAY_PROXY_ADDR = "0x5300587d0AE8566f2D5b4b657079A4a37AbBD3d9" +L2_WETH_GATEWAY_PROXY_ADDR = "0x53DaF6BecC761Ca40AF3D51C77C55A922368fBf0" +L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "0x140837484f71484a7c6e98c5Ab80cBaBc176c408" +L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "0x76daac84212729B32e0E72BD52B5A1428076Afd3" +L2_ERC721_GATEWAY_PROXY_ADDR = "0xF0Cdf6B56E11F90FDF50974D3b0bdD1fa54da2d2" +L2_ERC1155_GATEWAY_PROXY_ADDR = "0xF87200Ba06F4E8425782db477B582fCdf91425C1" +L2_SCROLL_STANDARD_ERC20_ADDR = "0x882B3509269D41a74Cd52d67bC9C6DcC0472Ae07" +L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR = "0x70428416e2Ec49296841aa0233aeD4157EE847CF" +L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = "0x92e37a1dBB192A9Ba66B911B40aC65F966c07B8c" +L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "0xFdC9395f015E164055dBDB77803D2B4878Ff74df" +L1_ETH_GATEWAY_IMPLEMENTATION_ADDR = "0x2bb6586502ba7446b26335aD21Cf0d2eF5e8F875" +L1_WETH_GATEWAY_IMPLEMENTATION_ADDR = "0x4F27F3869E85A6B34863E48b24a16C6A27028a79" +L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "0x3a827a8B035358aBe7E56059F6a1dcf92355e57c" +L1_ERC721_GATEWAY_IMPLEMENTATION_ADDR = "0x34e14A099201eEa5fF5BabE279d9978e04A63a93" +L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = "0x991796885a9bcdA24C16f4A001d0CF4F2c1185EE" +L2_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = "0xFaa9A4Abc8c6369c04B8AA16cb79eE0d1bB42087" +L2_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = "0xA93fc415579893188233373613918D25826bb2d0" +L2_GATEWAY_ROUTER_PROXY_ADDR = "0xeaef6972b6D15E7A1f1FBD4a177d9DcDd1ACe5e9" +L2_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "0x7B6365b3197a2DC76d3A665d557AFa29D59bE4d9" +L2_ETH_GATEWAY_IMPLEMENTATION_ADDR = "0x29f0D95646bbA0686a510ace0D2eFE3605a8547E" +L2_WETH_GATEWAY_IMPLEMENTATION_ADDR = "0x66986CcC03D74884AA49f6b5F34e6fad55a9DC42" +L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "0x334A90874A540BD9Ff2bA43570601021039F5d8A" +L2_ERC721_GATEWAY_IMPLEMENTATION_ADDR = "0x9066eFCbD3Dd47033e45bF5FA6A2A33112a85B68" +L2_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = "0x7469170a8A91055Cc8d69b9E871E90575fdE03f8" +SYSTEM_CONFIG_IMPLEMENTATION_ADDR = "0x37E3289F29BcEC009F2a89D4c6330ffe2cbae171" +SYSTEM_CONFIG_PROXY_ADDR = "0x1581a2aD6B056371b68690F8deB428ba519c919d" diff --git a/scripts/deterministic/shell/update-configs.sh b/scripts/deterministic/shell/update-configs.sh old mode 100644 new mode 100755 From 7811cf2bb05af7e2680ee38ef9aa0429fbccf4e4 Mon Sep 17 00:00:00 2001 From: Morty Date: Wed, 16 Apr 2025 16:15:40 +0800 Subject: [PATCH 06/31] clean config-contracts --- .../config/config-contracts.toml | 114 +++++++++--------- 1 file changed, 58 insertions(+), 56 deletions(-) diff --git a/scripts/deterministic/config/config-contracts.toml b/scripts/deterministic/config/config-contracts.toml index c27299f4..22fbabdd 100644 --- a/scripts/deterministic/config/config-contracts.toml +++ b/scripts/deterministic/config/config-contracts.toml @@ -1,60 +1,62 @@ -L1_WETH_ADDR = "0x69299f8c33503807aB21b1fCfAF0A271fdC2B73B" -L1_PROXY_ADMIN_ADDR = "0x9bCA0051930c66383604AE55076A72A8262C0198" -L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = "0xc87D1fEE8Fb73B0B18014dd812DaaA58D95B8039" -L1_WHITELIST_ADDR = "0x4f2Bb4C333Da4f9A5398f93C5756753A310d10d7" -L1_SCROLL_CHAIN_PROXY_ADDR = "0xEeb02827DB217733b05e4D6275a849D922bec326" -L1_SCROLL_MESSENGER_PROXY_ADDR = "0xEd07bbda5D53AA599E693602E45c2d985026eD1c" -L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR = "0xcebcfCb9F2c102edA425fe37a2f184E2D559404d" -L1_ENFORCED_TX_GATEWAY_PROXY_ADDR = "0x1E8439d12829c245780498E0FbDA41454F66B809" -L1_PLONK_VERIFIER_ADDR = "0xEb061ec343Fa11A9F6e27A939b5C28E05DbF8367" -L1_ZKEVM_VERIFIER_V2_ADDR = "0x668a15AaAa9087e5599c130856370907CC0e714A" -L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR = "0x876065D237c4Cf3586cE27078F3846407eF1c498" -L1_MESSAGE_QUEUE_IMPLEMENTATION_ADDR = "" -L1_MESSAGE_QUEUE_PROXY_ADDR = "" -L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR = "0xdCD6b70522d12aA758Ae2c17504864CC42C6cacc" -L1_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = "0x47CE6470dBB1195d420d79756aC32cA7e59Ed4c7" -L1_GATEWAY_ROUTER_PROXY_ADDR = "0xd94Ef24103c73ea4D86cDA8572482dC367De480C" -L1_ETH_GATEWAY_PROXY_ADDR = "0xfacA424Ac33a7b1851EDE6cC8fE766E0913bDfca" -L1_WETH_GATEWAY_PROXY_ADDR = "0xeDFD371FC9350A5F08967fDD50Cd7B8D174CDff7" -L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "0xACDE506A16e0A616547211a545DaD7Eef056A902" -L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "0x579c9f48A9332dc78F4163552f1D3Aab357453c8" -L1_ERC721_GATEWAY_PROXY_ADDR = "0xb61b2237C366EdaFD77D8a2E891A9460C1b21762" -L1_ERC1155_GATEWAY_PROXY_ADDR = "0x06F7cbB5161eFE9e32EFf6EcE703C9798785f7D7" -L2_MESSAGE_QUEUE_ADDR = "0x5300000000000000000000000000000000000000" -L1_GAS_PRICE_ORACLE_ADDR = "0x5300000000000000000000000000000000000002" +L1_WETH_ADDR = "" +L1_PROXY_ADMIN_ADDR = "" +L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = "" +L1_WHITELIST_ADDR = "" +L1_SCROLL_CHAIN_PROXY_ADDR = "" +L1_SCROLL_MESSENGER_PROXY_ADDR = "" +L1_MESSAGE_QUEUE_V1_IMPLEMENTATION_ADDR = "" +L1_MESSAGE_QUEUE_V1_PROXY_ADDR = "" +L1_MESSAGE_QUEUE_V2_IMPLEMENTATION_ADDR = "" +L1_MESSAGE_QUEUE_V2_PROXY_ADDR = "" +L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_ENFORCED_TX_GATEWAY_PROXY_ADDR = "" +L1_PLONK_VERIFIER_ADDR = "" +L1_ZKEVM_VERIFIER_V2_ADDR = "" +L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR = "" +L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR = "" +L1_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = "" +L1_GATEWAY_ROUTER_PROXY_ADDR = "" +L1_ETH_GATEWAY_PROXY_ADDR = "" +L1_WETH_GATEWAY_PROXY_ADDR = "" +L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "" +L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "" +L1_ERC721_GATEWAY_PROXY_ADDR = "" +L1_ERC1155_GATEWAY_PROXY_ADDR = "" +L2_MESSAGE_QUEUE_ADDR = "" +L1_GAS_PRICE_ORACLE_ADDR = "" L1_GAS_TOKEN_ADDR = "" L1_GAS_TOKEN_GATEWAY_IMPLEMENTATION_ADDR = "" L1_GAS_TOKEN_GATEWAY_PROXY_ADDR = "" L1_WRAPPED_TOKEN_GATEWAY_ADDR = "" -L2_WHITELIST_ADDR = "0x5300000000000000000000000000000000000003" -L2_WETH_ADDR = "0x5300000000000000000000000000000000000004" -L2_TX_FEE_VAULT_ADDR = "0x5300000000000000000000000000000000000005" -L2_PROXY_ADMIN_ADDR = "0xCd207f758043902D1f28006762b8c08F2b5457F8" -L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = "0xC20024f61383dABCA58dBe7b971C08D8B45fF4D0" -L2_SCROLL_MESSENGER_PROXY_ADDR = "0xd7d858a4960f962E5f5F2ef62349bF83e54bea01" -L2_ETH_GATEWAY_PROXY_ADDR = "0x5300587d0AE8566f2D5b4b657079A4a37AbBD3d9" -L2_WETH_GATEWAY_PROXY_ADDR = "0x53DaF6BecC761Ca40AF3D51C77C55A922368fBf0" -L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "0x140837484f71484a7c6e98c5Ab80cBaBc176c408" -L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "0x76daac84212729B32e0E72BD52B5A1428076Afd3" -L2_ERC721_GATEWAY_PROXY_ADDR = "0xF0Cdf6B56E11F90FDF50974D3b0bdD1fa54da2d2" -L2_ERC1155_GATEWAY_PROXY_ADDR = "0xF87200Ba06F4E8425782db477B582fCdf91425C1" -L2_SCROLL_STANDARD_ERC20_ADDR = "0x882B3509269D41a74Cd52d67bC9C6DcC0472Ae07" -L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR = "0x70428416e2Ec49296841aa0233aeD4157EE847CF" -L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = "0x92e37a1dBB192A9Ba66B911B40aC65F966c07B8c" -L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "0xFdC9395f015E164055dBDB77803D2B4878Ff74df" -L1_ETH_GATEWAY_IMPLEMENTATION_ADDR = "0x2bb6586502ba7446b26335aD21Cf0d2eF5e8F875" -L1_WETH_GATEWAY_IMPLEMENTATION_ADDR = "0x4F27F3869E85A6B34863E48b24a16C6A27028a79" -L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "0x3a827a8B035358aBe7E56059F6a1dcf92355e57c" -L1_ERC721_GATEWAY_IMPLEMENTATION_ADDR = "0x34e14A099201eEa5fF5BabE279d9978e04A63a93" -L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = "0x991796885a9bcdA24C16f4A001d0CF4F2c1185EE" -L2_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = "0xFaa9A4Abc8c6369c04B8AA16cb79eE0d1bB42087" -L2_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = "0xA93fc415579893188233373613918D25826bb2d0" -L2_GATEWAY_ROUTER_PROXY_ADDR = "0xeaef6972b6D15E7A1f1FBD4a177d9DcDd1ACe5e9" -L2_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "0x7B6365b3197a2DC76d3A665d557AFa29D59bE4d9" -L2_ETH_GATEWAY_IMPLEMENTATION_ADDR = "0x29f0D95646bbA0686a510ace0D2eFE3605a8547E" -L2_WETH_GATEWAY_IMPLEMENTATION_ADDR = "0x66986CcC03D74884AA49f6b5F34e6fad55a9DC42" -L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "0x334A90874A540BD9Ff2bA43570601021039F5d8A" -L2_ERC721_GATEWAY_IMPLEMENTATION_ADDR = "0x9066eFCbD3Dd47033e45bF5FA6A2A33112a85B68" -L2_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = "0x7469170a8A91055Cc8d69b9E871E90575fdE03f8" -SYSTEM_CONFIG_IMPLEMENTATION_ADDR = "0x37E3289F29BcEC009F2a89D4c6330ffe2cbae171" -SYSTEM_CONFIG_PROXY_ADDR = "0x1581a2aD6B056371b68690F8deB428ba519c919d" +L2_WHITELIST_ADDR = "" +L2_WETH_ADDR = "" +L2_TX_FEE_VAULT_ADDR = "" +L2_PROXY_ADMIN_ADDR = "" +L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = "" +L2_SCROLL_MESSENGER_PROXY_ADDR = "" +L2_ETH_GATEWAY_PROXY_ADDR = "" +L2_WETH_GATEWAY_PROXY_ADDR = "" +L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "" +L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "" +L2_ERC721_GATEWAY_PROXY_ADDR = "" +L2_ERC1155_GATEWAY_PROXY_ADDR = "" +L2_SCROLL_STANDARD_ERC20_ADDR = "" +L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR = "" +L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = "" +L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_ETH_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_WETH_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_ERC721_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = "" +L2_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = "" +L2_GATEWAY_ROUTER_PROXY_ADDR = "" +L2_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_ETH_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_WETH_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_ERC721_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = "" +SYSTEM_CONFIG_IMPLEMENTATION_ADDR = "" +SYSTEM_CONFIG_PROXY_ADDR = "" From 945021798f897c64a1289cf9b10a4ac0225ede88 Mon Sep 17 00:00:00 2001 From: Morty Date: Wed, 16 Apr 2025 16:17:17 +0800 Subject: [PATCH 07/31] add .gitignore --- .gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index a03e3d68..574fbc45 100644 --- a/.gitignore +++ b/.gitignore @@ -21,4 +21,7 @@ broadcast .vscode # OS -.DS_Store \ No newline at end of file +.DS_Store + +# config +scripts/deterministic/config/config-contracts.toml \ No newline at end of file From 6d2f45b75e35385e6a9a506d4d2374b0c7594aae Mon Sep 17 00:00:00 2001 From: Morty Date: Wed, 16 Apr 2025 16:21:49 +0800 Subject: [PATCH 08/31] add .gitignore --- .gitignore | 2 +- foundry.toml | 1 + scripts/deterministic/Constants.sol | 24 +++++++++---------- .../config/config-contracts.toml | 4 ---- 4 files changed, 14 insertions(+), 17 deletions(-) diff --git a/.gitignore b/.gitignore index 574fbc45..b0a0b522 100644 --- a/.gitignore +++ b/.gitignore @@ -24,4 +24,4 @@ broadcast .DS_Store # config -scripts/deterministic/config/config-contracts.toml \ No newline at end of file +./scripts/deterministic/config/config-contracts.toml \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index 413826fe..d6e2d8a0 100644 --- a/foundry.toml +++ b/foundry.toml @@ -36,4 +36,5 @@ ffi = true fs_permissions = [ { access='read-write', path='./scripts/deterministic/config' }, + { access='read-write', path='../../config' }, ] \ No newline at end of file diff --git a/scripts/deterministic/Constants.sol b/scripts/deterministic/Constants.sol index d50ac5fa..3703723e 100644 --- a/scripts/deterministic/Constants.sol +++ b/scripts/deterministic/Constants.sol @@ -16,18 +16,18 @@ string constant CONFIG_PATH = "./scripts/deterministic/config/config.toml"; // output files string constant CONFIG_CONTRACTS_PATH = "./scripts/deterministic/config/config-contracts.toml"; -string constant GENESIS_ALLOC_JSON_PATH = "./config/__genesis-alloc.json"; -string constant GENESIS_JSON_PATH = "./config/genesis/genesis.yaml"; -string constant ROLLUP_CONFIG_PATH = "./config/rollup-relayer/config.json.template"; -string constant COORDINATOR_API_CONFIG_PATH = "./config/coordinator-api/config.json.template"; -string constant COORDINATOR_CRON_CONFIG_PATH = "./config/coordinator-cron/config.json.template"; -string constant CHAIN_MONITOR_CONFIG_PATH = "./config/chain-monitorv2/config.json.template"; -string constant BRIDGE_HISTORY_API_CONFIG_PATH = "./config/bridge-historyv2-api/config.json.template"; -string constant BRIDGE_HISTORY_FETCHER_CONFIG_PATH = "./config/bridge-historyv2-fetcher/config.json.template"; -string constant BALANCE_CHECKER_CONFIG_PATH = "./config/balance-checker/config.json.template"; -string constant ROLLUP_EXPLORER_BACKEND_CONFIG_PATH = "./config/rollup-explorer-backend/config.json.template"; -string constant ADMIN_SYSTEM_BACKEND_CONFIG_PATH = "./config/scroll-admin-backend/config.json.template"; -string constant ADMIN_SYSTEM_CRON_CONFIG_PATH = "./config/scroll-admin-cron/config.json.template"; +string constant GENESIS_ALLOC_JSON_PATH = "../../config/__genesis-alloc.json"; +string constant GENESIS_JSON_PATH = "../../config/genesis/genesis.yaml"; +string constant ROLLUP_CONFIG_PATH = "../../config/rollup-relayer/config.json.template"; +string constant COORDINATOR_API_CONFIG_PATH = "../../config/coordinator-api/config.json.template"; +string constant COORDINATOR_CRON_CONFIG_PATH = "../../config/coordinator-cron/config.json.template"; +string constant CHAIN_MONITOR_CONFIG_PATH = "../../config/chain-monitorv2/config.json.template"; +string constant BRIDGE_HISTORY_API_CONFIG_PATH = "../../config/bridge-historyv2-api/config.json.template"; +string constant BRIDGE_HISTORY_FETCHER_CONFIG_PATH = "../../config/bridge-historyv2-fetcher/config.json.template"; +string constant BALANCE_CHECKER_CONFIG_PATH = "../../config/balance-checker/config.json.template"; +string constant ROLLUP_EXPLORER_BACKEND_CONFIG_PATH = "../../config/rollup-explorer-backend/config.json.template"; +string constant ADMIN_SYSTEM_BACKEND_CONFIG_PATH = "../../config/scroll-admin-backend/config.json.template"; +string constant ADMIN_SYSTEM_CRON_CONFIG_PATH = "../../config/scroll-admin-cron/config.json.template"; // plonk verifier configs bytes32 constant V4_VERIFIER_DIGEST = 0x0a1904dbfff4614fb090b4b3864af4874f12680c32f07889e9ede8665097e5ec; diff --git a/scripts/deterministic/config/config-contracts.toml b/scripts/deterministic/config/config-contracts.toml index 22fbabdd..7af9e8e4 100644 --- a/scripts/deterministic/config/config-contracts.toml +++ b/scripts/deterministic/config/config-contracts.toml @@ -24,10 +24,6 @@ L1_ERC721_GATEWAY_PROXY_ADDR = "" L1_ERC1155_GATEWAY_PROXY_ADDR = "" L2_MESSAGE_QUEUE_ADDR = "" L1_GAS_PRICE_ORACLE_ADDR = "" -L1_GAS_TOKEN_ADDR = "" -L1_GAS_TOKEN_GATEWAY_IMPLEMENTATION_ADDR = "" -L1_GAS_TOKEN_GATEWAY_PROXY_ADDR = "" -L1_WRAPPED_TOKEN_GATEWAY_ADDR = "" L2_WHITELIST_ADDR = "" L2_WETH_ADDR = "" L2_TX_FEE_VAULT_ADDR = "" From 63210c0e128931bb49f5af61b6f13c500b9ab2de Mon Sep 17 00:00:00 2001 From: Morty Date: Wed, 16 Apr 2025 16:22:27 +0800 Subject: [PATCH 09/31] add .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index b0a0b522..bc3f44ad 100644 --- a/.gitignore +++ b/.gitignore @@ -24,4 +24,4 @@ broadcast .DS_Store # config -./scripts/deterministic/config/config-contracts.toml \ No newline at end of file +config-contracts.toml \ No newline at end of file From ad666aa78c41027e0ca4719f2cb5a186cf5b27c1 Mon Sep 17 00:00:00 2001 From: Morty Date: Wed, 16 Apr 2025 16:27:31 +0800 Subject: [PATCH 10/31] update .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index bc3f44ad..574fbc45 100644 --- a/.gitignore +++ b/.gitignore @@ -24,4 +24,4 @@ broadcast .DS_Store # config -config-contracts.toml \ No newline at end of file +scripts/deterministic/config/config-contracts.toml \ No newline at end of file From 10226aeb05419c8f61d7c55f3c21542650fa0fda Mon Sep 17 00:00:00 2001 From: Morty Date: Wed, 16 Apr 2025 16:31:55 +0800 Subject: [PATCH 11/31] fix: genesis path --- scripts/deterministic/Constants.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/deterministic/Constants.sol b/scripts/deterministic/Constants.sol index 3703723e..168c4edb 100644 --- a/scripts/deterministic/Constants.sol +++ b/scripts/deterministic/Constants.sol @@ -17,7 +17,7 @@ string constant CONFIG_PATH = "./scripts/deterministic/config/config.toml"; // output files string constant CONFIG_CONTRACTS_PATH = "./scripts/deterministic/config/config-contracts.toml"; string constant GENESIS_ALLOC_JSON_PATH = "../../config/__genesis-alloc.json"; -string constant GENESIS_JSON_PATH = "../../config/genesis/genesis.yaml"; +string constant GENESIS_JSON_PATH = "../../config/genesis/genesis.json"; string constant ROLLUP_CONFIG_PATH = "../../config/rollup-relayer/config.json.template"; string constant COORDINATOR_API_CONFIG_PATH = "../../config/coordinator-api/config.json.template"; string constant COORDINATOR_CRON_CONFIG_PATH = "../../config/coordinator-cron/config.json.template"; From 4268404ef64e0436045d92b46ad4e205c5d5a1f8 Mon Sep 17 00:00:00 2001 From: Morty Date: Wed, 16 Apr 2025 16:47:46 +0800 Subject: [PATCH 12/31] remove unused files --- scripts/deterministic/Configuration.sol | 13 ---- scripts/deterministic/GenerateConfigs.s.sol | 21 ------- .../config/config-contracts.toml | 2 +- scripts/deterministic/config/config.toml | 63 +------------------ scripts/deterministic/shell/deploy.sh | 17 +---- 5 files changed, 5 insertions(+), 111 deletions(-) diff --git a/scripts/deterministic/Configuration.sol b/scripts/deterministic/Configuration.sol index 1d743cf2..7b891c3c 100644 --- a/scripts/deterministic/Configuration.sol +++ b/scripts/deterministic/Configuration.sol @@ -98,8 +98,6 @@ abstract contract Configuration is Script { L1_RPC_ENDPOINT = cfg.readString(".general.L1_RPC_ENDPOINT"); L2_RPC_ENDPOINT = cfg.readString(".general.L2_RPC_ENDPOINT"); - CHAIN_NAME_L1 = cfg.readString(".general.CHAIN_NAME_L1"); - CHAIN_NAME_L2 = cfg.readString(".general.CHAIN_NAME_L2"); CHAIN_ID_L1 = uint64(cfg.readUint(".general.CHAIN_ID_L1")); CHAIN_ID_L2 = uint64(cfg.readUint(".general.CHAIN_ID_L2")); @@ -129,8 +127,6 @@ abstract contract Configuration is Script { L2GETH_SIGNER_ADDRESS = cfg.readAddress(".sequencer.L2GETH_SIGNER_ADDRESS"); - ROLLUP_EXPLORER_BACKEND_DB_CONNECTION_STRING = cfg.readString(".db.ROLLUP_EXPLORER_DB_CONNECTION_STRING"); - L2_MAX_ETH_SUPPLY = cfg.readUint(".genesis.L2_MAX_ETH_SUPPLY"); L2_DEPLOYER_INITIAL_BALANCE = cfg.readUint(".genesis.L2_DEPLOYER_INITIAL_BALANCE"); L2_SCROLL_MESSENGER_INITIAL_BALANCE = L2_MAX_ETH_SUPPLY - L2_DEPLOYER_INITIAL_BALANCE; @@ -144,15 +140,6 @@ abstract contract Configuration is Script { BUNDLE_COLLECTION_TIME_SEC = cfg.readString(".coordinator.BUNDLE_COLLECTION_TIME_SEC"); COORDINATOR_JWT_SECRET_KEY = cfg.readString(".coordinator.COORDINATOR_JWT_SECRET_KEY"); - EXTERNAL_RPC_URI_L1 = cfg.readString(".frontend.EXTERNAL_RPC_URI_L1"); - EXTERNAL_RPC_URI_L2 = cfg.readString(".frontend.EXTERNAL_RPC_URI_L2"); - BRIDGE_API_URI = cfg.readString(".frontend.BRIDGE_API_URI"); - ROLLUPSCAN_API_URI = cfg.readString(".frontend.ROLLUPSCAN_API_URI"); - EXTERNAL_EXPLORER_URI_L1 = cfg.readString(".frontend.EXTERNAL_EXPLORER_URI_L1"); - EXTERNAL_EXPLORER_URI_L2 = cfg.readString(".frontend.EXTERNAL_EXPLORER_URI_L2"); - ADMIN_SYSTEM_DASHBOARD_URI = cfg.readString(".frontend.ADMIN_SYSTEM_DASHBOARD_URI"); - GRAFANA_URI = cfg.readString(".frontend.GRAFANA_URI"); - runSanityCheck(); } diff --git a/scripts/deterministic/GenerateConfigs.s.sol b/scripts/deterministic/GenerateConfigs.s.sol index 61718b82..22ca85a2 100644 --- a/scripts/deterministic/GenerateConfigs.s.sol +++ b/scripts/deterministic/GenerateConfigs.s.sol @@ -27,12 +27,6 @@ contract GenerateRollupConfig is DeployScroll { // prettier-ignore function generateRollupConfig(string memory PATH) private { - // endpoints - vm.writeJson(L1_RPC_ENDPOINT, PATH, ".l1_config.endpoint"); - vm.writeJson(L2_RPC_ENDPOINT, PATH, ".l1_config.relayer_config.sender_config.endpoint"); - vm.writeJson(L2_RPC_ENDPOINT, PATH, ".l2_config.endpoint"); - vm.writeJson(L1_RPC_ENDPOINT, PATH, ".l2_config.relayer_config.sender_config.endpoint"); - // contracts vm.writeJson(vm.toString(L1_GAS_PRICE_ORACLE_ADDR), PATH, ".l1_config.relayer_config.gas_price_oracle_contract_address"); vm.writeJson(vm.toString(L2_MESSAGE_QUEUE_ADDR), PATH, ".l2_config.l2_message_queue_address"); @@ -172,10 +166,6 @@ contract GenerateBridgeHistoryConfig is DeployScroll { vm.writeJson(vm.toString(L2_ERC721_GATEWAY_PROXY_ADDR), PATH, ".L2.ERC721GatewayAddr"); vm.writeJson(vm.toString(L2_ERC1155_GATEWAY_PROXY_ADDR), PATH, ".L2.ERC1155GatewayAddr"); - // endpoints - vm.writeJson(L1_RPC_ENDPOINT, PATH, ".L1.endpoint"); - vm.writeJson(L2_RPC_ENDPOINT, PATH, ".L2.endpoint"); - // others vm.writeJson(vm.toString(L1_CONTRACT_DEPLOYMENT_BLOCK), PATH, ".L1.startHeight"); } @@ -198,22 +188,11 @@ contract GenerateBalanceCheckerConfig is DeployScroll { *********************/ function generateBalanceCheckerConfig(string memory PATH) private { - vm.writeJson(L1_RPC_ENDPOINT, PATH, ".addresses[0].rpc_url"); vm.writeJson(vm.toString(L1_COMMIT_SENDER_ADDR), PATH, ".addresses[0].address"); - - vm.writeJson(L1_RPC_ENDPOINT, PATH, ".addresses[1].rpc_url"); vm.writeJson(vm.toString(L1_FINALIZE_SENDER_ADDR), PATH, ".addresses[1].address"); - - vm.writeJson(L1_RPC_ENDPOINT, PATH, ".addresses[2].rpc_url"); vm.writeJson(vm.toString(L1_GAS_ORACLE_SENDER_ADDR), PATH, ".addresses[2].address"); - - vm.writeJson(L1_RPC_ENDPOINT, PATH, ".addresses[3].rpc_url"); vm.writeJson(vm.toString(L1_FEE_VAULT_ADDR), PATH, ".addresses[3].address"); - - vm.writeJson(L2_RPC_ENDPOINT, PATH, ".addresses[4].rpc_url"); vm.writeJson(vm.toString(L2_GAS_ORACLE_SENDER_ADDR), PATH, ".addresses[4].address"); - - vm.writeJson(L2_RPC_ENDPOINT, PATH, ".addresses[5].rpc_url"); vm.writeJson(vm.toString(L2_TX_FEE_VAULT_ADDR), PATH, ".addresses[5].address"); } } diff --git a/scripts/deterministic/config/config-contracts.toml b/scripts/deterministic/config/config-contracts.toml index 7af9e8e4..974a30ab 100644 --- a/scripts/deterministic/config/config-contracts.toml +++ b/scripts/deterministic/config/config-contracts.toml @@ -55,4 +55,4 @@ L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" L2_ERC721_GATEWAY_IMPLEMENTATION_ADDR = "" L2_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = "" SYSTEM_CONFIG_IMPLEMENTATION_ADDR = "" -SYSTEM_CONFIG_PROXY_ADDR = "" +SYSTEM_CONFIG_PROXY_ADDR = "" \ No newline at end of file diff --git a/scripts/deterministic/config/config.toml b/scripts/deterministic/config/config.toml index 04c1816b..7666b0e8 100644 --- a/scripts/deterministic/config/config.toml +++ b/scripts/deterministic/config/config.toml @@ -1,11 +1,5 @@ [general] -L1_RPC_ENDPOINT = "http://l1-devnet:8545" -L1_RPC_ENDPOINT_WEBSOCKET = "ws://l1-devnet:8546" -L2_RPC_ENDPOINT = "http://l2-sequencer:8545" - -CHAIN_NAME_L1="Ethereum" -CHAIN_NAME_L2="Scroll SDK" CHAIN_ID_L1 = 111111 CHAIN_ID_L2 = 221122 @@ -30,28 +24,6 @@ L1_FINALIZE_SENDER_ADDR = "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC" L1_GAS_ORACLE_SENDER_ADDR = "0x90F79bf6EB2c4f870365E785982E1f101E93b906" L2_GAS_ORACLE_SENDER_ADDR = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" -[db] - -ADMIN_SYSTEM_BACKEND_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable" -BLOCKSCOUT_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/blockscout" -BRIDGE_HISTORY_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable" -CHAIN_MONITOR_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable" -GAS_ORACLE_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable" -COORDINATOR_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable" -L1_EXPLORER_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/l1-explorer" -ROLLUP_NODE_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable" -ROLLUP_EXPLORER_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable" - -[gas-token] - -ALTERNATIVE_GAS_TOKEN_ENABLED = false -# EXAMPLE_GAS_TOKEN_DECIMAL = 6 -# L1_GAS_TOKEN = "0x68a041e7c20Afa4784b5d9C63246c89545Ac0E66" -GAS_ORACLE_INCORPORATE_TOKEN_EXCHANGE_RATE_ENANBLED = false -EXCHANGE_RATE_UPDATE_MODE = "Fixed" -FIXED_EXCHANGE_RATE = "0.01" -TOKEN_SYMBOL_PAIR = "UNIETH" - [sequencer] L2GETH_SIGNER_ADDRESS = "0x756EA06BDEe36de11F22DCca45a31d8a178eF3c6" @@ -70,17 +42,6 @@ MAX_L1_MESSAGE_GAS_LIMIT = 10_000_000 TEST_ENV_MOCK_FINALIZE_ENABLED = true TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC = 300 -[frontend] - -EXTERNAL_RPC_URI_L1 = "http://l1-devnet.scrollsdk" -EXTERNAL_RPC_URI_L2 = "http://l2-rpc.scrollsdk" -BRIDGE_API_URI = "http://bridge-history-api.scrollsdk/api" -ROLLUPSCAN_API_URI = "http://rollup-explorer-backend.scrollsdk/api" -EXTERNAL_EXPLORER_URI_L1 = "http://l1-explorer.scrollsdk" -EXTERNAL_EXPLORER_URI_L2 = "http://blockscout.scrollsdk" -ADMIN_SYSTEM_DASHBOARD_URI = "http://admin-system-dashboard.scrollsdk" -GRAFANA_URI = "http://grafana.scrollsdk" - [genesis] L2_MAX_ETH_SUPPLY = "226156424291633194186662080095093570025917938800079226639565593765455331328" @@ -104,31 +65,9 @@ L2_WHITELIST = "0x5300000000000000000000000000000000000003" L2_WETH = "0x5300000000000000000000000000000000000004" L2_TX_FEE_VAULT = "0x5300000000000000000000000000000000000005" -[contracts.verify] - -VERIFIER_TYPE_L1 = "blockscout" -VERIFIER_TYPE_L2 = "blockscout" -EXPLORER_URI_L1 = "http://l1-explorer.scrollsdk" -EXPLORER_URI_L2 = "http://blockscout.scrollsdk" -RPC_URI_L1 = "http://l1-devnet.scrollsdk" -RPC_URI_L2 = "http://l2-rpc.scrollsdk" -EXPLORER_API_KEY_L1 = "" -EXPLORER_API_KEY_L2 = "" - [coordinator] CHUNK_COLLECTION_TIME_SEC = 3600 BATCH_COLLECTION_TIME_SEC = 1800 BUNDLE_COLLECTION_TIME_SEC = 600 -COORDINATOR_JWT_SECRET_KEY = "e788b62d39254928a821ac1c76b274a8c835aa1e20ecfb6f50eb10e87847de44" - -[ingress] - -FRONTEND_HOST = "frontends.scrollsdk" -BRIDGE_HISTORY_API_HOST = "bridge-history-api.scrollsdk" -ROLLUP_EXPLORER_API_HOST = "rollup-explorer-backend.scrollsdk" -COORDINATOR_API_HOST = "coordinator-api.scrollsdk" -RPC_GATEWAY_HOST = "l2-rpc.scrollsdk" -BLOCKSCOUT_HOST = "blockscout.scrollsdk" -ADMIN_SYSTEM_DASHBOARD_HOST= "admin-system-dashboard.scrollsdk" -GRAFANA_HOST = "http://grafana.scrollsdk" \ No newline at end of file +COORDINATOR_JWT_SECRET_KEY = "e788b62d39254928a821ac1c76b274a8c835aa1e20ecfb6f50eb10e87847de44" \ No newline at end of file diff --git a/scripts/deterministic/shell/deploy.sh b/scripts/deterministic/shell/deploy.sh index 286dcd17..e7319a48 100644 --- a/scripts/deterministic/shell/deploy.sh +++ b/scripts/deterministic/shell/deploy.sh @@ -5,12 +5,12 @@ export FOUNDRY_BYTECODE_HASH="none" if [ "${L1_RPC_ENDPOINT}" = "" ]; then echo "L1_RPC_ENDPOINT is not set" - L1_RPC_ENDPOINT="http://host.docker.internal:8543" + exit fi if [ "$L2_RPC_ENDPOINT" = "" ]; then echo "L2_RPC_ENDPOINT is not set" - L2_RPC_ENDPOINT="http://host.docker.internal:8545" + exit fi if [ "${BATCH_SIZE}" = "" ]; then @@ -38,15 +38,4 @@ forge script scripts/deterministic/DeployScroll.s.sol:DeployScroll --rpc-url "$L # deploy L2 echo "" echo "deploying on L2" -forge script scripts/deterministic/DeployScroll.s.sol:DeployScroll --rpc-url "$L2_RPC_ENDPOINT" --batch-size "$BATCH_SIZE" --sig "run(string,string)" "L2" "verify-config" --broadcast --legacy || exit 1 - -# log broadcast files -echo "" -echo "Broadcast files:" -for file in broadcast/DeployScroll.s.sol/*/*; do - if [ -f "$file" ]; then - echo "$file:" - cat "$file" - echo "" - fi -done \ No newline at end of file +forge script scripts/deterministic/DeployScroll.s.sol:DeployScroll --rpc-url "$L2_RPC_ENDPOINT" --batch-size "$BATCH_SIZE" --sig "run(string,string)" "L2" "verify-config" --broadcast --legacy || exit 1 \ No newline at end of file From 4d47fb3d142753befcfe46a9304b1992d835f601 Mon Sep 17 00:00:00 2001 From: Morty Date: Wed, 16 Apr 2025 16:54:07 +0800 Subject: [PATCH 13/31] ignore scripts --- foundry.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/foundry.toml b/foundry.toml index d6e2d8a0..5d7e99bf 100644 --- a/foundry.toml +++ b/foundry.toml @@ -14,7 +14,7 @@ optimizer = true # enable or disabl optimizer_runs = 200 # the number of optimizer runs verbosity = 2 # the verbosity of tests ignored_error_codes = [] # a list of ignored solc error codes -fuzz_runs = 256 # the number of fuzz runs for tests # whether to enable ffi or not +fuzz_runs = 256 # the number of fuzz runs for test sender = '0x00a329c0648769a73afac7f9381e08fb43dbea72' # the address of `msg.sender` in tests tx_origin = '0x00a329c0648769a73afac7f9381e08fb43dbea72' # the address of `tx.origin` in tests initial_balance = '0xffffffffffffffffffffffff' # the initial balance of the test contract From 023f28e2374a4e986e55418c2852caed0c39c5fb Mon Sep 17 00:00:00 2001 From: Morty Date: Wed, 16 Apr 2025 17:11:06 +0800 Subject: [PATCH 14/31] add gas oracle --- scripts/deterministic/Configuration.sol | 3 --- scripts/deterministic/Constants.sol | 1 + scripts/deterministic/GenerateConfigs.s.sol | 3 ++- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/scripts/deterministic/Configuration.sol b/scripts/deterministic/Configuration.sol index 7b891c3c..f909774e 100644 --- a/scripts/deterministic/Configuration.sol +++ b/scripts/deterministic/Configuration.sol @@ -95,9 +95,6 @@ abstract contract Configuration is Script { cfg = vm.readFile(CONFIG_PATH); contractsCfg = vm.readFile(CONFIG_CONTRACTS_PATH); - L1_RPC_ENDPOINT = cfg.readString(".general.L1_RPC_ENDPOINT"); - L2_RPC_ENDPOINT = cfg.readString(".general.L2_RPC_ENDPOINT"); - CHAIN_ID_L1 = uint64(cfg.readUint(".general.CHAIN_ID_L1")); CHAIN_ID_L2 = uint64(cfg.readUint(".general.CHAIN_ID_L2")); diff --git a/scripts/deterministic/Constants.sol b/scripts/deterministic/Constants.sol index 168c4edb..3953911f 100644 --- a/scripts/deterministic/Constants.sol +++ b/scripts/deterministic/Constants.sol @@ -19,6 +19,7 @@ string constant CONFIG_CONTRACTS_PATH = "./scripts/deterministic/config/config-c string constant GENESIS_ALLOC_JSON_PATH = "../../config/__genesis-alloc.json"; string constant GENESIS_JSON_PATH = "../../config/genesis/genesis.json"; string constant ROLLUP_CONFIG_PATH = "../../config/rollup-relayer/config.json.template"; +string constant GAS_ORACLE_CONFIG_PATH = "../../config/rollup-relayer/config.json.template"; string constant COORDINATOR_API_CONFIG_PATH = "../../config/coordinator-api/config.json.template"; string constant COORDINATOR_CRON_CONFIG_PATH = "../../config/coordinator-cron/config.json.template"; string constant CHAIN_MONITOR_CONFIG_PATH = "../../config/chain-monitorv2/config.json.template"; diff --git a/scripts/deterministic/GenerateConfigs.s.sol b/scripts/deterministic/GenerateConfigs.s.sol index 22ca85a2..d0cd527f 100644 --- a/scripts/deterministic/GenerateConfigs.s.sol +++ b/scripts/deterministic/GenerateConfigs.s.sol @@ -3,7 +3,7 @@ pragma solidity =0.8.24; import {stdToml} from "forge-std/StdToml.sol"; -import {ADMIN_SYSTEM_BACKEND_CONFIG_PATH, ADMIN_SYSTEM_CRON_CONFIG_PATH, BALANCE_CHECKER_CONFIG_PATH, BRIDGE_HISTORY_API_CONFIG_PATH, BRIDGE_HISTORY_FETCHER_CONFIG_PATH, CHAIN_MONITOR_CONFIG_PATH, CONFIG_CONTRACTS_PATH, COORDINATOR_API_CONFIG_PATH, COORDINATOR_CRON_CONFIG_PATH, GENESIS_ALLOC_JSON_PATH, GENESIS_JSON_PATH, ROLLUP_CONFIG_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_PATH} from "./Constants.sol"; +import {ADMIN_SYSTEM_BACKEND_CONFIG_PATH, ADMIN_SYSTEM_CRON_CONFIG_PATH, BALANCE_CHECKER_CONFIG_PATH, BRIDGE_HISTORY_API_CONFIG_PATH, BRIDGE_HISTORY_FETCHER_CONFIG_PATH, CHAIN_MONITOR_CONFIG_PATH, CONFIG_CONTRACTS_PATH, COORDINATOR_API_CONFIG_PATH, COORDINATOR_CRON_CONFIG_PATH, GAS_ORACLE_CONFIG_PATH, GENESIS_ALLOC_JSON_PATH, GENESIS_JSON_PATH, ROLLUP_CONFIG_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_PATH} from "./Constants.sol"; import {DeployScroll} from "./DeployScroll.s.sol"; import {DeterministicDeployment} from "./DeterministicDeployment.sol"; @@ -19,6 +19,7 @@ contract GenerateRollupConfig is DeployScroll { predictAllContracts(); generateRollupConfig(ROLLUP_CONFIG_PATH); + generateRollupConfig(GAS_ORACLE_CONFIG_PATH); } /********************* From a1f9df3eb2e1506e57051fb98f34f6a5c4fa6d79 Mon Sep 17 00:00:00 2001 From: Morty Date: Wed, 16 Apr 2025 17:19:48 +0800 Subject: [PATCH 15/31] update config.toml --- scripts/deterministic/config/config.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/deterministic/config/config.toml b/scripts/deterministic/config/config.toml index 7666b0e8..846f759d 100644 --- a/scripts/deterministic/config/config.toml +++ b/scripts/deterministic/config/config.toml @@ -31,7 +31,6 @@ L2GETH_KEYSTORE = '{"address":"756ea06bdee36de11f22dcca45a31d8a178ef3c6","crypto L2GETH_PASSWORD = "scroll2022" L2GETH_NODEKEY = "2f59ff2fdee1c42a3d8c8980c313bc8d6c2557463f7bb92b0f0bc89a6d3cbf01" L2_GETH_STATIC_PEERS = '["enode://848a7d59dd8f60dd1a51160e6bc15c194937855443de9be4b2abd83e11a5c4ac21d61d065448c5c520826fe83f1f29eb5a452daccca27b8113aa897074132507@l2-sequencer:30303"]' -L2GETH_CCC_NUMWORKERS = 5 [rollup] From c9bdd18c8255405eda6a2083d9115cdb9b768618 Mon Sep 17 00:00:00 2001 From: Morty Date: Wed, 16 Apr 2025 17:22:38 +0800 Subject: [PATCH 16/31] update config.toml --- .../config/config-contracts.toml | 58 ------------------- 1 file changed, 58 deletions(-) delete mode 100644 scripts/deterministic/config/config-contracts.toml diff --git a/scripts/deterministic/config/config-contracts.toml b/scripts/deterministic/config/config-contracts.toml deleted file mode 100644 index 974a30ab..00000000 --- a/scripts/deterministic/config/config-contracts.toml +++ /dev/null @@ -1,58 +0,0 @@ -L1_WETH_ADDR = "" -L1_PROXY_ADMIN_ADDR = "" -L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = "" -L1_WHITELIST_ADDR = "" -L1_SCROLL_CHAIN_PROXY_ADDR = "" -L1_SCROLL_MESSENGER_PROXY_ADDR = "" -L1_MESSAGE_QUEUE_V1_IMPLEMENTATION_ADDR = "" -L1_MESSAGE_QUEUE_V1_PROXY_ADDR = "" -L1_MESSAGE_QUEUE_V2_IMPLEMENTATION_ADDR = "" -L1_MESSAGE_QUEUE_V2_PROXY_ADDR = "" -L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR = "" -L1_ENFORCED_TX_GATEWAY_PROXY_ADDR = "" -L1_PLONK_VERIFIER_ADDR = "" -L1_ZKEVM_VERIFIER_V2_ADDR = "" -L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR = "" -L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR = "" -L1_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = "" -L1_GATEWAY_ROUTER_PROXY_ADDR = "" -L1_ETH_GATEWAY_PROXY_ADDR = "" -L1_WETH_GATEWAY_PROXY_ADDR = "" -L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "" -L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "" -L1_ERC721_GATEWAY_PROXY_ADDR = "" -L1_ERC1155_GATEWAY_PROXY_ADDR = "" -L2_MESSAGE_QUEUE_ADDR = "" -L1_GAS_PRICE_ORACLE_ADDR = "" -L2_WHITELIST_ADDR = "" -L2_WETH_ADDR = "" -L2_TX_FEE_VAULT_ADDR = "" -L2_PROXY_ADMIN_ADDR = "" -L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = "" -L2_SCROLL_MESSENGER_PROXY_ADDR = "" -L2_ETH_GATEWAY_PROXY_ADDR = "" -L2_WETH_GATEWAY_PROXY_ADDR = "" -L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "" -L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "" -L2_ERC721_GATEWAY_PROXY_ADDR = "" -L2_ERC1155_GATEWAY_PROXY_ADDR = "" -L2_SCROLL_STANDARD_ERC20_ADDR = "" -L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR = "" -L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = "" -L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" -L1_ETH_GATEWAY_IMPLEMENTATION_ADDR = "" -L1_WETH_GATEWAY_IMPLEMENTATION_ADDR = "" -L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" -L1_ERC721_GATEWAY_IMPLEMENTATION_ADDR = "" -L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = "" -L2_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = "" -L2_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = "" -L2_GATEWAY_ROUTER_PROXY_ADDR = "" -L2_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" -L2_ETH_GATEWAY_IMPLEMENTATION_ADDR = "" -L2_WETH_GATEWAY_IMPLEMENTATION_ADDR = "" -L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" -L2_ERC721_GATEWAY_IMPLEMENTATION_ADDR = "" -L2_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = "" -SYSTEM_CONFIG_IMPLEMENTATION_ADDR = "" -SYSTEM_CONFIG_PROXY_ADDR = "" \ No newline at end of file From df972314e0ae5c0886d491b3b4429cb13da7ec7e Mon Sep 17 00:00:00 2001 From: Morty Date: Wed, 16 Apr 2025 17:36:59 +0800 Subject: [PATCH 17/31] add config-contracts.toml --- .gitignore | 2 - .../config/config-contracts.toml | 58 +++++++++++++++++++ 2 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 scripts/deterministic/config/config-contracts.toml diff --git a/.gitignore b/.gitignore index 574fbc45..6ce6f78b 100644 --- a/.gitignore +++ b/.gitignore @@ -23,5 +23,3 @@ broadcast # OS .DS_Store -# config -scripts/deterministic/config/config-contracts.toml \ No newline at end of file diff --git a/scripts/deterministic/config/config-contracts.toml b/scripts/deterministic/config/config-contracts.toml new file mode 100644 index 00000000..974a30ab --- /dev/null +++ b/scripts/deterministic/config/config-contracts.toml @@ -0,0 +1,58 @@ +L1_WETH_ADDR = "" +L1_PROXY_ADMIN_ADDR = "" +L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = "" +L1_WHITELIST_ADDR = "" +L1_SCROLL_CHAIN_PROXY_ADDR = "" +L1_SCROLL_MESSENGER_PROXY_ADDR = "" +L1_MESSAGE_QUEUE_V1_IMPLEMENTATION_ADDR = "" +L1_MESSAGE_QUEUE_V1_PROXY_ADDR = "" +L1_MESSAGE_QUEUE_V2_IMPLEMENTATION_ADDR = "" +L1_MESSAGE_QUEUE_V2_PROXY_ADDR = "" +L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_ENFORCED_TX_GATEWAY_PROXY_ADDR = "" +L1_PLONK_VERIFIER_ADDR = "" +L1_ZKEVM_VERIFIER_V2_ADDR = "" +L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR = "" +L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR = "" +L1_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = "" +L1_GATEWAY_ROUTER_PROXY_ADDR = "" +L1_ETH_GATEWAY_PROXY_ADDR = "" +L1_WETH_GATEWAY_PROXY_ADDR = "" +L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "" +L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "" +L1_ERC721_GATEWAY_PROXY_ADDR = "" +L1_ERC1155_GATEWAY_PROXY_ADDR = "" +L2_MESSAGE_QUEUE_ADDR = "" +L1_GAS_PRICE_ORACLE_ADDR = "" +L2_WHITELIST_ADDR = "" +L2_WETH_ADDR = "" +L2_TX_FEE_VAULT_ADDR = "" +L2_PROXY_ADMIN_ADDR = "" +L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = "" +L2_SCROLL_MESSENGER_PROXY_ADDR = "" +L2_ETH_GATEWAY_PROXY_ADDR = "" +L2_WETH_GATEWAY_PROXY_ADDR = "" +L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "" +L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "" +L2_ERC721_GATEWAY_PROXY_ADDR = "" +L2_ERC1155_GATEWAY_PROXY_ADDR = "" +L2_SCROLL_STANDARD_ERC20_ADDR = "" +L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR = "" +L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = "" +L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_ETH_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_WETH_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_ERC721_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = "" +L2_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = "" +L2_GATEWAY_ROUTER_PROXY_ADDR = "" +L2_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_ETH_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_WETH_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_ERC721_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = "" +SYSTEM_CONFIG_IMPLEMENTATION_ADDR = "" +SYSTEM_CONFIG_PROXY_ADDR = "" \ No newline at end of file From 08adccd1dbe249f179777c8be79a1e17a7366396 Mon Sep 17 00:00:00 2001 From: Morty Date: Thu, 17 Apr 2025 02:13:03 +0800 Subject: [PATCH 18/31] update verifier --- scripts/deterministic/Constants.sol | 10 ++++++---- scripts/deterministic/DeployScroll.s.sol | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/scripts/deterministic/Constants.sol b/scripts/deterministic/Constants.sol index 3953911f..437fefc0 100644 --- a/scripts/deterministic/Constants.sol +++ b/scripts/deterministic/Constants.sol @@ -30,8 +30,10 @@ string constant ROLLUP_EXPLORER_BACKEND_CONFIG_PATH = "../../config/rollup-explo string constant ADMIN_SYSTEM_BACKEND_CONFIG_PATH = "../../config/scroll-admin-backend/config.json.template"; string constant ADMIN_SYSTEM_CRON_CONFIG_PATH = "../../config/scroll-admin-cron/config.json.template"; -// plonk verifier configs -bytes32 constant V4_VERIFIER_DIGEST = 0x0a1904dbfff4614fb090b4b3864af4874f12680c32f07889e9ede8665097e5ec; +// verifier 0.2.0 VERIFIER_DIGEST +// https://circuit-release.s3.us-west-2.amazonaws.com/scroll-zkvm/releases/0.2.0/bundle/digest_2.hex +bytes32 constant VERIFIER_DIGEST = 0x0038553adf417a6a3df35d2fdfd14b892f1e49ba18937ece7960c1e7cee6e3dc; -// plonk verifier v0.13.1 creation code -bytes constant PLONK_VERIFIER_CREATION_CODE = hex"62000025565b60006040519050600081036200001a57606090505b818101604052919050565b6136a3620000338162000005565b816200003f82398181f3fe60017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd477f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610151565b60007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4782107f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47841080821692505050600082146000841480821780158481169450505050507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478384097f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478384097f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478482097f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47600382088381148581169550505050505092915050565b8060003506602052806020350660405280604035066060528060603506608052806080350660a0528060a0350660c0528060c0350660e0528060e0350661010052806101003506610120528061012035066101405280610140350661016052806101603506610180528061018035066101a052806101a035066101c052806101c035066101e052806101e0350661020052806102003506610220528061022035066102405280610240350661026052806102603506610280528061028035066102a052806102a035066102c052806102c035066102e052806102e0350661030052806103003506610320527f083d7f8552bdf1dd98458c19d469c458809424d40c483abc2e528b75a6f0f1466000526103203580610340526103403580610360528461027d8284610048565b169450505061038060002061038052610380518181066103a052806103c0525061036035806103e052610380358061040052846102ba8284610048565b169450505060606103c02061042052610420518181066104405280610460525060016104805360216104602061048052610480518181066104a052806104c052506103a035806104e0526103c0358061050052846103188284610048565b16945050506103e03580610520526104003580610540528461033a8284610048565b16945050506104203580610560526104403580610580528461035c8284610048565b169450505060e06104c0206105a0526105a0518181066105c052806105e05250610460358061060052610480358061062052846103998284610048565b16945050506104a03580610640526104c0358061066052846103bb8284610048565b16945050506104e035806106805261050035806106a052846103dd8284610048565b169450505061052035806106c05261054035806106e052846103ff8284610048565b16945050506101206105e0206107005261070051818106610720528061074052508061056035066107605280610580350661078052806105a035066107a052806105c035066107c052806105e035066107e0528061060035066108005280610620350661082052806106403506610840528061066035066108605280610680350661088052806106a035066108a052806106c035066108c052806106e035066108e052806107003506610900528061072035066109205280610740350661094052806107603506610960526102406107402061098052610980518181066109a052806109c0525060016109e05360216109c0206109e0526109e051818106610a005280610a2052506107803580610a40526107a03580610a6052846105248284610048565b16945050506060610a2020610a8052610a8051818106610aa05280610ac052506107c03580610ae0526107e03580610b0052846105618284610048565b169450505060205160405160581b8101905060605160b01b8101905080610b205260805160a05160581b8101905060c05160b01b8101905080610b4052846105a98284610048565b169450505060e0516101005160581b810190506101205160b01b8101905080610b6052610140516101605160581b810190506101805160b01b8101905080610b8052846105f68284610048565b169450505080610720516107205109610ba05280610ba051610ba05109610bc05280610bc051610bc05109610be05280610be051610be05109610c005280610c0051610c005109610c205280610c2051610c205109610c405280610c4051610c405109610c605280610c6051610c605109610c805280610c8051610c805109610ca05280610ca051610ca05109610cc05280610cc051610cc05109610ce05280610ce051610ce05109610d005280610d0051610d005109610d205280610d2051610d205109610d405280610d4051610d405109610d605280610d6051610d605109610d805280610d8051610d805109610da05280610da051610da05109610dc05280610dc051610dc05109610de05280610de051610de05109610e005280610e0051610e005109610e205280610e2051610e205109610e405280610e4051610e405109610e605280610e6051610e605109610e805280610e8051610e805109610ea05280610ea051610ea05109610ec052807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000610ec05108610ee052807f30644e66c81e03716be83b486d6feabcc7ddd0fe6cbf5e72d585d142f7829b05610ee05109610f0052807f2d19f86a2342079b8c1a6417471d461040256eaa689be51f08e6a92e1243ce65610f005109610f2052807f034a5608bdef988e2c35e19f3a64124ce80e799e111d8b723afb4c65ddbc319c6107205108610f4052807f24a1fcd63e9f03b27281db85fe631ec8e5c466f8178a4ee94d4942b7ccd90e1c610f005109610f6052807f0bc2519ca2929c7745ce6a30831e3994426f8150622f21a7f698b2dc2326f1e56107205108610f8052807f0d5eb4c216db2c3262de3f6a2ef71a9be95ff21a7a1a50ed069d6131e7d54e5f610f005109610fa052807f230599b0ca5673f75572064c528a3dc13ed3f62dff9f1fa43d449462082ab1a26107205108610fc052807f26501ebfe559ea5826f023d3e76e4b66f170cd940408eb5590a4075c80b498d6610f005109610fe052807f0a142fb2fbd7b5d1916021e29a130cf636c31ab475b0853bb33dee376f4b672b610720510861100052807f082a7bd4c0a7e4352229d332c27a160da18f0d7c651f3047df41b80345532f6e610f00510961102052807f2839d29e2089bbf496267283bf07424f86a4dacc149a404964a03d90aaacd093610720510861104052807f19277f31ecb5bfe8604677099c09556812b0b5c50cceb2b584098183a5a6c5c8610f00510961106052807f173ccf40f47be0415809ceace57802f5158332836ceabddbbfd874104a593a39610720510861108052807f20bab6e5f766b4edf82399e9c5ff0e40d4b6875321a3d8020e18521d8f5c7241610f0051096110a052807f0fa9978ce9caeb3bc02cabccbb824a1c537d60f55815988f35c9a37660a38dc061072051086110c052806001610f0051096110e052807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000610720510861110052807f1dba8b5bdd64ef6ce29a9039aca3c0e524395c43b9227b96c75090cc6cc7ec97610f00510961112052807f12a9c31703ccb0bcd5b5b57cd4dd977803fa8c04c096f4fa7c9164c78338136a610720510861114052807f0d94d63997367c97a8ed16c17adaae39262b9af83acb9e003f94c217303dd160610f00510961116052807f22cf783949fb23920f632ef506a6aa2402084d503eedd291044d337cbfc22ea1610720510861118052807f303a348fae5a4f041e5c056919bc140f68267e2fb55a522282b02d6a100e01a0610f0051096111a052807e2a19e332d7512599f4404d67c5444dc00d6a18c45f1e6ec131c829dff1fe6161072051086111c052807f1951441010b2b95a6e47a6075066a50a036f5ba978c050f2821df86636c0facb610f0051096111e052807f17130a62d07ee6cf4a089faf311ab35324c48c9f00f91f9ec1c3fd2db93f0536610720510861120052807f04fe6e3fa02c3830525c10d7bbf567639bfc836de8fe4e471c889a638d381c71610f00510961122052807f2b65e033410567f965f434dec58bf0f98c3764da90bb224a27595b3062c7e390610720510861124052807f24db2e49a2c215211bae763372d0d8b05d0140adbc6d9d63f2a226fb711fd873610f00510961126052807f0b8920293e6f8b089ca1cf830eb07faccb32a79abd4bd32d513fce987ee0278e610720510861128052807f0f6afbf59e2fef78443acf353ca6d17cfc07ebc6343141cd56a9102bd4864004610f0051096112a052807f20f9527d4301b0b17415768144da86e02c2bfc8245882ec3ed38e5681b79bffd61072051086112c052807f1283ba6f4b7b1a76ba2008fe823128bea4adb9269cbfd7c41c223be65bc60863610f0051096112e052807f1de0940395b685b2fe303cb7ff502f9e83862f21dcf998cd27bfb9ad9439f79e610720510861130052807f10e6c9ec7941500e1b1095e82fb0034bd9e95777ca9ae5ce296eadc089110518610f00510961132052807f1f7d848667f0501b9d3fafce51d155114e4a90d0af1e8ac31a7347d366eefae9610720510861134052807f25ad5db2a6bf79a14fd0d2ffd3d0927af7fdd30bce40f88fb46774fd262d7673610f00510961136052807f0ab6f0c03a722688687f72b6adb0c5e23036153cab7878018f7a8096c9d2898e610720510861138052807f2cd3ee06866876806a4a382f7a95576f34fd9ce6aad8bf350670ed33fe3259ac610f0051096113a052807f0390606c5ac929a94e060d8706ec00edf3364b61cee0b15c3d71085ff1cda65561072051086113c052807f2f835d9f4207df4efa4ffa0b2bbf9a4f54221c57cc506b7a5f8dae90bd2e3d0a610f0051096113e052807ee0f0d39f29c0dabe004bab55c1be0dd411cbf0ad690516e454470332d1c2f7610720510861140052807f30526acf1fa80f36309d80530d854ae7d52fc97bcb8d0a6a2a7f852e7b6e9d79610f00510961142052807e11e3a3c18990f387b2c56373fc0d7553041eccae2c66271962706574916288610720510861144052807f0af04af9c243a8b4b8767330b8dae01f562d7641cdf0a0c4d288e395c0aebb72610f00510961146052807f257403791eedf774ffd9d285c8a6783dd2067206abc8cfcc715911fe2f51448f610720510861148052807f2387d5be5175ba27fd2f8779b460ffdd830e06cd2f6bcf30c3715fbed25b1b67610f0051096114a052807f0cdc78b48fbbe601bb20be3ccd20587fa525e17b4a4da160807095d51da4e49a61072051086114c052807f18c95f1ae6514e11a1b30fd7923947c5ffcec5347f16e91b4dd654168326bede610f0051096114e052807f179aef57fae05218169d35deef48109728652313faa28775f60ba17d6cd94123610720510861150052807f1ed7bccd53b52d451436ae36d9f0225657083d7e909edb5560d7ea488aebe0d1610f00510961152052807f118c91a58d7c72e4a419977fa7913606d12baac9e91a953be30a0b4b65141f30610720510861154052807f0ba3551f265c0941ccb3766d47b26720ad620a597137ff3c84310bd3e28e26c9610f00510961156052807f24c0f953bad596e7eb9ccf4939cef13c7ad1ddef08817154bfb0e9c00d71d938610720510861158052807f0803f4ae22d04b4c9c282c70c843e12bfb2d84b89bd7ef84dc3b90d60053b1c8610f0051096115a052807f286059c4be6154dd1c281945b93d77312d06638fdde1810c67a664bdefac4e3961072051086115c052807f29aa84e8187de51daa6de67f44fe365fbb789d1e5f97bc95844628487ebd3a0d610f0051096115e052807f06b9c98ac8b3bb0c0de25f373c8321fd6cbb4b2a1a21b3fbbf9bcd4b7142c5f4610720510861160052807f0e4fc6c7e1947e44222db52506e305b8a9ad70f6a834db5a4778d4a30f1c6f92610f00510961162052807f221487aaff9d21e5962290917a9e52a47e867751d1849536fc6920f0e0e3906f610720510861164052807f20816bee57855658ecd8a204faf6bced826a725b63c6a1a388b4609a2478809f610f00510961166052807f0fe2e28489ac49d0cb77a3b1868a9b6fa5c975ed15f2ceedbb2d94f9cb877f62610720510861168052807f0d44b8855e09d5ae332469459793c1444814f6d137f9e93e780bd41c97e37caa610f0051096116a052807f231f95ed8327ca7b852bdc70e9ed9718e01ef17741bf8752cbd62177581c835761072051086116c052807f07fe49da5568a43070d955e0d212d956e1ff8abd41a763c737e292bee0476699610f0051096116e052807f286604988bc8fbf94776efd5af6e7f0646345d8b38120cca0bff62d50fb89968610720510861170052610f40518181610f805109905080611720528181610fc051099050806117405281816110005109905080611760528181611040510990508061178052818161108051099050806117a05281816110c051099050806117c052818161110051099050806117e0528181611140510990508061180052818161118051099050806118205281816111c051099050806118405281816112005109905080611860528181611240510990508061188052818161128051099050806118a05281816112c051099050806118c052818161130051099050806118e0528181611340510990508061190052818161138051099050806119205281816113c051099050806119405281816114005109905080611960528181611440510990508061198052818161148051099050806119a05281816114c051099050806119c052818161150051099050806119e05281816115405109905080611a005281816115805109905080611a205281816115c05109905080611a405281816116005109905080611a605281816116405109905080611a805281816116805109905080611aa05281816116c05109905080611ac05281816117005109905080611ae0528181610ee05109905080611b0052506020611b40526020611b60526020611b8052611b0051611ba0527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff611bc0527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001611be0528260016020611b2060c0611b4060055afa14169250611b20516000610ee05190508282611ae05109610ee0528282820991506117005190508282611ac05109611700528282820991506116c05190508282611aa051096116c0528282820991506116805190508282611a805109611680528282820991506116405190508282611a605109611640528282820991506116005190508282611a405109611600528282820991506115c05190508282611a2051096115c0528282820991506115805190508282611a0051096115805282828209915061154051905082826119e051096115405282828209915061150051905082826119c05109611500528282820991506114c051905082826119a051096114c0528282820991506114805190508282611980510961148052828282099150611440519050828261196051096114405282828209915061140051905082826119405109611400528282820991506113c0519050828261192051096113c052828282099150611380519050828261190051096113805282828209915061134051905082826118e051096113405282828209915061130051905082826118c05109611300528282820991506112c051905082826118a051096112c0528282820991506112805190508282611880510961128052828282099150611240519050828261186051096112405282828209915061120051905082826118405109611200528282820991506111c0519050828261182051096111c052828282099150611180519050828261180051096111805282828209915061114051905082826117e051096111405282828209915061110051905082826117c05109611100528282820991506110c051905082826117a051096110c052828282099150611080519050828261178051096110805282828209915061104051905082826117605109611040528282820991506110005190508282611740510961100052828282099150610fc051905082826117205109610fc052828282099150610f805190508282610f405109610f805282828209915081610f4052505080610f4051610f205109611c005280610f8051610f605109611c205280610fc051610fa05109611c40528061100051610fe05109611c605280611040516110205109611c805280611080516110605109611ca052806110c0516110a05109611cc05280611100516110e05109611ce05280611140516111205109611d005280611180516111605109611d2052806111c0516111a05109611d405280611200516111e05109611d605280611240516112205109611d805280611280516112605109611da052806112c0516112a05109611dc05280611300516112e05109611de05280611340516113205109611e005280611380516113605109611e2052806113c0516113a05109611e405280611400516113e05109611e605280611440516114205109611e805280611480516114605109611ea052806114c0516114a05109611ec05280611500516114e05109611ee05280611540516115205109611f005280611580516115605109611f2052806115c0516115a05109611f405280611600516115e05109611f605280611640516116205109611f805280611680516116605109611fa052806116c0516116a05109611fc05280611700516116e05109611fe05280602051611ce05109818183604051611d005109089050818183606051611d205109089050818183608051611d40510908905081818360a051611d60510908905081818360c051611d80510908905081818360e051611da0510908905081818361010051611dc0510908905081818361012051611de0510908905081818361014051611e00510908905081818361016051611e20510908905081818361018051611e4051090890508181836101a051611e6051090890508181836101c051611e8051090890508181836101e051611ea0510908905081818361020051611ec0510908905081818361022051611ee0510908905081818361024051611f00510908905081818361026051611f20510908905081818361028051611f4051090890508181836102a051611f6051090890508181836102c051611f8051090890508181836102e051611fa0510908905081818361030051611fc0510908905081818361032051611fe0510908905080612000525080610780516107a05109612020528061202051610760510861204052806107c0518203612040510861206052806108205161206051096120805280612080516105c051096120a052806108e05182036001086120c05280611ce0516120c051096120e052806120e0516120a051086121005280612100516105c0510961212052806108e0516108e0510961214052806108e051820361214051086121605280611c0051612160510961218052806121805161212051086121a052806121a0516105c051096121c05280611c005182036001086121e05280611c4051611c2051086122005280611c605161220051086122205280611c805161222051086122405280611ca05161224051086122605280611cc051612260510861228052806122805182036121e051086122a052806104405161088051096122c052806122c0516107e051086122e052806104a0516122e051086123005280610440516108a05109612320528061232051610760510861234052806104a051612340510861236052806123005161236051096123805280610440516108c051096123a052806123a05161200051086123c052806104a0516123c051086123e05280612380516123e05109612400528061090051612400510961242052806104405160010961244052806124405161072051096124605280612460516107e0510861248052806104a05161248051086124a05280610440517f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2096124c052806124c05161072051096124e052806124e051610760510861250052806104a051612500510861252052806124a05161252051096125405280610440517f13b360d4e82fe915fed16081038f98c211427b87a281bd733c277dbadf10372b09612560528061256051610720510961258052806125805161200051086125a052806104a0516125a051086125c05280612540516125c051096125e052806108e0516125e051096126005280612600518203612420510861262052806122a05161262051096126405280612640516121c051086126605280612660516105c051096126805280611ce05161092051096126a052806126a05161268051086126c052806126c0516105c051096126e05280611c005161092051096127005280612700516126e051086127205280612720516105c051096127405280610440516108005108612760528061084051610760510961278052806104405161278051086127a05280612760516127a051096127c0528061092051820361094051086127e052806127c0516127e051096128005280610960516127a05109612820528061282051820361276051086128405280612840518203612800510861286052806122a051612860510961288052806128805161274051086128a05280610ec051610ec051096128c05280610ec0516128c051096128e05280610ec0516128e051096129005280610ec05160010961292052806128c05160010961294052806128e0516001096129605280610ee0516128a05109612980528061072051610ba051096129a05280600161072051096129c052806129c0518203610aa051086129e052807f0d94d63997367c97a8ed16c17adaae39262b9af83acb9e003f94c217303dd1606107205109612a005280612a00518203610aa05108612a2052807f1dba8b5bdd64ef6ce29a9039aca3c0e524395c43b9227b96c75090cc6cc7ec976107205109612a405280612a40518203610aa05108612a6052807f303a348fae5a4f041e5c056919bc140f68267e2fb55a522282b02d6a100e01a06107205109612a805280612a80518203610aa05108612aa052807f2eedbf565be4b0b88a0e251d750f7559486d77bea4d5c9612ce3041295d380d5610aa051098181837f01768f1c854cef712e4220990c71e303dfc67089d4e3a73016fef1815a2c7f2c610720510908905080612ac05250807f0cf547ca658485dd9a20bd27b080d3147ec1caa826e725f7f7989fc9668dd16f610aa051098181837f077ebe9a531776ef7c9e90d5a0685181f70e74298eca38a6c92d84d4c0457ceb610720510908905080612ae05250807f077ebe9a531776ef7c9e90d5a0685181f70e74298eca38a6c92d84d4c0457ceb610aa051098181837e32f4eea6716d08d38119c3d378a36e865ffacfa73eb2357603f3f3368c88c6610720510908905080612b005250807f0d71dfba734c88cf774db4e0e4f959cb98acfbbb1fc789e5167bbca1fcafd24e610aa051098181837f25ea65fea4371c04dd1eaf23d69f2e0f9524ef5b9845d01cdb218e89a8052321610720510908905080612b205250806129e051600109612b405280612a6051612b405109612b605280612a2051612b605109612b805280612aa051612b805109612ba052807f12a9c31703ccb0bcd5b5b57cd4dd977803fa8c04c096f4fa7c9164c78338136b610aa051098181837f1dba8b5bdd64ef6ce29a9039aca3c0e524395c43b9227b96c75090cc6cc7ec96610720510908905080612bc05250807f1dba8b5bdd64ef6ce29a9039aca3c0e524395c43b9227b96c75090cc6cc7ec96610aa051098181837f1025b522462e72d539ad797831c912abfe0dc14b7e56dd9687bbceb53c8a1b37610720510908905080612be05250806001610aa051098181837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000610720510908905080612c005250612ac0518181612ae05109905080612c20528181612b005109905080612c40528181612b205109905080612c60528181612bc05109905080612c80528181612be05109905080612ca0528181612b605109905080612cc0528181612c005109905080612ce0528181612b405109905080612d0052506020612d40526020612d60526020612d8052612d0051612da0527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff612dc0527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001612de0528260016020612d2060c0612d4060055afa14169250612d20516000612b405190508282612ce05109612b4052828282099150612c005190508282612cc05109612c0052828282099150612b605190508282612ca05109612b6052828282099150612be05190508282612c805109612be052828282099150612bc05190508282612c605109612bc052828282099150612b205190508282612c405109612b2052828282099150612b005190508282612c205109612b0052828282099150612ae05190508282612ac05109612ae05282828209915081612ac0525050612ac0518181612ae0510890508181612b00510890508181612b205108905080612e00525080612b6051612ba05109612e2052612bc0518181612be05108905080612e40525080612b4051612ba05109612e6052612c005180612e805250612e00518181612e405109905080612ea0528181612e805109905080612ec052506020612f00526020612f20526020612f4052612ec051612f60527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff612f80527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001612fa0528260016020612ee060c0612f0060055afa14169250612ee0516000612e805190508282612ea05109612e8052828282099150612e405190508282612e005109612e405282828209915081612e0052505080612e4051612e205109612fc05280612e8051612e605109612fe052806109a0516109a0510961300052806109a051613000510961302052806109a051613020510961304052806109a051613040510961306052806109a051613060510961308052806109a05161308051096130a052806109a0516130a051096130c052806109a0516130c051096130e052806109a0516130e051096131005280610a0051610a0051096131205280610a005161312051096131405280612ac0516107605109818183612ae0516107805109089050818183612b00516107a05109089050818183612b20516107c0510908905080613160525080612e0051613160510961318052806001613180518303096131a0528060016131a051096131c05280612e20516001096131e05280612bc0516108e05109818183612be051610900510908905080613200525080612fc05161320051096132205280600161322051830309613240528060016131e051096132605280612bc0516109205109818183612be051610940510908905080613280525080612fc05161328051096132a052806109a0516132a0518303096132c052806109a0516131e051096132e052806132c05161324051086133005280610a005161330051096133205280610a005161326051096133405280610a00516132e051096133605280613320516131c051086133805280612e60516001096133a05280612c00516109605109806133c0525080612fe0516133c051096133e0528060016133e051830309613400528060016133a051096134205280612c00516107e0510980613440525080612fe051613440510961346052806109a0516134605183030961348052806109a0516133a051096134a052806134805161340051086134c05280612c00516108005109806134e0525080612fe0516134e05109613500528061300051613500518303096135205280613000516133a051096135405280613520516134c051086135605280612c0051610820510980613580525080612fe05161358051096135a05280613020516135a0518303096135c05280613020516133a051096135e052806135c05161356051086136005280612c0051610840510980613620525080612fe0516136205109613640528061304051613640518303096136605280613040516133a0510961368052806136605161360051086136a05280612c00516108805109806136c0525080612fe0516136c051096136e05280613060516136e0518303096137005280613060516133a051096137205280613700516136a051086137405280612c00516108a0510980613760525080612fe0516137605109613780528061308051613780518303096137a05280613080516133a051096137c052806137a05161374051086137e05280612c00516108c0510980613800525080612fe051613800510961382052806130a0516138205183030961384052806130a0516133a051096138605280613840516137e051086138805280612e605161292051096138a05280612e605161294051096138c05280612e605161296051096138e05280612c0051612980510980613900525080612fe051613900510961392052806130c0516139205183030961394052806130c0516133a0510961396052806130c0516138a0510961398052806130c0516138c051096139a052806130c0516138e051096139c052806139405161388051086139e05280612c0051610860510980613a00525080612fe051613a005109613a2052806130e051613a2051830309613a4052806130e0516133a05109613a605280613a40516139e05108613a80528061312051613a805109613aa05280613120516134205109613ac05280613120516134a05109613ae05280613120516135405109613b005280613120516135e05109613b205280613120516136805109613b405280613120516137205109613b605280613120516137c05109613b805280613120516138605109613ba05280613120516139605109613bc05280613120516139805109613be05280613120516139a05109613c005280613120516139c05109613c20528061312051613a605109613c405280613aa0516133805108613c605280612ba051600109613c805280610aa051600109613ca0526001613cc0526002613ce052613c6051613d00528260016040613cc06060613cc060075afa14169250613cc051613d2052613ce051613d405261034051613d605261036051613d80528260016040613d206080613d2060065afa141692506104e051613da05261050051613dc05261334051613de0528260016040613da06060613da060075afa14169250613d2051613e0052613d4051613e2052613da051613e4052613dc051613e60528260016040613e006080613e0060065afa1416925061052051613e805261054051613ea05261336051613ec0528260016040613e806060613e8060075afa14169250613e0051613ee052613e2051613f0052613e8051613f2052613ea051613f40528260016040613ee06080613ee060065afa141692506103e051613f605261040051613f8052613ac051613fa0528260016040613f606060613f6060075afa14169250613ee051613fc052613f0051613fe052613f605161400052613f8051614020528260016040613fc06080613fc060065afa141692507f2ad47afc517e78898ecd3a5c20c46975e6c50bf030951071878c7470e2f3f9f1614040527f1ceaca4426cdc11c593eee4db1e3981bfd8bd0eba770b93aa85f5f15dc16096061406052613ae051614080528260016040614040606061404060075afa14169250613fc0516140a052613fe0516140c052614040516140e052614060516141005282600160406140a060806140a060065afa141692507f0fb05ccb81603592ce60bd6199890470ef6f9caca3c17570df7701d70a2dd957614120527f1cc1301d6d462edf2e79083532a337ef3f087fbf0b9516d08074784017e10c7e61414052613b0051614160528260016040614120606061412060075afa141692506140a051614180526140c0516141a052614120516141c052614140516141e0528260016040614180608061418060065afa141692507f1e69edc3b54a25a5be1efb7515b5eaa259569e44cf6e7b99887bd2015311104f614200527f293e037f34e8ad87a6ebea272575c751f96a1e0acbf05bf5774e0581c3cc382361422052613b2051614240528260016040614200606061420060075afa1416925061418051614260526141a05161428052614200516142a052614220516142c0528260016040614260608061426060065afa141692507f0cf666852fd76b36f03572da1111ea68014217801887369fd35f9460f6bb13246142e0527f230bb407465f3dcda6711ec136903711485b30046005c0dd769bd85d1cc8a56761430052613b40516143205282600160406142e060606142e060075afa14169250614260516143405261428051614360526142e05161438052614300516143a0528260016040614340608061434060065afa141692507f2c2ef5dd4ea527c7b6a1adb979cf19e316cf50515b2225ecd040f40f46ad8fc66143c0527f2cd240820bffbbfa44c0832dfe16e8a40c4e75d800f58f7576733ca37a9c73696143e052613b60516144005282600160406143c060606143c060075afa14169250614340516144205261436051614440526143c051614460526143e051614480528260016040614420608061442060065afa141692507f1e2415bae32b721ff7b95b1766a3d0a4ea86d62fc8b4ed864092e8be29b375b46144a0527f0193d85fa914927d0567822f343ead8682e19e1948bdfe0d70e5ce64eaddf26a6144c052613b80516144e05282600160406144a060606144a060075afa14169250614420516145005261444051614520526144a051614540526144c051614560528260016040614500608061450060065afa141692507f02b01e53fe9c70fbc4e13606ffb809f58993a5b31d9e9a69e5c86b2833b52ac8614580527f21fe9d89f5e7d29aa77fb345a045fabbcc5f2be8bbd2f571306475118175ae306145a052613ba0516145c0528260016040614580606061458060075afa14169250614500516145e052614520516146005261458051614620526145a0516146405282600160406145e060806145e060065afa1416925061060051614660526106205161468052613bc0516146a0528260016040614660606061466060075afa141692506145e0516146c052614600516146e0526146605161470052614680516147205282600160406146c060806146c060065afa1416925061064051614740526106605161476052613be051614780528260016040614740606061474060075afa141692506146c0516147a0526146e0516147c052614740516147e052614760516148005282600160406147a060806147a060065afa1416925061068051614820526106a05161484052613c0051614860528260016040614820606061482060075afa141692506147a051614880526147c0516148a052614820516148c052614840516148e0528260016040614880608061488060065afa141692506106c051614900526106e05161492052613c2051614940528260016040614900606061490060075afa1416925061488051614960526148a05161498052614900516149a052614920516149c0528260016040614960608061496060065afa14169250610560516149e05261058051614a0052613c4051614a205282600160406149e060606149e060075afa1416925061496051614a405261498051614a60526149e051614a8052614a0051614aa0528260016040614a406080614a4060065afa14169250610a4051614ac052610a6051614ae052613c80518103614b00528260016040614ac06060614ac060075afa14169250614a4051614b2052614a6051614b4052614ac051614b6052614ae051614b80528260016040614b206080614b2060065afa14169250610ae051614ba052610b0051614bc052613ca051614be0528260016040614ba06060614ba060075afa14169250614b2051614c0052614b4051614c2052614ba051614c4052614bc051614c60528260016040614c006080614c0060065afa14169250614c0051614c8052614c2051614ca052610ae051614cc052610b0051614ce052610b2051614d0052610b4051614d2052610b6051614d4052610b8051614d6052610100614c8020614d805280614d805106614da05280614da051614da05109614dc05280614da051600109614de052614d0051614e0052614d2051614e2052614de051614e40528260016040614e006060614e0060075afa14169250614c8051614e6052614ca051614e8052614e0051614ea052614e2051614ec0528260016040614e606080614e6060065afa14169250614d4051614ee052614d6051614f0052614de051614f20528260016040614ee06060614ee060075afa14169250614cc051614f4052614ce051614f6052614ee051614f8052614f0051614fa0528260016040614f406080614f4060065afa14169250614e6051614fc052614e8051614fe0527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2615000527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed615020527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b615040527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa61506052614f405161508052614f60516150a0527f186282957db913abd99f91db59fe69922e95040603ef44c0bd7aa3adeef8f5ac6150c0527f17944351223333f260ddc3b4af45191b856689eda9eab5cbcddbbe570ce860d26150e0527f06d971ff4a7467c3ec596ed6efc674572e32fd6f52b721f97e35b0b3d3546753615100527f06ecdb9f9567f59ed2eee36e1e1d58797fd13cc97fafc2910f5e8a12f202fa9a615120528260016020614fc0610180614fc060085afa14169250826001614fc051141692508261369e57600080fd5b600080f3"; +// openvm verifier 0.2.0 creation code +// https://circuit-release.s3.us-west-2.amazonaws.com/scroll-zkvm/releases/0.2.0/bundle/verifier.bin +bytes constant PLONK_VERIFIER_CREATION_CODE = hex"608060405234801561001057600080fd5b50614842806100206000396000f3fe608060405234801561001057600080fd5b5060003660606040516080811461002657600080fd5b60017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd477f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610162565b60007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4782107f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478410808216925050507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478384097f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478384097f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478482097f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47600382088381148086169550505050505092915050565b806000350660a052806020350660c052806040350660e0528060603506610100528060803506610120528060a03506610140528060c03506610160528060e03506610180528061010035066101a0528061012035066101c0528061014035066101e0528061016035066102005280610180350661022052806101a0350661024052806101c0350661026052806101e03506610280528061020035066102a0528061022035066102c0528061024035066102e0528061026035066103005280610280350661032052806102a0350661034052806102c0350661036052806102e03506610380528061030035066103a0528061032035066103c0528061034035066103e0528061036035066104005280610380350661042052806103a0350661044052806103c0350661046052806103e03506610480528061040035066104a0528061042035066104c0528061044035066104e0528061046035066105005280610480350661052052806104a0350661054052806104c0350661056052806104e03506610580528061050035066105a0528061052035066105c0528061054035066105e0528061056035066106005280610580350661062052806105a03506610640527f2afa0dd006fb6a9768832d01002e379b45e16c96954f9531f4045dd440c668386080526105c03580610660526105e035806106805284610364828461006f565b16945050506106206080206106a0526106a0518181066106c052806106e05250610600358061070052610620358061072052846103a1828461006f565b1694505050610640358061074052610660358061076052846103c3828461006f565b169450505060a06106e02061078052610780518181066107a052806107c0525060016107e05360216107c0206107e0526107e051818106610800528061082052506106803580610840526106a035806108605284610421828461006f565b16945050506106c03580610880526106e035806108a05284610443828461006f565b169450505061070035806108c05261072035806108e05284610465828461006f565b169450505060e061082020610900526109005181810661092052806109405250610740358061096052610760358061098052846104a2828461006f565b169450505061078035806109a0526107a035806109c052846104c4828461006f565b16945050506107c035806109e0526107e03580610a0052846104e6828461006f565b16945050506108003580610a20526108203580610a405284610508828461006f565b169450505061012061094020610a6052610a6051818106610a805280610aa05250806108403506610ac052806108603506610ae052806108803506610b0052806108a03506610b2052806108c03506610b4052806108e03506610b6052806109003506610b8052806109203506610ba052806109403506610bc052806109603506610be052806109803506610c0052806109a03506610c2052806109c03506610c4052806109e03506610c605280610a003506610c805280610a203506610ca05280610a403506610cc05280610a603506610ce05280610a803506610d0052610280610aa020610d2052610d2051818106610d405280610d6052506001610d80536021610d6020610d8052610d8051818106610da05280610dc05250610aa03580610de052610ac03580610e005284610641828461006f565b16945050506060610dc020610e2052610e2051818106610e405280610e605250610ae03580610e8052610b003580610ea0528461067e828461006f565b169450505060a05160c05160581b8101905060e05160b01b8101905080610ec052610100516101205160581b810190506101405160b01b8101905080610ee052846106c9828461006f565b1694505050610160516101805160581b810190506101a05160b01b8101905080610f00526101c0516101e05160581b810190506102005160b01b8101905080610f205284610717828461006f565b169450505080610a8051610a805109610f405280610f4051610f405109610f605280610f6051610f605109610f805280610f8051610f805109610fa05280610fa051610fa05109610fc05280610fc051610fc05109610fe05280610fe051610fe05109611000528061100051611000510961102052806110205161102051096110405280611040516110405109611060528061106051611060510961108052806110805161108051096110a052806110a0516110a051096110c052806110c0516110c051096110e052806110e0516110e05109611100528061110051611100510961112052806111205161112051096111405280611140516111405109611160528061116051611160510961118052806111805161118051096111a052806111a0516111a051096111c052806111c0516111c051096111e052807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000006111e0510861120052807f30644db14ff7d4a4f1cf9ed5406a7e5722d273a7aa184eaa5e1fb0846829b041611200510961122052807f1d3d878f52016737bda697d23b0cee81488efd02d67b27eae3edab5f39ef347d611220510961124052807f1326c6e38f3038f1faa9ade4467469dbdfa4eb45a33e48a65ff44a34b610cb84610a80510861126052807f182fa146dab5070e1897c235ff7425a25d09f820206545e69bf946c2f6057429611220510961128052807f1834ad2c067c991b9fb88380820d32bacb29f02859542aaaa7e8aed0f9fa8bd8610a8051086112a052807f185afb17aed5e3d828526ac8e534436afa30f7196772de397fd9b6be79fe8c9361122051096112c052807f1809535b325bbc518ffddaed9c4d14f22e02f12f12469257c4083ed57601736e610a8051086112e052807f220db0d8bf832baf9eecbf4fa49947e0b2a3d31df0a733ea5ae8abbdab442d5f611220510961130052807f0e569d9a21ae747a19638666dce8107c7590152a89123ca6e8f949d644bbd2a2610a80510861132052807f2fffa2b50d66f628412d9782f09d3386d766a1168304babe2165fe7ec962e65b611220510961134052807e64abbdd3caaa017722ae3390e424d650cd4731f6b4b5d3227bf715269d19a6610a80510861136052807f06288b9d40ec1915c3a20817de7179beeccf4c4fd02f202c064a0cc13e38c2f8611220510961138052807f2a3bc2d5a0458713f4ae3d9ea30fde9e3b649bf8a98a50653d97e8d2b1c73d09610a8051086113a052807f134f571fe34eb8c7b1685e875b324820e199bd70157493377cd65b204d1a396461122051096113c052807f1d14f752fde2e76206e7e72f264f103c469a2ad86444dd59c70b9a73a2e5c69d610a8051086113e052806001611220510961140052807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000610a80510861142052807f18c95f1ae6514e11a1b30fd7923947c5ffcec5347f16e91b4dd654168326bede611220510961144052807f179aef57fae05218169d35deef48109728652313faa28775f60ba17d6cd94123610a80510861146052807f032750f8f3c2493d0828c7285d0258e1bdcaa463f4442a52747b5c96639659bb611220510961148052807f2d3cfd79ed6f56ecb0277e8e247eff7b6a6943e48575463ecf6698fd8c69a646610a8051086114a052807f1be6734ccb6588d60d469def6bf0b0f39af67bb568a3b63e3773e3dd306ba07061122051096114c052807f147ddb2615cc1753ab09a7c71590a7698d3d6c931115ba530c6e11b6bf945f91610a8051086114e052807f2a14464f1ff42de3856402b62520e670745e39fada049d5b2f0e1e3182673378611220510961150052807f06500823c13d724632ec43005c6071ecb3d5ae4d9fb4d33614d3d7626d98cc89610a80510861152052807f0205f4c81bd8bfadd87e3771dc61e489caf1a2f61f6fe94419612b1039f806ba611220510961154052807f2e5e59aac558e07bdfd20e44a51f73d35d4245525a49874d2a80ca83b607f947610a80510861156052807f085386d3273d6903e6ca9388a9b29e81643977d523db6f6db1fdc5acf965b809611220510961158052807f2810c79fb9f43725d185b22dd7ceb9dbc3fa707355de012391e42fe6f69a47f8610a8051086115a052807f0962d59f2fea9851331073aa7b9a65add88e25cdcf9a7908665722e5c57e1c2561122051096115c052807f270178d3b14707d8853fd20c05e6f2af4fa5c27aaa1ef788dd8ad2ae2a81e3dc610a8051086115e052807f0cf1526aaafac6bacbb67d11a4077806b123f767e4b0883d14cc0193568fc082611220510961160052807f2372fc083636d96eec99c8a4dd79e056770ff0e09508e8542f15f40099703f7f610a80510861162052807f0d38d63833e51358021fc5aeb30483105d8b48022cd28fc4ccc55739e57166f4611220510961164052807f232b783aad4c8cd1b6308007ce7cd54ccaa8a0464ce6e0cc771c9e5a0a8e990d610a80510861166052807f202efdf29fbbf7251b99f728e6317b3a58a0e579b827f9d622ab713b5d76ba5e611220510961168052807f103550804175a9049cb64e8d9b4fdd22cf9302cec19176bb21368458928945a3610a8051086116a052807f1df73deb96a4785f63b25489c52178d4b3f95e41d1a1d6aec678d35d2d2095b861122051096116c052807f126d10874a8d27ca549df12cbc5fdf88743a8a06a81799e27d692236c2df6a49610a8051086116e052807f157057e61fa68c20f015bccca35a72daa53b29abd151cfa1431a92029ece5c0e611220510961170052807f1af3f68cc18b1408c83a88e9de26e58282f8be9ca867a0f000c763915131a3f3610a80510861172052807f17e4f62c667b201826284c6918cfd09f571a62f09dfca2d54702a220c92f178b611220510961174052807f187f58467ab680119227f94d68b187bdd1198557dbbccdbbfcdf537326d0e876610a80510861176052807f1b8c0911077b8645a2dcd11044ecedef18d199a893d5f3814f789252af93e53c611220510961178052807f14d84561d9b619e4157374a63c946a6e0f624e9fe5e37d0ff4696341406c1ac5610a8051086117a052807f23755b45f23db9743c690e5570b1e2983e8369f76981f85609c5154a03a922df61122051096117c052807f0ceef32ceef3e6b57be7376110cf75c4e9b07e511037783b3a1ce049ec56dd22610a8051086117e052807f0f60c8fe0414cb9379b2d39267945f6bd60d06a05216231b26a9fcf88ddbfebe611220510961180052807f21038574dd1cd4963e9d722419ecf8f15226e1a827a34d761d37f89b62240143610a80510861182052807f1dd804edc273c3b32894f7d1f5ad573c785b068883b719276149bcfcbd7c8735611220510961184052807f128c49851ebddc768fbb4de48bd40120afd8e1bff6025769e2983897328378cc610a80510861186052807f2cfb3ee365fa96d90152e17588a5c8109aba50a36f0e6cc5d38caa708844f09d611220510961188052807f03690f8f7b370950b6fd6440f8db904c8d7997a50aab03cb70554b2367bb0f64610a8051086118a052807f01bf77e1640452989576495d56797caee1f6c4a3529d7ad6cf9f068ba23f509561122051096118c052807f2ea4d6917d2d4d9122d9fc592b07dbae463d23a5271bf5ba7442ef084dc0af6c610a8051086118e052807f0bb1b800e0fc2016082cf25a117ee7ebc61bdc048d093fbf025ec0794556abea611220510961190052807f24b2967200358013b023535c7002707162180c43ecb030d24183351aaaa95417610a80510861192052807f2184edd1ba10180eb3174c08e41cd0981126e96545bbe8fa6be74d0f5139a939611220510961194052807f0edf60a12721881b0538f9ad9d6487c5170cfee333fd8796d7faa8849ec656c8610a80510861196052807f013b926b615dadae89c76ce93dbd4b79cd3fad8e402744b6151a79df33fb48e3611220510961198052807f2f28bc077fd3f27b2e88d8cd43c40ce35af43aba39922bdb2ec77bb4bc04b71e610a8051086119a052807f24b9e65b23e30a1fb8b8ea2a50caa34abf79322f88ecc1e5c72c863f6fbebd1761122051096119c052807f0baa6817bd4e9609ff975b8c30b6b51268bab618f0ccaeab7cb56f54804142ea610a8051086119e052807f09f83b8b9c5b192f9193a231814c3163b9b8c636b1d40961a83ac1f42dc63b266112205109611a0052807f266c12e744d686fa26bca385003526f96e7b2211c7e5672f9ba7339fc239c4db610a805108611a2052807f0f2e46e84503e0bec563379085b7d3ef78102bd590fbd619be21ce2c1b9945bf6112205109611a4052807f2136078a9c2dbf6af2ed0e25fbc9846db023bc72e8bd9a7785c02767d466ba42610a805108611a6052807f2c9741ded62f041c7cc95ad55d1d3649468d8a5ec530f048bbeeffdfd0a9d6526112205109611a8052807f03cd0c940b029c0d3b86eae124642213e1a65de9b488804887f2f5b41f5629af610a805108611aa052807f20e2808bc9ff5d255ed9de0f29147692fff955773b6ad07c69f232bfd55f00596112205109611ac052807f0f81cde717324304597667a7586ce1ca283a92d13e4ea014d9efc2d41aa0ffa8610a805108611ae052807f05b432e46216fc6bed772f92cde45c9ebc2d8703af094c331522356351ce2c776112205109611b0052807f2ab01b8e7f1aa3bdcad91623b39cfbbe6c066144cab0245e2ebfc0309e31d38a610a805108611b2052807f259c031d10081ea697e9997cdcf8c47964c227e4fb4e77e807713f00585956de6112205109611b4052807f0ac84b55d12981832066ac39a48893e3c371c0637e6af8a93c70b69397a6a923610a805108611b6052807f04290a1d7601de8e3c98923f48b2304f4ca974f5376d42c80bbec5eb53070bc56112205109611b8052807f2c3b44556b2fc19b7bb7b37738cf280ddb8a7353424c2dc938232fa89cf8f43c610a805108611ba052807f2fe46b4c6e0df90591d8336da5638fb4c1859ede12103bc04dd0e995a9d8e77d6112205109611bc052807e7fe3267323a72426781248dc1dc8a866ae496a67a934d0f6110bfe46271884610a805108611be052807f304cd1e79cfa5b0f054e981a27ed7706e7ea6b06a7f266ef8db819c179c2c3ea6112205109611c0052807e177c8b4437451ab301ad9c5993e15640497d41d1c709a1b629dbd2763d3c17610a805108611c2052807f1a05ef04e20b042a06c61577a4a9b54771c327c3672c0357d55d04e22aa2f1c96112205109611c4052807f165e5f6dff269bffb18a303edcd7a315b670c085128d6d396e84f0b1c55d0e38610a805108611c6052807f1cc839f9cc5012a73f3b56e2417eb951f46c04af98489f776d1dd847b247f2b56112205109611c8052807f139c147914e18d827914eed440029f0b33c7e398e170d119d6c41d4c3db80d4c610a805108611ca052807f0baa43683ba5a5fa31558c98a045a4b0109b2efb97fe1e2d352c28456d499def6112205109611cc052807f24ba0b0aa58bfa2f86fab91de13bb3ad1798b94ce1bb52640eb5cd4e82b66212610a805108611ce052807f033a1069fe5e06d412520dc1eb795e5c1a9fbf099908ee0d7891c86e2e2746c56112205109611d0052807f2d2a3e08e2d39955a5fe37f49607fa010d94293ee0b08283cb502d25c1d8b93c610a805108611d2052807f07102fcd8e37f581514a697a842c2f7a57aa1ca017fd7c2c81c4481ef51a4af86112205109611d4052807f29541ea552f9aaa86705dc3bfd5528e2d089cba861bbf464c21dad74fae5b509610a805108611d6052807f06d5223674254f4051450d63a7815877be218cff2ae41bf96a519f97d5f893696112205109611d8052807f298f2c3c6d0c50e9670b3852d9ffffe56a125b494ed55497d99055fc1a076c98610a805108611da052807f2336c94d73c29901a712ac079b7f50d62e10f1d075badfbbf438f74afbbabe9d6112205109611dc052807f0d2d85256d6f0728113d99aee6020786fa22f67803fe90d54fa8fe48f4454164610a805108611de052807f2fbe09de40a6ef2c32ad177045a51c5033c7186172461c2658a0f93cf36bfa3f6112205109611e0052807ea64494a08ab0fd85a32e463bdc3c0cf46ccfe70773546aeb40fc56fc9405c2610a805108611e2052807f292ec9ad99cfce95b2da745a36ddf7b05337dd83ece3597760f62c2ebf21c3106112205109611e4052807f073584c54761d1940575d15c4aa360acd4fc0ac48cd61719e2ebc96530de3cf1610a805108611e6052807f21ae116f5f57a4cc6e3f8d02345f04778d257b7e8200f6cfe5c69aa1692cc8fb6112205109611e8052807f0eb63d0381d9fb5d4a10b8b44d2253e59b0e6cc9f7b879c15e1b5af286d33706610a805108611ea052807f1bfee385b2c5cfc01238741207046900bb91b5598bc6cc1cf2f5c1019ec024016112205109611ec052807f14656aed2e6bd069a617d1a47a7cef5c6ca232eeedf2a47450ec3492513fdc00610a805108611ee052807f146723ce0d2732187545ca1441a36f872027c0262cd646a42fa20c7f648a061e6112205109611f0052807f1bfd2aa4d40a6e11430a7ba23fdde8d6080c28224ce329ed143fe9148b75f9e3610a805108611f2052807f0f4411b99f1a27148940c80178d5446f0c54afb342542fd6b7d56e8c8c4cb5cc6112205109611f4052807f21203cb9421779152f0f7db508ac13ee1bdf3895376540ba8c0c870763b34a35610a805108611f60526112605181816112a05109905080611f805281816112e05109905080611fa05281816113205109905080611fc05281816113605109905080611fe05281816113a051099050806120005281816113e05109905080612020528181611420510990508061204052818161146051099050806120605281816114a051099050806120805281816114e051099050806120a052818161152051099050806120c052818161156051099050806120e05281816115a051099050806121005281816115e05109905080612120528181611620510990508061214052818161166051099050806121605281816116a051099050806121805281816116e051099050806121a052818161172051099050806121c052818161176051099050806121e05281816117a051099050806122005281816117e05109905080612220528181611820510990508061224052818161186051099050806122605281816118a051099050806122805281816118e051099050806122a052818161192051099050806122c052818161196051099050806122e05281816119a051099050806123005281816119e05109905080612320528181611a205109905080612340528181611a605109905080612360528181611aa05109905080612380528181611ae051099050806123a0528181611b2051099050806123c0528181611b6051099050806123e0528181611ba05109905080612400528181611be05109905080612420528181611c205109905080612440528181611c605109905080612460528181611ca05109905080612480528181611ce051099050806124a0528181611d2051099050806124c0528181611d6051099050806124e0528181611da05109905080612500528181611de05109905080612520528181611e205109905080612540528181611e605109905080612560528181611ea05109905080612580528181611ee051099050806125a0528181611f2051099050806125c0528181611f6051099050806125e052818161120051099050806126005250602061264052602061266052602061268052612600516126a0527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff6126c0527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016126e052826001602061262060c061264060055afa1416925061262051600061120051905082826125e0510961120052828282099150611f6051905082826125c05109611f6052828282099150611f2051905082826125a05109611f2052828282099150611ee051905082826125805109611ee052828282099150611ea051905082826125605109611ea052828282099150611e6051905082826125405109611e6052828282099150611e2051905082826125205109611e2052828282099150611de051905082826125005109611de052828282099150611da051905082826124e05109611da052828282099150611d6051905082826124c05109611d6052828282099150611d2051905082826124a05109611d2052828282099150611ce051905082826124805109611ce052828282099150611ca051905082826124605109611ca052828282099150611c6051905082826124405109611c6052828282099150611c2051905082826124205109611c2052828282099150611be051905082826124005109611be052828282099150611ba051905082826123e05109611ba052828282099150611b6051905082826123c05109611b6052828282099150611b2051905082826123a05109611b2052828282099150611ae051905082826123805109611ae052828282099150611aa051905082826123605109611aa052828282099150611a6051905082826123405109611a6052828282099150611a2051905082826123205109611a20528282820991506119e0519050828261230051096119e0528282820991506119a051905082826122e051096119a05282828209915061196051905082826122c051096119605282828209915061192051905082826122a05109611920528282820991506118e0519050828261228051096118e0528282820991506118a0519050828261226051096118a052828282099150611860519050828261224051096118605282828209915061182051905082826122205109611820528282820991506117e0519050828261220051096117e0528282820991506117a051905082826121e051096117a05282828209915061176051905082826121c051096117605282828209915061172051905082826121a05109611720528282820991506116e0519050828261218051096116e0528282820991506116a0519050828261216051096116a052828282099150611660519050828261214051096116605282828209915061162051905082826121205109611620528282820991506115e0519050828261210051096115e0528282820991506115a051905082826120e051096115a05282828209915061156051905082826120c051096115605282828209915061152051905082826120a05109611520528282820991506114e0519050828261208051096114e0528282820991506114a0519050828261206051096114a052828282099150611460519050828261204051096114605282828209915061142051905082826120205109611420528282820991506113e0519050828261200051096113e0528282820991506113a05190508282611fe051096113a0528282820991506113605190508282611fc05109611360528282820991506113205190508282611fa05109611320528282820991506112e05190508282611f8051096112e0528282820991506112a0519050828261126051096112a052828282099150816112605250508061126051611240510961270052806112a051611280510961272052806112e0516112c051096127405280611320516113005109612760528061136051611340510961278052806113a05161138051096127a052806113e0516113c051096127c052806114205161140051096127e0528061146051611440510961280052806114a051611480510961282052806114e0516114c051096128405280611520516115005109612860528061156051611540510961288052806115a05161158051096128a052806115e0516115c051096128c052806116205161160051096128e0528061166051611640510961290052806116a051611680510961292052806116e0516116c051096129405280611720516117005109612960528061176051611740510961298052806117a05161178051096129a052806117e0516117c051096129c052806118205161180051096129e05280611860516118405109612a0052806118a0516118805109612a2052806118e0516118c05109612a405280611920516119005109612a605280611960516119405109612a8052806119a0516119805109612aa052806119e0516119c05109612ac05280611a2051611a005109612ae05280611a6051611a405109612b005280611aa051611a805109612b205280611ae051611ac05109612b405280611b2051611b005109612b605280611b6051611b405109612b805280611ba051611b805109612ba05280611be051611bc05109612bc05280611c2051611c005109612be05280611c6051611c405109612c005280611ca051611c805109612c205280611ce051611cc05109612c405280611d2051611d005109612c605280611d6051611d405109612c805280611da051611d805109612ca05280611de051611dc05109612cc05280611e2051611e005109612ce05280611e6051611e405109612d005280611ea051611e805109612d205280611ee051611ec05109612d405280611f2051611f005109612d605280611f6051611f405109612d80528060a0516127e0510981818360c051612800510908905081818360e0516128205109089050818183610100516128405109089050818183610120516128605109089050818183610140516128805109089050818183610160516128a05109089050818183610180516128c051090890508181836101a0516128e051090890508181836101c05161290051090890508181836101e0516129205109089050818183610200516129405109089050818183610220516129605109089050818183610240516129805109089050818183610260516129a05109089050818183610280516129c051090890508181836102a0516129e051090890508181836102c051612a0051090890508181836102e051612a20510908905081818361030051612a40510908905081818361032051612a60510908905081818361034051612a80510908905081818361036051612aa0510908905081818361038051612ac051090890508181836103a051612ae051090890508181836103c051612b0051090890508181836103e051612b20510908905081818361040051612b40510908905081818361042051612b60510908905081818361044051612b80510908905081818361046051612ba0510908905081818361048051612bc051090890508181836104a051612be051090890508181836104c051612c0051090890508181836104e051612c20510908905081818361050051612c40510908905081818361052051612c60510908905081818361054051612c80510908905081818361056051612ca0510908905081818361058051612cc051090890508181836105a051612ce051090890508181836105c051612d0051090890508181836105e051612d20510908905081818361060051612d40510908905081818361062051612d60510908905081818361064051612d80510908905080612da0525080610ae051610b005109612dc05280612dc051610ac05108612de05280610b20518203612de05108612e005280610b8051612e005109612e205280612e20516109205109612e405280610c40518203600108612e6052806127e051612e605109612e805280612e8051612e405108612ea05280612ea0516109205109612ec05280610c4051610c405109612ee05280610c40518203612ee05108612f00528061270051612f005109612f205280612f2051612ec05108612f405280612f40516109205109612f605280612700518203600108612f805280612740516127205108612fa0528061276051612fa05108612fc0528061278051612fc05108612fe052806127a051612fe0510861300052806127c05161300051086130205280613020518203612f80510861304052806107a051610be05109613060528061306051610b40510861308052806108005161308051086130a052806107a051610c0051096130c052806130c051610ac051086130e05280610800516130e0510861310052806130a051613100510961312052806107a051610c205109613140528061314051612da05108613160528061080051613160510861318052806131205161318051096131a05280610c60516131a051096131c052806107a0516001096131e052806131e051610a805109613200528061320051610b405108613220528061080051613220510861324052806107a0517f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a209613260528061326051610a805109613280528061328051610ac051086132a05280610800516132a051086132c05280613240516132c051096132e052806107a0517f13b360d4e82fe915fed16081038f98c211427b87a281bd733c277dbadf10372b09613300528061330051610a805109613320528061332051612da05108613340528061080051613340510861336052806132e05161336051096133805280610c405161338051096133a052806133a05182036131c051086133c05280613040516133c051096133e052806133e051612f60510861340052806134005161092051096134205280610c8051820360010861344052806127e0516134405109613460528061346051613420510861348052806134805161092051096134a05280610c8051610c8051096134c05280610c805182036134c051086134e05280612700516134e051096135005280613500516134a05108613520528061352051610920510961354052806107a051610cc051086135605280610ca0516135605109613580528061080051610d0051086135a05280613580516135a051096135c05280610ba051610ac051096135e052806107a0516135e051086136005280610c80516136005109613620528061080051610b605108613640528061362051613640510961366052806136605182036135c0510861368052806130405161368051096136a052806136a05161354051086136c052806136c05161092051096136e05280610d00518203610cc0510861370052806127e05161370051096137205280613720516136e05108613740528061374051610920510961376052806130405161370051096137805280610ce0518203610cc051086137a05280613780516137a051096137c052806137c05161376051086137e052806111e0516111e0510961380052806111e051613800510961382052806111e051613820510961384052806111e0516001096138605280613800516001096138805280613820516001096138a05280611200516137e051096138c05280610a8051610f4051096138e05280610a80516138e0510961390052807f134f571fe34eb8c7b1685e875b324820e199bd70157493377cd65b204d1a3964610a8051096139205280613920518203610e40510861394052806001610a8051096139605280613960518203610e40510861398052807f18c95f1ae6514e11a1b30fd7923947c5ffcec5347f16e91b4dd654168326bede610a8051096139a052806139a0518203610e4051086139c052807f032750f8f3c2493d0828c7285d0258e1bdcaa463f4442a52747b5c96639659bb610a8051096139e052806139e0518203610e405108613a0052807f1be6734ccb6588d60d469def6bf0b0f39af67bb568a3b63e3773e3dd306ba070610a805109613a205280613a20518203610e405108613a4052806138e0517f07d604303a7bed3ecd3bcf9f68948bd11d7cfb83623e03c3d41fd2e7dc3c699109613a6052806001613a605109613a805280613a6051610e405109818183613a80518503610a80510908905080613aa05250806138e0517f0888e470b16311ed8fe253a4ea4c86161e449ca748456e7e35c5e51c92b691b909613ac052807f18c95f1ae6514e11a1b30fd7923947c5ffcec5347f16e91b4dd654168326bede613ac05109613ae05280613ac051610e405109818183613ae0518503610a80510908905080613b005250806138e0517f2fcabb9b6c70a7190da3d756fc7c6c21f286a22d2029c27d5ebffb1638ea8d6f09613b2052807f032750f8f3c2493d0828c7285d0258e1bdcaa463f4442a52747b5c96639659bb613b205109613b405280613b2051610e405109818183613b40518503610a80510908905080613b605250806138e0517f071875f8c967190753f4712b28f4bf6278328c0809585ee0629d98255557240f09613b8052807f1be6734ccb6588d60d469def6bf0b0f39af67bb568a3b63e3773e3dd306ba070613b805109613ba05280613b8051610e405109818183613ba0518503610a80510908905080613bc052508061398051600109613be052806139c051613be05109613c005280613a0051613c005109613c205280613a4051613c205109613c405280610a80517f179aef57fae05218169d35deef48109728652313faa28775f60ba17d6cd9412409613c6052806001613c605109613c805280613c6051610e405109818183613c80518503610a80510908905080613ca0525080610a80517f18c95f1ae6514e11a1b30fd7923947c5ffcec5347f16e91b4dd654168326bedd09613cc052807f18c95f1ae6514e11a1b30fd7923947c5ffcec5347f16e91b4dd654168326bede613cc05109613ce05280613cc051610e405109818183613ce0518503610a80510908905080613d00525080610a80517f1d14f752fde2e76206e7e72f264f103c469a2ad86444dd59c70b9a73a2e5c69e09613d2052806001613d205109613d405280613d2051610e405109818183613d40518503610a80510908905080613d60525080610a80517f134f571fe34eb8c7b1685e875b324820e199bd70157493377cd65b204d1a396309613d8052807f134f571fe34eb8c7b1685e875b324820e199bd70157493377cd65b204d1a3964613d805109613da05280613d8051610e405109818183613da0518503610a80510908905080613dc052508061394051613be05109613de052806001610e4051098181837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000610a80510908905080613e005250613aa0518181613b005109905080613e20528181613b605109905080613e40528181613bc05109905080613e60528181613ca05109905080613e80528181613d005109905080613ea0528181613c005109905080613ec0528181613d605109905080613ee0528181613dc05109905080613f00528181613de05109905080613f20528181613e005109905080613f40528181613be05109905080613f6052506020613fa0526020613fc0526020613fe052613f6051614000527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff614020527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001614040528260016020613f8060c0613fa060055afa14169250613f80516000613be05190508282613f405109613be052828282099150613e005190508282613f205109613e0052828282099150613de05190508282613f005109613de052828282099150613dc05190508282613ee05109613dc052828282099150613d605190508282613ec05109613d6052828282099150613c005190508282613ea05109613c0052828282099150613d005190508282613e805109613d0052828282099150613ca05190508282613e605109613ca052828282099150613bc05190508282613e405109613bc052828282099150613b605190508282613e205109613b6052828282099150613b005190508282613aa05109613b005282828209915081613aa0525050613aa0518181613b00510890508181613b60510890508181613bc05108905080614060525080613c0051613c40510961408052613ca0518181613d0051089050806140a0525080613de051613c4051096140c052613d60518181613dc051089050806140e0525080613be051613c40510961410052613e00518061412052506140605181816140a051099050806141405281816140e051099050806141605281816141205109905080614180525060206141c05260206141e05260206142005261418051614220527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff614240527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016142605282600160206141a060c06141c060055afa141692506141a051600061412051905082826141605109614120528282820991506140e0519050828261414051096140e0528282820991506140a0519050828261406051096140a05282828209915081614060525050806140a051614080510961428052806140e0516140c051096142a052806141205161410051096142c05280610d4051610d4051096142e05280610d40516142e051096143005280610d405161430051096143205280610d405161432051096143405280610d405161434051096143605280610d405161436051096143805280610d405161438051096143a05280610d40516143a051096143c05280610d40516143c051096143e05280610da051610da051096144005280610da05161440051096144205280610da05161442051096144405280613aa051610ac05109818183613b0051610ae05109089050818183613b6051610b005109089050818183613bc051610b2051090890508061446052508061406051614460510961448052806001614480518303096144a0528060016144a051096144c05280614080516001096144e05280613ca051610c405109818183613d0051610c605109089050806145005250806142805161450051096145205280600161452051830309614540528060016144e051096145605280613ca051610c805109818183613d0051610ca05109089050806145805250806142805161458051096145a05280610d40516145a0518303096145c05280610d40516144e051096145e052806145c05161454051086146005280610da05161460051096146205280610da05161456051096146405280610da0516145e051096146605280614620516144c0510861468052806140c0516001096146a05280613d6051610cc05109818183613dc051610ce05109089050806146c05250806142a0516146c051096146e0528060016146e051830309614700528060016146a051096147205280614400516147005109614740528061440051614720510961476052806147405161468051086147805280614100516001096147a05280613e0051610d005109806147c05250806142c0516147c051096147e0528060016147e051830309614800528060016147a051096148205280613e0051610b405109806148405250806142c05161484051096148605280610d4051614860518303096148805280610d40516147a051096148a052806148805161480051086148c05280613e0051610b605109806148e05250806142c0516148e0510961490052806142e0516149005183030961492052806142e0516147a051096149405280614920516148c051086149605280613e0051610b805109806149805250806142c05161498051096149a05280614300516149a0518303096149c05280614300516147a051096149e052806149c0516149605108614a005280613e0051610ba0510980614a205250806142c051614a205109614a40528061432051614a4051830309614a605280614320516147a05109614a805280614a6051614a005108614aa05280613e0051610be0510980614ac05250806142c051614ac05109614ae0528061434051614ae051830309614b005280614340516147a05109614b205280614b0051614aa05108614b405280613e0051610c00510980614b605250806142c051614b605109614b80528061436051614b8051830309614ba05280614360516147a05109614bc05280614ba051614b405108614be05280613e0051610c20510980614c005250806142c051614c005109614c20528061438051614c2051830309614c405280614380516147a05109614c605280614c4051614be05108614c805280614100516138605109614ca05280614100516138805109614cc05280614100516138a05109614ce05280613e00516138c0510980614d005250806142c051614d005109614d2052806143a051614d2051830309614d4052806143a0516147a05109614d6052806143a051614ca05109614d8052806143a051614cc05109614da052806143a051614ce05109614dc05280614d4051614c805108614de05280613e0051610bc0510980614e005250806142c051614e005109614e2052806143c051614e2051830309614e4052806143c0516147a05109614e605280614e4051614de05108614e80528061442051614e805109614ea05280614420516148205109614ec05280614420516148a05109614ee05280614420516149405109614f005280614420516149e05109614f20528061442051614a805109614f40528061442051614b205109614f60528061442051614bc05109614f80528061442051614c605109614fa0528061442051614d605109614fc0528061442051614d805109614fe0528061442051614da05109615000528061442051614dc05109615020528061442051614e6051096150405280614ea05161478051086150605280613c40516001096150805280610e40516001096150a05260016150c05260026150e052615060516151005282600160406150c060606150c060075afa141692506150c051615120526150e05161514052610660516151605261068051615180528260016040615120608061512060065afa14169250610840516151a052610860516151c052614640516151e05282600160406151a060606151a060075afa14169250615120516152005261514051615220526151a051615240526151c051615260528260016040615200608061520060065afa1416925061088051615280526108a0516152a052614660516152c0528260016040615280606061528060075afa14169250615200516152e052615220516153005261528051615320526152a0516153405282600160406152e060806152e060065afa1416925061070051615360526107205161538052614760516153a0528260016040615360606061536060075afa141692506152e0516153c052615300516153e0526153605161540052615380516154205282600160406153c060806153c060065afa1416925061074051615440526107605161546052614ec051615480528260016040615440606061544060075afa141692506153c0516154a0526153e0516154c052615440516154e052615460516155005282600160406154a060806154a060065afa141692507f1701d83c9ad410f3d61886c39b7b8a618f42219a1404264208f838c1672b8e71615520527f0868e69339d5d3bbd747b6e7772a9760a7277c0993a420c2848808b15de0424c61554052614ee051615560528260016040615520606061552060075afa141692506154a051615580526154c0516155a052615520516155c052615540516155e0528260016040615580608061558060065afa141692507f21c6ea7d6dbcd767ffb9d9beeb4f9c2f8243bc65290f2d75a59aea4f65ba8f3d615600527f24d0a0acb031c9a5687da08cdaf96650aae5c60435739bda8bbd574eb962622c61562052614f0051615640528260016040615600606061560060075afa1416925061558051615660526155a05161568052615600516156a052615620516156c0528260016040615660608061566060065afa141692507f289feda4952fe4464c9716d071e291bbecdcd5432356042dc79b76ed38cbbb0d6156e0527f07f3ca14a8801fa413462ad72ea448da5d7cf8c5218534cdc39bb23779b70bb961570052614f20516157205282600160406156e060606156e060075afa14169250615660516157405261568051615760526156e05161578052615700516157a0528260016040615740608061574060065afa141692507f259670bd2f2f6fce3b18100f92a2e59874da3b66a9ddd61e163eb4b071e24a976157c0527f097f07272f7ca89070ad9c06d9a3da1bb6e91d0e69bf7872f44cc5d332291eb56157e052614f40516158005282600160406157c060606157c060075afa14169250615740516158205261576051615840526157c051615860526157e051615880528260016040615820608061582060065afa141692507f26eaa658ef237183330c716cf9d5d978d8618788db2551142e1a9af837ecc8106158a0527f1fa793c6b0f3df4a8a1017daa531a45fdfa8b5da433308f71716565f8b85aa7d6158c052614f60516158e05282600160406158a060606158a060075afa14169250615820516159005261584051615920526158a051615940526158c051615960528260016040615900608061590060065afa141692507f186694283d847cec7609ca9b642f46fc751a61e3ac330841cdf6a938a3439c02615980527f16eb0141342ab5f9ca76fcaef38c222f51dd1afd5d45943e3676ba0c2ceb4f6d6159a052614f80516159c0528260016040615980606061598060075afa14169250615900516159e05261592051615a005261598051615a20526159a051615a405282600160406159e060806159e060065afa141692507f0f76818adad3c635f139fde306f33aba7249952bdbbf72cf477a51f9d84f3ccc615a60527f23f89f9896b1cc39de92659098ea839186ff2e997ffa3413c1a7af4f31abe4ce615a8052614fa051615aa0528260016040615a606060615a6060075afa141692506159e051615ac052615a0051615ae052615a6051615b0052615a8051615b20528260016040615ac06080615ac060065afa1416925061096051615b405261098051615b6052614fc051615b80528260016040615b406060615b4060075afa14169250615ac051615ba052615ae051615bc052615b4051615be052615b6051615c00528260016040615ba06080615ba060065afa141692506109a051615c20526109c051615c4052614fe051615c60528260016040615c206060615c2060075afa14169250615ba051615c8052615bc051615ca052615c2051615cc052615c4051615ce0528260016040615c806080615c8060065afa141692506109e051615d0052610a0051615d205261500051615d40528260016040615d006060615d0060075afa14169250615c8051615d6052615ca051615d8052615d0051615da052615d2051615dc0528260016040615d606080615d6060065afa14169250610a2051615de052610a4051615e005261502051615e20528260016040615de06060615de060075afa14169250615d6051615e4052615d8051615e6052615de051615e8052615e0051615ea0528260016040615e406080615e4060065afa141692506108c051615ec0526108e051615ee05261504051615f00528260016040615ec06060615ec060075afa14169250615e4051615f2052615e6051615f4052615ec051615f6052615ee051615f80528260016040615f206080615f2060065afa14169250610de051615fa052610e0051615fc052615080518103615fe0528260016040615fa06060615fa060075afa14169250615f205161600052615f405161602052615fa05161604052615fc051616060528260016040616000608061600060065afa14169250610e805161608052610ea0516160a0526150a0516160c0528260016040616080606061608060075afa14169250616000516160e052616020516161005261608051616120526160a0516161405282600160406160e060806160e060065afa141692506160e051616160526161005161618052610e80516161a052610ea0516161c052610ec0516161e052610ee05161620052610f005161622052610f205161624052610100616160206162605280616260510661628052806162805161628051096162a05280616280516001096162c0526161e0516162e05261620051616300526162c0516163205282600160406162e060606162e060075afa14169250616160516163405261618051616360526162e05161638052616300516163a0528260016040616340608061634060065afa14169250616220516163c052616240516163e0526162c0516164005282600160406163c060606163c060075afa141692506161a051616420526161c051616440526163c051616460526163e051616480528260016040616420608061642060065afa14169250616340516164a052616360516164c0527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26164e0527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed616500527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b616520527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa61654052616420516165605261644051616580527f172aa93c41f16e1e04d62ac976a5d945f4be0acab990c6dc19ac4a7cf68bf77b6165a0527f2ae0c8c3a090f7200ff398ee9845bbae8f8c1445ae7b632212775f60a0e216006165c0527f190fa476a5b352809ed41d7a0d7fe12b8f685e3c12a6d83855dba27aaf4696436165e0527f1c0a500618907df9e4273d5181e31088deb1f05132de037cbfe73888f97f77c96166005282600160206164a06101806164a060085afa141692508260016164a051141692508261480757600080fd5b600080f3fea264697066735822122026e891e5d925cf339bec37559839722b8fe67c5fbcb9bf916360d10c4212867164736f6c63430008130033"; diff --git a/scripts/deterministic/DeployScroll.s.sol b/scripts/deterministic/DeployScroll.s.sol index feb15e61..45355056 100644 --- a/scripts/deterministic/DeployScroll.s.sol +++ b/scripts/deterministic/DeployScroll.s.sol @@ -471,7 +471,7 @@ contract DeployScroll is DeterministicDeployment { } function deployL1ZkEvmVerifier() private { - bytes memory args = abi.encode(notnull(L1_PLONK_VERIFIER_ADDR), V4_VERIFIER_DIGEST); + bytes memory args = abi.encode(notnull(L1_PLONK_VERIFIER_ADDR), VERIFIER_DIGEST); L1_ZKEVM_VERIFIER_V2_ADDR = deploy("L1_ZKEVM_VERIFIER_V2", type(ZkEvmVerifierV2).creationCode, args); } From b6fcc41b487884c0fd2fbe5ed3029668daaeb609 Mon Sep 17 00:00:00 2001 From: Morty Date: Mon, 21 Apr 2025 17:50:32 +0800 Subject: [PATCH 19/31] feat: remove bridge history config --- scripts/deterministic/shell/update-configs.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/scripts/deterministic/shell/update-configs.sh b/scripts/deterministic/shell/update-configs.sh index 87e91b0e..ee0fbc2e 100755 --- a/scripts/deterministic/shell/update-configs.sh +++ b/scripts/deterministic/shell/update-configs.sh @@ -16,13 +16,13 @@ echo "" echo "updating coordinator-config.yaml" forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateCoordinatorConfig || exit 1 -echo "" -echo "updating chain-monitor-config.yaml" -forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateChainMonitorConfig || exit 1 +# echo "" +# echo "updating chain-monitor-config.yaml" +# forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateChainMonitorConfig || exit 1 -echo "" -echo "updating bridge-history-config.yaml" -forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateBridgeHistoryConfig || exit 1 +# echo "" +# echo "updating bridge-history-config.yaml" +# forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateBridgeHistoryConfig || exit 1 echo "" echo "updating balance-checker-config.yaml" From 97c7f4fd6ac4cfa88ee3dece29d87e39c3f6f819 Mon Sep 17 00:00:00 2001 From: Morty Date: Mon, 21 Apr 2025 17:54:23 +0800 Subject: [PATCH 20/31] rename genesis.json --- scripts/deterministic/Constants.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/deterministic/Constants.sol b/scripts/deterministic/Constants.sol index 437fefc0..937d09db 100644 --- a/scripts/deterministic/Constants.sol +++ b/scripts/deterministic/Constants.sol @@ -17,7 +17,7 @@ string constant CONFIG_PATH = "./scripts/deterministic/config/config.toml"; // output files string constant CONFIG_CONTRACTS_PATH = "./scripts/deterministic/config/config-contracts.toml"; string constant GENESIS_ALLOC_JSON_PATH = "../../config/__genesis-alloc.json"; -string constant GENESIS_JSON_PATH = "../../config/genesis/genesis.json"; +string constant GENESIS_JSON_PATH = "../../config/genesis/config.json.template"; string constant ROLLUP_CONFIG_PATH = "../../config/rollup-relayer/config.json.template"; string constant GAS_ORACLE_CONFIG_PATH = "../../config/rollup-relayer/config.json.template"; string constant COORDINATOR_API_CONFIG_PATH = "../../config/coordinator-api/config.json.template"; From 6ee59bc5d3526a1f3ae10994c7df1e81453f8b8d Mon Sep 17 00:00:00 2001 From: Morty Date: Mon, 21 Apr 2025 17:57:56 +0800 Subject: [PATCH 21/31] rm balance checker --- scripts/deterministic/shell/update-configs.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/deterministic/shell/update-configs.sh b/scripts/deterministic/shell/update-configs.sh index ee0fbc2e..07ed9c9c 100755 --- a/scripts/deterministic/shell/update-configs.sh +++ b/scripts/deterministic/shell/update-configs.sh @@ -24,6 +24,6 @@ forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateCoordinatorConf # echo "updating bridge-history-config.yaml" # forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateBridgeHistoryConfig || exit 1 -echo "" -echo "updating balance-checker-config.yaml" -forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateBalanceCheckerConfig || exit 1 \ No newline at end of file +# echo "" +# echo "updating balance-checker-config.yaml" +# forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateBalanceCheckerConfig || exit 1 \ No newline at end of file From 355de0ced36c1099f6616eb1f010e79c94b159be Mon Sep 17 00:00:00 2001 From: Morty Date: Mon, 21 Apr 2025 18:11:25 +0800 Subject: [PATCH 22/31] fix: generate genesis --- scripts/deterministic/GenerateGenesis.s.sol | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/scripts/deterministic/GenerateGenesis.s.sol b/scripts/deterministic/GenerateGenesis.s.sol index 63dcfcb6..588969a0 100644 --- a/scripts/deterministic/GenerateGenesis.s.sol +++ b/scripts/deterministic/GenerateGenesis.s.sol @@ -222,11 +222,23 @@ contract GenerateGenesis is DeployScroll { vm.writeJson(l1ChainId, GENESIS_JSON_PATH, ".config.scroll.l1Config.l1ChainId"); vm.writeJson( - vm.toString(L1_MESSAGE_QUEUE_V2_PROXY_ADDR), + vm.toString(SYSTEM_CONFIG_PROXY_ADDR), + GENESIS_JSON_PATH, + ".config.systemContract.system_contract_address" + ); + + vm.writeJson( + vm.toString(L1_MESSAGE_QUEUE_V1_PROXY_ADDR), GENESIS_JSON_PATH, ".config.scroll.l1Config.l1MessageQueueAddress" ); + vm.writeJson( + vm.toString(L1_MESSAGE_QUEUE_V2_PROXY_ADDR), + GENESIS_JSON_PATH, + ".config.scroll.l1Config.l1MessageQueueV2Address" + ); + vm.writeJson( vm.toString(L1_SCROLL_CHAIN_PROXY_ADDR), GENESIS_JSON_PATH, From 1268104bb6bb6b22987e1cc101d6e90fb07208c9 Mon Sep 17 00:00:00 2001 From: Morty Date: Mon, 21 Apr 2025 18:43:58 +0800 Subject: [PATCH 23/31] feat: init system config --- scripts/deterministic/DeployScroll.s.sol | 21 +++++++++++++++++++++ scripts/deterministic/config/config.toml | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/scripts/deterministic/DeployScroll.s.sol b/scripts/deterministic/DeployScroll.s.sol index 45355056..989fe134 100644 --- a/scripts/deterministic/DeployScroll.s.sol +++ b/scripts/deterministic/DeployScroll.s.sol @@ -348,6 +348,7 @@ contract DeployScroll is DeterministicDeployment { // @notice initializeL1Contracts initializes contracts deployed on L1. function initializeL1Contracts() private broadcast(Layer.L1) only(Layer.L1) { initializeScrollChain(); + initializeSystemConfig(); initializeL1MessageQueue(); initializeL1ScrollMessenger(); initializeEnforcedTxGateway(); @@ -1100,6 +1101,26 @@ contract DeployScroll is DeterministicDeployment { } } + function initializeSystemConfig() private { + address owner = L1_PROXY_ADMIN_ADDR; + address signer = address(0xe0553E076c1a838153f32BDb57cf09125D06cb98); + SystemConfig.MessageQueueParameters memory messageQueueParameters = SystemConfig.MessageQueueParameters({ + maxGasLimit: uint32(MAX_L1_MESSAGE_GAS_LIMIT), + baseFeeOverhead: 0, + baseFeeScalar: 0 + }); + SystemConfig.EnforcedBatchParameters memory enforcedBatchParameters = SystemConfig.EnforcedBatchParameters({ + maxDelayEnterEnforcedMode: 0, + maxDelayMessageQueue: 0 + }); + SystemConfig(SYSTEM_CONFIG_PROXY_ADDR).initialize( + owner, + signer, + messageQueueParameters, + enforcedBatchParameters + ); + } + function initializeL1MessageQueue() private { if (getInitializeCount(L1_MESSAGE_QUEUE_V2_PROXY_ADDR) == 0) { L1MessageQueueV2(L1_MESSAGE_QUEUE_V2_PROXY_ADDR).initialize(); diff --git a/scripts/deterministic/config/config.toml b/scripts/deterministic/config/config.toml index 846f759d..91421bba 100644 --- a/scripts/deterministic/config/config.toml +++ b/scripts/deterministic/config/config.toml @@ -29,7 +29,7 @@ L2_GAS_ORACLE_SENDER_ADDR = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" L2GETH_SIGNER_ADDRESS = "0x756EA06BDEe36de11F22DCca45a31d8a178eF3c6" L2GETH_KEYSTORE = '{"address":"756ea06bdee36de11f22dcca45a31d8a178ef3c6","crypto":{"cipher":"aes-128-ctr","ciphertext":"8bfb4e48c6b172f1f5794d2874476ca62f8184507c0916dbd45fe77a0056114c","cipherparams":{"iv":"509eb70e7379a776e0779634b6668277"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"ef0f0334e5db7c12d76993e1e9627593fd0d7cd44444b689e792c86bc8a5d75f"},"mac":"d766cac11d0bd563316f5655ebf07550b6fce98ba0ca3c13acdc1b65f5f185ca"},"id":"4459ad67-f2ce-48b2-8940-c0582106a4c6","version":3}' L2GETH_PASSWORD = "scroll2022" -L2GETH_NODEKEY = "2f59ff2fdee1c42a3d8c8980c313bc8d6c2557463f7bb92b0f0bc89a6d3cbf01" +L2GETH_NODEKEY = "2f59ff2fdee1c42a3d8c8980c313bc8fd6c2557463f7bb92b0f0bc89a6d3cbf01" L2_GETH_STATIC_PEERS = '["enode://848a7d59dd8f60dd1a51160e6bc15c194937855443de9be4b2abd83e11a5c4ac21d61d065448c5c520826fe83f1f29eb5a452daccca27b8113aa897074132507@l2-sequencer:30303"]' [rollup] From 320d2c4d463b468767c15439b2291be7a2dcc7f9 Mon Sep 17 00:00:00 2001 From: Morty Date: Mon, 21 Apr 2025 18:53:24 +0800 Subject: [PATCH 24/31] feat: reset config file paths --- scripts/deterministic/Constants.sol | 36 ++++++++++++------- scripts/deterministic/GenerateConfigs.s.sol | 40 +++++++++++++++++++++ scripts/deterministic/GenerateGenesis.s.sol | 8 +++++ 3 files changed, 71 insertions(+), 13 deletions(-) diff --git a/scripts/deterministic/Constants.sol b/scripts/deterministic/Constants.sol index 937d09db..d5a3dbc6 100644 --- a/scripts/deterministic/Constants.sol +++ b/scripts/deterministic/Constants.sol @@ -14,21 +14,31 @@ uint256 constant FEE_VAULT_MIN_WITHDRAW_AMOUNT = 1 ether; // input files string constant CONFIG_PATH = "./scripts/deterministic/config/config.toml"; +// template files +string constant CONFIG_CONTRACTS_TEMPLATE_PATH = "./docker/templates/config-contracts.toml"; +string constant GENESIS_JSON_TEMPLATE_PATH = "../../config/genesis/config.json.template"; +string constant ROLLUP_CONFIG_TEMPLATE_PATH = "../../config/rollup-relayer/config.json.template"; +string constant COORDINATOR_CONFIG_TEMPLATE_PATH = "../../config/coordinator-api/config.json.template"; +string constant CHAIN_MONITOR_CONFIG_TEMPLATE_PATH = "../../config/chain-monitorv2/config.json.template"; +string constant BRIDGE_HISTORY_CONFIG_TEMPLATE_PATH = "../../config/bridge-historyv2-fetcher/config.json.template"; +string constant BALANCE_CHECKER_CONFIG_TEMPLATE_PATH = "../../config/balance-checker/config.json.template"; +string constant ROLLUP_EXPLORER_BACKEND_CONFIG_TEMPLATE_PATH = "../../config/rollup-explorer-backend/config.json.template"; +string constant ADMIN_SYSTEM_BACKEND_CONFIG_TEMPLATE_PATH = "../../config/scroll-admin-backend/config.json.template"; + // output files -string constant CONFIG_CONTRACTS_PATH = "./scripts/deterministic/config/config-contracts.toml"; string constant GENESIS_ALLOC_JSON_PATH = "../../config/__genesis-alloc.json"; -string constant GENESIS_JSON_PATH = "../../config/genesis/config.json.template"; -string constant ROLLUP_CONFIG_PATH = "../../config/rollup-relayer/config.json.template"; -string constant GAS_ORACLE_CONFIG_PATH = "../../config/rollup-relayer/config.json.template"; -string constant COORDINATOR_API_CONFIG_PATH = "../../config/coordinator-api/config.json.template"; -string constant COORDINATOR_CRON_CONFIG_PATH = "../../config/coordinator-cron/config.json.template"; -string constant CHAIN_MONITOR_CONFIG_PATH = "../../config/chain-monitorv2/config.json.template"; -string constant BRIDGE_HISTORY_API_CONFIG_PATH = "../../config/bridge-historyv2-api/config.json.template"; -string constant BRIDGE_HISTORY_FETCHER_CONFIG_PATH = "../../config/bridge-historyv2-fetcher/config.json.template"; -string constant BALANCE_CHECKER_CONFIG_PATH = "../../config/balance-checker/config.json.template"; -string constant ROLLUP_EXPLORER_BACKEND_CONFIG_PATH = "../../config/rollup-explorer-backend/config.json.template"; -string constant ADMIN_SYSTEM_BACKEND_CONFIG_PATH = "../../config/scroll-admin-backend/config.json.template"; -string constant ADMIN_SYSTEM_CRON_CONFIG_PATH = "../../config/scroll-admin-cron/config.json.template"; +string constant GENESIS_JSON_PATH = "../../config/genesis/config.json"; +string constant ROLLUP_CONFIG_PATH = "../../config/rollup-relayer/config.json"; +string constant GAS_ORACLE_CONFIG_PATH = "../../config/rollup-relayer/config.json"; +string constant COORDINATOR_API_CONFIG_PATH = "../../config/coordinator-api/config.json"; +string constant COORDINATOR_CRON_CONFIG_PATH = "../../config/coordinator-cron/config.json"; +string constant CHAIN_MONITOR_CONFIG_PATH = "../../config/chain-monitorv2/config.json"; +string constant BRIDGE_HISTORY_API_CONFIG_PATH = "../../config/bridge-historyv2-api/config.json"; +string constant BRIDGE_HISTORY_FETCHER_CONFIG_PATH = "../../config/bridge-historyv2-fetcher/config.json"; +string constant BALANCE_CHECKER_CONFIG_PATH = "../../config/balance-checker/config.json"; +string constant ROLLUP_EXPLORER_BACKEND_CONFIG_PATH = "../../config/rollup-explorer-backend/config.json"; +string constant ADMIN_SYSTEM_BACKEND_CONFIG_PATH = "../../config/scroll-admin-backend/config.json"; +string constant ADMIN_SYSTEM_CRON_CONFIG_PATH = "../../config/scroll-admin-cron/config.json"; // verifier 0.2.0 VERIFIER_DIGEST // https://circuit-release.s3.us-west-2.amazonaws.com/scroll-zkvm/releases/0.2.0/bundle/digest_2.hex diff --git a/scripts/deterministic/GenerateConfigs.s.sol b/scripts/deterministic/GenerateConfigs.s.sol index d0cd527f..ea0723f7 100644 --- a/scripts/deterministic/GenerateConfigs.s.sol +++ b/scripts/deterministic/GenerateConfigs.s.sol @@ -28,6 +28,14 @@ contract GenerateRollupConfig is DeployScroll { // prettier-ignore function generateRollupConfig(string memory PATH) private { + // initialize template file + if (vm.exists(PATH)) { + vm.removeFile(PATH); + } + + string memory template = vm.readFile(ROLLUP_CONFIG_TEMPLATE_PATH); + vm.writeFile(PATH, template); + // contracts vm.writeJson(vm.toString(L1_GAS_PRICE_ORACLE_ADDR), PATH, ".l1_config.relayer_config.gas_price_oracle_contract_address"); vm.writeJson(vm.toString(L2_MESSAGE_QUEUE_ADDR), PATH, ".l2_config.l2_message_queue_address"); @@ -63,6 +71,14 @@ contract GenerateCoordinatorConfig is DeployScroll { *********************/ function generateCoordinatorConfig(string memory PATH) private { + // initialize template file + if (vm.exists(PATH)) { + vm.removeFile(PATH); + } + + string memory template = vm.readFile(COORDINATOR_CONFIG_TEMPLATE_PATH); + vm.writeFile(PATH, template); + // coordinator api vm.writeJson(CHUNK_COLLECTION_TIME_SEC, PATH, ".prover_manager.chunk_collection_time_sec"); vm.writeJson(BATCH_COLLECTION_TIME_SEC, PATH, ".prover_manager.batch_collection_time_sec"); @@ -97,6 +113,14 @@ contract GenerateChainMonitorConfig is DeployScroll { // prettier-ignore function generateChainMonitorConfig(string memory PATH) private { + // initialize template file + if (vm.exists(PATH)) { + vm.removeFile(PATH); + } + + string memory template = vm.readFile(CHAIN_MONITOR_CONFIG_TEMPLATE_PATH); + vm.writeFile(PATH, template); + // L1 vm.writeJson(L1_RPC_ENDPOINT, PATH, ".l1_config.l1_url"); vm.writeJson(vm.toString(L1_CONTRACT_DEPLOYMENT_BLOCK), PATH, ".l1_config.start_number"); @@ -143,6 +167,14 @@ contract GenerateBridgeHistoryConfig is DeployScroll { // prettier-ignore function generateBridgeHistoryConfig(string memory PATH) private { + // initialize template file + if (vm.exists(PATH)) { + vm.removeFile(PATH); + } + + string memory template = vm.readFile(BRIDGE_HISTORY_CONFIG_TEMPLATE_PATH); + vm.writeFile(PATH, template); + // L1 contracts vm.writeJson(vm.toString(L1_MESSAGE_QUEUE_V2_PROXY_ADDR), PATH, ".L1.MessageQueueAddr"); vm.writeJson(vm.toString(L1_SCROLL_MESSENGER_PROXY_ADDR), PATH, ".L1.MessengerAddr"); @@ -189,6 +221,14 @@ contract GenerateBalanceCheckerConfig is DeployScroll { *********************/ function generateBalanceCheckerConfig(string memory PATH) private { + // initialize template file + if (vm.exists(PATH)) { + vm.removeFile(PATH); + } + + string memory template = vm.readFile(BALANCE_CHECKER_CONFIG_TEMPLATE_PATH); + vm.writeFile(PATH, template); + vm.writeJson(vm.toString(L1_COMMIT_SENDER_ADDR), PATH, ".addresses[0].address"); vm.writeJson(vm.toString(L1_FINALIZE_SENDER_ADDR), PATH, ".addresses[1].address"); vm.writeJson(vm.toString(L1_GAS_ORACLE_SENDER_ADDR), PATH, ".addresses[2].address"); diff --git a/scripts/deterministic/GenerateGenesis.s.sol b/scripts/deterministic/GenerateGenesis.s.sol index 588969a0..7e7128b1 100644 --- a/scripts/deterministic/GenerateGenesis.s.sol +++ b/scripts/deterministic/GenerateGenesis.s.sol @@ -197,6 +197,14 @@ contract GenerateGenesis is DeployScroll { } function generateGenesisJson() private { + // initialize template file + if (vm.exists(GENESIS_JSON_PATH)) { + vm.removeFile(GENESIS_JSON_PATH); + } + + string memory template = vm.readFile(GENESIS_JSON_TEMPLATE_PATH); + vm.writeFile(GENESIS_JSON_PATH, template); + // general config vm.writeJson(vm.toString(CHAIN_ID_L2), GENESIS_JSON_PATH, ".config.chainId"); From f44e345d5bc1ccfe9bf8e77f29acff620bea2610 Mon Sep 17 00:00:00 2001 From: Morty Date: Mon, 21 Apr 2025 18:55:13 +0800 Subject: [PATCH 25/31] feat: reset config file paths --- scripts/deterministic/Constants.sol | 2 +- scripts/deterministic/GenerateConfigs.s.sol | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/deterministic/Constants.sol b/scripts/deterministic/Constants.sol index d5a3dbc6..1fe4e2a8 100644 --- a/scripts/deterministic/Constants.sol +++ b/scripts/deterministic/Constants.sol @@ -15,7 +15,6 @@ uint256 constant FEE_VAULT_MIN_WITHDRAW_AMOUNT = 1 ether; string constant CONFIG_PATH = "./scripts/deterministic/config/config.toml"; // template files -string constant CONFIG_CONTRACTS_TEMPLATE_PATH = "./docker/templates/config-contracts.toml"; string constant GENESIS_JSON_TEMPLATE_PATH = "../../config/genesis/config.json.template"; string constant ROLLUP_CONFIG_TEMPLATE_PATH = "../../config/rollup-relayer/config.json.template"; string constant COORDINATOR_CONFIG_TEMPLATE_PATH = "../../config/coordinator-api/config.json.template"; @@ -26,6 +25,7 @@ string constant ROLLUP_EXPLORER_BACKEND_CONFIG_TEMPLATE_PATH = "../../config/rol string constant ADMIN_SYSTEM_BACKEND_CONFIG_TEMPLATE_PATH = "../../config/scroll-admin-backend/config.json.template"; // output files +string constant CONFIG_CONTRACTS_PATH = "./docker/templates/config-contracts.toml"; string constant GENESIS_ALLOC_JSON_PATH = "../../config/__genesis-alloc.json"; string constant GENESIS_JSON_PATH = "../../config/genesis/config.json"; string constant ROLLUP_CONFIG_PATH = "../../config/rollup-relayer/config.json"; diff --git a/scripts/deterministic/GenerateConfigs.s.sol b/scripts/deterministic/GenerateConfigs.s.sol index ea0723f7..27d900de 100644 --- a/scripts/deterministic/GenerateConfigs.s.sol +++ b/scripts/deterministic/GenerateConfigs.s.sol @@ -3,7 +3,7 @@ pragma solidity =0.8.24; import {stdToml} from "forge-std/StdToml.sol"; -import {ADMIN_SYSTEM_BACKEND_CONFIG_PATH, ADMIN_SYSTEM_CRON_CONFIG_PATH, BALANCE_CHECKER_CONFIG_PATH, BRIDGE_HISTORY_API_CONFIG_PATH, BRIDGE_HISTORY_FETCHER_CONFIG_PATH, CHAIN_MONITOR_CONFIG_PATH, CONFIG_CONTRACTS_PATH, COORDINATOR_API_CONFIG_PATH, COORDINATOR_CRON_CONFIG_PATH, GAS_ORACLE_CONFIG_PATH, GENESIS_ALLOC_JSON_PATH, GENESIS_JSON_PATH, ROLLUP_CONFIG_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_PATH} from "./Constants.sol"; +import {ADMIN_SYSTEM_BACKEND_CONFIG_PATH, ADMIN_SYSTEM_CRON_CONFIG_PATH, BALANCE_CHECKER_CONFIG_PATH, BRIDGE_HISTORY_API_CONFIG_PATH, BRIDGE_HISTORY_FETCHER_CONFIG_PATH, CHAIN_MONITOR_CONFIG_PATH, COORDINATOR_API_CONFIG_PATH, COORDINATOR_CRON_CONFIG_PATH, GAS_ORACLE_CONFIG_PATH, GENESIS_ALLOC_JSON_PATH, GENESIS_JSON_PATH, ROLLUP_CONFIG_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_PATH} from "./Constants.sol"; import {DeployScroll} from "./DeployScroll.s.sol"; import {DeterministicDeployment} from "./DeterministicDeployment.sol"; From 929dbeb95403a462dce660d8205cf17cc4832a57 Mon Sep 17 00:00:00 2001 From: Morty Date: Mon, 21 Apr 2025 18:58:41 +0800 Subject: [PATCH 26/31] feat: reset config file paths --- scripts/deterministic/GenerateConfigs.s.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/deterministic/GenerateConfigs.s.sol b/scripts/deterministic/GenerateConfigs.s.sol index 27d900de..cc3485f4 100644 --- a/scripts/deterministic/GenerateConfigs.s.sol +++ b/scripts/deterministic/GenerateConfigs.s.sol @@ -3,7 +3,7 @@ pragma solidity =0.8.24; import {stdToml} from "forge-std/StdToml.sol"; -import {ADMIN_SYSTEM_BACKEND_CONFIG_PATH, ADMIN_SYSTEM_CRON_CONFIG_PATH, BALANCE_CHECKER_CONFIG_PATH, BRIDGE_HISTORY_API_CONFIG_PATH, BRIDGE_HISTORY_FETCHER_CONFIG_PATH, CHAIN_MONITOR_CONFIG_PATH, COORDINATOR_API_CONFIG_PATH, COORDINATOR_CRON_CONFIG_PATH, GAS_ORACLE_CONFIG_PATH, GENESIS_ALLOC_JSON_PATH, GENESIS_JSON_PATH, ROLLUP_CONFIG_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_PATH} from "./Constants.sol"; +import {ADMIN_SYSTEM_BACKEND_CONFIG_PATH, ADMIN_SYSTEM_CRON_CONFIG_PATH, BALANCE_CHECKER_CONFIG_PATH, BALANCE_CHECKER_CONFIG_TEMPLATE_PATH, BRIDGE_HISTORY_API_CONFIG_PATH, BRIDGE_HISTORY_CONFIG_TEMPLATE_PATH, BRIDGE_HISTORY_FETCHER_CONFIG_PATH, CHAIN_MONITOR_CONFIG_PATH, CHAIN_MONITOR_CONFIG_TEMPLATE_PATH, COORDINATOR_API_CONFIG_PATH, COORDINATOR_CONFIG_TEMPLATE_PATH, COORDINATOR_CRON_CONFIG_PATH, GAS_ORACLE_CONFIG_PATH, GENESIS_ALLOC_JSON_PATH, GENESIS_JSON_PATH, ROLLUP_CONFIG_PATH, ROLLUP_CONFIG_TEMPLATE_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_PATH} from "./Constants.sol"; import {DeployScroll} from "./DeployScroll.s.sol"; import {DeterministicDeployment} from "./DeterministicDeployment.sol"; From c0449dd7bd8fcadf0fa4a1cee8e3f79942a26113 Mon Sep 17 00:00:00 2001 From: Morty Date: Mon, 21 Apr 2025 19:05:24 +0800 Subject: [PATCH 27/31] fix: path --- scripts/deterministic/Constants.sol | 2 +- scripts/deterministic/GenerateGenesis.s.sol | 2 +- scripts/deterministic/shell/deploy.sh | 0 3 files changed, 2 insertions(+), 2 deletions(-) mode change 100644 => 100755 scripts/deterministic/shell/deploy.sh diff --git a/scripts/deterministic/Constants.sol b/scripts/deterministic/Constants.sol index 1fe4e2a8..c2b90d5f 100644 --- a/scripts/deterministic/Constants.sol +++ b/scripts/deterministic/Constants.sol @@ -25,7 +25,7 @@ string constant ROLLUP_EXPLORER_BACKEND_CONFIG_TEMPLATE_PATH = "../../config/rol string constant ADMIN_SYSTEM_BACKEND_CONFIG_TEMPLATE_PATH = "../../config/scroll-admin-backend/config.json.template"; // output files -string constant CONFIG_CONTRACTS_PATH = "./docker/templates/config-contracts.toml"; +string constant CONFIG_CONTRACTS_PATH = "./scripts/deterministic/config/config-contracts.toml"; string constant GENESIS_ALLOC_JSON_PATH = "../../config/__genesis-alloc.json"; string constant GENESIS_JSON_PATH = "../../config/genesis/config.json"; string constant ROLLUP_CONFIG_PATH = "../../config/rollup-relayer/config.json"; diff --git a/scripts/deterministic/GenerateGenesis.s.sol b/scripts/deterministic/GenerateGenesis.s.sol index 7e7128b1..d36ed5c6 100644 --- a/scripts/deterministic/GenerateGenesis.s.sol +++ b/scripts/deterministic/GenerateGenesis.s.sol @@ -7,7 +7,7 @@ import {L2TxFeeVault} from "../../src/L2/predeploys/L2TxFeeVault.sol"; import {Whitelist} from "../../src/L2/predeploys/Whitelist.sol"; import {WrappedEther} from "../../src/L2/predeploys/WrappedEther.sol"; -import {DETERMINISTIC_DEPLOYMENT_PROXY_ADDR, FEE_VAULT_MIN_WITHDRAW_AMOUNT, GENESIS_ALLOC_JSON_PATH, GENESIS_JSON_PATH} from "./Constants.sol"; +import {DETERMINISTIC_DEPLOYMENT_PROXY_ADDR, FEE_VAULT_MIN_WITHDRAW_AMOUNT, GENESIS_ALLOC_JSON_PATH, GENESIS_JSON_PATH, GENESIS_JSON_TEMPLATE_PATH} from "./Constants.sol"; import {DeployScroll} from "./DeployScroll.s.sol"; import {DeterministicDeployment} from "./DeterministicDeployment.sol"; diff --git a/scripts/deterministic/shell/deploy.sh b/scripts/deterministic/shell/deploy.sh old mode 100644 new mode 100755 From 2922f69acb7e2d93337589844bbad16a06c7e2e2 Mon Sep 17 00:00:00 2001 From: Morty Date: Tue, 22 Apr 2025 18:09:01 +0800 Subject: [PATCH 28/31] add contract-config template --- .gitignore | 2 + scripts/deterministic/Configuration.sol | 7 ++- scripts/deterministic/Constants.sol | 1 + .../config/config-contracts.toml.template | 58 +++++++++++++++++++ 4 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 scripts/deterministic/config/config-contracts.toml.template diff --git a/.gitignore b/.gitignore index 6ce6f78b..574fbc45 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,5 @@ broadcast # OS .DS_Store +# config +scripts/deterministic/config/config-contracts.toml \ No newline at end of file diff --git a/scripts/deterministic/Configuration.sol b/scripts/deterministic/Configuration.sol index f909774e..f2f92181 100644 --- a/scripts/deterministic/Configuration.sol +++ b/scripts/deterministic/Configuration.sol @@ -5,7 +5,7 @@ import {Script} from "forge-std/Script.sol"; import {VmSafe} from "forge-std/Vm.sol"; import {stdToml} from "forge-std/StdToml.sol"; -import {CONFIG_PATH, CONFIG_CONTRACTS_PATH} from "./Constants.sol"; +import {CONFIG_PATH, CONFIG_CONTRACTS_PATH, CONFIG_CONTRACTS_TEMPLATE_PATH} from "./Constants.sol"; /// @notice Configuration allows inheriting contracts to read the TOML configuration file. abstract contract Configuration is Script { @@ -92,6 +92,11 @@ abstract contract Configuration is Script { **********************/ function readConfig() internal { + if (!vm.exists(CONFIG_CONTRACTS_PATH)) { + string memory template = vm.readFile(CONFIG_CONTRACTS_TEMPLATE_PATH); + vm.writeFile(CONFIG_CONTRACTS_PATH, template); + } + cfg = vm.readFile(CONFIG_PATH); contractsCfg = vm.readFile(CONFIG_CONTRACTS_PATH); diff --git a/scripts/deterministic/Constants.sol b/scripts/deterministic/Constants.sol index c2b90d5f..fb6781df 100644 --- a/scripts/deterministic/Constants.sol +++ b/scripts/deterministic/Constants.sol @@ -15,6 +15,7 @@ uint256 constant FEE_VAULT_MIN_WITHDRAW_AMOUNT = 1 ether; string constant CONFIG_PATH = "./scripts/deterministic/config/config.toml"; // template files +string constant CONFIG_CONTRACTS_TEMPLATE_PATH = "./scripts/deterministic/config/config-contracts.toml.template"; string constant GENESIS_JSON_TEMPLATE_PATH = "../../config/genesis/config.json.template"; string constant ROLLUP_CONFIG_TEMPLATE_PATH = "../../config/rollup-relayer/config.json.template"; string constant COORDINATOR_CONFIG_TEMPLATE_PATH = "../../config/coordinator-api/config.json.template"; diff --git a/scripts/deterministic/config/config-contracts.toml.template b/scripts/deterministic/config/config-contracts.toml.template new file mode 100644 index 00000000..974a30ab --- /dev/null +++ b/scripts/deterministic/config/config-contracts.toml.template @@ -0,0 +1,58 @@ +L1_WETH_ADDR = "" +L1_PROXY_ADMIN_ADDR = "" +L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = "" +L1_WHITELIST_ADDR = "" +L1_SCROLL_CHAIN_PROXY_ADDR = "" +L1_SCROLL_MESSENGER_PROXY_ADDR = "" +L1_MESSAGE_QUEUE_V1_IMPLEMENTATION_ADDR = "" +L1_MESSAGE_QUEUE_V1_PROXY_ADDR = "" +L1_MESSAGE_QUEUE_V2_IMPLEMENTATION_ADDR = "" +L1_MESSAGE_QUEUE_V2_PROXY_ADDR = "" +L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_ENFORCED_TX_GATEWAY_PROXY_ADDR = "" +L1_PLONK_VERIFIER_ADDR = "" +L1_ZKEVM_VERIFIER_V2_ADDR = "" +L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR = "" +L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR = "" +L1_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = "" +L1_GATEWAY_ROUTER_PROXY_ADDR = "" +L1_ETH_GATEWAY_PROXY_ADDR = "" +L1_WETH_GATEWAY_PROXY_ADDR = "" +L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "" +L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "" +L1_ERC721_GATEWAY_PROXY_ADDR = "" +L1_ERC1155_GATEWAY_PROXY_ADDR = "" +L2_MESSAGE_QUEUE_ADDR = "" +L1_GAS_PRICE_ORACLE_ADDR = "" +L2_WHITELIST_ADDR = "" +L2_WETH_ADDR = "" +L2_TX_FEE_VAULT_ADDR = "" +L2_PROXY_ADMIN_ADDR = "" +L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = "" +L2_SCROLL_MESSENGER_PROXY_ADDR = "" +L2_ETH_GATEWAY_PROXY_ADDR = "" +L2_WETH_GATEWAY_PROXY_ADDR = "" +L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "" +L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "" +L2_ERC721_GATEWAY_PROXY_ADDR = "" +L2_ERC1155_GATEWAY_PROXY_ADDR = "" +L2_SCROLL_STANDARD_ERC20_ADDR = "" +L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR = "" +L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = "" +L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_ETH_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_WETH_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_ERC721_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = "" +L2_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = "" +L2_GATEWAY_ROUTER_PROXY_ADDR = "" +L2_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_ETH_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_WETH_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_ERC721_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = "" +SYSTEM_CONFIG_IMPLEMENTATION_ADDR = "" +SYSTEM_CONFIG_PROXY_ADDR = "" \ No newline at end of file From 0970ab972baf9171ebc773cf8d1d46d5e69a864e Mon Sep 17 00:00:00 2001 From: Morty Date: Tue, 22 Apr 2025 19:24:20 +0800 Subject: [PATCH 29/31] fix: system config init check --- scripts/deterministic/DeployScroll.s.sol | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/scripts/deterministic/DeployScroll.s.sol b/scripts/deterministic/DeployScroll.s.sol index 989fe134..5a7fde70 100644 --- a/scripts/deterministic/DeployScroll.s.sol +++ b/scripts/deterministic/DeployScroll.s.sol @@ -1113,12 +1113,15 @@ contract DeployScroll is DeterministicDeployment { maxDelayEnterEnforcedMode: 0, maxDelayMessageQueue: 0 }); - SystemConfig(SYSTEM_CONFIG_PROXY_ADDR).initialize( - owner, - signer, - messageQueueParameters, - enforcedBatchParameters - ); + + if (getInitializeCount(SYSTEM_CONFIG_PROXY_ADDR) == 0) { + SystemConfig(SYSTEM_CONFIG_PROXY_ADDR).initialize( + owner, + signer, + messageQueueParameters, + enforcedBatchParameters + ); + } } function initializeL1MessageQueue() private { From 70d1cd23562a9c3ea4c2a541306beeebe745001c Mon Sep 17 00:00:00 2001 From: Morty Date: Tue, 22 Apr 2025 20:07:10 +0800 Subject: [PATCH 30/31] fix: system config signer address --- scripts/deterministic/DeployScroll.s.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/deterministic/DeployScroll.s.sol b/scripts/deterministic/DeployScroll.s.sol index 5a7fde70..cc7f6886 100644 --- a/scripts/deterministic/DeployScroll.s.sol +++ b/scripts/deterministic/DeployScroll.s.sol @@ -1103,7 +1103,7 @@ contract DeployScroll is DeterministicDeployment { function initializeSystemConfig() private { address owner = L1_PROXY_ADMIN_ADDR; - address signer = address(0xe0553E076c1a838153f32BDb57cf09125D06cb98); + address signer = L2GETH_SIGNER_ADDRESS; SystemConfig.MessageQueueParameters memory messageQueueParameters = SystemConfig.MessageQueueParameters({ maxGasLimit: uint32(MAX_L1_MESSAGE_GAS_LIMIT), baseFeeOverhead: 0, From 06e271984a736f0c3aeea201c6efedf87071584d Mon Sep 17 00:00:00 2001 From: Morty Date: Tue, 29 Apr 2025 14:52:36 +0800 Subject: [PATCH 31/31] fix: SystemConfig initialize --- scripts/deterministic/Configuration.sol | 4 ++++ scripts/deterministic/DeployScroll.s.sol | 8 ++++---- scripts/deterministic/config/config.toml | 2 ++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/scripts/deterministic/Configuration.sol b/scripts/deterministic/Configuration.sol index f2f92181..95ba45d7 100644 --- a/scripts/deterministic/Configuration.sol +++ b/scripts/deterministic/Configuration.sol @@ -35,6 +35,8 @@ abstract contract Configuration is Script { uint256 internal MAX_BLOCK_IN_CHUNK; uint256 internal MAX_BATCH_IN_BUNDLE; uint256 internal MAX_L1_MESSAGE_GAS_LIMIT; + uint256 internal FINALIZE_BATCH_DEADLINE_SEC; + uint256 internal RELAY_MESSAGE_DEADLINE_SEC; uint256 internal L1_CONTRACT_DEPLOYMENT_BLOCK; @@ -107,6 +109,8 @@ abstract contract Configuration is Script { MAX_BLOCK_IN_CHUNK = cfg.readUint(".rollup.MAX_BLOCK_IN_CHUNK"); MAX_BATCH_IN_BUNDLE = cfg.readUint(".rollup.MAX_BATCH_IN_BUNDLE"); MAX_L1_MESSAGE_GAS_LIMIT = cfg.readUint(".rollup.MAX_L1_MESSAGE_GAS_LIMIT"); + FINALIZE_BATCH_DEADLINE_SEC = cfg.readUint(".rollup.FINALIZE_BATCH_DEADLINE_SEC"); + RELAY_MESSAGE_DEADLINE_SEC = cfg.readUint(".rollup.RELAY_MESSAGE_DEADLINE_SEC"); L1_CONTRACT_DEPLOYMENT_BLOCK = cfg.readUint(".general.L1_CONTRACT_DEPLOYMENT_BLOCK"); diff --git a/scripts/deterministic/DeployScroll.s.sol b/scripts/deterministic/DeployScroll.s.sol index cc7f6886..394d4725 100644 --- a/scripts/deterministic/DeployScroll.s.sol +++ b/scripts/deterministic/DeployScroll.s.sol @@ -1106,12 +1106,12 @@ contract DeployScroll is DeterministicDeployment { address signer = L2GETH_SIGNER_ADDRESS; SystemConfig.MessageQueueParameters memory messageQueueParameters = SystemConfig.MessageQueueParameters({ maxGasLimit: uint32(MAX_L1_MESSAGE_GAS_LIMIT), - baseFeeOverhead: 0, - baseFeeScalar: 0 + baseFeeOverhead: 1000000000, + baseFeeScalar: 1000000000 }); SystemConfig.EnforcedBatchParameters memory enforcedBatchParameters = SystemConfig.EnforcedBatchParameters({ - maxDelayEnterEnforcedMode: 0, - maxDelayMessageQueue: 0 + maxDelayEnterEnforcedMode: uint24(FINALIZE_BATCH_DEADLINE_SEC), + maxDelayMessageQueue: uint24(RELAY_MESSAGE_DEADLINE_SEC) }); if (getInitializeCount(SYSTEM_CONFIG_PROXY_ADDR) == 0) { diff --git a/scripts/deterministic/config/config.toml b/scripts/deterministic/config/config.toml index 91421bba..0d477685 100644 --- a/scripts/deterministic/config/config.toml +++ b/scripts/deterministic/config/config.toml @@ -38,6 +38,8 @@ MAX_TX_IN_CHUNK = 100 MAX_BLOCK_IN_CHUNK = 100 MAX_BATCH_IN_BUNDLE = 30 MAX_L1_MESSAGE_GAS_LIMIT = 10_000_000 +FINALIZE_BATCH_DEADLINE_SEC = 600 +RELAY_MESSAGE_DEADLINE_SEC = 600 TEST_ENV_MOCK_FINALIZE_ENABLED = true TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC = 300