Skip to main content
This page is for proposers changing a parameter and for voters checking what a proposal actually changes. It assumes the process on Submitting a proposal. A parameter change on gaia v28.3.1 is a proposal carrying the target module’s MsgUpdateParams, which replaces that module’s whole parameter set when it passes. The change takes effect in the block the vote ends. Two things go wrong with these proposals. The deposit is lost when voters find a mistake. A wrong value changes how the Hub behaves in ways that are not obvious (a shorter unbonding period, for example, is a security parameter as much as a convenience).

Which modules accept a parameter change

Every module below takes a full MsgUpdateParams whose authority is the gov module account. The type URLs are the ones registered in the v28.3.1 binary (gaiad debug codec list-implementations cosmos.base.v1beta1.Msg). Rate limits are not parameters. They are added, changed, and removed with /ratelimit.v1.MsgAddRateLimit, MsgUpdateRateLimit, MsgRemoveRateLimit, and MsgResetRateLimit, each with the gov account as authority. The query gaiad q ratelimit list-rate-limits shows the current set. Packet forward middleware, callbacks, evidence, feegrant, authz, vesting, and metaprotocols have no governable parameters. The interchain security provider module is not in v28.3.1. Proposals targeting it fail. The legacy param-change proposal (gaiad tx gov submit-legacy-proposal param-change) still exists and still works for the few parameters kept in x/params subspaces. But every module above reads its parameters from its own store now, so use MsgUpdateParams.

Build the message

A MsgUpdateParams message replaces the entire parameter set, not one field. Start from the live values so that every field you do not mean to change stays the same:
Edit the one value, then wrap it in the message. Proposal 998 changed the voting period to 7 days this way. The equivalent JSON, with the remaining fields copied from the chain:
Durations are written as seconds with an s suffix (604800s). The Go form the query prints (168h0m0s) is also accepted by submit-proposal on v28.3.1. Decimals are 18 digit strings. Amounts are in base units. Fields the query omits because they are at their zero value (proposal_cancel_dest, burn_vote_quorum, burn_proposal_deposit_prevote) can be left out or written explicitly as above. The gaiad tx gov draft-proposal command with the other type lets you pick the message type from a list and fills the authority. It does not fill the current values, so paste them from the query. Field names and types for each Cosmos SDK module are in the module’s MsgUpdateParams section, for example gov and staking. The gaia specific modules are on Modules on the Hub. Submit:
A message with a missing field or a wrong type is rejected at submission with invalid params or an unmarshal error in raw_log, before any deposit is taken. A rehearsal on the testnet (Join testnet) therefore catches most mistakes.

Write the summary so voters can check it

State the parameter, the current value with the query that returns it, the new value, and the effect. Proposal 998’s summary did that for voting_period. Proposal 1018, which asked to reverse it, was rejected on the merits, not for form. Say explicitly that all other fields are unchanged, because a MsgUpdateParams that silently alters a second field is what voters are reading the JSON to find. Consensus parameters (max_bytes, max_gas, evidence age) and feemarket parameters were last changed together in proposal 970. Cite the previous proposal on the same parameter if there is one.

Verify

Before the vote, compare the proposal’s params object with the chain field by field:
The diff shows only the field the summary names. After the vote ends, run the module’s params query again. The new value is live from the block the voting period ended, with no upgrade or restart.

Next