COSMOS WIKI
November 17, 2023

Arkeo Providers

Web Discord Github

Details

Провайдер может быть зарегистрирован или отключен от регистрации через транзакцию bonding и транзакцию unbonding соответственно. Для провайдера требуется минимальный размер залога, чтобы пользователи и децентрализованные приложения могли заключать с ним контракты. На момент написания этой статьи эта сумма равняется 1 arkeo

Провайдеры могут в любой момент сделать unbond, указав отрицательную сумму в транзакции. Если после транзакции залог провайдера станет меньше минимально требуемой суммы, то клиенты больше не смогут открывать новые контракты с ним. Однако любые существующие контракты будут оставаться в силе до тех пор, пока не истечет срок их действия или пока провайдер или клиент не аннулируют их

Чтобы связать провайдера (bond) или отвязать провайдера (unbond) передайте транзакцию MsgBondProvider

Подготовка сервера

# обновляем репозитории
apt update && apt upgrade -y

# устанавливаем необходимые утилиты
apt install curl iptables build-essential git wget jq make gcc nano tmux htop nvme-cli pkg-config libssl-dev libleveldb-dev tar clang bsdmainutils ncdu unzip libleveldb-dev -y

File2Ban - подробнее здесь и здесь

# устанавливаем и копируем конфиг, который будет иметь больший приоритет
apt install fail2ban -y && \
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local && \
nano /etc/fail2ban/jail.local
# раскомментировать и добавить свой IP: ignoreip = 127.0.0.1/8 ::1 <ip>
systemctl restart fail2ban

# проверяем status 
systemctl status fail2ban
# проверяем, какие jails активны (по умолчанию только sshd)
fail2ban-client status
# проверяем статистику по sshd
fail2ban-client status sshd
# смотрим логи
tail /var/log/fail2ban.log
# останавливаем работу и удаляем с автозагрузки
#systemctl stop fail2ban && systemctl disable fail2ban

Устанавливаем GO

ver="1.20.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

Устанавливаем docker + docker-compose

# https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04-ru
apt update && \
apt install apt-transport-https ca-certificates curl software-properties-common -y && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && \
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" && \
apt update && \
apt-cache policy docker-ce && \
sudo apt install docker-ce -y && \
docker --version
# ручная установка docker-compose https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-ubuntu-20-04-ru
# проверяем версию https://github.com/docker/compose/releases и подставляем в команду установки
curl -L "https://github.com/docker/compose/releases/download/v2.10.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose

# проверить версию
docker-compose --version

Настройка ноды Arkeo

Для того чтобы запустить провайдера нам необходимо:

  • Установить и синхронизировать ноду Arkeo. Для этого Вы можете воспользоваться данным гайдом
  • Настройки индексации и прунинга на ноде могут быть любые
  • Создать новый кошелек и пополнить его минимум на 2 монеты
  • Получить pubkey нашего кошелька в формате tarkeopub1ad... Его нам нужно будет вставить в конфигурацию sentinel и отправить необходимые транзакции
# создать кошелек
arkeod keys add arkeo_provider_wallet --keyring-backend os
# проверяем баланс
arkeod q bank balances <address>

Настройка sentinel

Sentinel - это специально созданный обратный прокси-сервер (похожий на nginx). Его роль - быть фронтальными службами, которые пересылают запросы к внутренним службам (т. е. RPC). Он также отвечает за аутентификацию/авторизацию, а также услуги ограничения скорости

Создаем каталог и переходим в него

cd
mkdir -p arkeo-provider && cd arkeo-provider

Создаем docker-compose.yml

image - https://github.com/arkeonetwork/arkeo/pkgs/container/arkeo

Создаем docker-compose.yml и вставляем конфиг. В конфиге меняем PROVIDER_PUBKEY и ETH_MAINNET_FULLNODE

Не обязательно использовать ETH_MAINNET_FULLNODE, вместо этого Вы можете взять RPC любой другой поддерживаемой сети. Список поддерживаемых сетей - https://github.com/arkeonetwork/arkeo/blob/master/common/service.go#L20

nano docker-compose.yml
version: "3"
services:
  sentinel:
    image: ghcr.io/arkeonetwork/arkeo:latest
    container_name: sentinel
    environment:
      NET: "mainnet"
      MONIKER: "n/a"
      WEBSITE: "n/a"
      DESCRIPTION: "n/a"
      LOCATION: "Europe"
      FREE_RATE_LIMIT: 10
      PROVIDER_PUBKEY: "<tarkeopub1add...>"
      SOURCE_CHAIN: "127.0.0.1:1317"
      EVENT_STREAM_HOST: "127.0.0.1:26657"
      CLAIM_STORE_LOCATION: "${HOME}/.arkeo/claims"
      CONTRACT_CONFIG_STORE_LOCATION: "${HOME}/.arkeo/contract_configs"
      ETH_MAINNET_FULLNODE: "<https://ethereum.mainnet.fi>"
    network_mode: host
    entrypoint: sentinel

Запускаем sentinel

docker-compose up -d

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

docker-compose logs -f --tail 100
После запуска мы можем проверить наш sentinel через http://<IP_SERVER>:3636/metadata.json

Получаем наш PubKey

RAWPUBKEY=$(arkeod keys show arkeo_provider_wallet -p | jq -r .key) &&\
PUBKEY=$(arkeod debug pubkey-raw $RAWPUBKEY | grep 'Bech32 Acc:' | sed "s|Bech32 Acc: ||g") &&\
echo $PUBKEY

