github.com/Finschia/finschia-sdk@v0.48.1/init_node.sh (about) 1 #!/bin/sh 2 3 display_usage() { 4 echo "\nMissing $1 parameter. Please check if all parameters were specified." 5 echo "\nUsage: ./run_node [CHAIN_ID] [N, default=1]" 6 exit 1 7 } 8 9 if [ -z "$1" ]; then 10 display_usage "[CHAIN_ID]" 11 fi 12 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 BINARY=simd 25 BASE_DIR=~/.simapp 26 CHAIN_DIR_PREFIX="${BASE_DIR}/simapp" 27 GENTXS_DIR="${BASE_DIR}/gentxs" 28 CHAIN_ID=$1 29 MONIKER_PREFIX="node" 30 31 # Control N node count 32 N=1 33 if [ -n "$2" ]; then 34 N=$2 35 36 if [ "${N}" -le 0 ]; then 37 echo "N must be positive int. Aborting..." 38 exit 1 39 elif [ "${N}" -gt 10 ]; then 40 echo "N must be smaller than 10. Aborting..." 41 echo "If you need to create node more than 10, modify init_node.sh line 38" 42 exit 1 43 fi 44 fi 45 46 VALIDATOR_PREFIX="validator" 47 COINS="100000000000stake,100000000000ukrw" 48 DELEGATE="10000000000stake" 49 50 # Create base dir and gentxs dir 51 if ! mkdir -p ${GENTXS_DIR} 2> /dev/null; then 52 echo "Failed to create chain folder(${GENTXS_DIR}). Aborting..." 53 exit 1 54 fi 55 56 # Please do not use the TEST_MNEMONIC for production purpose 57 TEST_MNEMONIC="mind flame tobacco sense move hammer drift crime ring globe art gaze cinnamon helmet cruise special produce notable negative wait path scrap recall have" 58 59 # Initialize config files and genesis file 60 # Create genesis account and gentx 61 for ((i = 0; i < N; i++)) 62 do 63 # ~/.simapp0, ~/.simapp1, ... 64 CHAIN_DIR="${CHAIN_DIR_PREFIX}${i}" 65 66 # Add dir for chain, exit if error 67 if ! mkdir -p ${CHAIN_DIR} 2>/dev/null; then 68 echo "Failed to create chain folder(${CHAIN_DIR}). Aborting..." 69 exit 1 70 fi 71 72 # Initialize configuration files and genesis file 73 # moniker is the name of your node 74 MONIKER="${MONIKER_PREFIX}${i}" 75 redirect ${BINARY} init ${MONIKER} --home ${CHAIN_DIR} --chain-id ${CHAIN_ID} 76 77 # Create N genesis account(with mnemonic), so N-th chain's N account is same with M-th chain's 78 for ((j = 0; j < N; j++)) 79 do 80 VALIDATOR="${VALIDATOR_PREFIX}${j}" 81 ${BINARY} keys add ${VALIDATOR} ${KEYRING} --home ${CHAIN_DIR} --recover --account ${j} --output json <<< ${TEST_MNEMONIC} >> ${CHAIN_DIR}/validator_seed.json 2> /dev/null 82 redirect ${BINARY} add-genesis-account $(${BINARY} --home ${CHAIN_DIR} keys ${KEYRING} show ${VALIDATOR} -a) ${COINS} --home ${CHAIN_DIR} 83 done 84 85 # Make gentx file and move it to GENTXS folder 86 VALIDATOR="${VALIDATOR_PREFIX}${i}" 87 redirect ${BINARY} gentx ${VALIDATOR} ${DELEGATE} ${KEYRING} --home ${CHAIN_DIR} --chain-id ${CHAIN_ID} 88 mv "${CHAIN_DIR}/config/gentx/$(ls ${CHAIN_DIR}/config/gentx | grep .json)" "${GENTXS_DIR}/${MONIKER}.json" 89 rm -r "${CHAIN_DIR}/config/gentx" 90 done 91 92 SRC_GENESIS_FIlE="${CHAIN_DIR_PREFIX}0/config/genesis.json" 93 RPC_PORT=26657 94 P2P_PORT=26656 95 PROF_PORT=6060 96 GRPC_PORT=9090 97 GRPC_WEB_PORT=9091 98 99 # Set genesis file and config(port, peer, ...) 100 CHAIN_0_DIR="${CHAIN_DIR_PREFIX}0" 101 for ((i = 0; i < N; i++)) 102 do 103 CHAIN_DIR="${CHAIN_DIR_PREFIX}${i}" 104 105 # Set genesis file of 0-th chain dir and copy to other chains 106 # If we call collect-gentxs at each chains, genesis_time values can be different. 107 if [ ${i} -eq 0 ]; then 108 redirect ${BINARY} collect-gentxs --home ${CHAIN_DIR} --gentx-dir ${GENTXS_DIR} 109 else 110 cp ${SRC_GENESIS_FIlE} "${CHAIN_DIR}/config" 111 fi 112 113 MONIKER="${MONIKER_PREFIX}${i}" 114 MEMO=`sed 's/"//g' <<< \`cat ${GENTXS_DIR}/${MONIKER}.json | jq '.body.memo'\`` 115 MEMO_SPLIT=(`echo ${MEMO} | tr ":" "\n"`) 116 117 # Set proper defaults and change ports (use a different sed for Mac or Linux) 118 if [ "`uname`" = "Linux" ]; then 119 sed -i 's#"tcp://127.0.0.1:26657"#"tcp://0.0.0.0:'"${RPC_PORT}"'"#g' ${CHAIN_DIR}/config/config.toml 120 sed -i 's#"tcp://0.0.0.0:26656"#"tcp://0.0.0.0:'"${P2P_PORT}"'"#g' ${CHAIN_DIR}/config/config.toml 121 sed -i 's#"localhost:6060"#"localhost:'"${PROF_PORT}"'"#g' ${CHAIN_DIR}/config/config.toml 122 sed -i 's/timeout_commit = "5s"/timeout_commit = "1s"/g' ${CHAIN_DIR}/config/config.toml 123 sed -i 's/timeout_propose = "3s"/timeout_propose = "1s"/g' ${CHAIN_DIR}/config/config.toml 124 sed -i 's/addr_book_strict = true/addr_book_strict = false/g' ${CHAIN_DIR}/config/config.toml # for local test 125 sed -i 's/allow_duplicate_ip = false/allow_duplicate_ip = true/g' ${CHAIN_DIR}/config/config.toml # allow duplicated ip 126 127 sed -i 's#'"${MEMO}"'#'"${MEMO_SPLIT[1]}"':'"${P2P_PORT}"'#g' ${CHAIN_0_DIR}/config/config.toml # change port of persistent_peers 128 129 sed -i 's/pruning = "default"/pruning = "nothing"/g' ${CHAIN_DIR}/config/app.toml 130 sed -i 's#"0.0.0.0:9091"#"0.0.0.0:'"${GRPC_WEB_PORT}"'"#g' ${CHAIN_DIR}/config/app.toml 131 sed -i 's#"0.0.0.0:9090"#"0.0.0.0:'"${GRPC_PORT}"'"#g' ${CHAIN_DIR}/config/app.toml 132 else 133 sed -i '' 's#"tcp://127.0.0.1:26657"#"tcp://0.0.0.0:'"${RPC_PORT}"'"#g' ${CHAIN_DIR}/config/config.toml 134 sed -i '' 's#"tcp://0.0.0.0:26656"#"tcp://0.0.0.0:'"${P2P_PORT}"'"#g' ${CHAIN_DIR}/config/config.toml 135 sed -i '' 's#"localhost:6060"#"localhost:'"${PROF_PORT}"'"#g' ${CHAIN_DIR}/config/config.toml 136 sed -i '' 's/timeout_commit = "5s"/timeout_commit = "1s"/g' ${CHAIN_DIR}/config/config.toml 137 sed -i '' 's/timeout_propose = "3s"/timeout_propose = "1s"/g' ${CHAIN_DIR}/config/config.toml 138 sed -i '' 's/addr_book_strict = true/addr_book_strict = false/g' ${CHAIN_DIR}/config/config.toml # for local test 139 sed -i '' 's/allow_duplicate_ip = false/allow_duplicate_ip = true/g' ${CHAIN_DIR}/config/config.toml # allow duplicated ip 140 141 sed -i '' 's#'"${MEMO}"'#'"${MEMO_SPLIT[1]}"':'"${P2P_PORT}"'#g' ${CHAIN_0_DIR}/config/config.toml # change port of persistent_peers 142 143 sed -i '' 's/pruning = "default"/pruning = "nothing"/g' ${CHAIN_DIR}/config/app.toml 144 sed -i '' 's#"0.0.0.0:9091"#"0.0.0.0:'"${GRPC_WEB_PORT}"'"#g' ${CHAIN_DIR}/config/app.toml 145 sed -i '' 's#"0.0.0.0:9090"#"0.0.0.0:'"${GRPC_PORT}"'"#g' ${CHAIN_DIR}/config/app.toml 146 fi 147 148 echo "${BINARY} instance: home ${CHAIN_DIR} | chain-id ${CHAIN_ID} | p2p=:${P2P_PORT} | rpc=:${RPC_PORT} | profiling=:${PROF_PORT} | grpc=:${GRPC_PORT} | grpc-web=:${GRPC_WEB_PORT}" 149 RPC_PORT=`expr ${RPC_PORT} + 2` 150 P2P_PORT=`expr ${P2P_PORT} + 2` 151 PROF_PORT=`expr ${PROF_PORT} + 1` 152 GRPC_PORT=`expr ${GRPC_PORT} + 2` 153 GRPC_WEB_PORT=`expr ${GRPC_WEB_PORT} + 2` 154 done 155