#!/bin/bash unset -v progdir case "${0}" in */*) progdir="${0%/*}" ;; *) progdir=. ;; esac ROOT="${progdir}/.." USER=$(whoami) . "${ROOT}/scripts/setup_bls_build_flags.sh" # set -x set -eo pipefail export GO111MODULE=on mkdir -p .hmy if [ -f ".hmy/blspass.txt" ] then echo ".hmy/blspass.txt already in local." else touch .hmy/blspass.txt fi function check_result() { err=false echo "====== WALLET BALANCES ======" > $RESULT_FILE $ROOT/bin/wallet -p local balances --address $ACC1 >> $RESULT_FILE $ROOT/bin/wallet -p local balances --address $ACC2 >> $RESULT_FILE $ROOT/bin/wallet -p local balances --address $ACC3 >> $RESULT_FILE echo "====== RESULTS ======" >> $RESULT_FILE TEST_ACC1=$($ROOT/bin/wallet -p local balances --address $ACC1 | grep 'Shard 0' | grep -oE 'nonce:.[0-9]+' | awk ' { print $2 } ') TEST_ACC2=$($ROOT/bin/wallet -p local balances --address $ACC2 | grep 'Shard 1' | grep -oE 'nonce:.[0-9]+' | awk ' { print $2 } ') BAL0_ACC3=$($ROOT/bin/wallet -p local balances --address $ACC3 | grep 'Shard 0' | grep -oE '[0-9]\.[0-9]+,' | awk -F\. ' { print $1 } ') BAL1_ACC3=$($ROOT/bin/wallet -p local balances --address $ACC3 | grep 'Shard 1' | grep -oE '[0-9]\.[0-9]+,' | awk -F\. ' { print $1 } ') if [[ $TEST_ACC1 -ne $NUM_TEST || $TEST_ACC2 -ne $NUM_TEST ]]; then echo -e "FAIL number of nonce. Expected Result: $NUM_TEST.\nAccount1:$TEST_ACC1\nAccount2:$TEST_ACC2\n" >> $RESULT_FILE err=true fi if [[ $BAL0_ACC3 -ne 1 || $BAL1_ACC3 -ne 1 ]]; then echo "FAIL balance of $ACC3. Expected Result: 1.\nShard0:$BAL0_ACC3\nShard1:$BAL1_ACC3\n" >> $RESULT_FILE err=true fi $err || echo "PASS" >> $RESULT_FILE } function cleanup() { "${progdir}/kill_node.sh" } function cleanup_and_result() { "${ROOT}/test/kill_node.sh" 2> /dev/null [ -e $RESULT_FILE ] && cat $RESULT_FILE } function debug_staking() { hmy_one_dir="$(go env GOPATH)/src/github.com/harmony-one" hmy_bin="${hmy_one_dir}/go-sdk/hmy" keystore="${hmy_one_dir}/harmony-ops/test-automation/api-tests/LocalnetValidatorKeys" if [ ! -d "${hmy_one_dir}/harmony-ops/" ]; then git clone https://github.com/harmony-one/harmony-ops.git "${hmy_one_dir}/harmony-ops" fi if [ ! -d "${hmy_one_dir}/go-sdk/" ]; then git clone https://github.com/harmony-one/go-sdk.git "${hmy_one_dir}/go-sdk" fi if [ ! -f "${hmy_bin}" ]; then make -C "${hmy_one_dir}/go-sdk/" fi python3 -m pip install pyhmy python3 -m pip install requests python3 "${hmy_one_dir}/harmony-ops/test-automation/api-tests/test.py" --keystore ${keystore} \ --cli_path ${hmy_bin} --test_dir "${hmy_one_dir}/harmony-ops/test-automation/api-tests/tests/" \ --rpc_endpoint_src="http://localhost:9500/" --rpc_endpoint_dst="http://localhost:9501/" --ignore_regression_test } trap cleanup_and_result SIGINT SIGTERM function usage { local ME=$(basename $0) cat< $log_folder/bootnode.log 2>&1 | tee -a $LOG_FILE & sleep 1 BN_MA=$(grep "BN_MA" $log_folder/bootnode.log | awk -F\= ' { print $2 } ') echo "bootnode launched." + " $BN_MA" unset -v base_args declare -a base_args args base_args=(-log_folder "${log_folder}" -min_peers "${MIN}" -bootnodes "${BN_MA}" -network_type="$NETWORK" -blspass file:.hmy/blspass.txt -dns=false) sleep 2 # Start nodes i=0 while IFS='' read -r line || [[ -n "$line" ]]; do IFS=' ' read ip port mode account blspub <<< $line args=("${base_args[@]}" -ip "${ip}" -port "${port}" -key "/tmp/${ip}-${port}.key" -db_dir "db-${ip}-${port}") if [[ -z "$ip" || -z "$port" ]]; then echo "skip empty node" continue fi if [ ! -e .hmy/${blspub}.key ]; then args=("${args[@]}" -blskey_file "BLSKEY") else args=("${args[@]}" -blskey_file ".hmy/${blspub}.key") fi case "${mode}" in leader*) args=("${args[@]}" -is_leader);; esac case "${mode}" in *archival|archival) args=("${args[@]}" -is_archival);; esac case "${mode}" in explorer*) args=("${args[@]}" -node_type=explorer -shard_id=0);; esac case "${mode}" in client) ;; *) $DRYRUN "${ROOT}/bin/harmony" "${args[@]}" "${extra_args[@]}" 2>&1 | tee -a "${LOG_FILE}" &;; esac i=$((i+1)) done < $config if [ "$DOTEST" == "true" ]; then debug_staking echo "waiting for some block rewards" sleep 60 i=1 echo "launching wallet cross shard transfer test" while [ $i -le $NUM_TEST ]; do "${ROOT}/bin/wallet" -p local transfer --from $ACC1 --to $ACC3 --shardID 0 --toShardID 1 --amount 0.1 --pass pass:"" 2>&1 | tee -a "${LOG_FILE}" "${ROOT}/bin/wallet" -p local transfer --from $ACC2 --to $ACC3 --shardID 1 --toShardID 0 --amount 0.1 --pass pass:"" 2>&1 | tee -a "${LOG_FILE}" sleep 20 i=$((i+1)) done echo "waiting for the result" sleep 20 check_result [ -e $RESULT_FILE ] && cat $RESULT_FILE fi sleep $DURATION cleanup_and_result