Avalanche

Instructions to set up your Avalanche node.

Requirements

Prerequisites

sudo apt-get install wget jq -y

Get Binaries

Check the appropriate version for the network accordingly in their docs or choose the latest release

 # This is an example - check their docs and release page to opt for the right version
AVALANCHEGO=v1.9.3
 # This is an example - check their docs and release page to opt for the right version
AVALANCHEGO=v1.9.3
# verify correct versions
echo $AVALANCHEGO

# create a temp dir for binaries
cd $HOME
mkdir binaries && cd binaries


# get avalanchego binary and rename
wget https://github.com/ava-labs/avalanchego/releases/download/$AVALANCHEGO/avalanchego-linux-amd64-$AVALANCHEGO.tar.gz
tar -xvf avalanchego-linux-amd64-$AVALANCHEGO.tar.gz
rm avalanchego-linux-amd64-$AVALANCHEGO.tar.gz
cd avalanchego-$AVALANCHEGO

# make binaries executable
chmod +x *

# move to usr bin
sudo mv * /usr/bin/

# get out of binaries directory
cd $HOME

# verify version
avalanchego --version

Set environment variables

Note: Update your shell profile in accordance with the shell you are using

echo export NETWORK_ID=mainnet >> $HOME/.profile
echo export NETWORK_ID=fuji >> $HOME/.profile

Apply your changes

source $HOME/.profile

Create services

Use systemctl to set up service for avalanchego.

avalanchego

sudo tee <<EOF >/dev/null /etc/systemd/system/avalanchego.service
[Unit]
Description=Avalanche daemon
After=network-online.target

[Service]
User=root
ExecStart=/usr/bin/avalanchego --http-host= --network-id=$NETWORK_ID
Restart=on-failure
RestartSec=3
LimitNOFILE=32768

[Install]
WantedBy=multi-user.target
EOF


# verify and enable
cat /etc/systemd/system/avalanchego.service
sudo systemctl enable avalanchego

Start the service

sudo systemctl daemon-reload
sudo systemctl restart avalanchego

Check logs

# change log settings to persistent if not already
sed -i 's/#Storage=auto/Storage=persistent/g' /etc/systemd/journald.conf
sudo systemctl restart systemd-journald

journalctl -u avalanchego.service -f -n 100 -o cat

Logs should appear like this

[11-28|07:50:59.280] INFO <P Chain> bootstrap/bootstrapper.go:481 fetching blocks {"numFetchedBlocks": 85000, "numTotalBlocks": 3241631, "eta": "1h52m8s"}
[11-28|07:51:13.370] INFO <P Chain> bootstrap/bootstrapper.go:481 fetching blocks {"numFetchedBlocks": 90000, "numTotalBlocks": 3241631, "eta": "1h53m58s"}
[11-28|07:51:29.644] INFO <P Chain> bootstrap/bootstrapper.go:481 fetching blocks {"numFetchedBlocks": 95000, "numTotalBlocks": 3241631, "eta": "1h56m46s"}
[11-28|07:51:43.864] INFO <P Chain> bootstrap/bootstrapper.go:481 fetching blocks {"numFetchedBlocks": 100000, "numTotalBlocks": 3241631, "eta": "1h58m12s"}
[11-28|07:51:52.789] INFO <P Chain> bootstrap/bootstrapper.go:481 fetching blocks {"numFetchedBlocks": 105000, "numTotalBlocks": 3241631, "eta": "1h56m50s"}
[11-28|07:52:06.814] INFO <P Chain> bootstrap/bootstrapper.go:481 fetching blocks {"numFetchedBlocks": 110000, "numTotalBlocks": 3241631, "eta": "1h58m0s"}
[11-28|07:52:17.979] INFO <P Chain> bootstrap/bootstrapper.go:481 fetching blocks {"numFetchedBlocks": 115000, "numTotalBlocks": 3241631, "eta": "1h57m45s"}
[11-28|07:52:31.488] INFO <P Chain> bootstrap/bootstrapper.go:481 fetching blocks {"numFetchedBlocks": 120000, "numTotalBlocks": 3241631, "eta": "1h58m31s"}
[11-28|07:52:40.475] INFO <P Chain> bootstrap/bootstrapper.go:481 fetching blocks {"numFetchedBlocks": 125000, "numTotalBlocks": 3241631, "eta": "1h57m20s"}
[11-28|07:52:53.462] INFO <P Chain> bootstrap/bootstrapper.go:481 fetching blocks {"numFetchedBlocks": 130000, "numTotalBlocks": 3241631, "eta": "1h57m49s"}

Verify

YOUR_IP=$(curl -4 ifconfig.co)

curl -X POST --data '{
    "jsonrpc":"2.0",
    "id"     :1,
    "method" :"info.isBootstrapped",
    "params": {
        "chain":"X"
    }
}' -H 'content-type:application/json;' $YOUR_IP:9650/ext/info | jq

If you get something like this in response of the above rpc call, your node is setup correctly

Wait for isBootstrapped to become true before using it in vald config

{
  "jsonrpc": "2.0",
  "result": {
    "isBootstrapped": false # wait for it to become true
  },
  "id": 1
}

Endpoint

echo "${YOUR_IP}:9650/ext/bc/C/rpc"

Configure vald

In order for vald to connect to your Avalanche node, your rpc_addr should be exposed in vald’s config.toml

[[axelar_bridge_evm]]
name = "Avalanche"
rpc_addr = "http://IP:PORT"
start-with-bridge = true
[[axelar_bridge_evm]]
name = "Avalanche"
rpc_addr = "http://IP:PORT"
start-with-bridge = true
Edit this page