The message
The proposal carries/cosmos.upgrade.v1beta1.MsgSoftwareUpgrade with a plan:
namemust equal the upgrade handler name registered in the release (gaiadrefuses to start past the height if its binary has no handler of that name). The Hub names handlers after the version.heightis the halt height. Thetimefield is unused on the Hub and stays at the zero value.infois a string containing JSON with abinariesmap. Cosmovisor withDAEMON_ALLOW_DOWNLOAD_BINARIES=truedownloads from it. The Hub docs recommend leaving that false and installing binaries by hand. But the map is still the canonical pointer to the release and its checksums. Each URL carries?checksum=sha256:<hash>from the release’sSHA256SUMS-<version>.txt.expedited: trueneeds 501 ATOM, votes for 3 days, and passes at 66.7 percent. Proposal 1055 (v28.2.0) used it. Non-expedited upgrades use 500 ATOM and 7 days.
gaiad q gov proposal 1055. The v28.2.0 upgrade executed at height 33073000, which gaiad q upgrade applied v28.2.0 confirms.
Build the proposal
Thegaiad tx upgrade software-upgrade command builds the whole proposal from flags. It validates the info JSON against the release before submitting:
--upgrade-info and checks its checksum unless --no-validate is passed. It also checks that the --daemon-name (default gaiad) matches. It has no expedited flag and always writes "expedited": false. To expedite, add --generate-only to write the unsigned transaction to a file. In the file, change expedited to true and the deposit to at least 501 ATOM. Then sign and broadcast it (offline signing). This is also how a multisig proposer prepares it. The gaiad tx gov draft-proposal command with the software-upgrade type produces the same proposal JSON interactively, asks for the authority, and lets you set expedited before submit-proposal.
Pick the height from the current block rate. The Hub produces a block about every 6 seconds. The gaiad status command on a synced node gives the current height. The plan height should leave at least a week after the vote ends for validators to prepare.
Cancel a scheduled upgrade
A plan that must not execute (a bug found after the vote, a missed binary) is removed with/cosmos.upgrade.v1beta1.MsgCancelUpgrade, which gaiad tx upgrade cancel-software-upgrade builds. It is itself a proposal and has to pass before the plan height. For that reason it is usually expedited. If there is no time for that, validators coordinate out of band to skip the height with --unsafe-skip-upgrades <height>. See Upgrade a node.
Verify
Before voting:name matches a published gaia release tag. The height is in the future. Each binary URL’s checksum matches SHA256SUMS-<version>.txt on the release page.
After a pass:
name and height until the upgrade executes. After that the query is empty, and gaiad q upgrade applied <name> returns the height it ran at.
Next
- Upgrade a node for what operators do at the plan height.
- Upgrade history for every past plan and height.
- Upgrade module reference for the plan semantics.