Skip to content

Voting

Create proposals and vote on them.

Contract: 0xf5e003Ef0924993Bd690228787c315Ec3f86AC84

ParameterValue
Quorum10%
Voting period86,400 blocks
Proposals to date6

Lifecycle

propose  →  votingDelay  →  open for votingPeriod  →  succeeded or defeated

                                                        execute

A proposal opens after votingDelay, stays open for votingPeriod, and succeeds when it reaches quorum with more support than opposition.

Interface

FunctionPurpose
propose(string title, string description)Create a proposal
castVote(uint256 id, Support support)Vote
execute(uint256 id)Execute a succeeded proposal
state(uint256 id)Current lifecycle state
proposalCount()Total proposals
quorumPercent()Quorum threshold
votingPeriod() · votingDelay()Timing
proposalThreshold()Minimum stake to propose

Support is an enum: For, Against, Abstain.

Creating a proposal

js
const gov = new ethers.Contract(GOVERNANCE, [
  'function propose(string title, string description) returns (uint256)',
  'function proposalThreshold() view returns (uint256)',
], signer);

await (await gov.propose('Increase reward rate', 'Full rationale here…')).wait();

You need proposalThreshold to propose

The threshold stops the proposal list being flooded by addresses with no stake. Check it before calling — the transaction reverts otherwise.

Voting

js
const gov = new ethers.Contract(GOVERNANCE, [
  'function castVote(uint256 id, uint8 support)',
  'function state(uint256 id) view returns (uint8)',
], signer);

await (await gov.castVote(proposalId, 1)).wait();   // 1 = For

Your weight is your stake. One address votes once per proposal — the receipt is recorded and a second attempt reverts.

Abstain counts toward quorum

Abstaining is not the same as not voting. It contributes to quorum without supporting or opposing, which is how a proposal can reach quorum while the electorate signals it has no strong view.

Reading state

js
const state = await gov.state(proposalId);

The enum covers pending, active, defeated, succeeded, executed and cancelled. Read the verified source on the contract's explorer page for the exact ordering before mapping the number to a label.

Execution

A succeeded proposal must be executed explicitly — success does not apply it. Anyone can call execute.

Real transactions

OperationTransactionBlock
Proposal created0x26a2550eeb5d663e8f5699db2127263bd4b2a4df17470d43c322a622e6c650b06,136,478
Vote cast0x63546b881d0cf531b000acd73caef281dfa6f290390a1ce296ae1aeadd40e7746,136,649

KriptoNyx testnet — chain ID 3009 (kriptonyx_3009-1)