July 1

Allora. Устанавливаем ноду и воркер

KARMALOGIC - Личный блог о крипте, мои мысли и действия

Allora — это новая децентрализованная AI сеть с упором на Community

  • Инвестировали: $33 750 000
  • Инвесторы: Polychain Capital, Delphi Ventures, Blockchain Capital, и другие
  • Характеристики: 2CPU/4GBRAM/5SSD — минимальные
  • Арендовать сервер: billing.spacecore.pro
  • Чат с поддержкой: https://t.me/+VA8TF9tqFlc2Njgy
  • Ubuntu: 22.04

Команда проекта анонсировало новый сезон Фарма поинтов, в последствия наши поинты будут конвертированы в токен проекта. Мы можем поставить ноду валидатора и воркера. Но в валидаторы очень сложно попасть , поэтому мы будем ставить обычного воркера.

Арендуем сервер я беру тут https://billing.spacecore.pro/billmgr?from=56804

1 )Устанавливаем кошелек кеплер сохраняем сид фразу (она нам будет нужна в процессе установки ноды
2) Идем на сайт и жмем зеленую надпись add allora tesnet 1 добавялем тестовую сеть в кошелек
3) Заходим в кошелек в настройках и поиске ищем сеть allora-testnet-1 и добавялем , что бы она отбразилась в самом кошельке

4) Идем на сайт и запрашиваем наши тестовые токены из крана , копируем кошелек Аллора, вставляем и решаем капчу , если все в порядке выйдет зеленая надпись. (ждем поступления токенов должно придти примерно 0.0000001)
5) Теперь идем на сайт и подключаем наш кошелек к даш борду, тут нам будудт начислять баллы за работу ноды.

Советую не делать танцы с бубном и если у вас нода стояла до этого , то сперва советую снести сервак и накатить заново операционку и уже начистую переустановить и восстановить ключи!!! Приступаем к установки ноды

1) Открываем терминал и вводи первую команду

sudo apt update & sudo apt upgrade -y

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

Если появится выбор при обновлении, жмем Enter и потверждаем действие клавишей Y

Устанавливаем Питона

sudo apt install python3
python3 --version

sudo apt install python3-pip
pip3 --version

Очередь Докера

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

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

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
docker version

Устанавливаем Компот

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

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

chmod +x /usr/local/bin/docker-compose
docker-compose --version
sudo groupadd docker
sudo usermod -aG docker $USER

В контру играли )) GO GO GO

sudo rm -rf /usr/local/go
curl -L https://go.dev/dl/go1.22.4.linux-amd64.tar.gz | sudo tar -xzf - -C /usr/local
echo 'export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin' >> $HOME/.bash_profile
echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> $HOME/.bash_profile
source .bash_profile
go version

Очередь Лопатника( кошелька) Аллора

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

cd allora-chain && make all

allorad version

Устанавливаем allora-hugging-face-worker

git clone https://github.com/allora-network/allora-huggingface-walkthrough
cd allora-huggingface-walkthrough

Устанавливаем воркера

mkdir -p worker-data
chmod -R 777 worker-data

Заходим в конфиг

sudo apt install nano
cp config.example.json config.json
nano config.json

ТУТ ВНИМАТЕЛЬНО !! В ЭТОМ ФАЙЛЕ НУЖНО БУДЕТ ЗАМЕНИТЬ НАДПИСЬ “your phase” НА СВОЮ СИД ФРАЗУ ОТ КОШЕЛЬКА КЕПЛЕР И ТАК ЖЕ ЗАМЕНИТЬ RPC !! КОВЫЧКИ УДАЛЯТЬ НЕ НУЖНО. СПИСОК RCP ДЛЯ ЗАМЕНЫ https://beta.multi-rpc.com/allora_testnet/ https://allora-rpc.testnet-1.testnet.allora.network/

{
   "wallet": {
       "addressKeyName": "test",
       "addressRestoreMnemonic": "your phase",
       "alloraHomeDir": "/root/.allorad",
       "gas": "1000000",
       "gasAdjustment": 1.0,
       "nodeRpc": "https://sentries-rpc.testnet-1.testnet.allora.network/",
       "maxRetries": 1,
       "delay": 1,
       "submitTx": false
   },
   "worker": [
       {
           "topicId": 1,
           "inferenceEntrypointName": "api-worker-reputer",
           "loopSeconds": 1,
           "parameters": {
               "InferenceEndpoint": "http://inference:8000/inference/{Token}",
               "Token": "ETH"
           }
       },
       {
           "topicId": 2,
           "inferenceEntrypointName": "api-worker-reputer",
           "loopSeconds": 3,
           "parameters": {
               "InferenceEndpoint": "http://inference:8000/inference/{Token}",
               "Token": "ETH"
           }
       },
       {
           "topicId": 3,
           "inferenceEntrypointName": "api-worker-reputer",
           "loopSeconds": 5,
           "parameters": {
               "InferenceEndpoint": "http://inference:8000/inference/{Token}",
               "Token": "BTC"
           }
       },
       {
           "topicId": 4,
           "inferenceEntrypointName": "api-worker-reputer",
           "loopSeconds": 2,
           "parameters": {
               "InferenceEndpoint": "http://inference:8000/inference/{Token}",
               "Token": "BTC"
           }
       },
       {
           "topicId": 5,
           "inferenceEntrypointName": "api-worker-reputer",
           "loopSeconds": 4,
           "parameters": {
               "InferenceEndpoint": "http://inference:8000/inference/{Token}",
               "Token": "SOL"
           }
       },
       {
           "topicId": 6,
           "inferenceEntrypointName": "api-worker-reputer",
           "loopSeconds": 5,
           "parameters": {
               "InferenceEndpoint": "http://inference:8000/inference/{Token}",
               "Token": "SOL"
           }
       },
       {
           "topicId": 7,
           "inferenceEntrypointName": "api-worker-reputer",
           "loopSeconds": 2,
           "parameters": {
               "InferenceEndpoint": "http://inference:8000/inference/{Token}",
               "Token": "ETH"
           }
       },
       {
           "topicId": 8,
           "inferenceEntrypointName": "api-worker-reputer",
           "loopSeconds": 3,
           "parameters": {
               "InferenceEndpoint": "http://inference:8000/inference/{Token}",
               "Token": "BNB"
           }
       },
       {
           "topicId": 9,
           "inferenceEntrypointName": "api-worker-reputer",
           "loopSeconds": 5,
           "parameters": {
               "InferenceEndpoint": "http://inference:8000/inference/{Token}",
               "Token": "ARB"
           }
       }
       
   ]
}

Сохраняем все измениня кнопками Cntr + X, Y, Enter

Далее идем на CoinGecko и регаем демо аккаунт, тут нам нужен будет API Жмем Sign in регаемся , можно сразу авторизоватся через гугл почту , с права будет надпись Creat demo Akk жмем туда, заполняем данные можно выдумывать любые там где просит укзать часовй пояс пишем любые цифры. Все далее увидите надпись адд Api жмем туда он сгенерирует наш Api. В видео все это покажу если что.

Открываем App.ry там наша модель.

nano app.py

Тут заменяем “CG-your_api_key” на ваш API KEY который мы получил на COingeco

from flask import Flask, Response
import requests
import json
import pandas as pd
import torch
from chronos import ChronosPipeline

# Создаем Flask-приложение
app = Flask(__name__)

# Определяем модель Hugging Face, которую будем использовать
model_name = "amazon/chronos-t5-tiny"

def get_coingecko_url(token):
    base_url = "https://api.coingecko.com/api/v3/coins/"
    token_map = {
        'ETH': 'ethereum',
        'SOL': 'solana',
        'BTC': 'bitcoin',
        'BNB': 'binancecoin',
        'ARB': 'arbitrum'
    }
    
    token = token.upper()
    if token in token_map:
        url = f"{base_url}{token_map[token]}/market_chart?vs_currency=usd&days=30&interval=daily"
        return url
    else:
        raise ValueError("Unsupported token")

# Определяем наш эндпоинт
@app.route("/inference/<string:token>")
def get_inference(token):
    """Генерация прогноза для указанного токена."""
    try:
        # Используем pipeline как высокоуровневый помощник
        pipeline = ChronosPipeline.from_pretrained(
            model_name,
            device_map="auto",
            torch_dtype=torch.bfloat16,
        )
    except Exception as e:
        return Response(json.dumps({"pipeline error": str(e)}), status=500, mimetype='application/json')

    try:
        # Получаем данные с Coingecko
        url = get_coingecko_url(token)
    except ValueError as e:
        return Response(json.dumps({"error": str(e)}), status=400, mimetype='application/json')

    headers = {
        "accept": "application/json",
        "x-cg-demo-api-key": "CG-your_api_key" # замените на ваш API-ключ
    }

    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        data = response.json()
        df = pd.DataFrame(data["prices"])
        df.columns = ["date", "price"]
        df["date"] = pd.to_datetime(df["date"], unit='ms')
        df = df[:-1]  # удаляем сегодняшнюю цену
        print(df.tail(5))
    else:
        return Response(json.dumps({"Failed to retrieve data from the API": str(response.text)}), 
                        status=response.status_code, 
                        mimetype='application/json')

    # Определяем контекст и длину прогноза
    context = torch.tensor(df["price"])
    prediction_length = 1

    try:
        forecast = pipeline.predict(context, prediction_length)  # shape [num_series, num_samples, prediction_length]
        print(forecast[0].mean().item())  # берем среднее значение прогнозируемого результата
        return Response(str(forecast[0].mean().item()), status=200)
    except Exception as e:
        return Response(json.dumps({"error": str(e)}), status=500, mimetype='application/json')

# Запускаем Flask-приложение
if __name__ == '__main__':
    app.run(host="0.0.0.0", port=8000, debug=True)

Инициализируем воркера

chmod +x init.config
./init.config

Запускаем воркера

docker compose up --build -d


Проверяем логи

docker compose logs -f

ТЕПЕРЬ КОМАНДЫ КОТОРЫЕ НУЖНЫ НАМ ЕСЛИ ВДРУГ МЫ ХОТИМ ЗАМЕНИТЬ РПЦ ИЛИ ВНЕСТИ ИЗМЕНЕНИЯ В МОДЕЛЬ

cd /root/allora-chain/allora-huggingface-walkthrough/

КОМАНДА СТОПАЕТ ДОКЕР

cd basic-coin-prediction-node
docker compose down -v

ЕСЛИ НУЖНО ЗАМЕНИТЬ РПЦ ВВОДИМ ЭТУ КОМАНДУ

sudo apt install nano
nano config.json

Когда внесли изменения допустим заменил РЦП нужно сделать следующие команды

chmod +x init.config
./init.config
docker compose up -d

Моя группа в телеграмме подписывайтесь и будьте в курсе всех новостей и двжении

https://t.me/KarmaLoGic_crypto