Deploying Avalanche Node
Avalanche is not one network but three interconnected chains plus Subnets mechanism for custom blockchains. Before deploying a node, understand why: for interacting with C-Chain (EVM-compatible, all DeFi is there), P-Chain (platform, validator management and Subnets), X-Chain (UTXO, asset exchange), or for validating your own Subnet.
AvalancheGo: Single Client for All Chains
Avalanche nodes work via AvalancheGo — official Go client. One process handles all three chains simultaneously.
System Requirements
| Type | CPU | RAM | Disk | Bandwidth |
|---|---|---|---|---|
| Full node (non-validator) | 8 cores | 16 GB | 1 TB SSD | 25 Mbps |
| Validator | 8+ cores | 16 GB | 1 TB SSD | 25+ Mbps |
| Archive (C-Chain) | 8+ cores | 32 GB | 4+ TB NVMe | 25 Mbps |
C-Chain archive node stores full EVM state history — needed for historical eth_call and debug_traceTransaction.
Installation
# Official install script
curl -sSfL https://raw.githubusercontent.com/ava-labs/avalanche-docs/master/scripts/avalanchego-installer.sh \
| sh -s -- --ip dynamic --rpc-port 9650 --http-host 0.0.0.0
# Or manually
VERSION=$(curl -s https://api.github.com/repos/ava-labs/avalanchego/releases/latest \
| jq -r .tag_name)
wget "https://github.com/ava-labs/avalanchego/releases/download/${VERSION}/avalanchego-linux-amd64-${VERSION}.tar.gz"
tar xvf avalanchego-linux-amd64-${VERSION}.tar.gz
Configuration
// ~/.avalanchego/configs/node.json
{
"network-id": "mainnet",
"http-host": "127.0.0.1",
"http-port": 9650,
"staking-port": 9651,
"db-dir": "/data/avalanchego",
"log-level": "info",
"log-dir": "/var/log/avalanchego",
// Only if public RPC needed
"http-allowed-hosts": "your-domain.com,localhost",
// For C-Chain archive mode
"chain-config-dir": "/data/avalanchego/configs/chains"
}
// /data/avalanchego/configs/chains/C/config.json
{
"eth-apis": ["eth","eth-filter","net","web3","internal-eth","internal-blockchain","internal-transaction"],
"pruning-enabled": false, // archive mode
"tx-lookup-limit": 0,
"snapshot-async": true,
"rpc-gas-cap": 50000000,
"rpc-tx-fee-cap": 100
}
Systemd Unit
[Unit]
Description=AvalancheGo Node
After=network.target
[Service]
User=avalanche
ExecStart=/home/avalanche/avalanche-node/avalanchego \
--config-file=/home/avalanche/.avalanchego/configs/node.json
Restart=always
RestartSec=10
LimitNOFILE=65536
StandardOutput=append:/var/log/avalanchego/node.log
StandardError=append:/var/log/avalanchego/error.log
[Install]
WantedBy=multi-user.target
Sync and Bootstrapping
AvalancheGo uses state sync (not full replay from genesis) — node downloads current state from peers. Sync time: 2–6 hours for full node, 12–24 hours for archive.
Monitor progress:
# Bootstrapping status
curl -X POST --data '{"jsonrpc":"2.0","id":1,"method":"info.isBootstrapped","params":{"chain":"C"}}' \
-H 'Content-Type: application/json' \
http://127.0.0.1:9650/ext/info
# Response: {"result":{"isBootstrapped":true},...} — node ready
Validator: Requirements and Staking
To run validator need minimum 2000 AVAX stake (mainnet, ~$60k at 2024 prices). Uptime requirement — 80%: if node crashes too often, lose validation rewards.
# Get Node ID for staking
curl -X POST --data '{"jsonrpc":"2.0","id":1,"method":"info.getNodeID"}' \
-H 'Content-Type: application/json' \
http://127.0.0.1:9650/ext/info
# Use Node ID when adding validator via P-Chain
# via core.app wallet or Ledger
For validator staking port (9651) must be open publicly — mandatory for P2P.
Subnet: Custom Blockchain Network
Subnet is custom chain with own validation rules, VM, gas token. Subnet validators must also validate Primary Network (same 2000 AVAX stake).
# Install Avalanche CLI for Subnet work
curl -sSfL https://raw.githubusercontent.com/ava-labs/avalanche-cli/main/scripts/install.sh | sh
# Create new Subnet with EVM (Ethereum-compatible)
avalanche subnet create mySubnet
# Choose: SubnetEVM, configure chainId, gas token, genesis
# Deploy to testnet (Fuji)
avalanche subnet deploy mySubnet --fuji
SubnetEVM is go-ethereum fork adapted for Avalanche. Supports all EVM tools: MetaMask, Hardhat, Foundry — just add custom RPC endpoint.
Node Monitoring
# Built-in metrics via API
curl http://127.0.0.1:9650/ext/metrics
# Prometheus-compatible format
Grafana dashboard: github.com/ava-labs/avalanchego-grafana.
Key metrics:
-
avalanche_{chainID}_handler_chits_sum— consensus speed -
avalanche_network_peers— peer count (norm >50) -
avalanche_{chainID}_vm_eth_rpc_duration_*— RPC latency - Disk I/O — C-Chain under load aggressively reads/writes storage







