Whitechain Sepolia artifacts are published today. Mainnet artifacts are published at Mainnet launch.
Networks and directories
Each network directory is self-contained. Never mix files across networks: a genesis from one network does not match the rollup config of another, and a node started on a mismatched pair stalls instead of syncing.
What each file is
Only
genesis.json and rollup.json are read by a running node. The other four exist so that anyone can check the chain configuration and the L1 deployment without asking Whitechain for anything.
Download the artifacts
genesis.json and rollup.json for your network. Copy them into the node stack under artifacts/<network>/, a path relative to the root of the whitechain-labs/node repository, where the directory name matches WHITECHAIN_NETWORK in your .env:
public-rpc-node stack already ships the Whitechain Sepolia pair, byte-for-byte identical to the copies in this repository, so on testnet there is nothing to replace. Download them when you want to verify what you are running, when you are bringing up a network the stack does not ship, or when a hardfork changes them.
Verify what you downloaded
Compare the SHA-256 checksums of your copies against the published values:
These values cover the current Whitechain Sepolia set. They change when a hardfork changes the artifacts, and the repository is the authoritative copy of both the files and their checksums.
Regenerate the derived files
genesis.json, rollup.json, l1-addresses.json, and deploy-config.json are not hand-written. They are derived from state.json, so you can rebuild them with op-deployer (v0.6.0 or later) and confirm that the committed files match what the deployer produces:
diff prints nothing when the files match. Any output means your copy differs from what the recorded deployment produces, and you should not start a node from it.
Chain parameters recorded in the artifacts
These are the Whitechain Sepolia values as they appear inrollup.json, genesis.json, and intent.toml. They are reproduced here as text so the numbers are readable without opening the files.
Withdrawal and dispute timings come from
intent.toml:
Whitechain Sepolia delays are intentionally short so that a full withdrawal can be tested end to end. Mainnet values are different. See OP Stack canonical bridge for what these mean for a withdrawal.
intent.toml also records the role addresses for the deployment: the L1 and L2 ProxyAdmin owners, the SystemConfig owner, the batcher, the proposer, the challenger, the unsafe block signer, and the fee vault recipients.
L1 contracts on Ethereum Sepolia
l1-addresses.json carries the complete set, proxies and implementations. The proxies below are the ones an operator or an integrator usually needs; read the file for the implementation addresses behind them.
These addresses are specific to the Whitechain Sepolia deployment on Ethereum Sepolia. They are not the same on Mainnet, and they change if the deployment is ever redone. The L2 side of the bridge sits at fixed
0x4200... predeploy addresses that are identical on every OP Stack chain: see OP Stack canonical bridge.
Start a node from the artifacts
The samegenesis.json is accepted by both execution clients. Whitechain’s own public-rpc-node stack runs op-reth; op-geth works from the identical file.
Initialize op-geth from the genesis:
op-reth from the same file:
op-reth takes the genesis through --chain on every invocation, not only at init, so pass the same --chain=testnet/genesis.json to op-reth node. The explicit init step is optional, because op-reth node initializes an empty datadir from --chain on first start. This is what the public-rpc-node stack does: it mounts artifacts/<network>/genesis.json into the container and passes --chain to op-reth node, with no separate init step.
Start the consensus client against the same network:
<L2_ENGINE_RPC> is the authenticated engine API of the execution client started above, configured with the --authrpc.* flags on both op-geth and op-reth, and <JWT_FILE> must be the same JWT secret that client was given.
Both clients must be pointed at the same pair of artifacts. In practice you do not run these commands directly: the public-rpc-node Docker Compose stack wraps them and generates the JWT for you. See Run a node.
When the artifacts change
Artifacts change at a hardfork, and the repository is updated before the activation timestamp. Replaceartifacts/<network>/rollup.json (and genesis.json if it changed) with the published version and restart before that timestamp, or the node stalls on a chain divergence. See Node maintenance.
A genesis change never applies to a node that is already synced past block 0. If both files change, wipe and resync, or restore a snapshot taken after the fork.

