Allora Worker Node Setup

Requirements


- VPS with Ubuntu 22.04
- At least 2vCPU and 4 GB of RAM
- Python3 and Docker installed
- Wallet address with some funds

Intsall nano in your command prompt

sudo apt-get update ((copy))

sudo apt-get install nano -y ((copy))

Install Update / Packages


sudo apt-get update && sudo apt-get upgrade -y  
((copy))

sudo apt install ca-certificates zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev curl git wget make jq build-essential pkg-config lsb-release libssl-dev libreadline-dev libffi-dev gcc screen unzip lz4 -y  
((copy))

Install Python3


sudo apt-get install python3  
((copy))

sudo apt install python3-pip  
((copy))

Install Docker


curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg  
((copy))

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null  ((copy))



sudo apt-get update  
((copy))
sudo apt-get install docker-ce docker-ce-cli containerd.io  
((copy))

docker version  
((copy))

Install Docker-Compose


VER=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep tag_name | cut -d '"' -f 4)  
((copy))

curl -L "https://github.com/docker/compose/releases/download/"$VER"/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose  
((copy))

chmod +x /usr/local/bin/docker-compose  
((copy))

docker-compose --version  
((copy))

Docker Permission to User


sudo groupadd docker  
((copy))

sudo usermod -aG docker $USER  
((copy))

Install Go  ((copy all in once))


cd $HOME && \

ver="1.21.3" && \

wget "https://golang.org/dl/go$ver.linux-amd64.tar.gz" && \

sudo rm -rf /usr/local/go && \

sudo tar -C /usr/local -xzf "go$ver.linux-amd64.tar.gz" && \

rm "go$ver.linux-amd64.tar.gz" && \

echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> $HOME/.bash_profile && \

source $HOME/.bash_profile && \

go version

Install Allorad / Wallet


git clone
https://github.com/allora-network/allora-chain.git  ((copy))

cd allora-chain && make all  ((copy))

allorad version  
((copy))

Add Wallet or Create Wallet

To add an existing wallet:

allorad keys add testkey --recover  ((copy))

Install Worker


git clone
https://github.com/allora-network/basic-coin-prediction-node  ((copy))

cd basic-coin-prediction-node  ((copy))

mkdir worker-data  ((copy))

mkdir head-data  ((copy))

sudo chmod -R 777 worker-data  ((copy))

sudo chmod -R 777 head-data  ((copy))

sudo docker run -it --entrypoint=bash -v ./head-data:/data alloranetwork/allora-inference-base:latest -c "mkdir -p /data/keys && (cd /data/keys && allora-keys)"  ((copy))

sudo docker run -it --entrypoint=bash -v ./worker-data:/data alloranetwork/allora-inference-base:latest -c "mkdir -p /data/keys && (cd /data/keys && allora-keys)"  ((copy))

cat head-data/keys/identity (( copy your head id ))

Connect to Allora Chain


rm -rf docker-compose.yml && nano docker-compose.yml  
((copy))

Copy And Paste this code :

!!!!! Change head-id and Wallet_Seed_Phares ( 24 Wallet Key ) !!!!

version: '3'

services:

  inference:

    container_name: inference-basic-eth-pred

    build:

      context: .

    command: python -u /app/app.py

    ports:

      - "8000:8000"

    networks:

      eth-model-local:

        aliases:

          - inference

        ipv4_address: 172.22.0.4

    healthcheck:

      test: ["CMD", "curl", "-f", "http://localhost:8000/inference/ETH"]

      interval: 10s

      timeout: 10s

      retries: 12

    volumes:

      - ./inference-data:/app/data

  updater:

    container_name: updater-basic-eth-pred

    build: .

    environment:

      - INFERENCE_API_ADDRESS=http://inference:8000

    command: >

      sh -c "

      while true; do

        python -u /app/update_app.py;

        sleep 24h;

      done

      "

    depends_on:

      inference:

        condition: service_healthy

    networks:

      eth-model-local:

        aliases:

          - updater

        ipv4_address: 172.22.0.5

  worker:

    container_name: worker-basic-eth-pred

    environment:

      - INFERENCE_API_ADDRESS=http://inference:8000

      - HOME=/data

    build:

      context: .

      dockerfile: Dockerfile_b7s

    entrypoint:

      - "/bin/bash"

      - "-c"

      - |

        if [ ! -f /data/keys/priv.bin ]; then

          echo "Generating new private keys..."

          mkdir -p /data/keys

          cd /data/keys

          allora-keys

        fi

        # Change boot-nodes below to the key advertised by your head

        allora-node --role=worker --peer-db=/data/peerdb --function-db=/data/function-db \

          --runtime-path=/app/runtime --runtime-cli=bls-runtime --workspace=/data/workspace \

          --private-key=/data/keys/priv.bin --log-level=debug --port=9011 \

          --boot-nodes=/ip4/172.22.0.100/tcp/9010/p2p/head-id \

          --topic=allora-topic-1-worker \

          --allora-chain-key-name=testkey \

          --allora-chain-restore-mnemonic='WALLET_SEED_PHRASE' \

          --allora-node-rpc-address=https://allora-rpc.edgenet.allora.network/ \

          --allora-chain-topic-id=1

    volumes:

      - ./worker-data:/data

    working_dir: /data

    depends_on:

      - inference

      - head

    networks:

      eth-model-local:

        aliases:

          - worker

        ipv4_address: 172.22.0.10

  head:

    container_name: head-basic-eth-pred

    image: alloranetwork/allora-inference-base-head:latest

    environment:

      - HOME=/data

    entrypoint:

      - "/bin/bash"

      - "-c"

      - |

        if [ ! -f /data/keys/priv.bin ]; then

          echo "Generating new private keys..."

          mkdir -p /data/keys

          cd /data/keys

          allora-keys

        fi

        allora-node --role=head --peer-db=/data/peerdb --function-db=/data/function-db  \

          --runtime-path=/app/runtime --runtime-cli=bls-runtime --workspace=/data/workspace \

          --private-key=/data/keys/priv.bin --log-level=debug --port=9010 --rest-api=:6000

    ports:

      - "6000:6000"

    volumes:

      - ./head-data:/data

    working_dir: /data

    networks:

      eth-model-local:

        aliases:

          - head

        ipv4_address: 172.22.0.100

