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 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
docker-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|jq
curl -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"