Skip to content

Commit

Permalink
Upgrade test instructions for version 1.9
Browse files Browse the repository at this point in the history
  • Loading branch information
liorbond committed May 1, 2023
1 parent 80ea697 commit 9ae14e0
Show file tree
Hide file tree
Showing 4 changed files with 486 additions and 0 deletions.
58 changes: 58 additions & 0 deletions docs/docker-compose-19-testnet.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# docker compose file that sets up a network for beta testing

version: "3"

services:
bootstrap:
image: ghcr.io/scrtlabs/localsecret:v!.!.!
container_name: bootstrap
volumes:
- /tmp/secretd:/root/.secretd
- /tmp/secretcli:/root/.secretcli
stdin_open: true
tty: true
environment:
- http_proxy
- https_proxy
- SECRET_NODE_TYPE=BOOTSTRAP
- LOG_LEVEL=trace
- CHAINID=secretdev-1
- SGX_MODE=SW
expose:
- 26656
- 26657
ports:
- "5000:5000"
entrypoint: /bin/bash

node:
image: ghcr.io/scrtlabs/localsecret:v!.!.!
container_name: node
depends_on:
- bootstrap
volumes:
- /tmp/secretd:/tmp/.secretd
- /tmp/secretcli:/root/.secretcli
stdin_open: true
tty: true
ports:
- "1317:1317"
- "9091:9091"
environment:
- http_proxy
- https_proxy
- SECRET_NODE_TYPE=node
- LOG_LEVEL=trace
- CHAINID=secretdev-1
- RPC_URL=bootstrap:26657
- PERSISTENT_PEERS=115aa0a629f5d70dd1d464bc7e42799e00f4edae@bootstrap:26656
- FAUCET_URL=bootstrap:5000
- SCRT_SGX_STORAGE=/root
- SGX_MODE=SW
entrypoint: /bin/bash
deploy:
restart_policy:
condition: on-failure
delay: 10s
max_attempts: 10
window: 123s
58 changes: 58 additions & 0 deletions docs/docker-compose-19.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# docker compose file that sets up a network for beta testing

version: "3"

services:
bootstrap:
image: ghcr.io/scrtlabs/localsecret:v1.8.0
container_name: bootstrap
volumes:
- /tmp/secretd:/root/.secretd
- /tmp/secretcli:/root/.secretcli
stdin_open: true
tty: true
environment:
- http_proxy
- https_proxy
- SECRET_NODE_TYPE=BOOTSTRAP
- LOG_LEVEL=trace
- CHAINID=secretdev-1
- SGX_MODE=SW
expose:
- 26656
- 26657
ports:
- "5000:5000"
entrypoint: /bin/bash

node:
image: ghcr.io/scrtlabs/localsecret:v1.8.0
container_name: node
depends_on:
- bootstrap
volumes:
- /tmp/secretd:/tmp/.secretd
- /tmp/secretcli:/root/.secretcli
stdin_open: true
tty: true
ports:
- "1317:1317"
- "9091:9091"
environment:
- http_proxy
- https_proxy
- SECRET_NODE_TYPE=node
- LOG_LEVEL=trace
- CHAINID=secretdev-1
- RPC_URL=bootstrap:26657
- PERSISTENT_PEERS=115aa0a629f5d70dd1d464bc7e42799e00f4edae@bootstrap:26656
- FAUCET_URL=bootstrap:5000
- SCRT_SGX_STORAGE=/root
- SGX_MODE=SW
entrypoint: /bin/bash
deploy:
restart_policy:
condition: on-failure
delay: 10s
max_attempts: 10
window: 123s
185 changes: 185 additions & 0 deletions docs/test-v1.9-upgrade-handler-testnet.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
# How to test the v1.9 upgrade with LocalSecret

Always work in docs directory

## Step 1

Start a v1.7.0-rc.2 chain.

```bash
docker compose -f docker-compose-19-testnet.yml up -d
docker cp node_init.sh node:/root/
```

On one terminal window:

```bash
docker exec -it bootstrap bash
./bootstrap_init.sh
```

On another terminal window

```bash
docker exec -it node bash
chmod 0777 node_init.sh
./node_init.sh
```

## Step 2 (Test basic contract)

### Copy the suplied contract to the docker

```bash
docker cp ./contract.wasm node:/root/
```

### Access node docker

```bash
docker exec -it node bash
```

### Instantiate a contract and interact with him

```bash
secretd config node http://0.0.0.0:26657
secretd tx compute store contract.wasm --from a --gas 5000000 -y
sleep 5
INIT='{"counter":{"counter":10, "expires":100000}}'
secretd tx compute instantiate 1 "$INIT" --from a --label "c" -y
sleep 5

secretd tx compute execute secret18vd8fpwxzck93qlwghaj6arh4p7c5n8978vsyg '{"increment":{"addition": 13}}' --from a -y
sleep 5
secretd query compute query secret18vd8fpwxzck93qlwghaj6arh4p7c5n8978vsyg '{"get": {}}'
```

Expected result should be:
{"get":{"count":23}}

## Step 3

Run the secret.js tests from the `master` branch on the `secret.js` repo.
This will create state on the chain before the upgrade.

