Разворачиваем API, RPC и Validator Node

Aleksandr Vorobev
5 min readDec 10, 2020

В рамках второй недели The Akashian Challenge Phase 3 нужно было развернуть API, RPC и Validator Node. Сейчас я продемонстрирую как это сделать, а также сделаю разбор распространенных ошибок, которые могут встретиться в процессе развертывания.

API Node

API Node полезны для создания кошельков и идеально подходят для использования в Akash.

Тут все довольно просто, процесс почти не отличается от развертывания веб приложений в предыдущих фазах.

  1. Скачайте файл deploy.yaml или сами создайте его и вставьте содержимое с гитхаба в ваш файлик.
  2. А теперь повторяете шаги, как на предыдущей неделе, можете посмотреть мой гайд вот тут
    Единственное отличие, когда вы выполните команду:
akash provider lease-status — node $AKASH_NODE — dseq $DSEQ — oseq $OSEQ — gseq $GSEQ — provider $PROVIDER — owner $ACCOUNT_ADDRESS

Поле “forwarded-ports”: {} ← вот таким не будет, а будет содержать порты, а конктрено нужный нам порт 1317

3. Теперь чтобы получить нужную информацию в более читаемом виде, выполним команду:

akash provider lease-status \
— dseq $DSEQ \
— gseq $GSEQ \
— oseq $OSEQ \
— provider $PROVIDER \
— owner $ACCOUNT_ADDRESS \
— node $AKASH_NODE \
| jq ‘.[“forwarded-ports”].akash[] | select(.port==1317)’

Если пишет что jq not found, то вам надо установить jq, например на MacOS командой

brew install jq

Если у вас jq было, должно вывестись следущее:

{
“host”: “ext.provider1.akashdev.net”,
“port”: 1317,
“externalPort”: 32747,
“proto”: “TCP”,
“available”: 1,
“name”: “akash”
}

Возможные баги

Если поле “available”: 0 — то все плохо и вам не повезло, нужно начать заново :)

Если поля host нету, не пугайтесь — просто введите команду

akash provider lease-status \
— dseq $DSEQ \
— gseq $GSEQ \
— oseq $OSEQ \
— provider $PROVIDER \
— owner $ACCOUNT_ADDRESS \
— node $AKASH_NODE \
| jq -r ‘.services.akash.uris[0]’

Теперь чтобы проверить, что все окей — нужно сделать ссылку и перейти по ссылке в браузере
Сделайте ссылку из ваших полей вида http://host:externalPort/swagger/#/

В моем случаем, она будет выглядеть так:
http://ext.provider1.akashdev.net:32747/swagger/#/

Если все сделали правильно, то должны оказаться на сайте с вот таким лого

RPC Node

RPC Node позволяют выполнять запросы, аналогичные API Node, но еще позволяют отправлять транзакции в сеть.

  1. Проверьте какая версия akash у вас, если ниже 13, то надо обновить akash или просто опять установить
akash version

2. Также качем файл deploy.yaml или сами создаем его и вставляем содержимое с гитхаба в ваш файлик.

3. Теперь делаем все тоже самое, что и для API Node, только теперь нам нужен порт 26657, поэтому в последней команде меняем порт с 1317 на 26657, получится:

akash provider lease-status \
— dseq $DSEQ \
— gseq $GSEQ \
— oseq $OSEQ \
— provider $PROVIDER \
— owner $ACCOUNT_ADDRESS \
— node $AKASH_NODE \
| jq -r ‘.[“forwarded-ports”].akash[] | select(.port==26657)’

Должно вывестись следущее:

{
“host”: “ext.provider1.akashdev.net”,
“port”: 26657,
“externalPort”: 32747,
“proto”: “TCP”,
“available”: 1,
“name”: “akash”
}

4. Теперь сделаем ссылку, примено также, как для API Node
Вид http://host:externalPort
В моем случае http://ext.provider1.akashdev.net:32747 и запишем в переменную TESTNET_NODE

export TESTNET_NODE=http://ext.provider1.akashdev.net:32747

Теперь для проверки, вызовете следующую команду, в ответ на нее должны получить какой-то json

curl -s “$TESTNET_NODE/status”

Когда ваш нода впервые запускается, она пытается синхронизироваться с сетью, это можно проверить в статусе, должно вывестись false

akash — node $TESTNET_NODE status | jq ‘.sync_info.catching_up’

Возможные баги

Если выводиться true, то подождите минуту и вызовете еще раз эту команду, если опять true, то лучше начать заново, скорее всего в поле “available”: у вас было не 1,а 0

5. Осталось отправить транзакцию

akash \
— node $TESTNET_NODE \
— chain-id akash-edgenet-2 \
— memo $CODE \
tx send $KEY_NAME akash1vl3gun7p8y4ttzajrtyevdy5sa2tjz3a29zuah 1000000uakt

