decred.org/dcrdex@v1.0.5/dex/testing/btc/base-harness.sh (about)

     1  #!/usr/bin/env bash
     2  # Tmux script that sets up a simnet harness.
     3  set -ex
     4  NODES_ROOT=~/dextest/${SYMBOL}
     5  rm -rf "${NODES_ROOT}"
     6  
     7  ALPHA_DIR="${NODES_ROOT}/alpha"
     8  BETA_DIR="${NODES_ROOT}/beta"
     9  HARNESS_DIR="${NODES_ROOT}/harness-ctl"
    10  
    11  echo "Writing node config files"
    12  mkdir -p "${HARNESS_DIR}"
    13  
    14  if [ -n "$HARNESS_VER" ]; then
    15    HARNESS_VER_FILE="${NODES_ROOT}/v${HARNESS_VER}"
    16  fi
    17  
    18  WALLET_PASSWORD="abc"
    19  
    20  [ -z "${ALPHA_WALLET_SEED}" ] && ALPHA_DESCRIPTOR_WALLET="true" || ALPHA_DESCRIPTOR_WALLET="false"
    21  [ -z "${BETA_WALLET_SEED}"  ] && BETA_DESCRIPTOR_WALLET="true" || BETA_DESCRIPTOR_WALLET="false"
    22  
    23  ALPHA_CLI_CFG="-rpcwallet= -rpcport=${ALPHA_RPC_PORT} -regtest=1 -rpcuser=user -rpcpassword=pass"
    24  
    25  BETA_CLI_CFG="-rpcwallet= -rpcport=${BETA_RPC_PORT} -regtest=1 -rpcuser=user -rpcpassword=pass"
    26  
    27  GAMMA_CLI_CFG="-rpcwallet=gamma -rpcport=${ALPHA_RPC_PORT} -regtest=1 -rpcuser=user -rpcpassword=pass"
    28  
    29  # DONE can be used in a send-keys call along with a `wait-for btc` command to
    30  # wait for process termination.
    31  DONE="; tmux wait-for -S ${SYMBOL}"
    32  WAIT="wait-for ${SYMBOL}"
    33  
    34  SESSION="${SYMBOL}-harness"
    35  
    36  deprecateddbd () {
    37          if [ $1 = false ] && [ "$VERSION_26_TEMP_DEPRICATED_DBD" ]; then
    38                  descs="-deprecatedrpc=create_bdb"
    39          else
    40                  descs=""
    41          fi
    42  
    43          echo "$descs"
    44  }
    45  
    46  export SHELL=$(which bash)
    47  
    48  ################################################################################
    49  # Load prepared wallet if the files exist.
    50  ################################################################################
    51  
    52  if [ -f ./harnesschain.tar.gz ]; then
    53    CHAIN_LOADED=1
    54    echo "Seeding alpha chain from compressed file"
    55    tar -xzf ./harnesschain.tar.gz -C ${NODES_ROOT}
    56    if [[ -n "$HARNESS_VER_FILE"  && ! -f "$HARNESS_VER_FILE" ]]; then
    57      echo "Harness archive outdated! Deleting it."
    58      rm -rf harnesschain.tar.gz "${NODES_ROOT}"
    59      mkdir -p "${HARNESS_DIR}"
    60      CHAIN_LOADED=
    61    fi
    62  fi
    63  
    64  if [ ! "$CHAIN_LOADED" ]; then
    65    mkdir -p "${ALPHA_DIR}"
    66    mkdir -p "${BETA_DIR}"
    67    if [ -n "$HARNESS_VER_FILE" ]; then
    68      touch "${HARNESS_VER_FILE}"
    69    fi
    70    FULLCHAINFILE=$(cd $(dirname "${BASH_SOURCE[0]:-$0}") && pwd)/harnesschain.tar.gz
    71  fi
    72  
    73  # If there are any descriptor files, copy them to the nodes root folder.
    74  cp desc-*.json ${NODES_ROOT} 2> /dev/null || true
    75  
    76  cd ${NODES_ROOT} && tmux new-session -d -s $SESSION $SHELL
    77  
    78  ################################################################################
    79  # Write config files.
    80  ################################################################################
    81  
    82  # These config files aren't actually used here, but can be used by other
    83  # programs. I would use them here, but bitcoind seems to have some issues
    84  # reading from the file when using regtest.
    85  
    86  cat > "${ALPHA_DIR}/alpha.conf" <<EOF
    87  rpcuser=user
    88  rpcpassword=pass
    89  datadir=${ALPHA_DIR}
    90  txindex=1
    91  port=${ALPHA_LISTEN_PORT}
    92  regtest=1
    93  rpcport=${ALPHA_RPC_PORT}
    94  EOF
    95  
    96  cat > "${BETA_DIR}/beta.conf" <<EOF
    97  rpcuser=user
    98  rpcpassword=pass
    99  datadir=${BETA_DIR}
   100  txindex=1
   101  regtest=1
   102  rpcport=${BETA_RPC_PORT}
   103  EOF
   104  
   105  ################################################################################
   106  # Start the alpha node.
   107  ################################################################################
   108  
   109  tmux rename-window -t $SESSION:0 'alpha'
   110  tmux send-keys -t $SESSION:0 "set +o history" C-m
   111  tmux send-keys -t $SESSION:0 "cd ${ALPHA_DIR}" C-m
   112  echo "Starting simnet alpha node"
   113  tmux send-keys -t $SESSION:0 "${DAEMON} -rpcuser=user -rpcpassword=pass \
   114    -rpcport=${ALPHA_RPC_PORT} -datadir=${ALPHA_DIR} $(deprecateddbd $ALPHA_DESCRIPTOR_WALLET) \
   115    -debug=rpc -debug=net -debug=mempool -debug=walletdb -debug=addrman -debug=mempoolrej \
   116    -whitelist=127.0.0.0/8 -whitelist=::1 \
   117    -txindex=1 -regtest=1 -port=${ALPHA_LISTEN_PORT} -fallbackfee=0.00001 \
   118    ${EXTRA_ARGS}; tmux wait-for -S alpha${SYMBOL}" C-m
   119  sleep 3
   120  
   121  ################################################################################
   122  # Setup the beta node.
   123  ################################################################################
   124  
   125  tmux new-window -t $SESSION:1 -n 'beta' $SHELL
   126  tmux send-keys -t $SESSION:1 "set +o history" C-m
   127  tmux send-keys -t $SESSION:1 "cd ${BETA_DIR}" C-m
   128  
   129  echo "Starting simnet beta node"
   130  tmux send-keys -t $SESSION:1 "${DAEMON} -rpcuser=user -rpcpassword=pass $(deprecateddbd $BETA_DESCRIPTOR_WALLET)\
   131    -rpcport=${BETA_RPC_PORT} -datadir=${BETA_DIR} -txindex=1 -regtest=1 \
   132    -debug=rpc -debug=net -debug=mempool -debug=walletdb -debug=addrman -debug=mempoolrej \
   133    -whitelist=127.0.0.0/8 -whitelist=::1 \
   134    -port=${BETA_LISTEN_PORT} -fallbackfee=0.00001 ${EXTRA_ARGS}; \
   135    tmux wait-for -S beta${SYMBOL}" C-m
   136  sleep 3
   137  
   138  ################################################################################
   139  # Setup the harness-ctl directory
   140  ################################################################################
   141  
   142  tmux new-window -t $SESSION:2 -n 'harness-ctl' $SHELL
   143  tmux send-keys -t $SESSION:2 "set +o history" C-m
   144  tmux send-keys -t $SESSION:2 "cd ${HARNESS_DIR}" C-m
   145  sleep 1
   146  
   147  cd ${HARNESS_DIR}
   148  
   149  cat > "./alpha" <<EOF
   150  #!/usr/bin/env bash
   151  ${CLI} ${ALPHA_CLI_CFG} "\$@"
   152  EOF
   153  chmod +x "./alpha"
   154  
   155  cat > "./mine-alpha" <<EOF
   156  #!/usr/bin/env bash
   157  ${CLI} ${ALPHA_CLI_CFG} generatetoaddress \$1 ${ALPHA_MINING_ADDR}
   158  EOF
   159  chmod +x "./mine-alpha"
   160  
   161  cat > "./gamma" <<EOF
   162  #!/usr/bin/env bash
   163  ${CLI} ${GAMMA_CLI_CFG} "\$@"
   164  EOF
   165  chmod +x "./gamma"
   166  
   167  cat > "./delta" <<EOF
   168  #!/usr/bin/env bash
   169  ${CLI} -rpcwallet=delta -rpcport=${BETA_RPC_PORT} -regtest=1 -rpcuser=user -rpcpassword=pass "\$@"
   170  EOF
   171  chmod +x "./delta"
   172  
   173  cat > "./beta" <<EOF
   174  #!/usr/bin/env bash
   175  ${CLI} ${BETA_CLI_CFG} "\$@"
   176  EOF
   177  chmod +x "./beta"
   178  
   179  cat > "./mine-beta" <<EOF
   180  #!/usr/bin/env bash
   181  ${CLI} ${BETA_CLI_CFG} generatetoaddress \$1 ${BETA_MINING_ADDR}
   182  EOF
   183  chmod +x "./mine-beta"
   184  
   185  cat > "./reorg" <<EOF
   186  #!/usr/bin/env bash
   187  set -x
   188  echo "Disconnecting beta from alpha"
   189  sleep 1
   190  ./beta disconnectnode 127.0.0.1:${ALPHA_LISTEN_PORT}
   191  echo "Mining a block on alpha"
   192  sleep 1
   193  ./mine-alpha 1
   194  echo "Mining 3 blocks on beta"
   195  ./mine-beta 3
   196  sleep 2
   197  echo "Reconnecting beta to alpha"
   198  ./beta addnode 127.0.0.1:${ALPHA_LISTEN_PORT} onetry
   199  sleep 2
   200  EOF
   201  chmod +x "./reorg"
   202  
   203  cat > "./new-wallet" <<EOF
   204  #!/usr/bin/env bash
   205  ${NEW_WALLET_CMD}
   206  EOF
   207  chmod +x "./new-wallet"
   208  
   209  cat > "${HARNESS_DIR}/quit" <<EOF
   210  #!/usr/bin/env bash
   211  tmux send-keys -t $SESSION:0 C-c
   212  tmux send-keys -t $SESSION:1 C-c
   213  tmux send-keys -t $SESSION:3 C-c
   214  tmux send-keys -t $SESSION:4 C-c
   215  tmux wait-for alpha${SYMBOL}
   216  tmux wait-for beta${SYMBOL}
   217  # seppuku
   218  tmux kill-session
   219  EOF
   220  chmod +x "${HARNESS_DIR}/quit"
   221  
   222  if [ "$CHAIN_LOADED" ] ; then
   223    tmux send-keys -t $SESSION:2 "./alpha loadwallet gamma${DONE}" C-m\; ${WAIT}
   224    tmux send-keys -t $SESSION:2 "./beta loadwallet delta${DONE}" C-m\; ${WAIT}
   225    # Get the median block time up to date.
   226    tmux send-keys -t $SESSION:2 "./mine-alpha 12${DONE}" C-m\; ${WAIT}
   227    tmux send-keys -t $SESSION:2 "./beta addnode 127.0.0.1:${ALPHA_LISTEN_PORT} add${DONE}" C-m\; ${WAIT}
   228  
   229  else
   230    sleep 1
   231    tmux send-keys -t $SESSION:2 "./beta addnode 127.0.0.1:${ALPHA_LISTEN_PORT} add${DONE}" C-m\; ${WAIT}
   232    # This timeout is apparently critical. Give the nodes time to sync.
   233    sleep 2
   234  
   235    ################################################################################
   236    # Have to generate a block before calling sethdseed
   237    ################################################################################
   238    echo "Generating the genesis block"
   239    tmux send-keys -t $SESSION:2 "./alpha generatetoaddress 1 ${ALPHA_MINING_ADDR}${DONE}" C-m\; ${WAIT}
   240    sleep 2
   241  
   242    if [ "$CREATE_DEFAULT_WALLET" ] ; then # bitcoin core v0.21+ does not create default wallet automatically
   243      # Note that assets requiring CREATE_DEFAULT_WALLET also support named args.
   244      # Create these as "blank" wallets since sethdseed or importdescriptors
   245      # will follow.
   246      tmux send-keys -t $SESSION:2 "./alpha -named createwallet wallet_name= blank=true passphrase=\"${WALLET_PASSWORD}\" descriptors=${ALPHA_DESCRIPTOR_WALLET}${DONE}" C-m\; ${WAIT}
   247      tmux send-keys -t $SESSION:2 "./beta -named createwallet wallet_name= blank=true passphrase=\"${WALLET_PASSWORD}\" descriptors=${BETA_DESCRIPTOR_WALLET}${DONE}" C-m\; ${WAIT}
   248    else
   249      echo "Encrypting the alpha wallet (may take a minute)"
   250      tmux send-keys -t $SESSION:2 "./alpha encryptwallet ${WALLET_PASSWORD}${DONE}" C-m\; ${WAIT}
   251  
   252      echo "Encrypting the beta wallet"
   253      tmux send-keys -t $SESSION:2 "./beta encryptwallet ${WALLET_PASSWORD}${DONE}" C-m\; ${WAIT}
   254    fi
   255  
   256    #################################################################################
   257    # Optional restart for some assets
   258    ################################################################################
   259  
   260    if [ "$RESTART_AFTER_ENCRYPT" ] ; then
   261      sleep 2
   262      echo "Restarting alpha/beta nodes"
   263      tmux send-keys -t $SESSION:0 "${DAEMON} -rpcuser=user -rpcpassword=pass \
   264        -rpcport=${ALPHA_RPC_PORT} -datadir=${ALPHA_DIR} \
   265        -txindex=1 -regtest=1 -port=${ALPHA_LISTEN_PORT} -fallbackfee=0.00001 ${EXTRA_ARGS}; \
   266        tmux wait-for -S alpha${SYMBOL}" C-m
   267  
   268      tmux send-keys -t $SESSION:1 "${DAEMON} -rpcuser=user -rpcpassword=pass \
   269        -rpcport=${BETA_RPC_PORT} -datadir=${BETA_DIR} -txindex=1 -regtest=1 \
   270        -port=${BETA_LISTEN_PORT} -fallbackfee=0.00001 ${EXTRA_ARGS}; \
   271        tmux wait-for -S beta${SYMBOL}" C-m
   272      sleep 3
   273  
   274      tmux send-keys -t $SESSION:2 "./beta addnode 127.0.0.1:${ALPHA_LISTEN_PORT} add${DONE}" C-m\; ${WAIT}
   275    fi
   276  
   277    tmux send-keys -t $SESSION:2 "./alpha walletpassphrase ${WALLET_PASSWORD} 100000000${DONE}" C-m\; ${WAIT}
   278    tmux send-keys -t $SESSION:2 "./beta walletpassphrase ${WALLET_PASSWORD} 100000000${DONE}" C-m\; ${WAIT}
   279  
   280    echo "Setting private keys for alpha"
   281    if [ -z "$ALPHA_WALLET_SEED" ]; then
   282      tmux send-keys -t $SESSION:2 "./alpha importdescriptors \$(< ../desc-alpha.json)${DONE}" C-m\; ${WAIT}
   283    else
   284      tmux send-keys -t $SESSION:2 "./alpha sethdseed true ${ALPHA_WALLET_SEED}${DONE}" C-m\; ${WAIT}
   285    fi
   286  
   287    echo "Setting private keys for beta"
   288    if [ -z "$BETA_WALLET_SEED" ]; then
   289      tmux send-keys -t $SESSION:2 "./beta importdescriptors \$(< ../desc-beta.json)${DONE}" C-m\; ${WAIT}
   290    else
   291      tmux send-keys -t $SESSION:2 "./beta sethdseed true ${BETA_WALLET_SEED}${DONE}" C-m\; ${WAIT}
   292    fi
   293  
   294    ################################################################################
   295    # Setup the gamma wallet
   296    ################################################################################
   297    echo "Creating the gamma wallet"
   298    if [ -z "$GAMMA_WALLET_SEED"  ]; then
   299      tmux send-keys -t $SESSION:2 "./alpha -named createwallet wallet_name=gamma blank=true descriptors=true${DONE}" C-m\; ${WAIT}
   300      tmux send-keys -t $SESSION:2 "./gamma importdescriptors \$(< ../desc-gamma.json)${DONE}" C-m\; ${WAIT}
   301    else
   302      # Use new-wallet since BCH does not support named parameters (or
   303      # descriptors), while the descriptor enabled assets all support named.
   304      tmux send-keys -t $SESSION:2 "./new-wallet alpha gamma${DONE}" C-m\; ${WAIT}
   305      tmux send-keys -t $SESSION:2 "./gamma sethdseed true ${GAMMA_WALLET_SEED}${DONE}" C-m\; ${WAIT}
   306    fi
   307  
   308    ################################################################################
   309    # Create the delta wallet
   310    ################################################################################
   311    echo "Creating the delta wallet"
   312    if [ -z "$DELTA_WALLET_SEED" ]; then
   313      tmux send-keys -t $SESSION:2 "./beta -named createwallet wallet_name=delta blank=true descriptors=true${DONE}" C-m\; ${WAIT}
   314      tmux send-keys -t $SESSION:2 "./delta importdescriptors \$(< ../desc-delta.json)${DONE}" C-m\; ${WAIT}
   315    else
   316      tmux send-keys -t $SESSION:2 "./new-wallet beta delta${DONE}" C-m\; ${WAIT}
   317      tmux send-keys -t $SESSION:2 "./delta sethdseed true ${DELTA_WALLET_SEED}${DONE}" C-m\; ${WAIT}
   318    fi
   319  
   320    #################################################################################
   321    # Generate addresses
   322    ################################################################################
   323  
   324    tmux send-keys -t $SESSION:2 "./alpha getnewaddress${DONE}" C-m\; ${WAIT}
   325    tmux send-keys -t $SESSION:2 "./alpha getnewaddress \"\" \"legacy\"${DONE}" C-m\; ${WAIT}
   326  
   327    tmux send-keys -t $SESSION:2 "./beta getnewaddress${DONE}" C-m\; ${WAIT}
   328    tmux send-keys -t $SESSION:2 "./beta getnewaddress \"\" \"legacy\"${DONE}" C-m\; ${WAIT}
   329  
   330    tmux send-keys -t $SESSION:2 "./gamma getnewaddress${DONE}" C-m\; ${WAIT}
   331    tmux send-keys -t $SESSION:2 "./gamma getnewaddress \"\" \"legacy\"${DONE}" C-m\; ${WAIT}
   332  
   333    tmux send-keys -t $SESSION:2 "./delta getnewaddress${DONE}" C-m\; ${WAIT}
   334    tmux send-keys -t $SESSION:2 "./delta getnewaddress \"\" \"legacy\"${DONE}" C-m\; ${WAIT}
   335  
   336    if [ "$NEEDS_MWEB_PEGIN_ACTIVATION" ] ; then
   337      ./alpha generatetoaddress 16 ${BETA_MINING_ADDR}
   338      HEIGHT=$(./alpha getblockcount)
   339      ./alpha generatetoaddress $((432 - $HEIGHT - 1)) ${ALPHA_MINING_ADDR}
   340      MWADDR=$(./alpha getnewaddress mweb-peg-in mweb)
   341      ./alpha sendtoaddress ${MWADDR} 1.234 && sleep 1
   342      ./alpha generatetoaddress 3 ${ALPHA_MINING_ADDR}
   343    else
   344      BLOCKS_TO_MINE=${BLOCKS_TO_MINE=400}
   345      echo "Generating ${BLOCKS_TO_MINE} blocks for alpha"
   346      tmux send-keys -t $SESSION:2 "./alpha generatetoaddress ${BLOCKS_TO_MINE} ${ALPHA_MINING_ADDR}${DONE}" C-m\; ${WAIT}
   347    fi
   348  
   349    #################################################################################
   350    # Send gamma and delta some coin
   351    ################################################################################
   352  
   353    # Send the beta wallet some dough too.
   354    tmux send-keys -t $SESSION:2 "./alpha sendtoaddress ${BETA_MINING_ADDR} 1000${DONE}" C-m\; ${WAIT}
   355  
   356    #  Send some bitcoin to gamma and delta wallets, mining some blocks too.
   357    echo "Sending 84 BTC each to gamma and delta in 8 blocks"
   358    for i in 10 18 5 7 1 15 3 25
   359    do
   360      tmux send-keys -t $SESSION:2 "./alpha sendtoaddress ${GAMMA_ADDRESS} ${i}${DONE}" C-m\; ${WAIT}
   361      tmux send-keys -t $SESSION:2 "./alpha sendtoaddress ${DELTA_ADDRESS} ${i}${DONE}" C-m\; ${WAIT}
   362      tmux send-keys -t $SESSION:2 "./mine-alpha 1${DONE}" C-m\; ${WAIT}
   363    done
   364  
   365  # End of new wallet setup
   366  fi
   367  
   368  # Have alpha share a little more wealth, esp. for trade_simnet_test.go
   369  tmux send-keys -t $SESSION:2 "./alpha walletpassphrase ${WALLET_PASSWORD} 100000000${DONE}" C-m\; ${WAIT}
   370  RECIPIENTS="{\"${BETA_MINING_ADDR}\":12,\"${GAMMA_ADDRESS}\":12,\"${DELTA_ADDRESS}\":12}"
   371  for i in {1..30}; do
   372    tmux send-keys -t $SESSION:2 "./alpha sendmany \"\" '${RECIPIENTS}'${DONE}" C-m\; ${WAIT}
   373  done
   374  
   375  tmux send-keys -t $SESSION:2 "./mine-alpha 2${DONE}" C-m\; ${WAIT}
   376  
   377  set +x
   378  if [ ! "$CHAIN_LOADED" ]; then
   379    echo "**********************************************************************"
   380    echo "You may wish to recreate your harnesschain.tar.gz file AFTER stopping the nodes:"
   381    echo "  cd ${NODES_ROOT}"
   382    echo "  tar czf ${FULLCHAINFILE} alpha beta v${HARNESS_VER}"
   383    echo "**********************************************************************"
   384  fi
   385  
   386  # Reenable history
   387  tmux send-keys -t $SESSION:2 "set -o history" C-m
   388  
   389  # Miner
   390  if [ -z "$NOMINER" ] ; then
   391    tmux new-window -t $SESSION:3 -n "miner" $SHELL
   392    tmux send-keys -t $SESSION:3 "cd ${HARNESS_DIR}" C-m
   393    tmux send-keys -t $SESSION:3 "watch -n 15 ./mine-alpha 1" C-m
   394  fi
   395  
   396  if [ ! -z "$GODAEMON" ]; then
   397    $GODAEMON --version &> /dev/null
   398    DAEMON_INSTALLED=$?
   399  
   400    if [ $DAEMON_INSTALLED -eq 0 ]; then
   401      echo "Go node found. Starting"
   402  
   403      tmux new-window -t $SESSION:4 -n "go-node" $SHELL
   404      tmux send-keys -t $SESSION:4 "set +o history" C-m
   405  
   406      $GOCLIENT --version &> /dev/null
   407      CLIENT_INSTALLED=$?
   408      if [ $DAEMON_INSTALLED -eq 0 ]; then
   409        echo "${GOCLIENT} installed"
   410  
   411        OMEGA_DIR="${NODES_ROOT}/gonode"
   412        mkdir -p "${OMEGA_DIR}"
   413  
   414        NODE_CONF="${OMEGA_DIR}/gonode.conf"
   415        CLIENT_CONF="${OMEGA_DIR}/goctl.conf"
   416  
   417  
   418  cat > "${NODE_CONF}" <<EOF
   419  addpeer=127.0.0.1:${ALPHA_LISTEN_PORT}
   420  listen=:${OMEGA_LISTEN_PORT}
   421  rpcuser=user
   422  rpcpass=pass
   423  rpclisten=0.0.0.0:${OMEGA_RPC_PORT}
   424  regtest=1
   425  rpccert=${OMEGA_DIR}/rpc.cert
   426  rpckey=${OMEGA_DIR}/rpc.key
   427  debuglevel=trace
   428  EOF
   429  
   430  cat > "${CLIENT_CONF}" <<EOF
   431  rpcuser=user
   432  rpcpass=pass
   433  simnet=1
   434  rpccert=${OMEGA_DIR}/rpc.cert
   435  rpcserver=127.0.0.1:${OMEGA_RPC_PORT}
   436  EOF
   437  
   438  cat > "${HARNESS_DIR}/omega" <<EOF
   439  #!/usr/bin/env bash
   440  ${GOCLIENT} --configfile=${CLIENT_CONF} "\$@"
   441  EOF
   442  chmod +x "${HARNESS_DIR}/omega"
   443  
   444        tmux send-keys -t $SESSION:4 "${GODAEMON} --datadir ${OMEGA_DIR} \
   445        --configfile ${NODE_CONF}" C-m
   446  
   447      else
   448        echo "Go CLI client not found"
   449      fi
   450    else
   451      echo "Go node not found"
   452    fi
   453  fi
   454  
   455  tmux select-window -t $SESSION:2
   456  tmux attach-session -t $SESSION