Start upgrade docs
This commit is contained in:
122
UPGRADING.md
Normal file
122
UPGRADING.md
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
# Upgrading
|
||||||
|
|
||||||
|
With stargate, we have access to the `x/upgrade` module, which we can use to perform
|
||||||
|
inline upgrades. Please first read both the basic
|
||||||
|
[x/upgrade spec](https://github.com/cosmos/cosmos-sdk/blob/master/x/upgrade/spec/01_concepts.md)
|
||||||
|
and [go docs](https://godoc.org/github.com/cosmos/cosmos-sdk/x/upgrade#hdr-Performing_Upgrades)
|
||||||
|
for the background on the module.
|
||||||
|
|
||||||
|
In this case, we will demo an update with no state migration. This is for cases when
|
||||||
|
there is a state-machine-breaking (but not state-breaking) bugfix or enhancement.
|
||||||
|
There are some
|
||||||
|
[open issues running some state migrations](https://github.com/cosmos/cosmos-sdk/issues/8265)
|
||||||
|
and we will wait for that to be fixed before trying those.
|
||||||
|
|
||||||
|
The following will lead through running an upgrade on a local node, but the same process
|
||||||
|
would work on a real network (with more ops and governance coordination).
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
We need to have two different versions of `wasmd` which depend on state-compatible
|
||||||
|
versions of the Cosmos SDK. We only focus on upgrade starting with stargate. You will
|
||||||
|
have to use the "dump state and restart" approach to move from launchpad to stargate.
|
||||||
|
|
||||||
|
For this demo, we will show an upgrade to our Musselnet going from `v0.12.1` to
|
||||||
|
`v0.14.0`.
|
||||||
|
|
||||||
|
### Handler
|
||||||
|
|
||||||
|
You will need to register a handler for the upgrade. This is specific to a particular
|
||||||
|
testnet and upgrade path, and the default `wasmd` will never have a registered handler
|
||||||
|
on master. In this case, we make a `musselnet` branch off of `v0.14.0` just
|
||||||
|
registering one handler with a given name.
|
||||||
|
|
||||||
|
Look at [PR 351](https://github.com/CosmWasm/wasmd/pull/351/files) for an example
|
||||||
|
of a minimal handler. We do not make any state migrations, but rather use this
|
||||||
|
as a flag to coordinate all validators to stop the old version at one height, and
|
||||||
|
start the specified v2 version on the next block.
|
||||||
|
|
||||||
|
### Prepare binaries
|
||||||
|
|
||||||
|
Let's get the two binaries we want to test, the pre-upgrade and the post-upgrade
|
||||||
|
binaries. In this case the pre-release is already a published to docker hub and
|
||||||
|
can be downloaded simply via:
|
||||||
|
|
||||||
|
`docker pull cosmwasm/wasmd:v0.12.1`
|
||||||
|
|
||||||
|
The post-release is not published, so we can build it ourselves. Check out this
|
||||||
|
`wasmd` repo, and the proper `musselnet` branch:
|
||||||
|
|
||||||
|
```
|
||||||
|
# use musselnet-v2 tag once that exists
|
||||||
|
git checkout musselnet
|
||||||
|
docker build . -t wasmd:musselnet-v2
|
||||||
|
```
|
||||||
|
|
||||||
|
Verify they are both working for you locally:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker run cosmwasm/wasmd:v0.12.1 wasmd version
|
||||||
|
docker run wasmd:musselnet-v2 wasmd version
|
||||||
|
```
|
||||||
|
|
||||||
|
## Start the pre-release chain
|
||||||
|
|
||||||
|
Follow the normal setup stage, but in this case we will want to have super short
|
||||||
|
governance voting period, 5 minutes rather than 2 days (or 2 weeks!).
|
||||||
|
|
||||||
|
**Setup a client with private key**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
## TODO: I think we need to do this locally???
|
||||||
|
docker volume rm -f musselnet_client
|
||||||
|
|
||||||
|
docker run --rm -it \
|
||||||
|
-e PASSWORD=1234567890 \
|
||||||
|
--mount type=volume,source=musselnet_client,target=/root \
|
||||||
|
cosmwasm/wasmd:v0.12.1 /opt/setup_wasmd.sh
|
||||||
|
|
||||||
|
# enter "1234567890" when prompted
|
||||||
|
docker run --rm -it \
|
||||||
|
--mount type=volume,source=musselnet_client,target=/root \
|
||||||
|
cosmwasm/wasmd:v0.12.1 wasmd keys show -a validator
|
||||||
|
# use the address returned above here
|
||||||
|
CLIENT=wasm1anavj4eyxkdljp27sedrdlt9dm26c8a7a8p44l
|
||||||
|
```
|
||||||
|
|
||||||
|
**Setup the blockchain node**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
docker volume rm -f musselnet
|
||||||
|
|
||||||
|
# add your testing address here, so you can do something with the client
|
||||||
|
docker run --rm -it \
|
||||||
|
--mount type=volume,source=musselnet,target=/root \
|
||||||
|
cosmwasm/wasmd:v0.12.1 /opt/setup_wasmd.sh $CLIENT
|
||||||
|
|
||||||
|
# Update the voting times in the genesis file
|
||||||
|
docker run --rm -it \
|
||||||
|
--mount type=volume,source=musselnet,target=/root \
|
||||||
|
cosmwasm/wasmd:v0.12.1 sed -ie 's/172800s/300s/' /root/.wasmd/config/genesis.json
|
||||||
|
|
||||||
|
# This will start both wasmd and rest-server, only rest-serve output is shown on the screen
|
||||||
|
docker run --rm -it -p 26657:26657 -p 26656:26656 -p 1317:1317 \
|
||||||
|
--mount type=volume,source=musselnet,target=/root \
|
||||||
|
cosmwasm/wasmd:v0.12.1 /opt/run_wasmd.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Sanity checks
|
||||||
|
|
||||||
|
**TODO** move some tokens around
|
||||||
|
|
||||||
|
## Vote on the upgrade
|
||||||
|
|
||||||
|
**TODO**
|
||||||
|
|
||||||
|
## Swap out binaries
|
||||||
|
|
||||||
|
**TODO**
|
||||||
|
|
||||||
|
## Check final state
|
||||||
|
|
||||||
|
**TODO** Same balances in the final one
|
||||||
Reference in New Issue
Block a user