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

В рамках второй недели The Akashian Challenge Phase 3 нужно было развернуть API, RPC и Validator Node. Сейчас я продемонстрирую как это сделать, а также сделаю разбор распространенных ошибок, которые могут встретиться в процессе развертывания.
API Node
API Node полезны для создания кошельков и идеально подходят для использования в Akash.
Тут все довольно просто, процесс почти не отличается от развертывания веб приложений в предыдущих фазах.
- Скачайте файл deploy.yaml или сами создайте его и вставьте содержимое с гитхаба в ваш файлик.
- А теперь повторяете шаги, как на предыдущей неделе, можете посмотреть мой гайд вот тут
Единственное отличие, когда вы выполните команду:
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, но еще позволяют отправлять транзакции в сеть.
- Проверьте какая версия 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-keyexport 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