Staking & delegation
NRO can be put to work in two ways:
| Who | What it does | |
|---|---|---|
| Self-stake | A validator (.node), or any address that stakes for itself | Gives consensus voting power (for .node) and governance voting weight; earns staking rewards |
| Delegation | Any address, to a .node with active stake | Earns rewards at the base rate, minus the validator's commission |
Every staking action is a signed operation: the node checks your signature on entry, and the change itself is applied in consensus on every validator.
Parameters
All of these are governance parameters; the defaults below are what a new chain starts with. The reward and lock timings are not final before launch and may change — read live values from GET /api/v1/governance/params before relying on them.
| Parameter | Default | Meaning |
|---|---|---|
min_stake | 10 000 NRO | Minimum stake, minimum delegation, and the price of a .node |
unbonding_blocks | 1 512 000 | Bonding lock after staking or delegating (sized for about 7 days at 400 ms blocks). Env override: NEUROCHAIN_UNBONDING_BLOCKS |
base_apy_bps | 1 200 (12%) | Annual rate for stake and delegations |
genesis_apy_bps | 2 400 (24%) | Annual rate for validators staked at genesis |
reward_interval_blocks | 216 000 | Blocks between payouts. Env override: NEUROCHAIN_REWARD_INTERVAL_BLOCKS |
blocks_per_year | 78 840 000 | Blocks in a year at 400 ms, used to turn an annual rate into a per-block one |
max_commission_bps | 2 000 (20%) | Highest commission a validator may charge |
Becoming a validator
- Register a
.nodename from your.humanwallet. Registration debitsmin_stakeand records it as the node's stake — see Addresses. - Run a node with that identity and its ML-DSA-65 consensus key — see Run a node.
- Once its stake is at least
min_stakeand its consensus key is on chain, it joins the active set and starts proposing and voting. See Consensus → Validator set.
A validator can add stake later; each top-up raises the amount and restarts the bonding lock for the whole stake.
Bonding lock and withdrawing
Stake and delegations are locked for unbonding_blocks from the last time you added to them. After that:
- Unstake returns the whole self-stake at once. For a
.node, it goes back to the node's owner wallet. - Undelegate returns the whole delegation to that validator at once.
Partial withdrawals are not supported: withdraw and stake again with the amount you want to keep.
Rewards
Rewards are paid every reward_interval_blocks, straight to the staker's balance:
reward = amount × apy_bps / 10 000 × elapsed_blocks / blocks_per_yearapy_bpsisgenesis_apy_bpsfor genesis validators andbase_apy_bpsfor everyone else.elapsed_blocksis the number of blocks since the last payout, limited by a per-payout cap (MAX_REWARD_ELAPSED_BLOCKS) so a long gap cannot produce an outsized payout.- All arithmetic is in integers with 128-bit intermediates, so every validator computes exactly the same amount.
History and charts: GET /api/v1/staking/rewards/:address.
Delegation
| Rule | Value |
|---|---|
| Minimum | min_stake (10 000 NRO by default) |
| Target | A .node that has active stake |
| Rate | base_apy_bps (genesis rate does not apply to delegations) |
| Commission | Set by the validator, 10% by default, at most 20% |
For each delegation the annual rate is split:
commission_rate = base_apy × commission_bps / 10 000 → paid to the validator
delegator_rate = base_apy − commission_rate → paid to youWith the defaults (12% base, 10% commission) a delegator earns 10.8% a year and the validator 1.2% on the delegated amount.
What delegation does not do
Delegated NRO does not add to the validator's consensus voting power, and it does not give the delegator a governance vote. Both count self-stake only. Delegation earns rewards; it does not move control.
Risks
- Slashing. A validator that signs two conflicting votes loses 5% of
min_stakefrom its self-stake and is jailed for 10 000 blocks. See Consensus → Slashing. Delegations are not slashed. - Lock. Bonded NRO cannot be moved until the lock ends.
API
| Action | Endpoint |
|---|---|
| Stake | POST /api/v1/staking/stake |
| Unstake | POST /api/v1/staking/unstake |
| Delegate | POST /api/v1/staking/delegate |
| Undelegate | POST /api/v1/staking/undelegate |
| Your stake and rewards | GET /api/v1/staking/info/:address |
| Delegations to a validator | GET /api/v1/staking/delegations/:validator |
| Your delegations | GET /api/v1/staking/my-delegations/:address |
| Validators with stake | GET /api/v1/staking/validators |
| Register a node | POST /api/v1/nodes/register |
Request and response fields are in the REST reference.