First delete `globalSetup` & `globalTeardown` (because we already launched the chain manually):

```bash
echo 'import { SecretNetworkClient } from "../src";
import { sleep } from "./utils";
require("ts-node").register({ transpileOnly: true });
module.exports = async () => {
await waitForBlocks();
console.log(`LocalSecret is running`);
};
async function waitForBlocks() {
while (true) {
const secretjs = new SecretNetworkClient({
url: "http://localhost:1317",
chainId: "secretdev-1",
});
try {
const { block } = await secretjs.query.tendermint.getLatestBlock({});
if (Number(block?.header?.height) >= 1) {
break;
}
} catch (e) {
// console.eerror(e);
}
await sleep(250);
}
}
' > test/globalSetup.ts
```

```bash
echo '//@ts-ignore
require("ts-node").register({ transpileOnly: true });
module.exports = async () => {};' > test/globalTeardown.js
```

Then run the tests:

```bash
yarn test
```

## Step 4

Propose a software upgrade on the v1.7 chain.

```bash
# 30 blocks (3 minutes) until upgrade block
UPGRADE_BLOCK="$(docker exec node bash -c 'secretd status | jq "(.SyncInfo.latest_block_height | tonumber) + 30"')"

# Propose upgrade
PROPOSAL_ID="$(docker exec node bash -c "secretd tx gov submit-proposal software-upgrade v1.9 --upgrade-height $UPGRADE_BLOCK --title blabla --description yolo --deposit 100000000uscrt --from a -y -b block | jq '.logs[0].events[] | select(.type == \"submit_proposal\") | .attributes[] | select(.key == \"proposal_id\") | .value | tonumber'")"

# Vote yes (voting period is 90 seconds)
docker exec node bash -c "secretd tx gov vote ${PROPOSAL_ID} yes --from a -y -b block"

echo "PROPOSAL_ID = ${PROPOSAL_ID}"
echo "UPGRADE_BLOCK = ${UPGRADE_BLOCK}"
```

## Step 5

Apply the upgrade.

Wait until you see `ERR CONSENSUS FAILURE!!! err="UPGRADE \"v1.9\" NEEDED at height` in BOTH of the logs, then run:

Copy binaries from v1.9 chain to v1.7 chain.

```bash
FEATURES="verify-validator-whitelist,light-client-validation,random" SGX_MODE=SW make build-linux

# Copy binaries from host to current v1.7 chain

docker exec bootstrap bash -c 'rm -rf /tmp/upgrade-bin && mkdir -p /tmp/upgrade-bin'
docker exec node bash -c 'rm -rf /tmp/upgrade-bin && mkdir -p /tmp/upgrade-bin'

docker cp secretd bootstrap:/tmp/upgrade-bin
docker cp go-cosmwasm/librust_cosmwasm_enclave.signed.so bootstrap:/tmp/upgrade-bin
docker cp go-cosmwasm/api/libgo_cosmwasm.so bootstrap:/tmp/upgrade-bin
docker cp secretd node:/tmp/upgrade-bin
docker cp go-cosmwasm/librust_cosmwasm_enclave.signed.so node:/tmp/upgrade-bin
docker cp go-cosmwasm/api/libgo_cosmwasm.so node:/tmp/upgrade-bin
docker cp docs/librandom_api.so node:/usr/lib
docker cp docs/tendermint_enclave.signed.so node:/usr/lib

docker exec node bash -c 'pkill -9 secretd'

docker exec bootstrap bash -c 'cat /tmp/upgrade-bin/librust_cosmwasm_enclave.signed.so > /usr/lib/librust_cosmwasm_enclave.signed.so'
docker exec bootstrap bash -c 'cat /tmp/upgrade-bin/libgo_cosmwasm.so > /usr/lib/libgo_cosmwasm.so'
docker exec node bash -c 'cat /tmp/upgrade-bin/secretd > /usr/bin/secretd'
docker exec node bash -c 'cat /tmp/upgrade-bin/librust_cosmwasm_enclave.signed.so > /usr/lib/librust_cosmwasm_enclave.signed.so'
docker exec node bash -c 'cat /tmp/upgrade-bin/libgo_cosmwasm.so > /usr/lib/libgo_cosmwasm.so'


rm -rf /tmp/upgrade-bin && mkdir -p /tmp/upgrade-bin
docker cp bootstrap:/root/.secretd/config/priv_validator_key.json /tmp/upgrade-bin/.
docker cp /tmp/upgrade-bin/priv_validator_key.json node:/root/.secretd/config/priv_validator_key.json

source /opt/sgxsdk/environment && RUST_BACKTRACE=1 LOG_LEVEL="trace" secretd start --rpc.laddr tcp://0.0.0.0:26657

```

You should see `INF applying upgrade "v1.9" at height` in the logs, following by blocks continute to stream.

## Test that the contract is still there

### Query the value of the counter

```bash
secretd query compute query secret18vd8fpwxzck93qlwghaj6arh4p7c5n8978vsyg '{"get": {}}'
```

Expected result should be:
{"get":{"count":23}}
Loading

0 comments on commit 9ae14e0

Please sign in to comment.