Skip to main content
HOW-TO
MAIN CHAIN

Set Up a BPoS Supernode

End-to-end installation for a community BPoS validator running the Elastos main chain. A BPoS node only needs the main chain (ELA) — node.sh calls this the mainchain profile, so you skip the EVM side chains and the arbiter entirely. Follow these steps in order and you'll end up with a registered, activated supernode earning rewards.

Council members

Running for the Elastos DAO Council? You need the full ecosystem (ELA + ESC + EID + PG + Arbiter), not just the main chain. Follow Set Up Your Council Node instead.

At a glance
  • Who: Anyone running a community BPoS validator
  • What you need: A Ubuntu 22.04 LTS (or newer) server, 2,000 ELA deposit, Elastos Essentials wallet
  • How long: ~15 minutes hands-on, 24–72 hours background sync
  • What you'll end up with: A registered, activated BPoS node working toward the 80,000-voting-rights activation threshold

1. Server requirements

  • OS: Ubuntu 22.04 LTS or newer (Ubuntu only — node.sh is not tested or supported on other distributions)
  • 4+ CPU cores
  • 8+ GB RAM (16 GB recommended)
  • 100+ GB storage
  • SSH access

2. Install Elastos Node for Ubuntu

One command downloads node.sh, verifies its published SHA-256 checksum and runs a syntax check, then installs it to ~/node:

curl -fsSL https://raw.githubusercontent.com/elastos/Elastos.Node/master/build/skeleton/install.sh | bash

3. Install dependencies, then initialize (choose the mainchain profile)

Install the packages node.sh needs, then initialize the chain. When setup asks for a profile, choose mainchain so it runs only ELA (no side chains, no arbiter):

sudo apt-get install -y jq lsof apache2-utils curl openssl

~/node/node.sh setup # choose the 'mainchain' profile; press Enter for an auto keystore password
~/node/node.sh swap # optional: 16G swap headroom for the initial sync
~/node/node.sh firewall # opens 20338/20339; detects your SSH port and asks before enabling
~/node/node.sh set_cron # restart on reboot + log compression

What each step does:

  1. Dependencies — the packages node.sh requires: jq, lsof, apache2-utils, curl, openssl.
  2. setup — downloads the ELA binary and creates the keystore, prompting for a password (press Enter to auto-generate; stored in ~/.config/elastos/).
  3. swap (optional) — adds 16G of swap headroom for the initial sync.
  4. firewall — opens only the ELA peer/consensus ports (20338, 20339). It detects your real SSH port (sshd -T + $SSH_CONNECTION) and asks for confirmation before enabling ufw, so a non-22 SSH session is never locked out. The ELA RPC (20336) stays bound to 127.0.0.1 and is never exposed to the internet.
  5. set_cron — enables autostart on reboot and log compression.
Already initialized other chains?

If node.sh was set up as full before, switch it to main-chain-only any time with ~/node/node.sh profile set mainchain. The profile governs which chains start, stop, status, and update act on.

4. Start the node

~/node/node.sh start

Runs in the background. Initial sync may take 24–72 hours depending on server performance.

5. Check sync status

~/node/node.sh summary        # state, height, peers, sync
~/node/node.sh health # one-line verdict; non-zero exit if unhealthy

Watch the height. Do not proceed to registration until your node has caught up to current network height — registering an unsynced node wastes the deposit and may get the node jailed.

6. Register your node in Essentials

First, copy your node's public key (you'll paste it into the registration form):

~/node/node.sh ela status --verbose

Copy the Public Key value from the ela block — the 66-character hex string starting with 02 or 03. Then, with your node fully synced:

  1. Open Elastos Essentials
  2. Swipe to the BPoS Voting page (third page)
  3. Tap the + icon in the upper right
  4. Confirm the warning, then fill in the registration form:
    • Node name — your validator's display name
    • Country/region — your node's location
    • Lock duration — 100 to 1,000 days (longer lock = higher vote weight)
  5. Set the node public key to the one you copied above — a mismatch here means your node will never produce blocks
  6. Tap Register and confirm the 2,000 ELA deposit transaction

For the CLI alternative and the full reference (lock-block math, region overrides, fee details), see BPoS Supernode Operations → Registration.

7. Activate BPoS

After the registration transaction confirms, activate the validator role on your server:

~/node/node.sh ela activate_bpos

What's next

Your node is registered and activated but it's still in the candidate pool. To become an active block producer, you need to accumulate 80,000+ voting rights:

Voting Rights = Staked ELA × log₁₀(Lock Days)

That can come from your own stake and from community voters. Until you cross the threshold, your node sits inactive (no penalty, no rewards). Build community support, demonstrate uptime, and the votes will follow.

Stay up — get alerted. Report your node's status to a monitor so you hear about an outage before it costs you blocks. The node reports outbound, so no inbound port is opened and no credentials are shared:

~/node/node.sh monitor <https-monitor-url>     # e.g. the community monitor; ~/node/node.sh monitor off to stop

Keep current:

~/node/node.sh update_script   # update node.sh itself (checksum-verified)
~/node/node.sh update # update the chain binaries

Ongoing operations: