3 KiB
ECP-0113: Keep OP Stack Runtime Compatible With Forge Host Services
Status: Draft
Problem / context
ecp-forge now runs the OP Stack bootstrap far enough to produce deployment.json, genesis.json,
and rollup.json, but the runtime containers still failed to stay up. op-geth tried to bind the
default Ethereum P2P port 30303, already owned by the host full Ethereum node. The pinned
op-node:v1.13.5 rejected current op-deployer/v0.6.0-rc.3 rollup fields such as minBaseFee.
After aligning to op-node:v1.14.0, that image still rejected the newer
genesis.system_config.daFootprintGasScalar field. The generated rollup config also carried
eip1559Params = 0x0000000000000000 even though the genesis extraData and chain config encode
denominator 250 and elasticity 6; that zero value caused op-geth to panic when the sequencer
requested the first payload. op-batcher:v1.14.0 also no longer accepts --batch-inbox-address.
Isolated compatibility probes showed op-node:v1.16.6 paired with op-geth:v1.101702.0-rc.1 can
run against the generated genesis hash and produce L2 blocks.
Decision
Assign op-geth a repo-owned L2 P2P port in the existing 285xx range, align op-node to the
probed v1.16.6 runtime, move op-geth to the probed
v1.101702.0-rc.1 image, remove the stale batcher inbox-address flag, delete only
genesis.system_config.daFootprintGasScalar from generated rollup configs, and derive zero
eip1559Params from the generated chain_op_config.
Consequences
- The host Ethereum node can keep
30303without blocking OP Stack startup. - The OP Stack RPC and P2P port assignments stay documented in repo config.
- Runtime image compatibility is explicit in Nix config.
- The rollup JSON normalization is intentionally narrow: it removes the exact field rejected by the
older
op-node:v1.14.0parser and repairs only the zero EIP-1559 params that caused the liveop-gethpayload panic. - The
op-gethimage is an explicit release-candidate tag because the previously pinned image panicked against the current deployer output.
Alternatives considered
- Stop the host full Ethereum node. Rejected because the OP Stack should coexist with the existing Ethereum services.
- Strip all newer-looking fields from
rollup.json. Rejected becauseop-node:v1.14.0accepts the other generated fields tested during recovery; broad deletion would hide schema drift. - Leave zero
eip1559Paramsin place. Rejected because the live sequencer/geth pair panicked before the first L2 block could be built. - Keep
op-geth:v1.101511.1. Rejected because it reproducibly panics on first payload construction for this generated chain config.
Rollout / teardown
Deploy the updated NixOS module and bootstrap helper, reset failed OP Stack units, and verify L2 RPC
and rollup RPC locally on ecp-forge. Teardown is reverting the port assignment and rollup JSON
normalization, then regenerating runtime files with a mutually compatible deployer/runtime image set.