Вводим недостающие переменные и отправляем транзакцию BOND

Вы должны сделать это для каждой службы, которую вы собираетесь запустить (например, Bitcoin, Ethereum, Gaia и т.д.)

SERVICE прописаны здесь

SERVICE=eth-mainnet-fullnode
BOND=1000000
arkeod tx arkeo bond-provider -y --from arkeo_provider_wallet --fees 200uarkeo -- "$PUBKEY" "$SERVICE" "$BOND"

Теперь мы можем проверить нашего провайдера командой. Предварительно замените <tarkeopub1...> на свое значение

curl -s "https://t-arkeo.api.utsa.tech/arkeo/providers" | jq '.provider[]|select(.pub_key=="<tarkeopub1...>")'

Модификация провайдера - замените на свои значения https://docs.arkeo.network/how-to-use/data-providers/management#modifying

PUBKEY=<tarkeopub1...>
SERVICE=eth-mainnet-fullnode
METADATAURI=http://arkeo-provider.utsa.tech:3636/metadata.json
# METADATANONCE должно увеличиваться каждый раз, когда Вы модифицируете или изменяете содержимое metadata.json в sentinel
METADATANONCE=1
# STATUS позволяет Вам сигнализировать о том, что Вы находитесь в режиме технического обслуживания. 0=offline 1= online
STATUS=1
# MIN_CONTRACT_DURATION устанавливает минимальный срок действия контракта
MIN_CONTRACT_DURATION=5
# MAX_CONTRACT_DURATION устанавливает максимальную продолжительность контракта. Это гарантирует, что контракты не будут открыты слишком долго, что затруднит корректировку цен
MAX_CONTRACT_DURATION=432000
# SUBSCRIPTION_RATE позволяет Вам устанавливать свои цены на контракты подписи. Вы можете указать любые активы с поддержкой IBC, такие как ATOM, ARKEO или USDC
SUBSCRIPTION_RATE=10uarkeo
# PAY_AS_YOU_GO_RATE - то же, что и SUBSCRIPTION_RATE, но для контрактов с оплатой по мере поступления
PAY_AS_YOU_GO_RATE=10uarkeo
# SETTLEMENT_DURATION дает провайдеру дополнительное время после истечения срока действия контракта для подачи любых заявлений о вознаграждении (для контрактов с оплатой по мере поступления)
SETTLEMENT_DURATION=1000
arkeod tx arkeo mod-provider -y --from arkeo_provider_wallet --fees 200uarkeo -- "$PUBKEY" "$SERVICE" "$METADATAURI" $METADATANONCE $STATUS $MIN_CONTRACT_DURATION $MAX_CONTRACT_DURATION $SUBSCRIPTION_RATE  $PAY_AS_YOU_GO_RATE $SETTLEMENT_DURATION

Теперь состояние провайдера должно измениться. Предварительно замените <tarkeopub1...> на свое значение

curl -s "https://t-arkeo.api.utsa.tech/arkeo/providers" | jq '.provider[]|select(.pub_key=="<tarkeopub1...>")'

На этом этапе Ваш провайдер должен работать, если кто-то создаст контракт с Вашим провайдером, то можно будет клеймить награды. В настоящее время имеется недостаточное количество контрактов для всех провайдеров, поэтому каждый из Вас может самостоятельно создать контракт и протестировать общую работу!

Полезные команды

cd arkeo-provider

# запуск sentinel
docker-compose up -d

# проверяем логи
docker-compose logs -f --tail 100

# рестарт sentinel
docker-compose restart

# остановить sentinel
docker-compose stop


# Остановить ноду и удалить тома данных
docker-compose down -v

Проверить всех провайдеров

curl -s "https://t-arkeo.api.utsa.tech/arkeo/providers" | jq

Проверить определенного провайдера

curl -s "https://t-arkeo.api.utsa.tech/arkeo/providers" | jq '.provider[]|select(.pub_key=="tarkeopub1addwnpepq2gehntdwz26s6jhzmfv89enucmx7dls76zzkmq4hw5mwxdzkplk75ke05z")'

Проверить метаданные определенного провайдера

curl -s http://arkeo-provider.utsa.tech:3636/metadata.json | jq
curl -sX POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' http://arkeo-provider.utsa.tech:3636/eth-mainnet-fullnode|jq

Проверить активные контракты

curl -s http://<ip-address>:3636/active-contract/<service>/<spender_pubkey> | jq

Claims

# 
curl -s http://<ip-address>:3636/claim/<contract_id> | jq
# открытые для claim
curl -s http://<ip-address>:3636/open-claims | jq

Сделать unbond

RAWPUBKEY=$(arkeod keys show arkeo_provider_wallet -p | jq -r .key) &&\
PUBKEY=$(arkeod debug pubkey-raw $RAWPUBKEY | grep 'Bech32 Acc:' | sed "s|Bech32 Acc: ||g") &&\
echo $PUBKEY

SERVICE=eth-mainnet-fullnode
BOND=-1000000
arkeod tx arkeo bond-provider -y --from arkeo_provider_wallet --fees 200uarkeo -- "$PUBKEY" "$SERVICE" "$BOND"
Поддержим природу вместе: 0xa7476EC14cD663C742d527113638C77a1631Cc89 cosmos1m2mm7kzvw6m3464h94ryqg8xvr6tyeyyecppnq