Skip to content

Instantly share code, notes, and snippets.

@sainoe
Created February 2, 2024 13:58
Show Gist options
  • Save sainoe/8f1fc8354b4b63fe2dab57190bc3d304 to your computer and use it in GitHub Desktop.
Save sainoe/8f1fc8354b4b63fe2dab57190bc3d304 to your computer and use it in GitHub Desktop.
Gaia upgrade with CCV enabled
#!/bin/bash
set -eux
pkill -f cosmovisor interchain hermes &> /dev/null || true
./setup.sh
sleep 5
./run-consumer.sh
sleep 5
./upgrade.sh
#!/bin/bash
set -eux
GAIA_HOME=$HOME/.gaia
BINARY_VERSION=v15
NODE_IP=localhost
CHAIN_ID=testchain
CONSUMER_CHAIN_ID=consumer
UPGRADE_NUM=1
CONSUMER_HOME=$HOME/consumer
HERMES_BIN=hermes
export BINARY_HOME=$GAIA_HOME/cosmovisor/genesis/bin
export BINARY=$BINARY_HOME/gaiad
# Build consumer chain proposal file
tee consumer-proposal.json<<EOF
{
"title": "Create a chain",
"description": "Gonna be a great chain",
"chain_id": "consumer",
"initial_height": {
"revision_height": 1
},
"genesis_hash": "Z2VuX2hhc2g=",
"binary_hash": "YmluX2hhc2g=",
"spawn_time": "2022-03-11T09:02:14.718477-08:00",
"deposit": "10000001stake",
"consumer_redistribution_fraction": "0.75",
"historical_entries": 1000,
"blocks_per_distribution_transmission": 1000,
"unbonding_period": 1728000000000000,
"ccv_timeout_period": 2419200000000000,
"transfer_timeout_period": 3600000000000
}
EOF
# Submit consumer chain proposal
$BINARY tx gov submit-proposal consumer-addition \
consumer-proposal.json \
--gas auto \
--gas-adjustment 1.5 \
--from val \
--home $GAIA_HOME \
-b block \
-y
sleep 5
# Vote yes to proposal
$BINARY tx gov vote $UPGRADE_NUM yes --home ${GAIA_HOME} \
--gas auto \
--gas-adjustment 1.5 \
--from val \
--home $GAIA_HOME \
-b block \
-y
sleep 5
# CONSUMER CHAIN ##
# Clean start
pkill -f interchain-security-cd &> /dev/null || true
rm -rf $CONSUMER_HOME
# Build genesis file and node directory structure
interchain-security-cd init val --chain-id consumer --home $CONSUMER_HOME
sleep 1
# Create user account keypair
interchain-security-cd keys add val --home $CONSUMER_HOME --keyring-backend test --output json > $CONSUMER_HOME/val.json 2>&1
# Add stake to user account
CONS_ACCOUNT_ADDR=$(jq -r '.address' $CONSUMER_HOME/val.json)
interchain-security-cd add-genesis-account $CONS_ACCOUNT_ADDR 1000000000stake --home $CONSUMER_HOME
sleep 5
# Add consumer genesis states to genesis file
$BINARY query provider consumer-genesis consumer --home ${GAIA_HOME} -o json > consumer_gen.json
jq -s '.[0].app_state.ccvconsumer = .[1] | .[0]' $CONSUMER_HOME/config/genesis.json consumer_gen.json > $CONSUMER_HOME/edited_genesis.json \
&& mv $CONSUMER_HOME/edited_genesis.json $CONSUMER_HOME/config/genesis.json
rm consumer_gen.json
# Create validator states
echo '{"height": "0","round": 0,"step": 0}' > $CONSUMER_HOME/data/priv_validator_state.json
# Copy validator key files
cp ${GAIA_HOME}/config/priv_validator_key.json $CONSUMER_HOME/config/priv_validator_key.json
cp ${GAIA_HOME}/config/node_key.json $CONSUMER_HOME/config/node_key.json
# Set default client port
sed -i -r "/node =/ s/= .*/= \"tcp:\/\/${NODE_IP}:26648\"/" $CONSUMER_HOME/config/client.toml
sed -i -r 's/block_sync = true/block_sync = false/g' $CONSUMER_HOME/config/config.toml
# Start gaia
interchain-security-cd start --home $CONSUMER_HOME \
--rpc.laddr tcp://${NODE_IP}:26648 \
--grpc.address ${NODE_IP}:9081 \
--address tcp://${NODE_IP}:26645 \
--p2p.laddr tcp://${NODE_IP}:26646 \
--grpc-web.enable=false &> $CONSUMER_HOME/logs &
sleep 3
# Setup Hermes in packet relayer mode
pkill -f hermes 2> /dev/null || true
tee ~/.hermes/config.toml<<EOF
[global]
log_level = "debug"
[mode]
[mode.clients]
enabled = true
refresh = true
misbehaviour = true
[mode.connections]
enabled = false
[mode.channels]
enabled = false
[mode.packets]
enabled = true
[[chains]]
id = "${CONSUMER_CHAIN_ID}"
ccv_consumer_chain = true
account_prefix = "cosmos"
clock_drift = "5s"
gas_multiplier = 1.1
grpc_addr = "tcp://${NODE_IP}:9081"
key_name = "relayer"
max_gas = 2000000
rpc_addr = "http://${NODE_IP}:26648"
rpc_timeout = "10s"
store_prefix = "ibc"
trusting_period = "2days"
event_source = { mode = 'push', url = 'ws://${NODE_IP}:26648/websocket' , batch_delay = '50ms' }
[chains.gas_price]
denom = "stake"
price = 0.00
[chains.trust_threshold]
denominator = "3"
numerator = "1"
[[chains]]
id = "${CHAIN_ID}"
account_prefix = "cosmos"
clock_drift = "5s"
gas_multiplier = 1.1
grpc_addr = "tcp://${NODE_IP}:9071"
key_name = "relayer"
max_gas = 2000000
rpc_addr = "http://${NODE_IP}:26657"
rpc_timeout = "10s"
store_prefix = "ibc"
trusting_period = "2days"
event_source = { mode = 'push', url = 'ws://${NODE_IP}:26657/websocket' , batch_delay = '50ms' }
[chains.gas_price]
denom = "stake"
price = 0.00
[chains.trust_threshold]
denominator = "3"
numerator = "1"
EOF
# Delet_e all previous keys in relayer
$HERMES_BIN keys delete --chain $CHAIN_ID --all
$HERMES_BIN keys delete --chain $CONSUMER_CHAIN_ID --all
# Restore keys to hermes relayer
$HERMES_BIN keys add --key-file $CONSUMER_HOME/val.json --chain $CONSUMER_CHAIN_ID
$HERMES_BIN keys add --key-file ${GAIA_HOME}/val.json --chain $CHAIN_ID
sleep 5
$HERMES_BIN create connection \
--a-chain consumer \
--a-client 07-tendermint-0 \
--b-client 07-tendermint-0
$HERMES_BIN create channel \
--a-chain consumer \
--a-port consumer \
--b-port provider \
--order ordered \
--channel-version 1 \
--a-connection connection-0
sleep 5
$HERMES_BIN --config ~/.hermes/config.toml start &> ~/.hermes/hermes.log &
PROV_ACCOUNT_ADDR=$(jq -r '.address' $GAIA_HOME/val.json)
DELEGATIONS=$($BINARY q staking delegations $PROV_ACCOUNT_ADDR --home ${GAIA_HOME} -o json)
OPERATOR_ADDR=$(echo $DELEGATIONS | jq -r '.delegation_responses[0].delegation.validator_address')
$BINARY tx staking delegate $OPERATOR_ADDR 1000000stake \
--from val \
--keyring-backend test \
--home ${GAIA_HOME} \
--chain-id testchain \
-y -b block
sleep 5
$BINARY q tendermint-validator-set --home ${GAIA_HOME}
$BINARY q tendermint-validator-set --home ${CONSUMER_HOME}
#!/bin/bash
set -eux
echo "**** testing Gaia v15 parameters migration ****"
GAIA_HOME=$HOME/.gaia
CHAIN_ID=testchain
pkill -f gaiad &> /dev/null || true
pkill -f cosmovisor &> /dev/null || true
rm -rf $GAIA_HOME
rm -rf ./gaia
export OLDBINARY_VERSION=v14.1.0
export NEWBINARY_VERSION=v15.0.0
export UPGRADE_NAME_LOWERCASE=v15
# install both v9 and v10 binaries
export OLDBINARY_URL="https://github.com/cosmos/gaia/releases/download/${OLDBINARY_VERSION}/gaiad-${OLDBINARY_VERSION}-darwin-arm64"
export NEWBINARY_URL="https://github.com/cosmos/gaia/releases/download/${NEWBINARY_VERSION}/gaiad-${NEWBINARY_VERSION}-darwin-amd64"
export OLDBINARY_HOME=$GAIA_HOME/cosmovisor/genesis/bin
export NEWBINARY_HOME=$GAIA_HOME/cosmovisor/upgrades/${UPGRADE_NAME_LOWERCASE}/bin
export OLDBINARY=$OLDBINARY_HOME/gaiad
export NEWBINARY=$NEWBINARY_HOME/gaiad
####### RUN CACHED BINARY ##########
mkdir -p $OLDBINARY_HOME
mkdir -p $NEWBINARY_HOME
cp ./cosmovisor/genesis/bin/* $OLDBINARY_HOME
cp ./cosmovisor/upgrades/${UPGRADE_NAME_LOWERCASE}/bin/* $NEWBINARY_HOME
cd $GAIA_HOME
###################################
# mkdir -p $OLDBINARY_HOME
# curl -LJ -o $OLDBINARY $OLDBINARY_URL
# chmod +x $OLDBINARY
# mkdir -p $NEWBINARY_HOME
# ## TO BE CHANGED WHEN BINARY ARE AVAILABLE FOR v10 RELEASE
# git clone https://github.com/cosmos/gaia.git
# cd gaia
# git checkout main
# make build
# cp ./build/gaiad $NEWBINARY_HOME
# ####
# # curl -LJ -o $NEWBINARY $NEWBINARY_URL
# # chmod +x $NEWBINARY
# ###
# cd $GAIA_HOME
echo "install the latest cosmovisor"
go install github.com/cosmos/cosmos-sdk/cosmovisor/cmd/cosmovisor@latest
export DAEMON_NAME=gaiad
# export DAEMON_HOME=$(pwd -P)/$GAIA_HOME
export DAEMON_HOME=$GAIA_HOME
export DAEMON_RESTART_AFTER_UPGRADE=true
export BROADCAST_MODE=block
echo "setup gaia home"
$OLDBINARY init mynode0 --chain-id $CHAIN_ID --home $GAIA_HOME
$OLDBINARY config chain-id $CHAIN_ID --home $GAIA_HOME
$OLDBINARY config keyring-backend test --home $GAIA_HOME
$OLDBINARY config broadcast-mode $BROADCAST_MODE --home $GAIA_HOME
$OLDBINARY config node tcp://localhost:26657 --home $GAIA_HOME
# Generate Genesis Accounts
$OLDBINARY keys add val --home $GAIA_HOME \
--output json > $GAIA_HOME/val.json 2>&1
$OLDBINARY add-genesis-account $($OLDBINARY keys show val -a --home $GAIA_HOME) 10000000000000000000stake --home $GAIA_HOME
$OLDBINARY gentx val 10000000000stake --chain-id $CHAIN_ID --home $GAIA_HOME
$OLDBINARY collect-gentxs --home $GAIA_HOME
#Configure App
sed -i '' 's/minimum-gas-prices = ""/minimum-gas-prices = "0stake"/g' $GAIA_HOME/config/app.toml
# Configure Gov Params
# min deposition amount
sed -i '' 's%"amount": "10000000",%"amount": "1",%g' $GAIA_HOME/config/genesis.json
# min voting power that a proposal requires in order to be a valid proposal
sed -i '' 's%"quorum": "0.334000000000000000",%"quorum": "0.000000000000000001",%g' $GAIA_HOME/config/genesis.json
# the minimum proportion of "yes" votes requires for the proposal to pass
sed -i '' 's%"threshold": "0.500000000000000000",%"threshold": "0.000000000000000001",%g' $GAIA_HOME/config/genesis.json
# voting period
sed -i '' 's%"voting_period": "172800s"%"voting_period": "10s"%g' $GAIA_HOME/config/genesis.json
sed -i '' 's%"veto_threshold": "0.334000000000000000",%"veto_threshold": "0.000000000000000001",%g' $GAIA_HOME/config/genesis.json
cosmovisor run start --home $GAIA_HOME --x-crisis-skip-assert-invariants \
--grpc.address localhost:9071 \
--grpc-web.enable=false &> gaia.log &
sleep 2
gaiad status --log_format json 2>&1 | jq .
#!/bin/bash
set -e
export GAIA_HOME=$HOME/.gaia
export UPGRADE_NAME_LOWERCASE=v15
export UPGRADE_HEIGHT=30
export UPGRADE_NUM=2
export OLDBINARY_HOME=$GAIA_HOME/cosmovisor/genesis/bin
export NEWBINARY_HOME=$GAIA_HOME/cosmovisor/upgrades/${UPGRADE_NAME_LOWERCASE}/bin
export OLDBINARY=$OLDBINARY_HOME/gaiad
export NEWBINARY=$NEWBINARY_HOME/gaiad
export NODEADDR=http://localhost
$OLDBINARY tx gov submit-proposal software-upgrade $UPGRADE_NAME_LOWERCASE \
--upgrade-height $UPGRADE_HEIGHT \
--title $UPGRADE_NAME_LOWERCASE \
--description "upgrade" \
--deposit 100000000stake \
--gas-prices 0.025stake \
--from val \
--home $GAIA_HOME \
-y
sleep 5
$OLDBINARY tx gov vote $UPGRADE_NUM yes \
--gas-prices 0.025stake \
--from val \
--home $GAIA_HOME \
-y
# wait the upgrade to be executed
while [ true ]; do
curr_block=$(curl -s $NODEADDR:26657/status | jq -r '.result.sync_info.latest_block_height')
echo current block $curr_block waiting for upgrade at block $UPGRADE_HEIGHT
if [[ ${curr_block} -gt $UPGRADE_HEIGHT ]]; then
sleep 5
break
fi
sleep 5
done
# cd
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment