BPoS Supernode Operations
BPoS Overview
Bonded Proof of Stake (BPoS) is Elastos's consensus mechanism. Supernodes produce blocks and earn rewards. To become a supernode:
- Run a fully synced ELA node
- Deposit a minimum of 2,000 ELA
- Register your node on-chain
- Receive votes from the community
- Top-voted nodes become active block producers
Rewards are split 25% to node owners and 75% to voters (community members with active pledges of stake to validators—voting earns the reward share, not locking ELA alone). Penalties apply for malicious behavior (see Jailing & Slashing).
Registration
Prerequisites:
- Fully synced ELA node
- At least 2,000 ELA (for the deposit)
- Elastos Essentials wallet installed
- Additional ELA for transaction fees
Option A: Register via Essentials Wallet
- Open Elastos Essentials and swipe to the BPoS Voting page (third page)
- Tap the "+" icon in the upper right corner
- Confirm the warning dialog and proceed to the registration form
- Fill in the required fields:
- Node name: Your validator's display name
- Country/region: Your node's geographic location
- Lock duration: 100 to 1,000 days (longer lock = higher vote weight)
- Set the node public key to match your server's public key (found via
node.sh ela status) - Tap Register and confirm the transaction
You must update the node public key to match your server before confirming. A mismatch will prevent your node from producing blocks.
Option B: Register via CLI
# Arguments: NAME URL LOCK_BLOCKS [REGION]
# LOCK_BLOCKS: Minimum 7,201 (mainnet) / 21,601 (testnet)
# Maximum 720,000 (~1 year)
node.sh ela register_bpos "MySupernodeName" "https://mynode.example.com" 14400
The LOCK_BLOCKS parameter determines how long the deposit is locked. Longer lock periods receive higher vote weight. 14,400 blocks ≈ 20 days on mainnet (~2-minute block time). Minimum: 7,201 blocks (~10 days). Maximum: 720,000 blocks (~2.7 years).
Region is auto-detected from your IP address using geolocation. You can override it with the optional 4th argument.
Activation Threshold
After registration is confirmed on-chain (typically within one block, ~2 minutes), your node enters the candidate pool. However, a node must accumulate 80,000+ voting rights before it becomes an active block producer.
Voting rights are calculated per vote as:
Voting Rights = Staked ELA × log₁₀(Lock Days)
For example, staking 50,000 ELA locked for 100 days yields 50,000 × log₁₀(100) = 100,000 voting rights.
If a node's total voting rights drop below 80,000, it becomes inactive and stops producing blocks — but this is not a penalty. No fine is applied. The node reactivates automatically once it regains sufficient voting support.
To explicitly activate a node that was previously penalized:
node.sh ela activate_bpos
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.
How to Stake and Vote via Essentials
- Open Elastos Essentials (iOS)
- Swipe to the BPoS Voting page (third page)
- Browse the list of registered supernodes
- Select the node you want to vote for
- Choose a lock duration (100–1,000 days) and amount to stake
- Confirm the transaction
Vote weight is calculated as:
Voting Rights = Staked ELA × log₁₀(Lock Days)
Longer lock periods give higher vote weight. Votes are implemented as StakeTicket smart contracts on the ESC sidechain.
How to Unstake
- Open Essentials and navigate to the ELA Staking section
- Select the active stake you want to withdraw
- Confirm the unstaking transaction
- Wait for the lock period to expire before funds are returned
Claiming Rewards
BPoS rewards accumulate and must be claimed manually. Rewards are split 25% to the node owner and 75% to voters (proportional to voting rights from active pledges).
Via Essentials Wallet
- Open Elastos Essentials and navigate to the ELA Staking section
- Select Withdraw
- Enter the amount you want to claim
- Confirm the transaction
Via CLI
# Claim all accumulated rewards
node.sh ela claim_bpos All
# Claim a specific amount
node.sh ela claim_bpos 50
# Claim to a specific address
node.sh ela claim_bpos 50 EXyz...
Updating Node Info
If your IP address changes or you want to update your node's name/URL:
# Re-register with updated information
# Same command as initial registration — it detects existing registration
node.sh ela register_bpos "NewName" "https://newurl.example.com" 14400
Penalties
Supernodes are penalized for malicious behavior — not for simple downtime. For the complete reference on offense types, fines, jailing conditions, and best practices, see Jailing & Slashing.
Quick summary:
| Behavior | Consequence |
|---|---|
| Downtime (missed blocks) | Marked inactive after missing consecutive on-duty rotations. No fine. |
| Illegal Block / Proposal / Votes | 200 ELA deducted and burned. Node marked Illegal. |
| Deposit falls below 2,000 ELA after fine | Node is jailed. Must top up and reactivate. |
Monitor your node's penalty status:
node.sh ela status
Fixing Illegal Status
A BPoS validator node gets marked as Illegal when the network detects a consensus violation, most commonly double-signing (producing two different block proposals for the same block height). The penalty is automatic and immediate:
- The node is deactivated
- 200 ELA is deducted from the node's deposit
- All voter support becomes inactive (voters earn no rewards)
Step 1: Find Your Node's Deposit Address
Every BPoS node has a unique D-prefix deposit address created during registration. To find it:
Method A: Using the RPC
# 1. Get your node's registration block height
curl -X POST https://api.elastos.io/ela \
-H 'Content-Type: application/json' \
-d '{"method":"listproducers","params":{"start":0,"limit":500,"state":"all"}}'
# Find your node by nickname, note the "registerheight" value
# 2. Get the registration block
curl -X POST https://api.elastos.io/ela \
-H 'Content-Type: application/json' \
-d '{"method":"getblockbyheight","params":{"height":YOUR_REGISTER_HEIGHT}}'
# 3. In the response, find the type 9 transaction
# The output with a D-prefix address is your deposit address
Method B: Using the block explorer
Go to https://blockchain.elastos.io/block/YOUR_REGISTER_HEIGHT and find the type 9 (register producer) transaction. The output going to a D-prefix address is your deposit address.
Step 2: Send 200 ELA to the Deposit Address
Send exactly 200 ELA to your D-prefix deposit address using any Elastos wallet (Essentials, Web Wallet, or CLI).
This covers the penalty that was deducted when the node was marked Illegal.
You can verify the penalty status via RPC:
curl -X POST https://api.elastos.io/ela \
-H 'Content-Type: application/json' \
-d '{"method":"getdepositcoin","params":{"ownerpublickey":"YOUR_OWNER_PUBLIC_KEY"}}'
Response shows:
{
"deposit": "2000",
"deducted": "200",
"available": "-200",
"assets": "2000"
}
Once you send 200 ELA, available should become 0 or positive.
Step 3: Activate the Node
After the deposit is topped up, run the activate command on your node server:
./node/node.sh ela activate_bpos
The script handles the activation transaction automatically using the node's configured keys.
Step 4: Verify
Check that your node state changed from Illegal to Active:
curl -X POST https://api.elastos.io/ela \
-H 'Content-Type: application/json' \
-d '{"method":"listproducers","params":{"start":0,"limit":500,"state":"all"}}'
Your node should show "state": "Active" and "active": true.
Important Notes
- Node key: After a double-sign violation, you may need to update your node public key before reactivating. If the activate transaction fails, register a node key update first.
- Root cause: Before reactivating, fix what caused the double-sign. Common causes:
- Running the same node key on two servers simultaneously
- Restoring a node from backup while the original is still running
- Network partition causing the node to fork
- Voters: Once the node is active again, existing voter support automatically resumes. Voters don't need to re-vote.
- Deposit: The total deposit after fixing will be 2,200 ELA (original 2,000 + 200 top-up). The penalty is a permanent deduction from the original deposit, and the 200 ELA top-up covers it.
Quick Reference
| Item | How to Find |
|---|---|
| Owner public key | listproducers -> ownerpublickey |
| Node public key | listproducers -> nodepublickey |
| Register height | listproducers -> registerheight |
| Deposit address | Registration tx (type 9) output with D prefix |
| Penalty status | getdepositcoin with owner public key |
| Current state | listproducers -> state |
| Illegal block | listproducers -> illegalheight |
Deregistration and Deposit Return
To leave the supernode network:
# Step 1: Unregister
node.sh ela unregister_bpos
# Step 2: Wait for the deregistration period to expire
# (The deposit is locked for the remaining lock period)
# Step 3: Return the deposit to your wallet
node.sh ela unregister_bpos # Handles deposit return after lock expiry