Run a split validator node
Running split validators for Arbitrum chains
Split validators separate the validation work to a stateless worker, which provides several key benefits:
- Resource management: Easier to scale and manage compute resources independently
- Fault isolation: Prevents database corruption if the validation worker crashes (e.g., due to OOM errors)
- Flexibility: Allows running multiple validation workers for horizontal scalability
This guide explains how to set up a split validator configuration for Arbitrum chains by running a Nitro node (staker) and a validation node separately.
Before you read this doc, please ensure you have already walked through run a validator docs to understand the basics of a validator node.
Prerequisites
- Docker or Kubernetes with Helm installed
- Staker private key
- Chain information JSON for your Arbitrum chain
Docker deployment guide
Step 1: Set up the validation node
First, generate a JWT secret for secure communication:
xxd -l 32 -ps -c 40 /dev/urandom > /tmp/nitro-val.jwt
Start the validation node with the JWT secret:
docker run --rm -it \
--entrypoint nitro-val \
-p 0.0.0.0:5200:5200 \
offchainlabs/nitro-node:v3.7.2-42be4fe \
--auth.addr 127.0.0.1 \
--auth.origins 0.0.0.0 \
--auth.jwtsecret /tmp/nitro-val.jwt \
--auth.port 5200
--metrics \
--metrics-server.addr=0.0.0.0 \
--metrics-server.port=6070
The validation node will listen on port 5200, which will also enable the metrics server on port 6070.
Step 2: Set up the staker node
Copy the JWT secret to your mount directory:
cp /tmp/nitro-val.jwt /some/local/dir/arbitrum
Start the staker node with the following command, connecting it to your validation node:
docker run --rm -it \
-v /some/local/dir/arbitrum:/home/user/.arbitrum \
offchainlabs/nitro-node:v3.7.2-42be4fe \
--parent-chain.connection.url=<parent-chain-endpoint> \
--node.staker.enable=true \
--node.staker.strategy=MakeNodes \
--node.staker.parent-chain-wallet.private-key=<staker_private_key> \
--chain.info-json=<Your_chain_info> \
--execution.forwarding-target=<forwarding_target> \
--node.block-validator.validation-server-configs-list="[{\"jwtsecret\":\"/home/user/.arbitrum/nitro-val.jwt\",\"url\":\"ws://Your_validation_address\"}]"
Replace the placeholders with your specific values:
<parent-chain-endpoint>
: Your parent chain RPC endpoint<staker_private_key>
: Your staker's private key<Your_chain_info>
: Chain information JSON<forwarding_target>
: Your forwarding node URL (usually is the sequencer endpoint)Your_validation_address
: Address of your validation node (including port)
Kubernetes deployment with Helm
Arbitrum provides a community Helm chart for Kubernetes deployment.
Step 1: Create validation node configuration
Create a file named validation_values.yaml
:
configmap:
data:
parent-chain:
id: 1 # Use appropriate parent chain ID
connection:
url: 'https://your-parent-chain-rpc'
execution:
forwarding-target: 'https://your-forwarding-node'
node:
staker:
enable: true
strategy: 'MakeNodes'
parent-chain-wallet:
private-key: 'your-staker-private-key'
chain:
name: 'Your Chain Name'
id: 42161 # Your chain ID
info-json: '[Your chain info JSON]'
jwtSecret:
enabled: true
value: 'Your 32 bytes hex jwt'
validator:
enabled: true
splitvalidator:
deployments:
- name: 'current'
Step 2: Deploy the validation node
helm install nitro-validator offchainlabs/nitro --values validation_values.yaml
Monitoring and maintenance
-
Monitor your validator and staker logs regularly:
# For Docker
docker logs -f <container_id>
# For Kubernetes
kubectl logs -f <POD> -
Check validator and staker status through the Arbitrum dashboard or API
Additional configurations for validation nodes
To get a full list of parameters for the validation node, you can run the following command:
docker run --rm -it --entrypoint nitro-val offchainlabs/nitro-node:v3.7.2-42be4fe --help
Additional configurations for helm charts
For more advanced helm chart configurations, please refer to the Arbitrum community Helm Chart README
Monitoring
To check if your validation node is running correctly, you can check the rpc_duration_validation_validate_success_count
metric in your metrics server.
This metric is a counter of the number of successful validation calls; if it is increasing, it means your validation node is running correctly.
You can also check where this log (validation node started
) appears:
- If this log appears on the validation node, it means your validation node is running correctly.
- If this log appears on the staker node (validator node), it means your staker node is still validating itself. It indicates that your staker node is not connecting to the validation node correctly; you need to double-check your configuration.