From ca4ba4bc9238c7a995fd99888779a89016f23a3e Mon Sep 17 00:00:00 2001 From: Tristan Wilson Date: Fri, 13 Feb 2026 17:35:34 +0100 Subject: [PATCH] use genesis.json for ArbOSInit feature flags The init.transaction-filtering-enabled config key was added as a temporary integration shim but never merged to nitro master in favor of passing ArbOSInit flags through genesis.json. Switch the testnode to generate an l2_genesis.json containing the chain config as serializedChainConfig plus the arbOSInit flags, and pass it to all L2 nodes via --init.genesis-json-file. --- scripts/config.ts | 60 ++++++++++++++++++++++++++++++++++------------- test-node.bash | 2 +- 2 files changed, 45 insertions(+), 17 deletions(-) diff --git a/scripts/config.ts b/scripts/config.ts index cfdcaa8..691ff0a 100644 --- a/scripts/config.ts +++ b/scripts/config.ts @@ -200,24 +200,44 @@ function getChainInfo(): ChainInfo { } function applyTxFilteringConfig(config: any) { - config.execution["address-filter"] = { - "enable": true, - "s3": { - "access-key": "minioadmin", - "secret-key": "minioadmin", - "region": "us-east-1", - "endpoint": "http://minio:9000", - "bucket": "tx-filtering", - "object-key": "address-hashes.json" - }, - "poll-interval": "30s" - }; - config.execution["transaction-filterer-rpc-client"] = { - "url": "http://transaction-filterer:8547" + config.execution.sequencer["transaction-filtering"] = { + "address-filter": { + "enable": true, + "s3": { + "access-key": "minioadmin", + "secret-key": "minioadmin", + "region": "us-east-1", + "endpoint": "http://minio:9000", + "bucket": "tx-filtering", + "object-key": "address-hashes.json" + }, + "poll-interval": "30s" + }, + "transaction-filterer-rpc-client": { + "url": "http://transaction-filterer:8547" + } }; - config["init"] = { - "transaction-filtering-enabled": true +} + +function generateL2GenesisJson() { + const chainConfigPath = path.join(consts.configpath, "l2_chain_config.json"); + const chainConfigStr = fs.readFileSync(chainConfigPath).toString(); + + const genesis = { + "serializedChainConfig": chainConfigStr, + "arbOSInit": { + "transactionFilteringEnabled": true, + "nativeTokenSupplyManagementEnabled": false + }, + "gasLimit": "0x0", + "difficulty": "0x0", + "alloc": {} }; + + fs.writeFileSync( + path.join(consts.configpath, "l2_genesis.json"), + JSON.stringify(genesis) + ); } function writeConfigs(argv: any) { @@ -335,6 +355,13 @@ function writeConfigs(argv: any) { } } + if (argv.txfiltering) { + generateL2GenesisJson(); + (baseConfig as any)["init"] = { + "genesis-json-file": "/config/l2_genesis.json" + }; + } + const baseConfJSON = JSON.stringify(baseConfig) if (argv.simple) { @@ -395,6 +422,7 @@ function writeConfigs(argv: any) { } let l3Config = JSON.parse(baseConfJSON) + delete l3Config["init"] l3Config["parent-chain"].connection.url = argv.l2url // use the same account for l2 and l3 staker // l3Config.node.staker["parent-chain-wallet"].account = namedAddress("l3owner") diff --git a/test-node.bash b/test-node.bash index 78f375a..5c8145f 100755 --- a/test-node.bash +++ b/test-node.bash @@ -2,7 +2,7 @@ set -eu -NITRO_NODE_VERSION=offchainlabs/nitro-node:v3.9.2-52e8959 +: ${NITRO_NODE_VERSION:=offchainlabs/nitro-node:v3.9.2-52e8959} BLOCKSCOUT_VERSION=offchainlabs/blockscout:v1.1.0-0e716c8 # nitro-contract workaround for testnode