Skip to content

Commit a6b7b12

Browse files
authored
Create Rampage L1 Validator Guide
Added a comprehensive guide for running a Rampage L1 validator node on the testnet, including sections on hardware requirements, software prerequisites, node initialization, and security best practices.
1 parent 2be9e5c commit a6b7b12

1 file changed

Lines changed: 362 additions & 0 deletions

File tree

docs/VALIDATOR-GUIDE.md

Lines changed: 362 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,362 @@
1+
# Rampage L1 Validator Guide
2+
3+
> **A comprehensive guide for running a Rampage L1 validator node on the testnet.**
4+
5+
---
6+
7+
## Table of Contents
8+
9+
1. [Overview](#overview)
10+
2. [Hardware Requirements](#hardware-requirements)
11+
3. [Software Prerequisites](#software-prerequisites)
12+
4. [Building from Source](#building-from-source)
13+
5. [Node Initialization](#node-initialization)
14+
6. [Genesis Configuration](#genesis-configuration)
15+
7. [Joining the Testnet](#joining-the-testnet)
16+
8. [Creating a Validator](#creating-a-validator)
17+
9. [Validator Operations](#validator-operations)
18+
10. [Monitoring](#monitoring)
19+
11. [Security Best Practices](#security-best-practices)
20+
12. [Troubleshooting](#troubleshooting)
21+
22+
---
23+
24+
## Overview
25+
26+
Rampage L1 validators are responsible for proposing and validating blocks on the network. The chain runs CometBFT (Tendermint) Byzantine fault-tolerant consensus, where validators stake RPM tokens and participate in block production proportional to their stake weight.
27+
28+
Validators who act honestly earn block rewards and transaction fee shares. Validators who double-sign, go offline, or otherwise violate protocol rules are subject to slashing penalties.
29+
30+
---
31+
32+
## Hardware Requirements
33+
34+
### Minimum (Testnet)
35+
36+
| Resource | Specification |
37+
|----------|---------------|
38+
| CPU | 4 cores / 8 threads (x86_64) |
39+
| RAM | 16 GB |
40+
| Storage | 500 GB SSD (NVMe recommended) |
41+
| Network | 100 Mbps symmetric |
42+
| OS | Ubuntu 22.04 LTS or Debian 12 |
43+
44+
### Recommended (Production / Mainnet)
45+
46+
| Resource | Specification |
47+
|----------|---------------|
48+
| CPU | 8+ cores / 16 threads |
49+
| RAM | 32 GB |
50+
| Storage | 1 TB NVMe SSD |
51+
| Network | 1 Gbps symmetric |
52+
| OS | Ubuntu 22.04 LTS |
53+
54+
> **Note:** Storage requirements will grow over time as the chain produces blocks. Plan for expansion.
55+
56+
---
57+
58+
## Software Prerequisites
59+
60+
- **Go 1.21+**: [Download](https://go.dev/dl/)
61+
- **make**: Build toolchain
62+
- **git**: Version control
63+
- **jq**: JSON processing (for script helpers)
64+
- **curl**: HTTP client
65+
66+
### Install Go (Ubuntu/Debian)
67+
68+
```bash
69+
wget https://go.dev/dl/go1.21.6.linux-amd64.tar.gz
70+
sudo rm -rf /usr/local/go
71+
sudo tar -C /usr/local -xzf go1.21.6.linux-amd64.tar.gz
72+
export PATH=$PATH:/usr/local/go/bin
73+
export GOPATH=$HOME/go
74+
export PATH=$PATH:$GOPATH/bin
75+
echo 'export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin' >> ~/.bashrc
76+
source ~/.bashrc
77+
go version
78+
```
79+
80+
---
81+
82+
## Building from Source
83+
84+
```bash
85+
# Clone the repository
86+
git clone https://github.com/RampageRPM1/rampage.git
87+
cd rampage
88+
89+
# Build the chain binary
90+
make build
91+
92+
# Verify the build
93+
./build/rampaged version
94+
95+
# Install to $GOPATH/bin
96+
make install
97+
rampaged version
98+
```
99+
100+
---
101+
102+
## Node Initialization
103+
104+
```bash
105+
# Set your moniker (validator display name)
106+
export MONIKER="your-validator-name"
107+
export CHAIN_ID="rampage-testnet-1"
108+
109+
# Initialize the node
110+
rampaged init $MONIKER --chain-id $CHAIN_ID
111+
112+
# This creates:
113+
# ~/.rampage/config/config.toml - CometBFT configuration
114+
# ~/.rampage/config/app.toml - Application configuration
115+
# ~/.rampage/config/genesis.json - Genesis file (will be replaced)
116+
# ~/.rampage/data/ - Chain data directory
117+
```
118+
119+
### Key Generation
120+
121+
```bash
122+
# Create a new validator key
123+
rampaged keys add validator --keyring-backend test
124+
125+
# IMPORTANT: Save the mnemonic phrase securely!
126+
# This key controls your validator and staked funds.
127+
128+
# View your validator address
129+
rampaged keys show validator -a --keyring-backend test
130+
131+
# View your validator operator address
132+
rampaged keys show validator --bech val -a --keyring-backend test
133+
```
134+
135+
> **Security Warning:** On mainnet, use `--keyring-backend os` or a hardware security module (HSM). The `test` backend is for testnet only.
136+
137+
---
138+
139+
## Genesis Configuration
140+
141+
```bash
142+
# Download the official testnet genesis file
143+
curl -o ~/.rampage/config/genesis.json \
144+
https://raw.githubusercontent.com/RampageRPM1/rampage/main/docs/static/genesis.json
145+
146+
# Verify the genesis file hash
147+
sha256sum ~/.rampage/config/genesis.json
148+
# Expected: [will be published with testnet launch]
149+
```
150+
151+
---
152+
153+
## Joining the Testnet
154+
155+
### Configure Peers
156+
157+
```bash
158+
# Set persistent peers in config.toml
159+
# Seed nodes will be published at testnet launch
160+
SEEDS="[seed-node-id]@[seed-ip]:26656"
161+
sed -i "s/seeds = \"\"/seeds = \"$SEEDS\"/" ~/.rampage/config/config.toml
162+
163+
# Set minimum gas prices
164+
sed -i 's/minimum-gas-prices = ""/minimum-gas-prices = "0.001urpm"/' ~/.rampage/config/app.toml
165+
```
166+
167+
### Start the Node
168+
169+
```bash
170+
# Start syncing
171+
rampaged start
172+
173+
# Or run as a systemd service (recommended)
174+
sudo tee /etc/systemd/system/rampaged.service > /dev/null <<EOF
175+
[Unit]
176+
Description=Rampage L1 Node
177+
After=network-online.target
178+
179+
[Service]
180+
User=$USER
181+
ExecStart=$(which rampaged) start
182+
Restart=always
183+
RestartSec=3
184+
LimitNOFILE=65535
185+
186+
[Install]
187+
WantedBy=multi-user.target
188+
EOF
189+
190+
sudo systemctl daemon-reload
191+
sudo systemctl enable rampaged
192+
sudo systemctl start rampaged
193+
194+
# Monitor logs
195+
journalctl -u rampaged -f
196+
```
197+
198+
### Verify Sync Status
199+
200+
```bash
201+
# Check if the node is catching up
202+
rampaged status | jq '.SyncInfo.catching_up'
203+
# Should return `false` when fully synced
204+
205+
# Check latest block height
206+
rampaged status | jq '.SyncInfo.latest_block_height'
207+
```
208+
209+
---
210+
211+
## Creating a Validator
212+
213+
> **Wait until your node is fully synced before creating a validator.**
214+
215+
```bash
216+
rampaged tx staking create-validator \
217+
--amount=1000000urpm \
218+
--pubkey=$(rampaged tendermint show-validator) \
219+
--moniker=$MONIKER \
220+
--chain-id=$CHAIN_ID \
221+
--commission-rate="0.10" \
222+
--commission-max-rate="0.20" \
223+
--commission-max-change-rate="0.01" \
224+
--min-self-delegation="1" \
225+
--gas="auto" \
226+
--gas-adjustment=1.5 \
227+
--gas-prices="0.001urpm" \
228+
--from=validator \
229+
--keyring-backend=test
230+
```
231+
232+
### Verify Your Validator
233+
234+
```bash
235+
# Check if your validator is in the active set
236+
rampaged query staking validators --output json | \
237+
jq '.validators[] | select(.description.moniker=="'$MONIKER'")'
238+
239+
# Check validator signing info
240+
rampaged query slashing signing-info $(rampaged tendermint show-validator)
241+
```
242+
243+
---
244+
245+
## Validator Operations
246+
247+
### Delegate Additional Tokens
248+
249+
```bash
250+
rampaged tx staking delegate \
251+
$(rampaged keys show validator --bech val -a --keyring-backend test) \
252+
500000urpm \
253+
--from=validator \
254+
--chain-id=$CHAIN_ID \
255+
--gas=auto \
256+
--keyring-backend=test
257+
```
258+
259+
### Unjail a Validator
260+
261+
If your validator is jailed for downtime:
262+
263+
```bash
264+
rampaged tx slashing unjail \
265+
--from=validator \
266+
--chain-id=$CHAIN_ID \
267+
--gas=auto \
268+
--keyring-backend=test
269+
```
270+
271+
### Withdraw Rewards
272+
273+
```bash
274+
rampaged tx distribution withdraw-rewards \
275+
$(rampaged keys show validator --bech val -a --keyring-backend test) \
276+
--commission \
277+
--from=validator \
278+
--chain-id=$CHAIN_ID \
279+
--gas=auto \
280+
--keyring-backend=test
281+
```
282+
283+
---
284+
285+
## Monitoring
286+
287+
### Prometheus Metrics
288+
289+
Enable Prometheus in `config.toml`:
290+
291+
```toml
292+
[instrumentation]
293+
prometheus = true
294+
prometheus_listen_addr = ":26660"
295+
```
296+
297+
### Key Metrics to Monitor
298+
299+
- **Block height** – Ensure the node is keeping up with the network
300+
- **Missed blocks** – Excessive missed blocks lead to jailing
301+
- **Peer count** – Maintain adequate peer connections
302+
- **Memory and disk usage** – Plan capacity accordingly
303+
- **Validator uptime** – Target 99.9%+ uptime
304+
305+
### Health Check
306+
307+
```bash
308+
# Quick status check
309+
curl -s localhost:26657/status | jq '.result.sync_info'
310+
311+
# Check number of peers
312+
curl -s localhost:26657/net_info | jq '.result.n_peers'
313+
```
314+
315+
---
316+
317+
## Security Best Practices
318+
319+
1. **Key Management:** Use a separate machine for key storage. Consider HSM for mainnet.
320+
2. **Firewall:** Only expose port 26656 (P2P). Block RPC (26657) and API (1317) from public access.
321+
3. **Sentry Nodes:** Run sentry nodes in front of your validator to mitigate DDoS.
322+
4. **Updates:** Monitor the repository for security patches and upgrade promptly.
323+
5. **Backups:** Regularly back up `~/.rampage/config/priv_validator_key.json` and `~/.rampage/data/priv_validator_state.json`.
324+
6. **SSH Hardening:** Use key-based authentication only. Disable root login.
325+
7. **Monitoring Alerts:** Set up alerts for missed blocks, low disk space, and node crashes.
326+
327+
---
328+
329+
## Troubleshooting
330+
331+
### Node Won't Start
332+
333+
```bash
334+
# Check logs for errors
335+
journalctl -u rampaged --no-pager -n 50
336+
337+
# Reset chain data (if corrupt)
338+
rampaged tendermint unsafe-reset-all
339+
# Then re-download genesis and restart
340+
```
341+
342+
### Node Stuck Syncing
343+
344+
- Verify persistent peers are correct and reachable
345+
- Check firewall allows outbound connections on port 26656
346+
- Ensure system clock is synchronized (use NTP)
347+
348+
### Validator Jailed
349+
350+
- Wait for the jailing period to expire
351+
- Ensure the node is fully synced and producing blocks
352+
- Run the unjail command above
353+
354+
---
355+
356+
## Testnet Faucet
357+
358+
Testnet RPM tokens for staking are available through the faucet (URL to be published at testnet launch).
359+
360+
---
361+
362+
*Maintained by Shea Patrick Kastl. Copyright 2025 Shea Patrick Kastl. For questions, open a GitHub Discussion or Issue.*

0 commit comments

Comments
 (0)