1+ #! /bin/bash
2+
3+ display_usage () {
4+ echo " Missing parameters. Please check if all parameters were specified."
5+ echo " Usage: setup-bcd.sh [CHAIN_ID] [CHAIN_DIR] [RPC_PORT] [P2P_PORT] [PROFILING_PORT] [GRPC_PORT] [BABYLON_CONTRACT_CODE_FILE] [BTC_LC_CONTRACT_CODE_FILE] [BTCSTAKING_CONTRACT_CODE_FILE] [BTCFINALITY_CONTRACT_CODE_FILE]"
6+ echo " Example: setup-bcd.sh test-chain-id ./data 26657 26656 6060 9090 ./babylon_contract.wasm ./btc_light_client.wasm ./btc_staking.wasm ./btc_finality.wasm"
7+ exit 1
8+ }
9+
10+ BINARY=bcd
11+ DENOM=stake
12+ BASEDENOM=ustake
13+ KEYRING=--keyring-backend=" test"
14+ SILENT=1
15+
16+ redirect () {
17+ if [ " $SILENT " -eq 1 ]; then
18+ " $@ " > /dev/null 2>&1
19+ else
20+ " $@ "
21+ fi
22+ }
23+
24+ if [ " $# " -lt " 9" ]; then
25+ display_usage
26+ exit 1
27+ fi
28+
29+ CHAINID=$1
30+ CHAINDIR=$2
31+ RPCPORT=$3
32+ P2PPORT=$4
33+ PROFPORT=$5
34+ GRPCPORT=$6
35+ BABYLON_CONTRACT_CODE_FILE=$7
36+ BTC_LC_CONTRACT_CODE_FILE=$8
37+ BTCSTAKING_CONTRACT_CODE_FILE=$9
38+ BTCFINALITY_CONTRACT_CODE_FILE=${10}
39+
40+ # ensure the binary exists
41+ if ! command -v $BINARY & > /dev/null; then
42+ echo " $BINARY could not be found"
43+ exit
44+ fi
45+
46+ # Delete chain data from old runs
47+ echo " Deleting $CHAINDIR /$CHAINID folders..."
48+ rm -rf $CHAINDIR /$CHAINID & > /dev/null
49+ rm $CHAINDIR /$CHAINID .log & > /dev/null
50+
51+ echo " Creating $BINARY instance: home=$CHAINDIR | chain-id=$CHAINID | p2p=:$P2PPORT | rpc=:$RPCPORT | profiling=:$PROFPORT | grpc=:$GRPCPORT "
52+
53+ # Add dir for chain, exit if error
54+ if ! mkdir -p $CHAINDIR /$CHAINID 2> /dev/null; then
55+ echo " Failed to create chain folder. Aborting..."
56+ exit 1
57+ fi
58+ # Build genesis file incl account for passed address
59+ coins=" 100000000000$DENOM ,100000000000$BASEDENOM "
60+ delegate=" 100000000000$DENOM "
61+
62+ redirect $BINARY --home $CHAINDIR /$CHAINID --chain-id $CHAINID init $CHAINID
63+ sleep 1
64+ $BINARY --home $CHAINDIR /$CHAINID keys add validator $KEYRING --output json > $CHAINDIR /$CHAINID /validator_seed.json 2>&1
65+ sleep 1
66+ $BINARY --home $CHAINDIR /$CHAINID keys add user $KEYRING --output json > $CHAINDIR /$CHAINID /key_seed.json 2>&1
67+ sleep 1
68+ redirect $BINARY --home $CHAINDIR /$CHAINID genesis add-genesis-account $( $BINARY --home $CHAINDIR /$CHAINID keys $KEYRING show user -a) $coins
69+ sleep 1
70+ redirect $BINARY --home $CHAINDIR /$CHAINID genesis add-genesis-account $( $BINARY --home $CHAINDIR /$CHAINID keys $KEYRING show validator -a) $coins
71+ sleep 1
72+ redirect $BINARY --home $CHAINDIR /$CHAINID genesis gentx validator $delegate $KEYRING --chain-id $CHAINID
73+ sleep 1
74+ redirect $BINARY --home $CHAINDIR /$CHAINID genesis collect-gentxs
75+ sleep 1
76+
77+ # Set proper defaults and change ports
78+ echo " Change settings in config.toml and genesis.json files..."
79+ sed -i ' s#"tcp://127.0.0.1:26657"#"tcp://0.0.0.0:' " $RPCPORT " ' "#g' $CHAINDIR /$CHAINID /config/config.toml
80+ sed -i ' s#"tcp://0.0.0.0:26656"#"tcp://0.0.0.0:' " $P2PPORT " ' "#g' $CHAINDIR /$CHAINID /config/config.toml
81+ sed -i ' s#"localhost:6060"#"localhost:' " $PROFPORT " ' "#g' $CHAINDIR /$CHAINID /config/config.toml
82+ sed -i ' s/timeout_commit = "5s"/timeout_commit = "1s"/g' $CHAINDIR /$CHAINID /config/config.toml
83+ sed -i ' s/max_body_bytes = 1000000/max_body_bytes = 1000000000/g' $CHAINDIR /$CHAINID /config/config.toml
84+ sed -i ' s/minimum-gas-prices = ""/minimum-gas-prices = "0.00001ustake"/g' $CHAINDIR /$CHAINID /config/app.toml
85+ sed -i ' s/timeout_propose = "3s"/timeout_propose = "1s"/g' $CHAINDIR /$CHAINID /config/config.toml
86+ sed -i ' s/index_all_keys = false/index_all_keys = true/g' $CHAINDIR /$CHAINID /config/config.toml
87+ sed -i ' s#"tcp://0.0.0.0:1317"#"tcp://0.0.0.0:1318"#g' $CHAINDIR /$CHAINID /config/app.toml # ensure port is not conflicted with Babylon
88+ sed -i ' s/"bond_denom": "stake"/"bond_denom": "' " $DENOM " ' "/g' $CHAINDIR /$CHAINID /config/genesis.json
89+ # sed -i '' 's#index-events = \[\]#index-events = \["message.action","send_packet.packet_src_channel","send_packet.packet_sequence"\]#g' $CHAINDIR/$CHAINID/config/app.toml
90+
91+ # Start
92+ echo " Starting $BINARY ..."
93+ $BINARY --home $CHAINDIR /$CHAINID start --pruning=nothing --grpc-web.enable=false --grpc.address=" 0.0.0.0:$GRPCPORT " --log_level trace --trace --log_format ' plain' --log_no_color 2>&1 | tee $CHAINDIR /$CHAINID .log &
94+ sleep 20
95+
96+ # upload contract code
97+ echo " Uploading babylon contract code $BABYLON_CONTRACT_CODE_FILE ..."
98+ $BINARY --home $CHAINDIR /$CHAINID tx wasm store " $BABYLON_CONTRACT_CODE_FILE " $KEYRING --from user --chain-id $CHAINID --gas 200000000 --gas-prices 0.01ustake --node http://localhost:$RPCPORT -y
99+ sleep 5
100+
101+ # upload contract code
102+ echo " Uploading btc light client contract code $BTC_LC_CONTRACT_CODE_FILE ..."
103+ $BINARY --home $CHAINDIR /$CHAINID tx wasm store " $BTC_LC_CONTRACT_CODE_FILE " $KEYRING --from user --chain-id $CHAINID --gas 200000000 --gas-prices 0.01ustake --node http://localhost:$RPCPORT -y
104+ sleep 5
105+
106+ # upload contract code
107+ echo " Uploading btcstaking contract code $BTCSTAKING_CONTRACT_CODE_FILE ..."
108+ $BINARY --home $CHAINDIR /$CHAINID tx wasm store " $BTCSTAKING_CONTRACT_CODE_FILE " $KEYRING --from user --chain-id $CHAINID --gas 200000000 --gas-prices 0.01ustake --node http://localhost:$RPCPORT -y
109+ sleep 5
110+
111+ # upload contract code
112+ echo " Uploading btcfinality contract code $BTCFINALITY_CONTRACT_CODE_FILE ..."
113+ $BINARY --home $CHAINDIR /$CHAINID tx wasm store " $BTCFINALITY_CONTRACT_CODE_FILE " $KEYRING --from user --chain-id $CHAINID --gas 200000000 --gas-prices 0.01ustake --node http://localhost:$RPCPORT -y
114+ sleep 5
115+
116+ # Echo the command with expanded variables
117+ echo " Instantiating contracts..."
118+
119+ ADMIN=$( bcd --home $CHAINDIR /$CHAINID keys show user --keyring-backend test -a)
120+ STAKING_MSG=' {
121+ "admin": "' " $ADMIN " ' "
122+ }'
123+ FINALITY_MSG=' {
124+ "params": {
125+ "max_active_finality_providers": 100,
126+ "min_pub_rand": 1,
127+ "finality_inflation_rate": "0.035",
128+ "epoch_length": 10,
129+ "missed_blocks_window": 250,
130+ "jail_duration": 86400
131+ },
132+ "admin": "' " $ADMIN " ' "
133+ }'
134+
135+ $BINARY --home $CHAINDIR /$CHAINID tx babylon instantiate-babylon-contracts \
136+ 1 2 3 4 \
137+ " regtest" \
138+ " 01020304" \
139+ 1 2 false \
140+ " $STAKING_MSG " \
141+ " $FINALITY_MSG " \
142+ test-consumer \
143+ test-consumer-description \
144+ --admin=$ADMIN \
145+ --ibc-transfer-channel-id=channel-0 \
146+ $KEYRING \
147+ --from user \
148+ --chain-id $CHAINID \
149+ --gas 20000000000 \
150+ --gas-prices 0.001ustake \
151+ --node http://localhost:$RPCPORT \
152+ -y
0 commit comments