Node Operators
On-Chain Registration & Staking
Every keeper must register its address and BLS public key on-chain before it can participate in fulfillment. Registration happens per chain.
Every keeper must register its address and BLS public key on-chain before it can participate in fulfillment. Registration happens per chain.
30.5.1 EVM Chains (Base, OP, ARB, Linea, Ethereum, Polygon, BNB, AVAX, Moonbeam, WorldChain, HyperEVM)
# ── Step 1: Get your BLS public key ────────────────────────────
randproof bls pubkey ./keys/bls-keystore.json
# Output: 0x1a2b3c4d... (save this)
# ── Step 2: Register on Base (example) ─────────────────────────
randproof keeper register \
--chain base \
--keeper-address 0xYourKeeperAddress \
--bls-pubkey 0xYourBLSPublicKey \
--private-key 0xYourPrivateKey
# Output:
# Transaction: 0xabc123... (KeeperCoordinator.registerKeeper())
# Gas used: ~85,000
# Block: 12345678
# Status: ✓ Registered
# ── Step 3: Stake minimum ETH on Base ──────────────────────────
randproof keeper stake \
--chain base \
--amount 0.005 \
--asset eth \
--private-key 0xYourPrivateKey
# Output:
# Staking 0.005 ETH on Base...
# Transaction: 0xdef456...
# Stake confirmed. Node active.
# ── Step 4: Verify registration ─────────────────────────────────
randproof keeper status --chain base --address 0xYourKeeperAddress
# Output:
# Chain: Base
# Status: ACTIVE
# Stake: 0.005 ETH (~$20)
# BLS Key: 0x1a2b3c...
# Events fulfilled: 0
# Uptime: 100%
# Earnings: 0.00 USDC
# ── Repeat for each chain you are joining ───────────────────────
randproof keeper register --chain optimism --bls-pubkey 0x... --keystore ./keys/evm-keystore.json --password-file ./keys/.password
randproof keeper stake --chain optimism --amount 0.005 --asset eth --keystore ./keys/evm-keystore.json --password-file ./keys/.password
randproof keeper register --chain arbitrum --bls-pubkey 0x... --keystore ./keys/evm-keystore.json --password-file ./keys/.password
randproof keeper stake --chain arbitrum --amount 0.005 --asset eth --keystore ./keys/evm-keystore.json --password-file ./keys/.password30.5.2 Solana
# Install Solana CLI if not present
sh -c "$(curl -sSfL https://release.solana.com/v1.18.0/install)"
export PATH="$HOME/.local/share/solana/install/active_release/bin:$PATH"
# Generate Solana keeper keypair
solana-keygen new --outfile ./keys/solana-keypair.json
solana-keygen pubkey ./keys/solana-keypair.json
# Fund with SOL (send 0.6 SOL: 0.5 stake + 0.1 gas buffer)
solana balance ./keys/solana-keypair.json --url mainnet-beta
# Register and stake via RandProof CLI
randproof keeper register --chain solana --keypair ./keys/solana-keypair.json
randproof keeper stake --chain solana --amount 0.5 --asset sol \
--keypair ./keys/solana-keypair.json30.5.3 Polkadot
# Install Polkadot.js CLI
npm install -g @polkadot/cli
# Generate sr25519 keypair for BABE VRF participation
subkey generate --scheme sr25519
# Save: Secret seed, Public key (SS58), Account ID
# Register via RandProof CLI (requires 5 DOT minimum)
randproof keeper register --chain polkadot \
--mnemonic "word1 word2 ... word12" \
--bls-pubkey 0xYourBLSPublicKey
randproof keeper stake --chain polkadot --amount 5 --asset dot \
--mnemonic "word1 word2 ... word12"30.5.4 TON
# TON registration uses mnemonic-based wallet
randproof keeper register --chain ton \
--mnemonic "word1 word2 ... word24" \
--bls-pubkey 0xYourBLSPublicKey
randproof keeper stake --chain ton --amount 10 --asset ton \
--mnemonic "word1 word2 ... word24"30.5.5 Cardano
# Generate Cardano payment keys
cardano-cli address key-gen \
--normal-key \
--signing-key-file ./keys/cardano.skey \
--verification-key-file ./keys/cardano.vkey
cardano-cli address build \
--payment-verification-key-file ./keys/cardano.vkey \
--mainnet
# Register and stake (50 ADA minimum)
randproof keeper register --chain cardano \
--signing-key ./keys/cardano.skey \
--bls-pubkey 0xYourBLSPublicKey
randproof keeper stake --chain cardano --amount 50 --asset ada \
--signing-key ./keys/cardano.skey