Running a Frame Validator
In a Layer 2 network like Frame, a validator's job is to make sure claims about the chain state to the validating bridge are correct. Without at least one honest validator, a malicious actor could post an invalid state root to the validating bridge on the L1 and withdraw funds that they don't actually have. An honest validator has the ability to challenge an invalid state root, prove that it's wrong, and have the right state proposed instead.
For Arbitrum Nitro specifically, staked validators (those that can challenge invalid proposals) are currently permissioned. In the future, BOLD (opens in a new tab) will allow for staked validators to join the protocol permissionlessly. Until then, anyone can still run a validator in watchtower mode (opens in a new tab) which will alert the validator when an invalid state root is proposed.
Prerequisites
For now, the only way to run a Frame testnet validator is to download and run a pre-built docker image. In the future, we will open source our Nitro repository (with Frame modifications) and allow developers to build the image from source.
We recommend having at least 8GB of RAM and 20GB of storage space on your machine.
In addition to software and hardware requirements above, you will also need a Sepolia RPC url.
Installation
To start, make sure you have Docker installed and running on your system. You can find instructions for install Docker here (opens in a new tab).
Once you have Docker installed, you should create a local directory where the validator config and node data will live. Here's a suggestion:
mkdir frame-validator
cd frame-validator
mkdir data You will then need to download the frame validator config that we've provided here (opens in a new tab).
git clone https://github.com/frame-network/node-config.gitAfter cloning the repo, open the testnet.config file and replace <SEPOLIA_RPC_HERE> with your Sepolia RPC url.
Running the Validator
- Make sure you are in the
frame-validatordirectory. - Then start the validator by running:
docker run \
--name frame \
--rm \
-it \
-v $(pwd)/node-data:/home/user/.frame \
-v $(pwd)/node-config/testnet.json:/home/user/testnet.json public.ecr.aws/o8e2k8j7/nitro-node:frame \
--conf.file testnet.jsonCheck the logs
docker logs -f frameOr add --since to view shorter logs
Example, see the logs starting from 1 minute ago
docker logs -f frame --since 1mIf everything is working you should see Running Arbitrum nitro node and Chain ID: 68840142 (unknown) in your logs.
It will take some time for your validator to catch up and validator up to the latest state of the chain.
You'll see validator catching up to last valid in the logs while it updates to the latest state.
Once the validator is caught up, you'll see created block in the logs when a new block is created.
Troubleshooting
For more information on the various configurations for running a Frame node, you can look at the Arbitrum Nitro docs (opens in a new tab). The full list of configurations can be found here (opens in a new tab), these command line flags translate 1:1 with the config file you cloned earlier.
Please reach out on Discord if you run into any issues.