Blockchain features
A feature is a change to the rules the chain validates by. Each one gets a short numeric id and an entry in BlockchainFeature.scala, and the code for it ships inside the node long before it does anything. Until the network activates it, the node reads that code and skips it.
That is what makes an upgrade safe here. Operators install a release that contains the new rules, nothing changes, and the rules take effect later at a height everyone agrees on. No coordinated restart, no flag day.
A feature moves through exactly three states, and only forward:
On DecentralChain mainnet a window is 20,000 blocks and a feature needs 18,000 of them to signal support, which is 90%. The gap between approved and activated is deliberate: it gives anyone still on an old release a full window to upgrade after the outcome is known but before it bites.
One list in the node config. Any feature id you put in supported is signalled in every block your node produces.
dcc {features {# Vote for feature 14 and feature 1 in every block this node produces.supported = [14, 1]# Stop rather than follow a chain this node cannot validate.auto-shutdown-on-unsupported-feature = yes}}
The node is explicit about this. auto-shutdown-on-unsupported-feature = yes is the default, and it means what it says: if the network activates something your release does not implement, your node stops rather than carrying on. That is the safe failure. A node that kept running would be validating against rules the rest of the network has left behind, accepting blocks everyone else rejects, and quietly serving an API for a chain nobody else is on.
So supported is a ballot, not a switch. It says which changes you want the network to adopt. What it cannot do is give you a different set of rules from everyone else, because a blockchain where nodes disagree about the rules is two blockchains.
Reading the network…
| # | Feature | What it would add |
|---|---|---|
| 17 | Ride V6, MetaMask support | RIDE V6 and MetaMask support. |
| 18 | Consensus and MetaMask updates | Consensus and MetaMask updates. |
| 19 | Block Reward Distribution | Splits the block reward between producer and configured addresses. |
| 20 | Capped XTN buy-back & DAO amounts | Caps the XTN buy-back and DAO amounts. |
| 21 | Cease XTN buy-back | Ends the XTN buy-back. |
| 22 | Light Node | Light node: validate without holding the full state. |
| 23 | Boost Block Reward | Temporarily boosts the block reward. |
| 24 | ecrecover fix | Fixes ecrecover, the Ethereum signature-recovery opcode. |
| 25 | Deterministic Finality & RIDE V9 | Deterministic finality and RIDE V9. |
| 28 | Modern Groth16 verifier | A modern Groth16 verifier, arkworks wire format, snarkjs and circom compatible. Needs every node upgraded before it can activate. |
| 30 | InvokeScript version gating and per-step fee | Gates old InvokeScript versions against V5+ dApps, and charges a per-step fee when a V3 invoke calls a pre-V5 dApp. |
This matters most for feature 14. Activating block rewards would end the fixed supply, and the vote needed to do it is inside one operator's control. Anyone relying on 100,000,000 DCC being permanent should read it as a commitment that can be kept rather than a property of the protocol. Distributing block production is what would change that, and it is the reason running a producer is worth something beyond fee income.
Next
BlockchainFeature.scala
Every feature id, its description, and the code each one gates.
Next
The DecentralChain chapter
Accounts, blocks, transactions, tokens and the binary format, written out in full.