

-
Verify you are currently running the correct version (v0.34.6+) of the Cosmos SDK:
$ gaiad version --long cosmos-sdk: 0.34.6 git commit: 80234baf91a15dd9a7df8dca38677b66b8d148c1 vendor hash: f60176672270c09455c01e9d880079ba36130df4f5cd89df58b6701f50b13aad build tags: netgo ledger go version go1.12.2 linux/amd64 -
Export existing state from
cosmoshub-2:NOTE: It is recommended for validators and operators to take a full data snapshot at the export
height before proceeding in case the upgrade does not go as planned or if not enough voting power
comes online in a sufficient and agreed upon amount of time. In such a case, the chain will fallback
to continue operatingcosmoshub-2. See Recovery for details on how to proceed.Before exporting state via the following command, the
gaiadbinary must be stopped!$ gaiad export --for-zero-height --height=2902000 > cosmoshub_2_genesis_export.json -
Verify the SHA256 of the (sorted) exported genesis file:
$ jq -S -c -M '' cosmoshub_2_genesis_export.json | shasum -a 256 [PLACEHOLDER] cosmoshub_2_genesis_export.json -
At this point you now have a valid exported genesis state! All further steps now require
v2.0.3 of Gaia.NOTE: Go 1.13+ is required!
$ git clone https://github.com/cosmos/gaia.git && cd gaia && git checkout v2.0.3; make install -
Verify you are currently running the correct version (v2.0.3) of the Gaia:
$ gaiad version --long name: gaia server_name: gaiad client_name: gaiacli version: 2.0.3 commit: 2f6783e298f25ff4e12cb84549777053ab88749a build_tags: netgo,ledger go: go version go1.13.3 darwin/amd64 -
Migrate exported state from the current v0.34.6+ version to the new v2.0.3 version:
$ gaiad migrate v0.36 cosmoshub_2_genesis_export.json --chain-id=cosmoshub-3 --genesis-time=[PLACEHOLDER]> genesis.jsonNOTE: The
migratecommand takes an input genesis state and migrates it to a targeted version.
Both v0.36 and v0.37 are compatible as far as state structure is concerned.Genesis time should be computed relative to the blocktime of
2,902,000. The genesis time
shall be the blocktime of2,902,000+60minutes with the subseconds truncated.An example shell command(tested on OS X Mojave) to compute this values is:
curl https://stargate.cosmos.network:26657/block\?height\=2902000 | jq -r '.result["block_meta"]["header"]["time"]'|xargs -0 date -v +60M -j -f "%Y-%m-%dT%H:%M:%S" +"%Y-%m-%dT%H:%M:%SZ" -
Now we must update all parameters that have been agreed upon through governance. There is only a
single parameter,max_validators, that we're upgrading based on proposal 10$ cat genesis.json | jq '.app_state["staking"]["params"]["max_validators"]=125' > tmp_genesis.json && mv tmp_genesis.json genesis.json -
Verify the SHA256 of the final genesis JSON:
$ jq -S -c -M '' genesis.json | shasum -a 256 [PLACEHOLDER] genesis.json -
Reset state:
NOTE: Be sure you have a complete backed up state of your node before proceeding with this step.
See Recovery for details on how to proceed.$ gaiad unsafe-reset-all Move the new
genesis.jsonto your.gaiad/config/directory-
Replace the
db_backendon.gaiad/config/config.tomlto:db_backend = "goleveldb" -
Note, if you have any application configuration in
gaiad.toml, that file has now been renamed toapp.toml:$ mv .gaiad/config/gaiad.toml .gaiad/config/app.toml