Skip to main content

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.