Show / Hide Table of Contents

Governance API

Candidates

There is no duty assigned to candidates. However, committee members and consensus nodes are elected from certain number of candidates with most votes.

How to Become a Candidate

An address can be registered as candidate or unregistered afterwards. Corresponding contract methods are as follows:

MethodParametersFee in GAS
RegisterCandidate ECPoint publicKeyAdjustable, initially 0.00001
UnregisterCandidate ECPoint publicKey0.00065536 (CpuFee)

Registering / unregistering candidate requires signature. It means candidate registering / unregistering is only self-determined.

Candidate Voting

Every address has the right to vote to only one address (whether or not it's a candidate). Candidate's received votes are defined as the sum of NEO held by its voter. Every standby committee member will vote to itself in genesis block.

Voting contract method is as follows. Please not that voter's signature will be checked.

MethodParametersFee in GAS
Vote UInt160 account, byte[] voteTo0.00065536 (CpuFee)

As voters' votes & held NEO, as well as registered candidates keep changing, candidate set and their votes are re-calculated in every block.

MethodParametersFee in GAS
GetCandidates null0

Committee

Function & Scope

Committee members have the privilege to modify the configuration of Neo network by voting, including:

  • Role designation

  • Set fee per byte for network transmission

  • Set execution fee (CpuFee) factor

  • Set storage price

  • Block / unblock account

  • Set Oracle service price

  • Set gas released per block

  • Set fee to register a candidate

  • Add NNS root

  • Set the NNS registration/renewal fee

  • Update the NNS contract

  • Set minimum fee for contract deployment

Method definition and corresponding fee are defined in PolicyContract as shown below:

MethodParametersFee in GASContract
DesignateAsRoleRole role, ECPoint[] nodes0.00032768 (CpuFee)RoleManagement
SetFeePerBytelong value0.00032768 (CpuFee)PolicyContract
SetExecFeeFactoruint value0.00032768 (CpuFee)PolicyContract
SetStoragePriceuint value0.00032768 (CpuFee)PolicyContract
SetPricelong price0.00032768 (CpuFee)OracleContract
SetGasPerBlockBigInteger gasPerBlock0.00032768 (CpuFee)NeoToken
SetRegisterPricelong registerPrice0.00032768 (CpuFee)NeoToken
AddRootstring root0.00032768 (CpuFee)NameService
SetPricelong price0.00032768 (CpuFee)NameService
UpdateByteString nef, string manifestStoragePrice * (nefFile.Length + manifest.Length)NameService
SetMinimumDeploymentFeeBigInteger value0.00032768 (CpuFee)ContractManagement

To bring such modification into effect, committee members should send a transaction which calls corresponding method & includes enough signatures on chain. This transaction is executed as long as it's signed by more than half of the committee members.

Furthermore, corresponding reading methods are also supported:

MethodParametersFee in GASContract
GetDesignatedByRole Role role, uint index0.00032768 (CpuFee)RoleManagement
GetFeePerByte null0.00032768 (CpuFee)PolicyContract
GetExecFeeFactornull0.00032768 (CpuFee)PolicyContract
GetStoragePricenull0.00032768 (CpuFee)PolicyContract
IsBlocked UInt160 account0.00032768 (CpuFee)PolicyContract
GetPricenull0.00032768 (CpuFee)OracleContract
GetGasPerBlock null0.00032768 (CpuFee)NeoToken
GetRegisterPricenull0.00032768 (CpuFee)NeoToken
GetMinimumDeploymentFeenull0.00032768 (CpuFee)ContractManagement

How are committee members elected

  1. Sort the registered candidates by votes

  2. Take certain numbers of candidates (21 by default) with the most votes as committee members.

Committee members are refreshed every 21 blocks.

Corresponding contract method

MethodParametersFee in GASReturn value
GetCommittee null0.04194304 (CpuFee)Current committee members in format of Array<ECPoint>

Consensus Nodes

Function & Scope

Consensus nodes are nodes which are able to start or vote to new block proposals.

How are consensus nodes elected

  1. Sort the registered candidates by votes

  2. Take certain numbers of candidates (7 by default) with the most votes as consensus nodes.

Similar to committee members, consensus nodes are refreshed every 21 blocks.

Corresponding contract method

MethodParametersFee in GASReturn value
GetNextBlockValidators null0.04194304 (CpuFee)Consensus nodes by persisting block in format of Array<ECPoint>

Token Distribution

Total NEO amount, or 100 million tokens are distributed in genesis block to standby consensus nodes' multi-signature address.

All interactions in Neo are performed through transactions. Sending a transaction on chain requires paying GAS tokens as fee, including system fee and network fee. System fee will be burnt as resource consumption for transaction execution, while network fee will be distributed to the speaker (the consensus node who starts a new-block proposal) of the block where corresponding transaction is included.

Nep17 Contract Method

NEO and GAS are Nep17 contracts. Nep17 contract methods are as follows:

MethodParametersFee in GASResult
symbol null0Token symbol in String
decimals null0Token decimals in UInt
TotalSupply null0.00032768 (CpuFee)Token total supply in BigInteger
BalanceOf UInt160 account0.00032768 (CpuFee)account balance in BigInteger
Transfer UInt160 from, UInt160 to, BigInteger amount0.00131072 (CpuFee) + 0.0000005 (StorageFee)Send specified amount of token from Addressfromto Addressto. Please note that it will checkfrom's signature, whether caller isfrom, whethertois payable, whetherfrom's balance is enough

Contract methods by NEO:

MethodParametersFee in GASReturn value
UnclaimedGas UInt160 account0.00131072 (CpuFee)unclaimed GAS amount of this address in uint