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:
- 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.
- 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.
- 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, andquery 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/.