Arkeo Providers
🪓 Telegram канал UTSA 🪓 Telegram чат UTSA
- Network Chain ID:
arkeo-testnet-3 - Denom:
uarkeo - Binary:
arkeod - Working directory:
.arkeo - RPC: https://t-arkeo.rpc.utsa.tech/
- RPC ETH: https://chainlist.org/chain/1
- API: https://t-arkeo.api.utsa.tech/
- Explorers: https://exp.utsa.tech/arkeo-test/staking
- Docs: https://docs.arkeo.network/architecture/providers
Провайдер может быть зарегистрирован или отключен от регистрации через транзакцию 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
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
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
image: ghcr.io/arkeonetwork/arkeo@sha256:6682680655759664095eb8eddf38950b923e3f7cd9501028e98a1449a8e88f68
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: sentineldocker-compose up -d
docker-compose logs -f --tail 100
После запуска мы можем проверить наш sentinel через http://<IP_SERVER>:3636/metadata.json
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|jqcurl -s http://<ip-address>:3636/active-contract/<service>/<spender_pubkey> | jq
# curl -s http://<ip-address>:3636/claim/<contract_id> | jq # открытые для claim curl -s http://<ip-address>:3636/open-claims | jq
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"