#!/bin/bash # VALIDATOR CHECKS WILL BE UPDATED AFTER MIGRATION # # HOST="http://localhost:3333" # # VALIDATOR_ADDRESS=$(curl -s -X POST "$HOST/key/list" -H "Content-Type: application/json" \ # -d '{"network_identifier": {"network": "mainnet"}}' \ # | jq -r ".public_keys[0].identifiers.validator_entity_identifier.address") # IS_VALIDATING=$(curl -s -X POST "$HOST/entity" -H "Content-Type: application/json" \ # -d "{\"network_identifier\": {\"network\": \"mainnet\"}, \"entity_identifier\": # {\"address\": \"$VALIDATOR_ADDRESS\", \"sub_entity\": {\"address\": \"system\"}}}" \ # | jq ".data_objects | any(.type == \"ValidatorBFTData\")") # # get_completed_proposals () { # curl -s -X POST "$HOST/entity" -H "Content-Type: application/json" \ # -d "{\"network_identifier\": {\"network\": \"mainnet\"}, \"entity_identifier\": # {\"address\": \"$VALIDATOR_ADDRESS\", \"sub_entity\": {\"address\": \"system\"}}}" \ # | jq ".data_objects[] | select(.type == \"ValidatorBFTData\") | .proposals_completed" # } NODE_STATUS=$(curl -s localhost:3334/system/health | jq -r .status) IS_VALIDATING=false cd /opt/radix-babylon || exit echo "Checking for latest radix node-runner version ..." NODE_RUNNER_URL=$(curl -s https://api.github.com/repos/radixdlt/babylon-nodecli/releases/latest | \ jq -r '.assets[] | select(.browser_download_url|split("/")|last|test("^babylonnode-ubuntu-22.04")) | .browser_download_url') echo "Found node-runner url:" "$NODE_RUNNER_URL" NODE_RUNNER_FILE="$(basename "$NODE_RUNNER_URL")-$(echo "$NODE_RUNNER_URL" | awk -F/ '{print $(NF-1)}')" echo "Latest node-runner version: " "$NODE_RUNNER_FILE" if [[ ! -f $NODE_RUNNER_FILE ]] then echo "Downloading new node-runner version ..." curl -Lo "$NODE_RUNNER_FILE" "$NODE_RUNNER_URL" && \ chmod +x "$NODE_RUNNER_FILE" && \ rm -f "radixnode" && \ ln -s "/opt/radix-babylon/$NODE_RUNNER_FILE" radixnode else echo "Radix node-runner already up to date." fi cd /opt/radix-babylon/releases || exit echo "Checking for latest radix node version ..." NODE_URL=$(curl -s https://api.github.com/repos/radixdlt/babylon-node/releases/latest | \ jq -r '.assets[] | select(.browser_download_url|split("/")|last|test("^babylon-node-v[0-9.]*zip")) | .browser_download_url') echo "Found radix node url:" "$NODE_URL" NODE_ARCHIVE=$(basename "$NODE_URL") echo "Latest node version:" "$NODE_ARCHIVE" if [[ ! -f $NODE_ARCHIVE ]] then echo "Downloading new node version ..." curl -OL "$NODE_URL" && \ unzip "$NODE_ARCHIVE" fi NODE_EXTRACTED=$(unzip -Z1 "$NODE_ARCHIVE" | head -n 1) if [[ ${#NODE_EXTRACTED} == 0 ]] then echo "Error: Failed to read downloaded archive." exit fi if [[ $(find "$NODE_EXTRACTED" -type f | wc -l) == 0 ]] then echo "Error: no files extracted." exit fi DIR_BIN=/opt/radix-babylon/releases/${NODE_EXTRACTED}bin DIR_LIB=/opt/radix-babylon/releases/${NODE_EXTRACTED}lib DIR_JNI=/opt/radix-babylon/releases/${NODE_EXTRACTED}jni JNI_URL=$(curl -s https://api.github.com/repos/radixdlt/babylon-node/releases/latest | \ jq -r '.assets[] | select(.browser_download_url|split("/")|last|test("^babylon-node-rust-arch-linux-x86_64-release-v[0-9.]*zip")) | .browser_download_url') echo "Found jni node url:" "$JNI_URL" JNI_ARCHIVE=$(basename "$JNI_URL") echo "Latest JNI version:" "$JNI_ARCHIVE" if [[ ! -f $JNI_ARCHIVE ]] then echo "Downloading new JNI version ..." mkdir -p $DIR_JNI && \ curl -OL "$JNI_URL" && \ unzip "$JNI_ARCHIVE" -d $DIR_JNI fi JNI_EXTRACTED=$(unzip -Z1 "$JNI_ARCHIVE" | head -n 1) if [[ ${#JNI_EXTRACTED} == 0 ]] then echo "Error: Failed to read downloaded archive." exit fi if [[ $(find "$DIR_JNI/$JNI_EXTRACTED" -type f | wc -l) == 0 ]] then echo "Error: no files extracted." exit fi mkdir -p /etc/radix-babylon/node if [[ $DIR_BIN = $(readlink /etc/radix-babylon/node/bin) && \ $DIR_LIB = $(readlink /etc/radix-babylon/node/lib) && \ $DIR_JNI = $(readlink /etc/radix-babylon/node/jni) && \ "$1" != "force" ]] then echo "Radix node already up to date." exit fi echo "Installing new node version" "$NODE_ARCHIVE" "..." ## INSTALL - node not running if [[ $NODE_STATUS == "" ]] then if rm -f /etc/radix-babylon/node/bin && \ rm -f /etc/radix-babylon/node/lib && \ rm -f /etc/radix-babylon/node/jni && \ ln -s "$DIR_BIN" /etc/radix-babylon/node/bin && \ ln -s "$DIR_LIB" /etc/radix-babylon/node/lib && \ ln -s "$DIR_JNI" /etc/radix-babylon/node/jni then echo "Successfully installed node files." else echo "Error: Failed to install node files." fi exit fi ## UPDATE if [[ $IS_VALIDATING == true ]] then PROPOSALS_COMPLETED=$(get_completed_proposals) echo "Wait until node completed proposal to minimise risk of a missed proposal ..." while (( $(get_completed_proposals) == PROPOSALS_COMPLETED)) || (( $(get_completed_proposals) == 0)) do echo "Waiting ..." sleep 1 done echo "Validator completed proposal - updating now." fi if sudo systemctl stop radix-babylon && \ rm -f /etc/radix-babylon/node/bin && \ rm -f /etc/radix-babylon/node/lib && \ rm -f /etc/radix-babylon/node/jni && \ ln -s "$DIR_BIN" /etc/radix-babylon/node/bin && \ ln -s "$DIR_LIB" /etc/radix-babylon/node/lib && \ ln -s "$DIR_JNI" /etc/radix-babylon/node/jni && \ sudo systemctl start radix-babylon then echo "Successfully installed node and restarted." else echo "Error: Failed to install and restart node." fi