Created
June 29, 2023 13:05
-
-
Save sainoe/f4649e9e5012f68c5c3b21c1e621068c to your computer and use it in GitHub Desktop.
Big validator issue
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 | |
PROV_NODE_DIR=${HOME_DIR}/provider-${MONIKER} | |
PROV_NODE_SUB_DIR=${HOME_DIR}/provider-${MONIKER_SUB} | |
CONS_NODE_DIR=${HOME_DIR}/consumer-${MONIKER} | |
CONS_NODE_SUB_DIR=${HOME_DIR}/consumer-${MONIKER_SUB} | |
CONS_FORK_NODE_DIR=${HOME_DIR}/consumer-fork-${MONIKER} | |
# Coordinator key | |
PROV_KEY=${MONIKER}-key | |
# Sub key | |
PROV_KEY_SUB=${MONIKER_SUB}-key | |
# Clean start | |
pkill -f interchain-security-pd &> /dev/null || true | |
rm -rf ${PROV_NODE_DIR} | |
# Build genesis file and node directory structure | |
interchain-security-pd init $MONIKER --chain-id provider --home ${PROV_NODE_DIR} | |
jq ".app_state.gov.voting_params.voting_period = \"3s\" | .app_state.staking.params.unbonding_time = \"86400s\"" \ | |
${PROV_NODE_DIR}/config/genesis.json > \ | |
${PROV_NODE_DIR}/edited_genesis.json && mv ${PROV_NODE_DIR}/edited_genesis.json ${PROV_NODE_DIR}/config/genesis.json | |
sleep 1 | |
# Create account keypair | |
interchain-security-pd keys add $PROV_KEY --home ${PROV_NODE_DIR} --keyring-backend test --output json > ${PROV_NODE_DIR}/${PROV_KEY}.json 2>&1 | |
sleep 1 | |
# Add stake to user | |
PROV_ACCOUNT_ADDR=$(jq -r '.address' ${PROV_NODE_DIR}/${PROV_KEY}.json) | |
interchain-security-pd add-genesis-account $PROV_ACCOUNT_ADDR $USER_COINS --home ${PROV_NODE_DIR} --keyring-backend test | |
sleep 1 | |
# Stake 1/1000 user's coins | |
interchain-security-pd gentx $PROV_KEY $STAKE --chain-id provider --home ${PROV_NODE_DIR} --keyring-backend test --moniker $MONIKER | |
sleep 1 | |
## config second node | |
rm -rf ${PROV_NODE_SUB_DIR} | |
# Build genesis file and node directory structure | |
interchain-security-pd init $MONIKER_SUB --chain-id provider --home ${PROV_NODE_SUB_DIR} | |
sleep 1 | |
# Create account keypair | |
interchain-security-pd keys add $PROV_KEY_SUB --home ${PROV_NODE_SUB_DIR} --keyring-backend test --output json > ${PROV_NODE_SUB_DIR}/${PROV_KEY_SUB}.json 2>&1 | |
sleep 1 | |
cp ${PROV_NODE_DIR}/config/genesis.json ${PROV_NODE_SUB_DIR}/config/genesis.json | |
# Add stake to user | |
PROV_ACCOUNT_ADDR=$(jq -r '.address' ${PROV_NODE_SUB_DIR}/${PROV_KEY_SUB}.json) | |
interchain-security-pd add-genesis-account $PROV_ACCOUNT_ADDR $USER_COINS --home ${PROV_NODE_SUB_DIR} --keyring-backend test | |
sleep 1 | |
cp -r ${PROV_NODE_DIR}/config/gentx/ ${PROV_NODE_SUB_DIR}/config/gentx/ | |
# # Stake 1/1000 user's coins | |
interchain-security-pd gentx $PROV_KEY_SUB $STAKE2 --chain-id provider --home ${PROV_NODE_SUB_DIR} --keyring-backend test --moniker $MONIKER_SUB | |
sleep 1 | |
interchain-security-pd collect-gentxs --home ${PROV_NODE_SUB_DIR} --gentx-dir ${PROV_NODE_SUB_DIR}/config/gentx/ | |
cp ${PROV_NODE_SUB_DIR}/config/genesis.json ${PROV_NODE_DIR}/config/genesis.json | |
# Start nodes | |
sed -i -r "/node =/ s/= .*/= \"tcp:\/\/${NODE_IP}:26658\"/" ${PROV_NODE_DIR}/config/client.toml | |
sed -i -r 's/timeout_commit = "5s"/timeout_commit = "3s"/g' ${PROV_NODE_DIR}/config/config.toml | |
sed -i -r 's/timeout_propose = "3s"/timeout_propose = "1s"/g' ${PROV_NODE_DIR}/config/config.toml | |
# Start provider | |
interchain-security-pd start \ | |
--home ${PROV_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 &> ${PROV_NODE_DIR}/logs & | |
sleep 5 | |
sed -i -r "/node =/ s/= .*/= \"tcp:\/\/${NODE_IP}:26628\"/" ${PROV_NODE_SUB_DIR}/config/client.toml | |
sed -i -r 's/timeout_commit = "5s"/timeout_commit = "3s"/g' ${PROV_NODE_SUB_DIR}/config/config.toml | |
sed -i -r 's/timeout_propose = "3s"/timeout_propose = "1s"/g' ${PROV_NODE_SUB_DIR}/config/config.toml | |
# Start provider | |
interchain-security-pd start \ | |
--home ${PROV_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 &> ${PROV_NODE_SUB_DIR}/logs & | |
sleep 5 | |
interchain-security-pd q tendermint-validator-set --home ${PROV_NODE_DIR} | |
sleep 1 | |
# Build consumer chain proposal file | |
tee ${PROV_NODE_DIR}/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 | |
interchain-security-pd keys show $PROV_KEY --keyring-backend test --home ${PROV_NODE_DIR} | |
# Submit consumer chain proposal | |
interchain-security-pd tx gov submit-proposal consumer-addition ${PROV_NODE_DIR}/consumer-proposal.json --chain-id provider --from $PROV_KEY --home ${PROV_NODE_DIR} --node tcp://${NODE_IP}:26658 --keyring-backend test -b block -y | |
sleep 1 | |
# Vote yes to proposal | |
interchain-security-pd tx gov vote 1 yes --from $PROV_KEY --chain-id provider --home ${PROV_NODE_DIR} -b block -y --keyring-backend test | |
sleep 3 | |
## CONSUMER CHAIN ## | |
# Clean start | |
pkill -f interchain-security-cd &> /dev/null || true | |
rm -rf ${CONS_NODE_DIR} | |
rm -rf ${CONS_NODE_SUB_DIR} | |
rm -rf ${CONS_FORK_NODE_DIR} | |
# Build genesis file and node directory structure | |
interchain-security-cd init $MONIKER --chain-id consumer --home ${CONS_NODE_DIR} | |
sleep 1 | |
# Create user account keypair | |
interchain-security-cd keys add $PROV_KEY --home ${CONS_NODE_DIR} --keyring-backend test --output json > ${CONS_NODE_DIR}/${PROV_KEY}.json 2>&1 | |
# Add stake to user account | |
CONS_ACCOUNT_ADDR=$(jq -r '.address' ${CONS_NODE_DIR}/${PROV_KEY}.json) | |
interchain-security-cd add-genesis-account $CONS_ACCOUNT_ADDR 1000000000stake --home ${CONS_NODE_DIR} | |
# Add consumer genesis states to genesis file | |
interchain-security-pd query provider consumer-genesis consumer --home ${PROV_NODE_DIR} -o json > consumer_gen.json | |
jq -s '.[0].app_state.ccvconsumer = .[1] | .[0]' ${CONS_NODE_DIR}/config/genesis.json consumer_gen.json > ${CONS_NODE_DIR}/edited_genesis.json \ | |
&& mv ${CONS_NODE_DIR}/edited_genesis.json ${CONS_NODE_DIR}/config/genesis.json | |
rm consumer_gen.json | |
# Create validator states | |
echo '{"height": "0","round": 0,"step": 0}' > ${CONS_NODE_DIR}/data/priv_validator_state.json | |
# Copy validator key files | |
cp ${PROV_NODE_DIR}/config/priv_validator_key.json ${CONS_NODE_DIR}/config/priv_validator_key.json | |
cp ${PROV_NODE_DIR}/config/node_key.json ${CONS_NODE_DIR}/config/node_key.json | |
# Set default client port | |
sed -i -r "/node =/ s/= .*/= \"tcp:\/\/${NODE_IP}:26648\"/" ${CONS_NODE_DIR}/config/client.toml | |
# Start consumer | |
interchain-security-cd start --home ${CONS_NODE_DIR} \ | |
--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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment