Skip to content

Governance ​

Protocol parameters — minimum stake, rewards, gas budget, slashing, AI thresholds — are changed by stake-weighted on-chain votes, not by node operators editing config.

Proposal lifecycle: a staker proposes, the proposal is active for its voting window while stakers vote weighted by self-stake; when the window ends it passes if votes reach 20% of total stake and yes is over 50% of votes, otherwise it is rejected; a passed PARAM_CHANGE updates the parameter if the value is within its allowed range

Proposing ​

RuleValue
WhoA signed request from any address; a .human proposer must hold self-stake of at least min_stake
Kindstext (signalling only) or PARAM_CHANGE (changes one parameter)
Voting window100 to max_voting_duration_blocks (default 1 000 000) blocks; 1 000 if not given
LimitsTitle 200 characters, description 5 000, payload 10 KB

A PARAM_CHANGE carries its change as a payload:

json
{ "param_key": "max_block_gas", "param_value": "20000" }

The proposal is a signed operation to neuro:system.governance; it is recorded in consensus, so every validator holds the identical proposal from the same height.

Voting ​

  • Only addresses with self-stake can vote. The vote weight is the voter's self-stake, read from chain state when the vote is applied. Delegations carry no vote.
  • Stake added after a proposal was created cannot vote on it — this stops buying stake just to swing a vote.
  • One vote per address per proposal: yes or no, final.
  • Votes are signed operations recorded in consensus.

Outcome ​

When the voting window ends:

CheckDefaultProposal field
Quorum — yes + no weight ≥ this share of total self-stake20%quorum_bps = 2 000
Threshold — yes weight > this share of the votes cast50%threshold_bps = 5 000

Both met → passed; otherwise → rejected. A passed PARAM_CHANGE updates the parameter — unless the new value is outside that parameter's allowed range, in which case it is refused and the old value stays.

Finalization status

experimental Creating proposals and voting run in consensus. Closing a proposal and applying a passed parameter change currently happens on each node when it serves the proposal list (GET /api/v1/governance/proposals), not in the block commit. Moving finalization into the commit path is planned; until then, check a parameter on every validator after a change passes.

How it is tested: test_apply_tx_governance_propose_and_vote_in_consensus in the node covers proposal and vote application; range checks are covered by the parameter tests (test_deploy_risk_threshold_governance, test_deploy_security_governance_override).

Parameters ​

Current values: GET /api/v1/governance/params. Some can also be set per node at start-up through an environment variable — intended for test networks.

Staking and consensus ​

ParameterDefaultAllowed rangeEnv override
min_stake10 000 NRO (in uNRO)1 to 10¹⁵ uNRO—
unbonding_blocks1 512 0001 to 10⁹NEUROCHAIN_UNBONDING_BLOCKS
base_apy_bps1 200 (12%)0 to 100 000—
genesis_apy_bps2 400 (24%)0 to 100 000—
reward_interval_blocks216 0001 to 10⁹NEUROCHAIN_REWARD_INTERVAL_BLOCKS
blocks_per_year78 840 0001 to 10⁹—
max_commission_bps2 000 (20%)——
max_block_gas10 0001 to 10⁹—
slash_fraction_double_sign_bps500 (5% of min_stake)0 to 10 000NEUROCHAIN_SLASH_FRACTION_DOUBLE_SIGN_BPS
slash_reward_fraction_bps100 (1% to the reporter)0 to 10 000NEUROCHAIN_SLASH_REWARD_FRACTION_BPS
slash_double_vote_bps5000 to 10 000—
jail_blocks10 0001 to 10⁹NEUROCHAIN_JAIL_BLOCKS
slash_evidence_window10 0001 to 10⁹NEUROCHAIN_SLASH_EVIDENCE_WINDOW
quorum_bps2 0001 to 10 000—
threshold_bps5 0001 to 10 000—

AI security ​

ParameterDefaultAllowed rangeMeaning
deploy_security_enabled10 or 1VMGuardian pre-deploy gate on/off (emergency switch)
deploy_risk_threshold800 to 100Deploy refused at risk score ≥ 0.80
sentinel_enabled10 or 1Sentinel transaction scoring on/off
sentinel_reject_threshold85—Transaction refused at score ≥ 0.85
sentinel_policy_enabled0—Graduated policy layer (hold / confirm) — off by default
sentinel_hold_threshold60—Score from which a transfer is held
sentinel_stepup_threshold70—Score from which the owner must confirm
sentinel_hold_blocks50—Delay before a held transfer is released
sentinel_confirm_expiry_blocks1 000—Wait for owner confirmation before refund
sentinel_agent_confirm_threshold60—Score from which a session-key transfer needs the owner
trust_activation_blocks300—Delay before a new trusted recipient counts

The Sentinel policy parameters also have NEUROCHAIN_SENTINEL_* and NEUROCHAIN_TRUST_ACTIVATION_BLOCKS environment overrides; see Sentinel.

Native assets and exchange ​

ParameterDefaultMeaning
asset_issue_fee1 000 NROFee for issuing a native asset
asset_max_decimals18Highest number of decimals an asset may have
dex_shard0Shard that holds asset and exchange records

The exchange (AMM) also has parameters for the liquidity-provider fee, protocol fee, minimum liquidity, swaps per pool per block, and an emergency on/off switch; the REST reference lists them with their current values.

A dash in Allowed range means the node does not yet check the range of that parameter when a change passes — propose values carefully.

API ​

ActionEndpoint
ProposePOST /api/v1/governance/propose
VotePOST /api/v1/governance/:id/vote
List proposalsGET /api/v1/governance/proposals?status=&limit=&offset=
One proposalGET /api/v1/governance/:id
ParametersGET /api/v1/governance/params