Skip to content

Instantly share code, notes, and snippets.

@sainoe
Last active June 29, 2023 15:26
Show Gist options
  • Save sainoe/a5169858b8c03dd01f98ed1f67100e85 to your computer and use it in GitHub Desktop.
Save sainoe/a5169858b8c03dd01f98ed1f67100e85 to your computer and use it in GitHub Desktop.
Cannot a start chain using one whale validator with 2/3+ voting power
#!/bin/bash
set -eux
# User balance of stake tokens
USER_COINS="100000000000stake"
# Amount of stake tokens staked
STAKE="100000000stake"
# Amount of stake tokens staked
STAKE2="4000000stake"
# Node IP address
NODE_IP="0.0.0.0"
# Home directory
HOME_DIR=$HOME
# Validator moniker
MONIKER="coordinator"
MONIKER_SUB="sub"
# Validators directory
NODE_DIR=${HOME_DIR}/node-${MONIKER}
NODE_SUB_DIR=${HOME_DIR}/node-${MONIKER_SUB}
GENTX_DIR=${HOME_DIR}/gentx
# Coordinator key
NODE_KEY=${MONIKER}-key
# Sub key
NODE_KEY_SUB=${MONIKER_SUB}-key
# Clean start
pkill -f gaiad &> /dev/null || true
rm -rf ${NODE_DIR}
rm -rf ${GENTX_DIR}
# Build genesis file and node directory structure
gaiad init $MONIKER --chain-id provider --home ${NODE_DIR}
jq ".app_state.gov.voting_params.voting_period = \"3s\" | .app_state.staking.params.unbonding_time = \"86400s\"" \
${NODE_DIR}/config/genesis.json > \
${NODE_DIR}/edited_genesis.json && mv ${NODE_DIR}/edited_genesis.json ${NODE_DIR}/config/genesis.json
sleep 1
# Create account keypair
gaiad keys add $NODE_KEY --home ${NODE_DIR} --keyring-backend test --output json > ${NODE_DIR}/${NODE_KEY}.json 2>&1
sleep 1
# Add stake to user
NODE_ACCOUNT_ADDR=$(jq -r '.address' ${NODE_DIR}/${NODE_KEY}.json)
gaiad add-genesis-account $NODE_ACCOUNT_ADDR $USER_COINS --home ${NODE_DIR} --keyring-backend test
sleep 1
mkdir $GENTX_DIR
# Stake 100M stake
gaiad gentx $NODE_KEY $STAKE --chain-id provider --home ${NODE_DIR} --keyring-backend test --moniker $MONIKER
cp ${NODE_DIR}/config/gentx/* $GENTX_DIR/
sleep 1
## config second node
rm -rf ${NODE_SUB_DIR}
# Build genesis file and node directory structure
gaiad init $MONIKER_SUB --chain-id provider --home ${NODE_SUB_DIR}
sleep 1
# Create account keypair
gaiad keys add $NODE_KEY_SUB --home ${NODE_SUB_DIR} --keyring-backend test --output json > ${NODE_SUB_DIR}/${NODE_KEY_SUB}.json 2>&1
sleep 1
# Copy first validator genesis
cp ${NODE_DIR}/config/genesis.json ${NODE_SUB_DIR}/config/genesis.json
# Add stake to user
NODE_ACCOUNT_ADDR=$(jq -r '.address' ${NODE_SUB_DIR}/${NODE_KEY_SUB}.json)
gaiad add-genesis-account $NODE_ACCOUNT_ADDR $USER_COINS --home ${NODE_SUB_DIR} --keyring-backend test
sleep 1
# Stake 4M stake
gaiad gentx $NODE_KEY_SUB $STAKE2 --chain-id provider --home ${NODE_SUB_DIR} --keyring-backend test --moniker $MONIKER_SUB
cp ${NODE_SUB_DIR}/config/gentx/* $GENTX_DIR/
sleep 1
gaiad collect-gentxs --home ${NODE_SUB_DIR} --gentx-dir $GENTX_DIR
cp ${NODE_SUB_DIR}/config/genesis.json ${NODE_DIR}/config/genesis.json
# Start nodes
sed -i -r "/node =/ s/= .*/= \"tcp:\/\/${NODE_IP}:26658\"/" ${NODE_DIR}/config/client.toml
sed -i -r 's/timeout_commit = "5s"/timeout_commit = "3s"/g' ${NODE_DIR}/config/config.toml
sed -i -r 's/timeout_propose = "3s"/timeout_propose = "1s"/g' ${NODE_DIR}/config/config.toml
# Start gaia
gaiad start \
--home ${NODE_DIR} \
--rpc.laddr tcp://${NODE_IP}:26658 \
--grpc.address ${NODE_IP}:9091 \
--address tcp://${NODE_IP}:26655 \
--p2p.laddr tcp://${NODE_IP}:26656 \
--grpc-web.enable=false &> ${NODE_DIR}/logs &
######
# comment the next lines to reproduce the issue
######
sleep 5
sed -i -r "/node =/ s/= .*/= \"tcp:\/\/${NODE_IP}:26628\"/" ${NODE_SUB_DIR}/config/client.toml
sed -i -r 's/timeout_commit = "5s"/timeout_commit = "3s"/g' ${NODE_SUB_DIR}/config/config.toml
sed -i -r 's/timeout_propose = "3s"/timeout_propose = "1s"/g' ${NODE_SUB_DIR}/config/config.toml
# Start Gaia
gaiad start \
--home ${NODE_SUB_DIR} \
--rpc.laddr tcp://${NODE_IP}:26628 \
--grpc.address ${NODE_IP}:9021 \
--address tcp://${NODE_IP}:26625 \
--p2p.laddr tcp://${NODE_IP}:26626 \
--grpc-web.enable=false &> ${NODE_SUB_DIR}/logs &
sleep 5
gaiad q tendermint-validator-set --home ${NODE_DIR}
curl 127.0.0.1:26658/status | jq .
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment