Become a Validator
Validators are essential to the Ramestta network, securing the blockchain and earning rewards. This guide explains the requirements and steps to become a validator.
âšī¸Two Nodes Required
Ramestta uses a dual-node architecture. You need to run both Heimdall (consensus) and Bor (execution) nodes.
Hardware Requirements
| Component | Minimum | Recommended |
|---|---|---|
| CPU | 8 cores | 16+ cores |
| RAM | 32 GB | 64 GB |
| Storage | 2 TB SSD | 4 TB NVMe SSD |
| Network | 1 Gbps | 10 Gbps |
| OS | Ubuntu 20.04 LTS | Ubuntu 22.04 LTS |
â ī¸Storage Growth
The blockchain grows approximately 1-2 GB per day. Plan for at least 2 TB of storage with room for growth.
Staking Requirements
- Minimum stake: 10,000 RAMA
- RAMA tokens for transaction fees (~100 RAMA recommended)
- ETH for Polygon parent chain transactions
- Stable internet connection with static IP recommended
Step 1: Setup Heimdall Node
Install Heimdallbash
# Clone Heimdall repository
git clone https://github.com/ramestta/heimdall.git
cd heimdall
# Build from source
make build
# Verify installation
./build/heimdalld version
# Initialize Heimdall
heimdalld init --chain=mainnet
# Download genesis file
wget https://raw.githubusercontent.com/ramestta/launch/master/mainnet-v1/without-sentry/heimdall/config/genesis.json -O ~/.heimdalld/config/genesis.jsonStep 2: Configure Heimdall
Configure Heimdall by editing two configuration files. The first is the Tendermint config:
~/.heimdalld/config/config.tomltoml
# Tendermint configuration
moniker = "your-validator-name"
[rpc]
laddr = "tcp://127.0.0.1:26657"
cors_allowed_origins = []
[p2p]
laddr = "tcp://0.0.0.0:26656"
seeds = "[email protected]:26656"
persistent_peers = ""
max_num_inbound_peers = 50
max_num_outbound_peers = 25
addr_book_strict = false
pex = true
[mempool]
size = 5000
max_txs_bytes = 1073741824
[consensus]
timeout_propose = "5s"
timeout_propose_delta = "500ms"
timeout_prevote = "1s"
timeout_prevote_delta = "500ms"
timeout_precommit = "1s"
timeout_precommit_delta = "500ms"
timeout_commit = "1s"Then configure the Heimdall-specific settings:
~/.heimdalld/config/heimdall-config.tomltoml
# Polygon RPC endpoint (required for staking validation)
eth_rpc_url = "https://polygon-mainnet.infura.io/v3/YOUR_INFURA_KEY"
# Bor RPC endpoint (local Bor node)
bor_rpc_url = "http://localhost:8545"
# Tendermint RPC (local Heimdall)
tendermint_rpc_url = "http://0.0.0.0:26657"
# Heimdall REST server
heimdall_rest_server = "http://0.0.0.0:1317"
# Checkpoint configuration
checkpoint_poll_interval = "5m0s"
syncer_poll_interval = "1m0s"
no_ack_wait_time = "30m0s"
# Gas settings for Polygon transactions
main_chain_gas_limit = "5000000"
main_chain_max_gas_price = "400000000000"
# Chain ID
chain = "heimdall-1370"â ī¸Infura/Alchemy Required
You need a Polygon RPC endpoint (Infura, Alchemy, or your own Polygon node) for Heimdall to verify checkpoints on Polygon. Get a free API key at infura.io or alchemy.com.
Step 3: Setup Bor Node
Install Borbash
# Clone Bor repository
git clone https://github.com/ramestta/bor.git
cd bor
# Build from source
make bor
# Verify installation
./build/bin/bor version
# Initialize Bor
bor init --chain mainnet
# Download genesis file
wget https://raw.githubusercontent.com/ramestta/launch/master/mainnet-v1/without-sentry/bor/genesis.json -O ~/genesis.json
bor init ~/genesis.jsonStep 4: Configure Bor
~/.bor/config.tomltoml
[Node]
DataDir = "/var/lib/bor"
KeyStoreDir = "/var/lib/bor/keystore"
[Node.HTTPServer]
Enabled = true
ListenAddr = "0.0.0.0:8545"
Vhosts = ["*"]
Corsdomain = ["*"]
API = ["eth", "net", "web3", "txpool", "bor"]
[Node.P2P]
ListenAddr = "0.0.0.0:30303"
MaxPeers = 50
NoDiscovery = false
[Eth]
NetworkId = 1370
SyncMode = "full"
[Eth.TxPool]
Locals = []
NoLocals = false
Journal = ""
Rejournal = "1h0m0s"
PriceLimit = 1000000000
PriceBump = 10
AccountSlots = 16
GlobalSlots = 32768
AccountQueue = 64
GlobalQueue = 131072
Lifetime = "3h0m0s"
[Eth.Miner]
GasFloor = 20000000
GasCeil = 20000000
GasPrice = 1000000000
Recommit = "2s"Step 5: Create Validator Key
Generate Keysbash
# Generate Heimdall validator key
heimdalld generate-validatorkey <your-eth-private-key>
# The validator key will be stored at:
# ~/.heimdalld/config/priv_validator_key.json
# Generate Bor keystore
bor account new --datadir ~/.bor
# You'll be prompted to enter a password
# Save the password in a secure file
# Create password file
echo "your-secure-password" > ~/.bor/password.txt
chmod 600 ~/.bor/password.txtâ ī¸Security
Keep your validator keys secure! Never share
priv_validator_key.json or your keystore password.Step 6: Start Services
Create Systemd Servicesbash
# Create Heimdall service
sudo tee /etc/systemd/system/heimdalld.service > /dev/null <<EOF
[Unit]
Description=Heimdall Daemon
After=network.target
[Service]
User=$USER
Type=simple
ExecStart=/usr/local/bin/heimdalld start
Restart=on-failure
RestartSec=5
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
# Create Bor service
sudo tee /etc/systemd/system/bor.service > /dev/null <<EOF
[Unit]
Description=Bor Daemon
After=network.target heimdalld.service
Requires=heimdalld.service
[Service]
User=$USER
Type=simple
ExecStart=/usr/local/bin/bor server --config ~/.bor/config.toml
Restart=on-failure
RestartSec=5
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
# Enable and start services
sudo systemctl daemon-reload
sudo systemctl enable heimdalld bor
sudo systemctl start heimdalld
# Wait for Heimdall to sync, then start Bor
# Check sync status:
curl -s localhost:26657/status | jq '.result.sync_info'Step 7: Stake and Register
After your nodes are synced, register as a validator on the staking contract:
Register Validator (using SDK)javascript
import { RamesttaStaking } from '@ramestta/staking-sdk';
import { ethers } from 'ethers';
async function registerValidator() {
const provider = new ethers.JsonRpcProvider('https://polygon-rpc.com');
const signer = new ethers.Wallet(process.env.PRIVATE_KEY, provider);
const staking = new RamesttaStaking(signer);
// Approve RAMA tokens for staking
const stakeAmount = ethers.parseEther('10000'); // 10,000 RAMA
await staking.approve(stakeAmount);
// Stake and become validator
const tx = await staking.stake(stakeAmount, {
heimdallFee: ethers.parseEther('10'),
acceptDelegation: true,
commissionRate: 10 // 10% commission
});
console.log('Validator registered:', tx.hash);
}
registerValidator();Monitoring Your Validator
Monitor Commandsbash
# Check Heimdall sync status
curl -s localhost:26657/status | jq '.result.sync_info'
# Check Bor sync status
curl -X POST -H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' \
http://localhost:8545
# Check validator signing info
curl -s localhost:26657/validators | jq
# View Heimdall logs
journalctl -u heimdalld -f
# View Bor logs
journalctl -u bor -fValidator Rewards
| Reward Type | Description | Rate |
|---|---|---|
| Block Rewards | Rewards for producing blocks | Variable based on total stake |
| Checkpoint Rewards | Rewards for signing checkpoints | Shared among signers |
| Commission | Percentage from delegators | 0-100% (you set) |
| Transaction Fees | Fees from transactions in blocks | Varies by network usage |
â
Support
Need help? Join the Ramestta Telegram for validator support and discussions.