Last active
June 29, 2023 15:26
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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