Skip to main content
ALL CHAINS

Node Operations Overview

The Elastos network is a multi-chain ecosystem. Running a node means operating one or more blockchain daemons, each serving a distinct purpose. The entire stack is managed by a single orchestrator script, node.sh, a ~5,700-line Bash script that handles downloading binaries, generating configuration, managing processes, rotating logs, and performing self-updates.

You do not need to run every component. Choose the deployment profile that matches your role.

Automated Deployment

For a guided setup experience, nodes.elastos.net provides a web-based 1-click deployer that generates and executes the node.sh commands for you. It supports all node types and handles configuration automatically.

Node Types

The Elastos network has three categories of node operators:

BPoS Supernodes (Validators)

Stake-based block producers on the ELA main chain. Require a 2,000 ELA deposit and 80,000+ voting rights to become active. The active validator set is variable under BPoS; it typically includes ~70 elected validators plus 12 Elastos Council nodes (see nodes.elastos.net). Rewards are split 25% to node owners and 75% to voters (active pledges to validators; locking stake alone does not earn).

Community validators run only the ELA mainchain. See BPoS Supernode Operations for registration and management.

Elastos Council Nodes

Members of the Elastos Council (formerly CR) run a full supernode stack — all chains, oracles, and the arbiter. Council members are elected through community voting and are responsible for governance decisions and maintaining the complete network infrastructure.

See Elastos Council Node for the full deployment guide.

BTC Miners (AuxPoW)

Bitcoin mining pools can merge-mine ELA at no additional cost. ELA blocks are anchored to Bitcoin blocks via Auxiliary Proof of Work. No ELA deposit is required.

See Merged Mining for pool integration.

Who Runs Nodes?

RoleNode TypeDescription
Community MembersBPoS SupernodeStake 2,000 ELA, earn rewards as a validator
Elastos Council MembersFull SupernodeRun the complete stack for governance participation
Application DevelopersESC/EID RPC NodePrivate EVM endpoint for dApps or DID services
Service ProvidersELA Full NodeBackend for explorers, wallets, and APIs
Mining PoolsELA + btcpoolAdd ELA merged mining alongside Bitcoin
Crypto ExchangesELA Full NodeDeposit/withdrawal processing

Community Validator Requirements

Normal community members who want to become validators run BPoS nodes (ELA mainchain only):

RequirementDetails
Stake2,000 ELA locked for 100–1,000 days
ServerVPS with 4GB+ RAM, 100GB+ SSD, Ubuntu 22.04
Voting RightsMust reach 80,000+ to become an active validator
RewardsAPR varies by network conditions; 25% to node owner, 75% to voters. See staking.elastos.net for current rates
Staking and Voting

Staking ELA and voting for supernodes is done through the Elastos Essentials wallet or the staking portal, not via node.sh CLI commands.

Network Environments

EnvironmentPurpose
MainnetLive production network
TestnetTesting and development
RegtestPrivate local development

Select the environment during node.sh ela init.

Component Map

ComponentBinaryLanguagePurpose
ELAelaGoMain chain. AuxPoW+BPoS consensus. UTXO model.
ESCesc (geth fork)GoElastos Smart Contract chain. EVM-compatible. Chain ID 20.
EIDeid (geth fork)GoElastos Identity chain. DID smart contracts. Chain ID 22.
ESC-Oraclecrosschain_oracle.jsNode.jsCross-chain bridge relay for ESC.
EID-Oraclecrosschain_eid.jsNode.jsCross-chain bridge relay for EID.
ArbiterarbiterGoCross-chain transaction coordinator.

The ELA main chain is the root of trust. The sidechains (ESC, EID) run modified geth with a PBFT consensus layer that connects back to the main chain through the Arbiter daemon.

Deployment Profiles

ProfileComponentsUse Case
ELA Full NodeELABlock explorer backend, wallet backend, chain data queries
ESC RPC NodeESC onlydApp developers needing an EVM RPC endpoint
EID RPC NodeEID onlyDID service operators
BPoS SupernodeELABlock producers participating in BPoS consensus
Elastos Council SupernodeELA + ESC + EID + Oracles + ArbiterElastos Council members running the full network stack
Mining PoolELA + btcpool componentsPool operators adding ELA merged mining to Bitcoin pools

Directory Layout

Complete directory structure after a full supernode deployment:

~/node/                                    # SCRIPT_PATH (main installation)
├── node.sh # Orchestrator script (~5,700 lines)
├── version.txt # Build version
├── commit.txt # Git commit hashes per component
├── checksum.txt # SHA256 checksums of binaries
├── extern/
│ └── node-v23.10.0-linux-x64/ # Auto-downloaded Node.js runtime
├── .node-upload/ # Staging area for updates
│ ├── ela/
│ ├── esc/
│ └── ...

├── ela/ # ─── ELA Main Chain ───
│ ├── ela # Main chain binary
│ ├── ela-cli # CLI client for RPC calls
│ ├── config.json # Generated config (RPC creds, network)
│ ├── keystore.dat # P-256 encrypted keystore
│ ├── .init # Init completion sentinel file
│ ├── output # stderr capture file
│ └── elastos/
│ ├── data/ # Chain data (LevelDB)
│ │ ├── mainnet/ # Block and state databases
│ │ └── checkpoints/ # Consensus checkpoints
│ └── logs/
│ ├── node/ # Node operation logs
│ └── dpos/ # DPoS consensus logs

├── esc/ # ─── ESC (Elastos Smart Contract Chain) ───
│ ├── esc # ESC binary (modified geth)
│ ├── data/
│ │ ├── keystore/
│ │ │ └── UTC--2024-...--abcdef1234 # Ethereum-format keystore
│ │ ├── miner_address.txt # Optional: alternative reward address
│ │ └── geth/
│ │ ├── chaindata/ # Block and state data (LevelDB)
│ │ ├── nodes/ # Peer database
│ │ └── logs/dpos/ # PBFT consensus logs
│ └── logs/
│ ├── esc-2024-01-15-10_30_00.log # Rotated log files (20MB each)
│ └── esc-2024-01-15-10_30_00.log.gz # Compressed old logs

├── eid/ # ─── EID (Elastos Identity Chain) ───
│ └── (same structure as esc/)

├── pg/ # ─── PG (Public Gaming Chain) ───
│ └── (same structure as esc/)

├── esc-oracle/ # ─── ESC Cross-Chain Oracle ───
│ ├── crosschain_oracle.js # Oracle entry point
│ ├── *.js # Oracle modules
│ ├── package.json # npm package definition
│ ├── node_modules/ # npm dependencies
│ └── logs/
│ ├── esc-oracle_out-*.log # stdout (rotated)
│ └── esc-oracle_err.log # stderr

├── eid-oracle/ # ─── EID Cross-Chain Oracle ───
│ ├── crosschain_eid.js
│ └── (same structure as esc-oracle/)

├── pg-oracle/ # ─── PG Cross-Chain Oracle ───
│ └── (same structure as esc-oracle/)

└── arbiter/ # ─── Cross-Chain Arbiter ───
├── arbiter # Arbiter binary
├── config.json # Arbiter config (sidechain RPC endpoints)
├── keystore.dat # Copy of ELA keystore
├── ela-cli -> ../ela/ela-cli # Symlink to ELA CLI
└── elastos_arbiter/ # State database (SQLite)

~/.config/elastos/ # ─── Sensitive Credentials ─── (chmod 700)
├── node.json # Network type: {"chain-type":"mainnet"}
├── ela.txt # ELA keystore password (chmod 600)
├── esc.txt # ESC keystore password (chmod 600)
├── eid.txt # EID keystore password (chmod 600)
└── pg.txt # PG keystore password (chmod 600)

Command Reference

Global Commands

CommandDescription
node.sh initInitialize all chains (prompts for mainnet/testnet)
node.sh startStart all installed daemons (dependency order)
node.sh stopStop all daemons (reverse dependency order)
node.sh statusShow status of all chains
node.sh updateUpdate all binaries to latest version
node.sh set_pathAdd node.sh to PATH via ~/.profile
node.sh set_cronInstall cron jobs for auto-restart and log rotation
node.sh update_scriptSelf-update node.sh from GitHub master

Per-Chain Commands

Replace {chain} with: ela, esc, eid, esc-oracle, eid-oracle, arbiter.

CommandDescription
node.sh {chain} initInitialize a specific chain
node.sh {chain} startStart a specific chain daemon
node.sh {chain} stopStop a specific chain daemon
node.sh {chain} statusShow detailed status of a chain
node.sh {chain} updateUpdate a chain's binary
node.sh {chain} update -yUpdate without confirmation prompts
node.sh {chain} update -pUpdate and purge checkpoints
node.sh {chain} update -nUpdate without auto-restart
node.sh {chain} compress_logCompress logs for a chain
node.sh {chain} remove_logRemove old logs for a chain

BPoS Commands

CommandDescription
node.sh ela register_bpos NAME URL BLOCKS [REGION]Register or update supernode
node.sh ela activate_bposActivate or reactivate supernode
node.sh ela unregister_bposUnregister and return deposit
node.sh ela claim_bpos AMOUNT|All [ADDRESS]Claim accumulated BPoS rewards

Elastos Council Commands

CommandDescription
node.sh ela register_crc NAME URL [REGION]Register as Elastos Council candidate
node.sh ela activate_crcActivate Elastos Council candidacy
node.sh ela unregister_crcUnregister Elastos Council candidacy
node.sh ela impeach_crcInitiate impeachment

Maintenance Commands

CommandDescription
node.sh compress_logCompress all rotated log files across all chains
node.sh remove_logRemove old compressed logs to reclaim disk space
node.sh set_cronInstall cron jobs for auto-restart on crash and log rotation

Advanced: JSON-RPC via CLI

For debugging and advanced queries, node.sh wraps ela-cli to call the ELA JSON-RPC API directly:

node.sh ela jsonrpc getcurrentheight
node.sh ela jsonrpc getconnectioncount
node.sh ela jsonrpc getbestblockhash

See Configuration for the full RPC API reference.