#!/usr/bin/env bash set -e if [ -n "$CERC_SCRIPT_DEBUG" ]; then set -x fi SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) source ${SCRIPT_DIR}/lib.sh if [[ -n "$1" ]]; then machine_name_prefix=$1 else echo "Usage: $0 " exit 1 fi if [[ -n "$2" && "$2" == "deferred-validator-admission" ]]; then deferred_validator_admission=1 echo "Deferred validator admission mode enabled, only node 1 will be a validator initially" fi gentx_dir=${node_network_dir}/config/gentx genesis_json_file=${node_network_dir}/config/genesis.json local_gentx_dir=gentx-${machine_name_prefix} echo "Fetch node ids and node ips for persistent-peers" for (( i=1 ; i<=$node_count ; i++ )); do node_name=${machine_name_prefix}-${i} node_host_name=${node_name}.${machine_domain} gentx_file_name=$(ssh ${ssh_user}@${node_host_name} ls ${gentx_dir} | head -1) node_id=$(echo ${gentx_file_name} | sed -e 's/^gentx-//' -e 's/.json$//') node_ip=$(dig +short ${node_host_name}) peer=${node_id}@${node_ip}:${p2p_port} persistent_peers+=${peer} if [[ ${i} -lt ${node_count} ]]; then persistent_peers+=',' fi done echo "Copying gentx from all nodes except 1" rm -rf ${local_gentx_dir} mkdir ${local_gentx_dir} # Note: start at node 2 here because we're going to copy to node 1 for (( i=2 ; i<=$node_count ; i++ )); do node_name=${machine_name_prefix}-${i} node_host_name=${node_name}.${machine_domain} echo "Copying ${gentx_dir} on ${node_name} to ${local_gentx_dir}" scp ${ssh_user}@${node_host_name}:~/${gentx_dir}/* ${local_gentx_dir} scp ${ssh_user}@${node_host_name}:~/${genesis_json_file} ${local_gentx_dir}/${node_name}-genesis.json done # Extract the peer node account addresses from their genesis.json files gentx_addresses="" for (( i=2 ; i<=$node_count ; i++ )); do node_name=${machine_name_prefix}-${i} node_genesis_file=${local_gentx_dir}/${node_name}-genesis.json node_gentx_address=$(grep address ${node_genesis_file} | head -1 | cut -d '"' -f 4) gentx_addresses+=${delimeter}${node_gentx_address} delimeter="," done node_1_host_name=${machine_name_prefix}-1.${machine_domain} ssh ${ssh_user}@${node_1_host_name} rm -rf ${local_gentx_dir} ssh ${ssh_user}@${node_1_host_name} mkdir ${local_gentx_dir} if [[ ! -n $deferred_validator_admission ]]; then echo "Copying gentx files to node 1" scp ${local_gentx_dir}/gentx-* ${ssh_user}@${node_1_host_name}:~/${local_gentx_dir} gentx_file_list=$(ssh ${ssh_user}@${node_1_host_name} ls -m ${local_gentx_dir}/gentx-\*) echo "Node 1 now has: ${gentx_file_list}" else gentx_file_list= fi gentx_files=$(echo ${gentx_file_list} | tr -d ' ' | tr -d '\n') if [[ -n $gentx_files ]]; then gentx_files_arg="--gentx-files ${gentx_files}" else gentx_files_arg="" fi echo "Generate genesis on node 1" ssh ${ssh_user}@${node_1_host_name} ${so_command} --stack mainnet-laconic deploy setup --network-dir ${node_network_dir} --create-network ${gentx_files_arg} --gentx-addresses ${gentx_addresses} # Change file ownership in the network dir to work around root-only container issue change_dir_ownership ${node_1_host_name} ${node_network_dir} echo "Fetching genesis file from node 1" local_genesis_file=${local_gentx_dir}/genesis.json scp ${ssh_user}@${node_1_host_name}:~/${node_network_dir}/config/genesis.json ${local_gentx_dir} echo "Copying genesis file to other nodes" # Note: we should be using --create-network --genesis-file ${genesis_file} for this rather than copying directly into the network dir # Note: start at node 2 here because we're going to copy to node 1 for (( i=2 ; i<=$node_count ; i++ )); do node_name=${machine_name_prefix}-${i} node_host_name=${node_name}.${machine_domain} echo "Copying ${local_genesis_file} to ${node_name} to ${node_name}" scp ${local_genesis_file} ${ssh_user}@${node_host_name}:~/${node_network_dir}/config done echo "Use this for persistent_peers:" echo ${persistent_peers}