@@ -9,12 +9,15 @@ basedir=$(
99)
1010workspace=${basedir}
1111source ${workspace} /.env
12- size=$(( BSC_CLUSTER_SIZE))
12+ source ${workspace} /qa-env-resource/machines_meta.sh # including machine ips and ids, don't upload!!!
13+ validator_ips=(${validator_ips_comma// ,/ } )
14+ size=${# validator_ips[@]}
1315stateScheme=" hash"
1416dbEngine=" leveldb"
1517gcmode=" full"
1618sleepBeforeStart=15
1719sleepAfterStart=10
20+ copyDir=" bsc-qa"
1821
1922# stop geth client
2023function exit_previous() {
@@ -57,7 +60,7 @@ function reset_genesis() {
5760 mv genesis-template.json.bk genesis-template.json
5861 mv scripts/init_holders.template.bk scripts/init_holders.template
5962
60- poetry install --no-root
63+ # poetry install --no-root
6164 npm install
6265 rm -rf lib/forge-std
6366 forge install --no-git foundry-rs/forge-std@v1.7.3
@@ -83,28 +86,49 @@ function prepare_config() {
8386 mkdir -p ${targetDir} && cd ${targetDir}
8487 cp ${workspace} /keys/password.txt ./
8588 cp ${workspace} /.local/hardforkTime.txt ./
89+ cp ${workspace} /qa-env-resource/* ./ && rm -f upgrade-single*
90+ sed -i -e " s/{{validatorAddr}}/${cons_addr} /g" chaind.sh && rm -f chaind.sh.bak
8691 bbcfee_addrs=${fee_addr}
8792 powers=" 0x000001d1a94a2000" # 2000000000000
8893 mv ${workspace} /.local/bls${i} /bls ./ && rm -rf ${workspace} /.local/bls${i}
8994 vote_addr=0x$( cat ./bls/keystore/* json | jq .pubkey | sed ' s/"//g' )
9095 echo " ${cons_addr} ,${bbcfee_addrs} ,${fee_addr} ,${powers} ,${vote_addr} " >> ${workspace} /genesis/validators.conf
9196 if [ ${EnableSentryNode} = true ]; then
92- mkdir -p ${workspace} /.local/sentry${i}
97+ targetDir=${workspace} /.local/sentry${i}
98+ mkdir -p ${targetDir} && cd ${targetDir}
99+ cp ${workspace} /.local/hardforkTime.txt ./
100+ cp ${workspace} /qa-env-resource/* ./ && rm -f upgrade-single*
101+ sed -i -e ' /--mine/d' chaind.sh
102+ sed -i -e ' s/workdir="validator"/workdir="sentry"/g' chaind.sh
103+ sed -i -e ' s/bin="bsc"/bin="sentry"/g' chaind.sh
104+ sed -i -e " s/portInc=0/portInc=2/g" chaind.sh
105+ rm -f chaind.sh.bak
106+ sed -i -e ' s/workdir="validator"/workdir="sentry"/g' init.sh
107+ sed -i -e ' s/bin="bsc"/bin="sentry"/g' init.sh
108+ rm -f init.sh.bak
109+ mv bsc.service sentry.service
110+ sed -i -e ' s/validator/sentry/g' sentry.service
111+ sed -i -e ' s/bsc/sentry/g' sentry.service
112+ rm -f sentry.service.bak
93113 fi
94114 done
95115 if [ ${EnableFullNode} = true ]; then
96- mkdir -p ${workspace} /.local/fullnode0
116+ targetDir=${workspace} /.local/fullnode0
117+ mkdir -p ${targetDir} && cd ${targetDir}
118+ cp ${workspace} /.local/hardforkTime.txt ./
119+ cp ${workspace} /qa-env-resource/* ./ && rm -f upgrade-single*
120+ sed -i -e ' /--mine/d' chaind.sh && rm -f chaind.sh.bak
97121 fi
98122 rm -f ${workspace} /.local/hardforkTime.txt
99123
100124 cd ${workspace} /genesis/
101125 git checkout HEAD contracts
102126 sed -i -e ' s/alreadyInit = true;/turnLength = 16;alreadyInit = true;/' ${workspace} /genesis/contracts/BSCValidatorSet.sol
103127 sed -i -e ' s/public onlyCoinbase onlyZeroGasPrice {/public onlyCoinbase onlyZeroGasPrice {if (block.number < 2000) return;/' ${workspace} /genesis/contracts/BSCValidatorSet.sol
104-
105- poetry run python -m scripts.generate generate-validators
106- poetry run python -m scripts.generate generate-init-holders " ${initHolders} "
107- poetry run python -m scripts.generate dev \
128+
129+ python3 -m scripts.generate generate-validators
130+ python3 -m scripts.generate generate-init-holders " ${initHolders} "
131+ python3 -m scripts.generate dev \
108132 --dev-chain-id " ${CHAIN_ID} " \
109133 --init-burn-ratio " 1000" \
110134 --init-felony-slash-scope " 60" \
@@ -142,10 +166,10 @@ function initNetwork() {
142166
143167 init_extra_args=" "
144168 if [ ${EnableSentryNode} = true ]; then
145- init_extra_args=" --init.sentrynode-size ${size} --init.sentrynode-ports 30411 "
169+ init_extra_args=" --init.sentrynode-size ${size} --init.sentrynode-ips ${sentry_ips_comma} "
146170 fi
147171 if [ ${EnableFullNode} = true ]; then
148- init_extra_args=" ${init_extra_args} --init.fullnode-size 1 --init.fullnode-ports 30511 "
172+ init_extra_args=" ${init_extra_args} --init.fullnode-size 1 --init.fullnode-ips ${fullnode_ips_comma} "
149173 fi
150174 if [ " ${RegisterNodeID} " = true ]; then
151175 if [ " ${EnableSentryNode} " = true ]; then
@@ -161,7 +185,7 @@ function initNetwork() {
161185 init_extra_args=" ${init_extra_args} --init.evn-validator-whitelist"
162186 fi
163187 fi
164- ${workspace} /bin/geth init-network --init.dir ${workspace} /.local --init.size=${size} --config ${workspace} /config.toml ${init_extra_args} ${workspace} /genesis/genesis.json
188+ ${workspace} /bin/geth init-network --init.dir ${workspace} /.local --init.size=${size} --init.ips " ${validator_ips_comma} " -- config ${workspace} /qa-env-resource /config.toml ${init_extra_args} ${workspace} /genesis/genesis.json
165189 rm -f ${workspace} /* bsc.log*
166190 for (( i = 0 ; i < size; i++ )) ; do
167191 sed -i -e ' /"<nil>"/d' ${workspace} /.local/node${i} /config.toml
@@ -175,14 +199,21 @@ function initNetwork() {
175199 rm -f ${workspace} /.local/node${i} /* bsc.log*
176200
177201 if [ ${EnableSentryNode} = true ]; then
202+ sed -i -e ' s/:30311/:30611/g' ${workspace} /.local/node${i} /config.toml
203+ sed -i -e ' s/:30411/:30311/g' ${workspace} /.local/node${i} /config.toml
204+
178205 sed -i -e ' /"<nil>"/d' ${workspace} /.local/sentry${i} /config.toml
206+ sed -i -e ' s/:30311/:30611/g' ${workspace} /.local/sentry${i} /config.toml
207+ sed -i -e ' s/:30411/:30311/g' ${workspace} /.local/sentry${i} /config.toml
179208 initLog=${workspace} /.local/sentry${i} /init.log
180209 ${workspace} /bin/geth --datadir ${workspace} /.local/sentry${i} init --state.scheme path --db.engine pebble ${workspace} /genesis/genesis.json > " ${initLog} " 2>&1
181210 rm -f ${workspace} /.local/sentry${i} /* bsc.log*
182211 fi
183212 done
184213 if [ ${EnableFullNode} = true ]; then
185214 sed -i -e ' /"<nil>"/d' ${workspace} /.local/fullnode0/config.toml
215+ sed -i -e ' s/:30411/:30311/g' ${workspace} /.local/fullnode0/config.toml
216+ sed -i -e ' s/:30511/:30311/g' ${workspace} /.local/fullnode0/config.toml
186217 sed -i -e ' s/EnableEVNFeatures = true/EnableEVNFeatures = false/g' ${workspace} /.local/fullnode0/config.toml
187218 initLog=${workspace} /.local/fullnode0/init.log
188219 ${workspace} /bin/geth --datadir ${workspace} /.local/fullnode0 init --state.scheme path --db.engine pebble ${workspace} /genesis/genesis.json > " ${initLog} " 2>&1
@@ -272,14 +303,78 @@ function native_start() {
272303}
273304
274305function register_stakehub(){
275- # wait feynman enable
276- sleep 45
277306 for (( i = 0 ; i < size; i++ )) ; do
278307 ${workspace} /create-validator/create-validator --consensus-key-dir ${workspace} /keys/validator${i} --vote-key-dir ${workspace} /keys/bls${i} \
279308 --password-path ${workspace} /keys/password.txt --amount 20001 --validator-desc Val${i} --rpc-url ${RPC_URL}
280309 done
281310}
282311
312+ function remote_reset_config() {
313+ rm -rf /mnt/efs/${copyDir} /clusterNetwork
314+ cp -r ${workspace} /.local /mnt/efs/${copyDir} /clusterNetwork
315+ ips=(${validator_ips_comma// ,/ } )
316+ for (( i= 0 ;i< ${# ips[@]} ;i++ )) ; do
317+ dst_id=${ips2ids[${ips[i]} ]}
318+ if [ ${EnableSentryNode} = true ]; then
319+ aws ssm send-command --instance-ids " ${dst_id} " --document-name " AWS-RunShellScript" --parameters commands=" sudo \cp -f /mnt/efs/${copyDir} /clusterNetwork/sentry${i} /config.toml /server/sentry/"
320+ aws ssm send-command --instance-ids " ${dst_id} " --document-name " AWS-RunShellScript" --parameters commands=" sudo \cp -f /mnt/efs/${copyDir} /clusterNetwork/sentry${i} /chaind.sh /server/sentry/"
321+ fi
322+ aws ssm send-command --instance-ids " ${dst_id} " --document-name " AWS-RunShellScript" --parameters commands=" sudo \cp -f /mnt/efs/${copyDir} /clusterNetwork/node${i} /config.toml /server/validator/"
323+ aws ssm send-command --instance-ids " ${dst_id} " --document-name " AWS-RunShellScript" --parameters commands=" sudo \cp -f /mnt/efs/${copyDir} /clusterNetwork/node${i} /chaind.sh /server/validator/"
324+ done
325+ if [ ${EnableFullNode} = true ]; then
326+ fullnode_ips=(${fullnode_ips_comma// ,/ } )
327+ dst_id=${ips2ids[${fullnode_ips[0]} ]}
328+ aws ssm send-command --instance-ids " ${dst_id} " --document-name " AWS-RunShellScript" --parameters commands=" sudo \cp -f /mnt/efs/${copyDir} /clusterNetwork/fullnode0/config.toml /server/validator/"
329+ aws ssm send-command --instance-ids " ${dst_id} " --document-name " AWS-RunShellScript" --parameters commands=" sudo \cp -f /mnt/efs/${copyDir} /clusterNetwork/fullnode0/chaind.sh /server/validator/"
330+ fi
331+ }
332+
333+ function remote_start() {
334+ rm -rf /mnt/efs/${copyDir} /clusterNetwork
335+ cp -r ${workspace} /.local /mnt/efs/${copyDir} /clusterNetwork
336+ for dst_id in ${ips2ids[@]} ; do
337+ # Always stop sentry nodes, regardless of the target setup.
338+ aws ssm send-command --instance-ids " ${dst_id} " --document-name " AWS-RunShellScript" --parameters commands=" sudo service sentry stop"
339+ aws ssm send-command --instance-ids " ${dst_id} " --document-name " AWS-RunShellScript" --parameters commands=" sudo service bsc stop"
340+ done
341+ sleep 80
342+ cp ${workspace} /bin/geth /mnt/efs/${copyDir} /clusterNetwork/
343+ ips=(${validator_ips_comma// ,/ } )
344+ for (( i= 0 ;i< ${# ips[@]} ;i++ )) ; do
345+ dst_id=${ips2ids[${ips[i]} ]}
346+ aws ssm send-command --instance-ids " ${dst_id} " --document-name " AWS-RunShellScript" --parameters commands=" sudo cp /mnt/efs/${copyDir} /clusterNetwork/geth /tmp/geth && sudo bash -x /mnt/efs/${copyDir} /clusterNetwork/node${i} /init.sh"
347+ done
348+ if [ ${EnableSentryNode} = true ]; then
349+ sleep 20
350+ for (( i= 0 ;i< ${# ips[@]} ;i++ )) ; do
351+ dst_id=${ips2ids[${ips[i]} ]}
352+ aws ssm send-command --instance-ids " ${dst_id} " --document-name " AWS-RunShellScript" --parameters commands=" sudo cp /mnt/efs/${copyDir} /clusterNetwork/geth /tmp/geth && sudo bash -x /mnt/efs/${copyDir} /clusterNetwork/sentry${i} /init.sh"
353+ done
354+ fi
355+ if [ ${EnableFullNode} = true ]; then
356+ fullnode_ips=(${fullnode_ips_comma// ,/ } )
357+ dst_id=${ips2ids[${fullnode_ips[0]} ]}
358+ aws ssm send-command --instance-ids " ${dst_id} " --document-name " AWS-RunShellScript" --parameters commands=" sudo cp /mnt/efs/${copyDir} /clusterNetwork/geth /tmp/geth && sudo bash -x /mnt/efs/${copyDir} /clusterNetwork/fullnode0/init.sh"
359+ fi
360+ }
361+
362+ function remote_upgrade() {
363+ cp ${workspace} /bin/geth /mnt/efs/${copyDir} /clusterNetwork/
364+ if [ ${EnableSentryNode} = true ]; then
365+ cp ${workspace} /qa-env-resource/upgrade-single-sentry.sh /mnt/efs/${copyDir} /clusterNetwork/
366+ fi
367+ cp ${workspace} /qa-env-resource/upgrade-single-validator.sh /mnt/efs/${copyDir} /clusterNetwork/
368+ for dst_id in ${ips2ids[@]} ; do
369+ if [ ${EnableSentryNode} = true ]; then
370+ aws ssm send-command --instance-ids " ${dst_id} " --document-name " AWS-RunShellScript" \
371+ --parameters commands=" sudo cp /mnt/efs/${copyDir} /clusterNetwork/geth /tmp/geth && sudo cp /mnt/efs/${copyDir} /clusterNetwork/upgrade-single-sentry.sh /tmp/ && sudo bash -x /tmp/upgrade-single-sentry.sh"
372+ fi
373+ aws ssm send-command --instance-ids " ${dst_id} " --document-name " AWS-RunShellScript" \
374+ --parameters commands=" sudo cp /mnt/efs/${copyDir} /clusterNetwork/geth /tmp/geth && sudo cp /mnt/efs/${copyDir} /clusterNetwork/upgrade-single-validator.sh /tmp/ && sudo bash -x /tmp/upgrade-single-validator.sh"
375+ done
376+ }
377+
283378CMD=$1
284379ValidatorIdx=$2
285380case ${CMD} in
@@ -290,7 +385,7 @@ reset)
290385 reset_genesis
291386 prepare_config
292387 initNetwork
293- native_start
388+ native_start
294389 register_stakehub
295390 ;;
296391stop)
@@ -303,7 +398,30 @@ restart)
303398 exit_previous $ValidatorIdx
304399 native_start $ValidatorIdx
305400 ;;
401+ remote_reset)
402+ create_validator
403+ reset_genesis
404+ prepare_config
405+ initNetwork
406+ remote_start
407+ # to prevent stuck
408+ sleep 50
409+ register_stakehub
410+ ;;
411+ remote_reset_config)
412+ create_validator
413+ reset_genesis
414+ prepare_config
415+ initNetwork
416+ remote_reset_config
417+ ;;
418+ remote_upgrade)
419+ remote_upgrade
420+ ;;
421+ register_stakehub)
422+ register_stakehub
423+ ;;
306424* )
307- echo " Usage: bsc_cluster.sh | reset | stop [vidx]| start [vidx]| restart [vidx]"
425+ echo " Usage: bsc_cluster.sh | reset | stop [vidx]| start [vidx]| restart [vidx]| remote_reset | remote_upgrade | register_stakehub "
308426 ;;
309427esac
0 commit comments