Skip to content

Commit 7e4939c

Browse files
author
LazyLuis
committed
add local cluster.sh
1 parent 2ed946e commit 7e4939c

1 file changed

Lines changed: 225 additions & 0 deletions

File tree

scripts/local_cluster.sh

Lines changed: 225 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,225 @@
1+
#!/bin/bash
2+
3+
N=4
4+
KEYS=("v1" "v2" "v3" "v4")
5+
CHAINID="devnet"
6+
MONIKER="Side Labs"
7+
BINARY="$HOME/go/bin/sided"
8+
DENOM_STR="uside,sat,uusdc,uusdt"
9+
INITIAL_ACCOUNT_STR=""
10+
set -f
11+
IFS=,
12+
DENOMS=($DENOM_STR)
13+
INITIAL_ACCOUNTS=($INITIAL_ACCOUNT_STR)
14+
15+
IFS=";"
16+
17+
INITIAL_SUPPLY="100000000000000"
18+
BLOCK_GAS=10000000
19+
MAX_GAS=10000000000
20+
21+
# btcbridge params
22+
BTC_VAULT=() # ("<address>" "<pk>" "<asset type>")
23+
RUNES_VAULT=()
24+
TRUSTED_NON_BTC_RELAYER=""
25+
TRUSTED_FEE_PROVIDER=""
26+
PROTOCOL_FEE_COLLECTOR=""
27+
28+
# gov params
29+
GOV_VOTING_PERIOD="60s"
30+
GOV_EXPEDITED_VOTING_PERIOD="30s"
31+
32+
# Remember to change to other types of keyring like 'file' in-case exposing to outside world,
33+
# otherwise your balance will be wiped quickly
34+
# The keyring test does not require private key to steal tokens from you
35+
KEYRING="test"
36+
#KEYALGO="secp256k1"
37+
KEYALGO="segwit"
38+
LOGLEVEL="info"
39+
# Set dedicated home directory for the $BINARY instance
40+
HOMEDIR="$HOME/testnet"
41+
42+
# Path variables
43+
# CONFIG=$HOMEDIR/config/config.toml
44+
# APP_TOML=$HOMEDIR/config/app.toml
45+
46+
# GENESIS=$HOMEDIR/config/genesis.json
47+
# TMP_GENESIS=$HOMEDIR/config/tmp_genesis.json
48+
49+
# validate dependencies are installed
50+
command -v jq >/dev/null 2>&1 || {
51+
echo >&2 "jq not installed. More info: https://stedolan.github.io/jq/download/"
52+
exit 1
53+
}
54+
55+
# used to exit on first error (any non-zero exit code)
56+
set -e
57+
58+
# Reinstall daemon
59+
cd ..
60+
make install
61+
cd scripts
62+
63+
# User prompt if an existing local node configuration is found.
64+
if [ -d "$HOMEDIR" ]; then
65+
printf "\nAn existing folder at '%s' was found. You can choose to delete this folder and start a new local node with new keys from genesis. When declined, the existing local node is started. \n" "$HOMEDIR"
66+
echo "Overwrite the existing configuration and start a new local node? [y/n]"
67+
read -r overwrite
68+
else
69+
overwrite="Y"
70+
fi
71+
72+
73+
# Setup local node if overwrite is set to Yes, otherwise skip setup
74+
if [[ $overwrite == "y" || $overwrite == "Y" ]]; then
75+
# Remove the previous folder
76+
rm -rf "$HOMEDIR"
77+
NODE_ID=""
78+
# Set moniker and chain-id for Cascadia (Moniker can be anything, chain-id must be an integer)
79+
for ((i=1; i<=N; i++)); do
80+
81+
APPHOME="$HOMEDIR/side$i"
82+
$BINARY init "$MONIKER #$i" -o --chain-id $CHAINID --home $APPHOME --default-denom "${DENOMS[0]}" &> /dev/null
83+
84+
CONFIG=$APPHOME/config/config.toml
85+
APP_TOML=$APPHOME/config/app.toml
86+
87+
sed -i.bak 's/swagger = false/swagger = true/g' $APP_TOML
88+
sed -i.bak 's/pruning = "default"/pruning = "everything"/g' "$APP_TOML"
89+
sed -i.bak "s/minimum-gas-prices = \"\"/minimum-gas-prices = \"0.000001${DENOMS[0]}\"/g" $APP_TOML
90+
sed -i.bak "s/bitcoin_rpc = \"\"/bitcoin_rpc = \"192.248.150.102:18332\"/g" $APP_TOML
91+
sed -i.bak "s/bitcoin_rpc_user = \"\"/bitcoin_rpc_user = \"side\"/g" $APP_TOML
92+
sed -i.bak "s/bitcoin_rpc_password = \"\"/bitcoin_rpc_password = \"12345678\"/g" $APP_TOML
93+
94+
if [[ $i -eq 1 ]]; then
95+
96+
sed -i.bak "s/127.0.0.1:26657/0.0.0.0:26657/g" "$CONFIG"
97+
sed -i.bak 's/cors_allowed_origins\s*=\s*\[\]/cors_allowed_origins = ["*",]/g' "$CONFIG"
98+
99+
NODE_ID=$($BINARY comet show-node-id --home $APPHOME)
100+
for key in "${!DENOMS[@]}"; do
101+
BALANCES+=",${INITIAL_SUPPLY}${DENOMS[$key]}"
102+
done
103+
# echo "$KEY ${BALANCES:1}"
104+
for ((j=1; j<=N; j++)); do
105+
$BINARY keys add "v$j" --keyring-backend $KEYRING --algo $KEYALGO --home $APPHOME &> "$HOMEDIR/$j.mnemonic"
106+
# cp -r $HOMEDIR $APPHOME
107+
$BINARY genesis add-genesis-account v$j ${BALANCES:1} --keyring-backend $KEYRING --home $APPHOME
108+
done
109+
110+
echo "Genesis accounts allocated for local accounts"
111+
112+
$BINARY genesis gentx v$i ${INITIAL_SUPPLY%?}${DENOMS[0]} --keyring-backend $KEYRING --chain-id $CHAINID --identity "666AC57CC678BEC4" --website="https://side.one" --home $APPHOME
113+
114+
# set genesis
115+
GENESIS=$APPHOME/config/genesis.json
116+
TMP_GENESIS=$APPHOME/config/tmp_genesis.json
117+
118+
jq --arg max_gas "$MAX_GAS" '.consensus_params["block"]["max_gas"]=$max_gas' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS"
119+
jq --arg height "3" '.consensus["params"]["abci"]["vote_extensions_enable_height"]=$height' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS"
120+
121+
# set gov voting period
122+
if [ -n "$GOV_VOTING_PERIOD" ]; then
123+
jq --arg voting_period "${GOV_VOTING_PERIOD}" '.app_state["gov"]["params"]["voting_period"]=$voting_period' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS"
124+
fi
125+
126+
# set gov expedited voting period
127+
if [ -n "$GOV_EXPEDITED_VOTING_PERIOD" ]; then
128+
jq --arg expedited_voting_period "${GOV_EXPEDITED_VOTING_PERIOD}" '.app_state["gov"]["params"]["expedited_voting_period"]=$expedited_voting_period' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS"
129+
fi
130+
131+
# set vaults if provided
132+
if [[ "${#BTC_VAULT[@]}" -eq 3 && "${#RUNES_VAULT[@]}" -eq 3 ]]; then
133+
jq --arg btc_vault "${BTC_VAULT[0]}" '.app_state["btcbridge"]["params"]["vaults"][0]["address"]=$btc_vault' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS"
134+
jq --arg btc_vault_pk "${BTC_VAULT[1]}" '.app_state["btcbridge"]["params"]["vaults"][0]["pub_key"]=$btc_vault_pk' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS"
135+
jq --arg btc_vault_asset_type "${BTC_VAULT[2]}" '.app_state["btcbridge"]["params"]["vaults"][0]["asset_type"]=$btc_vault_asset_type' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS"
136+
jq --arg runes_vault "${RUNES_VAULT[0]}" '.app_state["btcbridge"]["params"]["vaults"][1]["address"]=$runes_vault' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS"
137+
jq --arg runes_vault_pk "${RUNES_VAULT[1]}" '.app_state["btcbridge"]["params"]["vaults"][1]["pub_key"]=$runes_vault_pk' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS"
138+
jq --arg runes_vault_asset_type "${RUNES_VAULT[2]}" '.app_state["btcbridge"]["params"]["vaults"][1]["asset_type"]=$runes_vault_asset_type' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS"
139+
fi
140+
141+
# set trusted non btc relayer
142+
if [ -n "$TRUSTED_NON_BTC_RELAYER" ]; then
143+
jq --arg relayer "$TRUSTED_NON_BTC_RELAYER" '.app_state["btcbridge"]["params"]["trusted_non_btc_relayers"][0]=$relayer' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS"
144+
fi
145+
146+
# set trusted fee provider
147+
if [ -n "$TRUSTED_FEE_PROVIDER" ]; then
148+
jq --arg provider "$TRUSTED_FEE_PROVIDER" '.app_state["btcbridge"]["params"]["trusted_fee_providers"][0]=$provider' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS"
149+
fi
150+
151+
# set protocol fee collector
152+
if [ -n "$PROTOCOL_FEE_COLLECTOR" ]; then
153+
jq --arg fee_collector "$PROTOCOL_FEE_COLLECTOR" '.app_state["btcbridge"]["params"]["protocol_fees"]["collector"]=$fee_collector' "$GENESIS" >"$TMP_GENESIS" && mv "$TMP_GENESIS" "$GENESIS"
154+
fi
155+
156+
continue
157+
fi
158+
159+
sed -i.bak "s/127.0.0.1:26657/0.0.0.0:26${i}57/g" $CONFIG
160+
sed -i.bak "s/127.0.0.1:26658/127.0.0.1:26${i}28/g" $CONFIG
161+
sed -i.bak "s/0.0.0.0:26656/0.0.0.0:26${i}56/g" $CONFIG
162+
sed -i.bak "s/localhost:6060/localhost:60${i}0/g" $CONFIG
163+
sed -i.bak "s/persistent_peers = \"\"/persistent_peers = \"$NODE_ID@localhost:26656\"/g" $CONFIG
164+
165+
cp -f "${APPHOME%?}1/config/genesis.json" "$APPHOME/config/genesis.json"
166+
cp -r "${APPHOME%?}1/keyring-$KEYRING" "$APPHOME/keyring-$KEYRING"
167+
168+
$BINARY genesis gentx v$i ${INITIAL_SUPPLY%?}${DENOMS[0]} --keyring-backend $KEYRING --chain-id $CHAINID --identity "666AC57CC678BEC4" --website="https://side.one" --home $APPHOME --p2p-port "26${i}56" --ip 127.0.0.1
169+
cp -r "$APPHOME/config/gentx/" "${APPHOME%?}1/config/gentx"
170+
171+
done
172+
173+
$BINARY genesis collect-gentxs --home ${APPHOME%?}1 # &> /dev/null
174+
$BINARY genesis validate --home ${APPHOME%?}1
175+
# $BINARY keys list --keyring-dir $HOMEDIR --keyring-backend $KEYRING
176+
echo "Genesis transactions collected"
177+
178+
for ((i=2; i<=N; i++)); do
179+
cp -f "${APPHOME%?}1/config/genesis.json" "${APPHOME%?}$i/config"
180+
shasum ${APPHOME%?}$i/config/genesis.json
181+
done
182+
183+
# exit 0
184+
# $BINARY genesis gentx "${KEYS[1]}" ${INITIAL_SUPPLY%?}${DENOMS[0]} --keyring-backend $KEYRING --chain-id $CHAINID --identity 666AC57CC678BEC4 --website="https://side.one" --home $HOMEDIR2 --p2p-port 26626
185+
# $BINARY genesis gentx "${KEYS[2]}" ${INITIAL_SUPPLY%?}${DENOMS[0]} --keyring-backend $KEYRING --chain-id $CHAINID --identity "666AC57CC678BEC4" --website="https://side.one" --home $HOMEDIR3 --p2p-port 26636
186+
# $BINARY genesis gentx "${KEYS[3]}" ${INITIAL_SUPPLY%?}${DENOMS[0]} --keyring-backend $KEYRING --chain-id $CHAINID --identity "666AC57CC678BEC4" --website="https://side.one" --home $HOMEDIR4 --p2p-port 26646
187+
188+
# cp -r "$HOMEDIR2/config/gentx/" "$HOMEDIR/config/gentx"
189+
# cp -r "$HOMEDIR3/config/gentx/" "$HOMEDIR/config/gentx"
190+
# cp -r "$HOMEDIR4/config/gentx/" "$HOMEDIR/config/gentx"
191+
192+
# # Collect genesis tx
193+
# $BINARY genesis collect-gentxs --home &> /dev/null
194+
# echo "Genesis transactions collected"
195+
196+
# Run this to ensure everything worked and that the genesis file is setup correctly
197+
# $BINARY genesis validate --home "$HOMEDIR"
198+
199+
# cp -f "$HOMEDIR/config/genesis.json" "$HOMEDIR2/config"
200+
# cp -f "$HOMEDIR/config/genesis.json" "$HOMEDIR3/config"
201+
# cp -f "$HOMEDIR/config/genesis.json" "$HOMEDIR4/config"
202+
203+
if [[ $1 == "pending" ]]; then
204+
echo "pending mode is on, please wait for the first block committed."
205+
fi
206+
fi
207+
208+
# Cleanup function to run on Ctrl-C
209+
cleanup() {
210+
# echo "Ctrl-C detected! Killing background jobs..."
211+
# kill $pid1 $pid2 $pid3
212+
# wait $pid1 $pid2 $pid3 2>/dev/null
213+
echo "All background jobs cleaned up. Exiting."
214+
exit 0
215+
}
216+
217+
# Trap SIGINT (Ctrl-C)
218+
trap cleanup SIGINT
219+
220+
for ((i=2; i<=N; i++)); do
221+
$BINARY start --home ${APPHOME%?}$i > "$HOMEDIR/output$i.log" 2>&1 &
222+
done
223+
224+
# Start the node (remove the --pruning=nothing flag if historical queries are not needed)
225+
$BINARY start --log_level info --minimum-gas-prices=0.0001${DENOMS[0]} --home ${APPHOME%?}1

0 commit comments

Comments
 (0)