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