diff --git a/docker/config-example.toml b/docker/config-example.toml index 02e70ef..c702f47 100644 --- a/docker/config-example.toml +++ b/docker/config-example.toml @@ -1,26 +1,16 @@ [general] -L1_RPC_ENDPOINT = "http://l1geth:8545" -L2_RPC_ENDPOINT = "http://l2geth:8545" +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 = 222222 - -MAX_TX_IN_CHUNK = 100 -MAX_BLOCK_IN_CHUNK = 100 -MAX_CHUNK_IN_BATCH = 15 -MAX_BATCH_IN_BUNDLE = 30 -MAX_L1_MESSAGE_GAS_LIMIT = 10000000 +CHAIN_ID_L2 = 221122 L1_CONTRACT_DEPLOYMENT_BLOCK = 0 -ALTERNATIVE_GAS_TOKEN_ENABLED = true -# EXAMPLE_GAS_TOKEN_DECIMAL = 6 - -TEST_ENV_MOCK_FINALIZE_ENABLED = true -TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC = 3600 - - [accounts] # note: for now we simply use Anvil's dev accounts @@ -41,22 +31,54 @@ L1_FINALIZE_SENDER_ADDR = "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC" L1_GAS_ORACLE_SENDER_ADDR = "0x90F79bf6EB2c4f870365E785982E1f101E93b906" L2_GAS_ORACLE_SENDER_ADDR = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" -L2GETH_SIGNER_0_ADDRESS = "0x756EA06BDEe36de11F22DCca45a31d8a178eF3c6" - [db] -SCROLL_DB_CONNECTION_STRING = "postgres://postgres:scroll2022@db:5432/scroll?sslmode=disable" -CHAIN_MONITOR_DB_CONNECTION_STRING = "postgres://postgres:scroll2022@db:5432/chain_monitor?sslmode=disable" -BRIDGE_HISTORY_DB_CONNECTION_STRING = "postgres://postgres:scroll2022@db:5432/bridge_history?sslmode=disable" -ROLLUP_EXPLORER_DB_CONNECTION_STRING = "postgres://postgres:scroll2022@db:5432/rollup_explorer?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" + +[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"]' +[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" [genesis] L2_MAX_ETH_SUPPLY = "226156424291633194186662080095093570025917938800079226639565593765455331328" L2_DEPLOYER_INITIAL_BALANCE = 1000000000000000000 - [contracts] DEPLOYMENT_SALT = "" @@ -68,7 +90,6 @@ L1_PLONK_VERIFIER_ADDR = "0x0000000000000000000000000000000000000001" [contracts.overrides] # L1_WETH = "0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14" -# L1_GAS_TOKEN = "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9" L2_MESSAGE_QUEUE = "0x5300000000000000000000000000000000000000" L1_GAS_PRICE_ORACLE = "0x5300000000000000000000000000000000000002" @@ -81,11 +102,11 @@ L2_TX_FEE_VAULT = "0x5300000000000000000000000000000000000005" COORDINATOR_JWT_SECRET_KEY = "e788b62d39254928a821ac1c76b274a8c835aa1e20ecfb6f50eb10e87847de44" -[frontend] +[ingress] -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 = "https://rollup-explorer-backend.scrollsdk/api" -EXTERNAL_EXPLORER_URI_L1 = "http://l1-explorer.scrollsdk" -EXTERNAL_EXPLORER_URI_L2 = "http://blockscout.scrollsdk" \ No newline at end of file +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" diff --git a/docker/templates/rollup-config.json b/docker/templates/rollup-config.json index c4ce56c..3598029 100644 --- a/docker/templates/rollup-config.json +++ b/docker/templates/rollup-config.json @@ -78,7 +78,6 @@ }, "batch_proposer_config": { "propose_interval_milliseconds": 1000, - "max_chunk_num_per_batch": null, "max_l1_commit_gas_per_batch": 5000000, "max_l1_commit_calldata_size_per_batch": 110000, "batch_timeout_sec": 2700, diff --git a/scripts/deterministic/Configuration.sol b/scripts/deterministic/Configuration.sol index 028aa99..ccf0a9d 100644 --- a/scripts/deterministic/Configuration.sol +++ b/scripts/deterministic/Configuration.sol @@ -26,12 +26,13 @@ abstract contract Configuration is Script { 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_CHUNK_IN_BATCH; uint256 internal MAX_BATCH_IN_BUNDLE; uint256 internal MAX_L1_MESSAGE_GAS_LIMIT; @@ -57,13 +58,14 @@ abstract contract Configuration is Script { address internal OWNER_ADDR; - address internal L2GETH_SIGNER_0_ADDRESS; + address internal L2GETH_SIGNER_ADDRESS; // db - string internal SCROLL_DB_CONNECTION_STRING; + string internal ROLLUP_NODE_DB_CONNECTION_STRING; string internal CHAIN_MONITOR_DB_CONNECTION_STRING; string internal BRIDGE_HISTORY_DB_CONNECTION_STRING; string internal ROLLUP_EXPLORER_BACKEND_DB_CONNECTION_STRING; + string internal COORDINATOR_DB_CONNECTION_STRING; // genesis uint256 internal L2_MAX_ETH_SUPPLY; @@ -103,21 +105,22 @@ 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")); - MAX_TX_IN_CHUNK = cfg.readUint(".general.MAX_TX_IN_CHUNK"); - MAX_BLOCK_IN_CHUNK = cfg.readUint(".general.MAX_BLOCK_IN_CHUNK"); - MAX_CHUNK_IN_BATCH = cfg.readUint(".general.MAX_CHUNK_IN_BATCH"); - MAX_BATCH_IN_BUNDLE = cfg.readUint(".general.MAX_BATCH_IN_BUNDLE"); - MAX_L1_MESSAGE_GAS_LIMIT = cfg.readUint(".general.MAX_L1_MESSAGE_GAS_LIMIT"); + 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"); - ALTERNATIVE_GAS_TOKEN_ENABLED = cfg.readBool(".general.ALTERNATIVE_GAS_TOKEN_ENABLED"); + ALTERNATIVE_GAS_TOKEN_ENABLED = cfg.readBool(".gas-token.ALTERNATIVE_GAS_TOKEN_ENABLED"); - TEST_ENV_MOCK_FINALIZE_ENABLED = cfg.readBool(".general.TEST_ENV_MOCK_FINALIZE_ENABLED"); - TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC = cfg.readUint(".general.TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC"); + 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"); @@ -133,9 +136,9 @@ abstract contract Configuration is Script { OWNER_ADDR = cfg.readAddress(".accounts.OWNER_ADDR"); - L2GETH_SIGNER_0_ADDRESS = cfg.readAddress(".accounts.L2GETH_SIGNER_0_ADDRESS"); + L2GETH_SIGNER_ADDRESS = cfg.readAddress(".sequencer.L2GETH_SIGNER_ADDRESS"); - SCROLL_DB_CONNECTION_STRING = cfg.readString(".db.SCROLL_DB_CONNECTION_STRING"); + ROLLUP_NODE_DB_CONNECTION_STRING = cfg.readString(".db.ROLLUP_NODE_DB_CONNECTION_STRING"); CHAIN_MONITOR_DB_CONNECTION_STRING = cfg.readString(".db.CHAIN_MONITOR_DB_CONNECTION_STRING"); BRIDGE_HISTORY_DB_CONNECTION_STRING = cfg.readString(".db.BRIDGE_HISTORY_DB_CONNECTION_STRING"); ROLLUP_EXPLORER_BACKEND_DB_CONNECTION_STRING = cfg.readString(".db.ROLLUP_EXPLORER_DB_CONNECTION_STRING"); @@ -174,7 +177,12 @@ abstract contract Configuration is Script { function tryGetOverride(string memory name) internal returns (address) { address addr; - string memory key = string(abi.encodePacked(".contracts.overrides.", name)); + 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); diff --git a/scripts/deterministic/DeployScroll.s.sol b/scripts/deterministic/DeployScroll.s.sol index 2381c11..eb87b55 100644 --- a/scripts/deterministic/DeployScroll.s.sol +++ b/scripts/deterministic/DeployScroll.s.sol @@ -721,7 +721,7 @@ contract DeployScroll is DeterminsticDeployment { function deployGasToken() private gasToken(true) { uint8 decimal = 18; - string memory key = ".general.EXAMPLE_GAS_TOKEN_DECIMAL"; + string memory key = ".gas-token.EXAMPLE_GAS_TOKEN_DECIMAL"; if (vm.keyExistsToml(cfg, key)) { decimal = uint8(cfg.readUint(key)); } diff --git a/scripts/deterministic/GenerateConfigs.s.sol b/scripts/deterministic/GenerateConfigs.s.sol index 8e4f332..133ae0d 100644 --- a/scripts/deterministic/GenerateConfigs.s.sol +++ b/scripts/deterministic/GenerateConfigs.s.sol @@ -55,10 +55,9 @@ contract GenerateRollupConfig is DeployScroll { vm.writeJson(vm.toString(MAX_BLOCK_IN_CHUNK), ROLLUP_CONFIG_PATH, ".l2_config.chunk_proposer_config.max_block_num_per_chunk"); vm.writeJson(vm.toString(MAX_TX_IN_CHUNK), ROLLUP_CONFIG_PATH, ".l2_config.chunk_proposer_config.max_tx_num_per_chunk"); - vm.writeJson(vm.toString(MAX_CHUNK_IN_BATCH), ROLLUP_CONFIG_PATH, ".l2_config.batch_proposer_config.max_chunk_num_per_batch"); vm.writeJson(vm.toString(MAX_BATCH_IN_BUNDLE), ROLLUP_CONFIG_PATH, ".l2_config.bundle_proposer_config.max_batch_num_per_bundle"); - vm.writeJson(SCROLL_DB_CONNECTION_STRING, ROLLUP_CONFIG_PATH, ".db_config.dsn"); + vm.writeJson(ROLLUP_NODE_DB_CONNECTION_STRING, ROLLUP_CONFIG_PATH, ".db_config.dsn"); } } @@ -88,7 +87,7 @@ contract GenerateCoordinatorConfig is DeployScroll { vm.writeFile(COORDINATOR_CONFIG_PATH, template); vm.writeJson(vm.toString(CHAIN_ID_L2), COORDINATOR_CONFIG_PATH, ".l2.chain_id"); - vm.writeJson(SCROLL_DB_CONNECTION_STRING, COORDINATOR_CONFIG_PATH, ".db.dsn"); + vm.writeJson(COORDINATOR_DB_CONNECTION_STRING, COORDINATOR_CONFIG_PATH, ".db.dsn"); vm.writeJson(COORDINATOR_JWT_SECRET_KEY, COORDINATOR_CONFIG_PATH, ".auth.secret"); } } @@ -277,8 +276,8 @@ contract GenerateFrontendConfig is DeployScroll { function generateFrontendConfig() private { // use writeFile to start a new file vm.writeFile(FRONTEND_ENV_PATH, "REACT_APP_ETH_SYMBOL = \"ETH\"\n"); - vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_BASE_CHAIN = \"Ethereum\""); - vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_ROLLUP = \"Scroll Stack\""); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_BASE_CHAIN = \"", CHAIN_NAME_L1, "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_ROLLUP = \"", CHAIN_NAME_L2, "\"")); vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_CHAIN_ID_L1 = \"", vm.toString(CHAIN_ID_L1), "\"")); vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_CHAIN_ID_L2 = \"", vm.toString(CHAIN_ID_L2), "\"")); vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_CONNECT_WALLET_PROJECT_ID = \"14efbaafcf5232a47d93a68229b71028\""); diff --git a/scripts/deterministic/GenerateGenesis.s.sol b/scripts/deterministic/GenerateGenesis.s.sol index 4ea461a..d1be3be 100644 --- a/scripts/deterministic/GenerateGenesis.s.sol +++ b/scripts/deterministic/GenerateGenesis.s.sol @@ -207,7 +207,7 @@ contract GenerateGenesis is DeployScroll { string memory extraData = string( abi.encodePacked( "0x0000000000000000000000000000000000000000000000000000000000000000", - vm.replace(vm.toString(L2GETH_SIGNER_0_ADDRESS), "0x", ""), + vm.replace(vm.toString(L2GETH_SIGNER_ADDRESS), "0x", ""), "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ) );