networks:

  eth-model-local:

    driver: bridge

    ipam:

      config:

        - subnet: 172.22.0.0/24

volumes:

  inference-data:

  worker-data:

  head-data:

CTRL X - Y - Enter. For save.

Run The Worker (( copy both together ))


docker compose build

docker compose up -d

Check Node


docker ps  
((copy))

copy your container id of node worker .

docker logs -f CONTAINER_ID  ((copy))  (( Replace container id with your container id ))

Check Running Node any time with this command.


docker ps  
((copy))

docker logs -f CONTAINER_ID  ((copy))

MUST CHECK THROUGH THIS COMMAND TO BE ASSURE ABOUT YOUR RUNNING NODE.

curl --location 'http://localhost:6000/api/v1/functions/execute' \

--header 'Content-Type: application/json' \

--data '{

    "function_id": "bafybeigpiwl3o73zvvl6dxdqu7zqcub5mhg65jiky2xqb4rdhfmikswzqm",

    "method": "allora-inference-function.wasm",

    "parameters": null,

    "topic": "1",

    "config": {

        "env_vars": [

            {

                "name": "BLS_REQUEST_PATH",

                "value": "/api"

            },

            {

                "name": "ALLORA_ARG_PARAMS",

                "value": "ETH"

            }

        ],

        "number_of_nodes": -1,

        "timeout": 2

    }

}'

RESPONSE SHOULD BE CODE 200 - IF IT IS THEN YOUR NODE IS WORKING FINE, IF IT SHOWS CODE 480 OR ANY OTHER ,, THEN RUN ALL COMMANDS FROM STARTING AGAIN.

—-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

how to transfer to v2 testnet

 docker-compose ls

cd /root/allora-chain/allora-chain/basic-coin-prediction-node

                         or

cd /root/allora/allora-chain/basic-coin-prediction-node/docker-compose.yml

                         or

cd /root/basic-coin-prediction-node

ls

docker-compose ps

docker-compose down

docker stop $(docker ps -aq) 2>/dev/null

docker rm $(docker ps -aq) 2>/dev/null

docker rmi -f $(docker images -aq) 2>/dev/null

sed -i 's|--allora-node-rpc-address=https://allora-rpc.edgenet.allora.network/|--allora-node-rpc-address=https://allora-rpc.testnet-1.testnet.allora.network/|' docker-compose.yml

docker-compose up -d

docker ps

docker logs -f CONTAINER_ID

check node status on testnet version 

network_height=$(curl -s -X 'GET' 'https://allora-rpc.testnet-1.testnet.allora.network/abci_info?' -H 'accept: application/json' | jq -r .result.response.last_block_height) && \

curl --location 'http://localhost:6000/api/v1/functions/execute' --header 'Content-Type: application/json' --data '{

    "function_id": "bafybeigpiwl3o73zvvl6dxdqu7zqcub5mhg65jiky2xqb4rdhfmikswzqm",

    "method": "allora-inference-function.wasm",

    "parameters": null,

    "topic": "1",

    "config": {

        "env_vars": [

            {

                "name": "BLS_REQUEST_PATH",

                "value": "/api"

            },

            {

                "name": "ALLORA_ARG_PARAMS",

                "value": "ETH"

            },

            {

                "name": "ALLORA_BLOCK_HEIGHT_CURRENT",

                "value": "'"${network_height}"'"

            }

        ],

        "number_of_nodes": -1,

        "timeout": 10

    }

}' | jq