Skip to content

Voting on Proposals

Who can vote, and who cannot?

A vote requires bonded tokens > 0 at the proposal's voting_end_height. Eligibility is determined by three independent checks:

  1. Bonded status (Cosmos SDK)

Only validators with status = BOND_STATUS_BONDED and tokens > 0 contribute voting power. Bonded entries with zero tokens are dormant and contribute nothing.

  1. Jail status

A jailed validator (jailed = true) is automatically unbonded and removed from the active validator set, losing all voting power until they manually unjail via MsgUnjail.

  1. PoC and CPoC participation

Voting power ultimately derives from participant.weight, which is recomputed each epoch based on PoC and CPoC results. Failed PoC/CPoC participants are removed from active set and get tokens = 0 for voting.

Quick path

Most participants only need to verify a proposal and cast a vote. Do these four things:

1) Identify the right proposal_id (and verify it is the one you were told)

# List all proposals (IDs + basic info)
inferenced query gov proposals -o json --node $SEED_URL/chain-rpc/
# Inspect a specific proposal in detail
inferenced query gov proposal $PROPOSAL_ID -o json --node $SEED_URL/chain-rpc/

Confirm the id, title, summary, and (if present) metadata match what was shared with you.

2) Review the contents carefully (especially param updates)

# 2a) Get current module params (example: inference module)
inferenced query inference params -o json --node $SEED_URL/chain-rpc/ > current_params.json

# 2b) Extract proposed params from the proposal
inferenced query gov proposal $PROPOSAL_ID -o json --node $SEED_URL/chain-rpc/ \
  | jq '.proposal.messages[] | select(."type"=="inference/x/inference/MsgUpdateParams") | .value' \
  > proposed_params.json

# 2c) Diff
diff -u current_params.json proposed_params.json || true

For MsgUpdateParams, modules typically expect the full params object and authority set to the gov module account.

3) Know the voting options and short flow

  • Options: yes, no, no_with_veto, abstain.
  • Flow: proposals open (after deposit) -> voting period runs -> outcome decided by quorum/threshold/veto parameters -> if passed, messages execute via the gov module.
  • You may change your vote any time before voting period ends; the last vote counts.

4) Cast (or change) your vote

# options: yes | no | no_with_veto | abstain
inferenced tx gov vote <proposal_id> yes \
  --from <cold-key-name> \
  --keyring-backend file \
  --unordered --timeout-duration=60s \
  --gas=2000000 --gas-adjustment=5.0 \
  --node $SEED_URL/chain-rpc/ \
  --yes
# See tally
inferenced query gov tally $PROPOSAL_ID -o json --node $SEED_URL/chain-rpc/
# Optional: list votes
inferenced query gov votes $PROPOSAL_ID -o json --node $SEED_URL/chain-rpc/

Submit a Parameter Change Proposal

TL;DR: draft a proposal with MsgUpdateParams, include all params for that module, ensure deposit meets min_deposit, submit, then track/deposit/vote.

1) Get the governance module address (authority)

inferenced query auth module-accounts --node $SEED_URL/chain-rpc/ | grep -B2 'name: gov'

2) Export current params for the target module

inferenced query inference params -o json --node $SEED_URL/chain-rpc/ > current_params.json

3) Check the minimum deposit

inferenced query gov params -o json --node $SEED_URL/chain-rpc/ | jq '.params.min_deposit'

4) Draft the proposal file

inferenced tx gov draft-proposal
# fills draft_proposal.json and draft_metadata.json

Edit draft_proposal.json and include the full params object.

5) Submit the proposal

inferenced tx gov submit-proposal ./draft_proposal.json \
  --from <cold-key-name> \
  --keyring-backend file \
  --unordered --timeout-duration=60s \
  --gas=2000000 --gas-adjustment=5.0 \
  --node $SEED_URL/chain-rpc/ \
  --yes

6) Ensure your proposal is on-chain

inferenced query gov proposals --node $SEED_URL/chain-rpc/

Vote

# options: yes | no | no_with_veto | abstain
inferenced tx gov vote <proposal_id> yes \
  --from <cold-key-name> \
  --keyring-backend file \
  --unordered --timeout-duration=60s \
  --gas=2000000 --gas-adjustment=5.0 \
  --node $SEED_URL/chain-rpc/ \
  --yes

Notes

  • Who can create a proposal: anyone with a valid governance (cold) key who pays required fees/deposit.
  • Track status: use query gov proposal, query gov tally, and query gov proposals.
  • Transaction flags: in governance transactions, keep --keyring-backend file --unordered --timeout-duration=60s --gas=2000000 --gas-adjustment=5.0 --node $SEED_URL/chain-rpc/.