Возможные баги

Скорее всего вначале транзакция не пройдет и выкинет ошибку, это нормально — просто введите эту команду еще раз

Также в терминале надо будет подтвердить транзакцию, ввести ‘y’
Если все прошло успешно, в терминале появится json c данными транзакции.

Validator Node

1. Аналогично нужно скачать файл deploy.yaml и задеплоить также, как в прошлых челенджах.
Только теперь нужно внести изменения в deplo.yaml, напротив поля
- AKASH_MONIKER=
Ввести ваш код из личного кабинет, например у меня будет
- AKASH_MONIKER=dgbfr0rugcxnyuu
И только потом деплоить.

2. Теперь делаем тоже самое, что и для RPC Node после деплоя, только поле TEST_NODE заменим на DEPLOY_NODE_RPC

akash provider lease-status \
— dseq $DSEQ \
— gseq $GSEQ \
— oseq $OSEQ \
— provider $PROVIDER \
— owner $ACCOUNT_ADDRESS \
— node $AKASH_NODE \
| jq -r ‘.[“forwarded-ports”].akash[] | select(.port==26657)’
Выведет:{
“host”: “ext.provider1.akashdev.net”,
“port”: 26657,
“externalPort”: 32747,
“proto”: “TCP”,
“available”: 1,
“name”: “akash”
}

Сделаем ссылку Вид http://host:externalPort
В моем случае http://ext.provider1.akashdev.net:32747 и запишем в переменную TESTNET_NODE

export DEPLOY_NODE_RPC=http://ext.provider1.akashdev.net:32747

Теперь для проверки, вызовете следующую команду, в ответ на нее должны получить какой-то json

curl -s “$DEPLOY_NODE_RPC/status”akash — node $DEPLOY_NODE_RPC status | jq ‘.sync_info.catching_up’На вторую команду должны получить:“38630”
“2020–12–09T13:33:02.741252071Z”
false

Возможные баги

Если время показывается нулевое или постоянно выводится true, то лучше начать заново, скорее всего в поле “available”: у вас было не 1,а 0

3. Теперь запишем несколько новых переменных

export SECONDARY_NODE="$(curl -s https://raw.githubusercontent.com/ovrclk/net/master/definet/rpc-nodes.txt | head -1)"// dgbfr0rugcxnyuu - подставьте ваш код вместо этого
export SECONDARY_MONIKER=dgbfr0rugcxnyuu
// придумайте новое имя для ключа - secondary-key
export SECONDARY_KEY_NAME=secondary-key
export SECONDARY_CHAIN_ID=akash-edgenet-2

4. Создадим новый кошелек и полним его

akash keys add $SECONDARY_KEY_NAMEexport SECONDARY_ACCOUNT="$(akash keys show $SECONDARY_KEY_NAME -a)"

И пополните его на сайте введя ваш SECONDARY_ACCOUNT адрес

5. Теперь вызовете эту команду

akash provider lease-status \
— dseq $DSEQ \
— gseq $GSEQ \
— oseq $OSEQ \
— provider $PROVIDER \
— owner $ACCOUNT_ADDRESS \
— node $AKASH_NODE \
| jq -r ‘.services.akash.uris[0]’

Вот что вывелось у меня 6veev7chcfmnclgqklegcc.provider4.akashdev.net
Результат запишите в переменную

export NODE_ENDPOINT=6veev7chcfmnclgqklegcc.provider4.akashdev.net

Сделайте еще одну переменную VALIDATOR_PUBKEY

export VALIDATOR_PUBKEY=”$(curl -s “$NODE_ENDPOINT/validator-pubkey.txt”)”

Все, теперь создадим валидатор

akash tx staking create-validator \
— node=”$SECONDARY_NODE” \
— amount=1000000uakt \
— pubkey=”$VALIDATOR_PUBKEY” \
— moniker=”$SECONDARY_MONIKER” \
— chain-id=”$SECONDARY_CHAIN_ID” \
— commission-rate=”0.10" \
— commission-max-rate=”0.20" \
— commission-max-change-rate=”0.01" \
— min-self-delegation=”1" \
— gas-prices=”0.025uakt” \
— from=”$SECONDARY_KEY_NAME”

Можете проверить статус валидатора

export SECONDARY_VALOPER_ADDRESS="$(akash keys show "$SECONDARY_KEY_NAME" — bech=val -a)"
akash --node "$SECONDARY_NODE" query staking validator "$SECONDARY_VALOPER_ADDRESS"

Если не выкинуло ошибок и вывелись поля: commission, consensus_pubkey, description и тд — значит все прошло успешно!

Если остались какие-то вопросы пишите мне в telegram: @youasme

--

--