Akash Network — первое в мире децентрализованное облако с открытым исходным кодом, которое ускоряет развертывание, масштабирование, эффективность и снижает цены для быстрорастущих отраслей, таких как блокчейн и машинное обучение/AI.
В данный момент, в период с 7 марта 2022 10:00 PST по 20 марта 2022 11:59 PST — проходит Akash Testnet 3, подать заявку на участие можно по кликабельной ссылке.
Все задания можно посмотреть по ссылке с официальной документацией. В данный момент рассмотрим развертывание SDL с хранилищем данных (Persistent Storage).
Установка Akash
Рассмотрим процесс установки. Для взаимодействия с Akash можно использовать CLI или десктопное приложение с графическим интерфейсом, я использую первый вариант.
Все действия выполнены под Ubuntu 20.04.
Страница на Github может дать информацию о том, какая на данный момент версия Akash — последняя, сейчас это v0.15.0-rc15, загрузим ее.
cd
AKASH_VERSION=v0.15.0-rc15
curl https://raw.githubusercontent.com/ovrclk/akash/master/godownloader.sh | sh -s -- "$AKASH_VERSION"
Для более удобного вызова приложения:
mv bin/akash /usr/local/bin
Проверим установленную версию:
akash version
Обновление конфигурации
Для более простой работы с CLI — стоит установить переменные, чтобы не вводить их каждый раз при отправке транзакций.
AKASH_NET="https://raw.githubusercontent.com/ovrclk/net/master/edgenet"
export AKASH_KEYRING_BACKEND=os
export AKASH_NODE="$(curl -s "$AKASH_NET/rpc-nodes.txt" | shuf -n 1)"
export AKASH_CHAIN_ID="$(curl -s "$AKASH_NET/chain-id.txt")"
Проверим, что все переменные установлены:
echo $AKASH_NET $AKASH_NODE $AKASH_KEYRING_BACKEND=os $AKASH_CHAIN_ID
Создание кошелька
Придумаем и добавим имя кошелька в виде переменной:
AKASH_KEY_NAME=odinsredidorog
При создании кошелька нужно будет придумать пароль и сохранить мнемоническую фразу:
akash keys add $AKASH_KEY_NAME
Добавим адрес созданного кошелька в виде переменной:
export AKASH_ACCOUNT_ADDRESS="$(akash keys show $AKASH_KEY_NAME -a)"
echo $AKASH_ACCOUNT_ADDRESS
Получение средств
Варианты для получения тестовых монет: обратиться к крану или попросить в специальном канале в Discord.
Обозреватель не всегда работает. Чтобы убедиться в наличии монет на кошельке используем запрос:
akash query bank balances $AKASH_ACCOUNT_ADDRESS --node "$AKASH_NODE"
После получения монет можно приступать к развертыванию.
Хранилище данных
Для выполнения одного из заданий текущего тестнета нужно развернуть SDL, который будет использовать хранилище данных.
Подробнее можно узнать из официальной документации или Google документа.
SDL, который используется в официальной документации:
version: "2.0"
services:
postgres:
image: postgres
params:
storage:
data:
mount: /var/lib/postgres
grafana:
image: grafana/grafana
expose:
- port: 3000
as: 80
to:
- global: true
accept:
- webdistest.localhost
params:
storage:
data:
mount: /var/lib/grafana
profiles:
compute:
grafana-profile:
resources:
cpu:
units: 1
memory:
size: 1Gi
storage:
- size: 512Mi
- name: data
size: 1Gi
attributes:
persistent: true
class: beta2
postgres-profile:
resources:
cpu:
units: 1
memory:
size: 1Gi
storage:
- size: 512Mi
- name: data
size: 10Gi
attributes:
persistent: true
class: beta2
placement:
westcoast:
attributes:
region: us-west
pricing:
grafana-profile:
denom: uakt
amount: 1000
postgres-profile:
denom: uakt
amount: 7000
deployment:
grafana:
westcoast:
profile: grafana-profile
count: 1
postgres:
westcoast:
profile: postgres-profile
count: 1
В SDL используется переменная persistent: true, которая подтверждает использование хранилища.
Переменная class отвечает за тип используемого хранилища:
beta1: hdd
beta2: ssd
beta3: NVMe
default: стандартный тип хранилища, используемый провайдером
Используется два образа: PostgreSQL — postgres и Grafana — grafana. PostgreSQL использует местом хранилища директорию из переменной mount: /var/lib/postgres, а Grafana использует местом хранилища директорию /var/lib/grafana.
Развертывание приложений
По сравнению с моим прошлым руководством — перед развертыванием нужно будет сгенерировать сертификат для клиента и отправить его в блокчейн:
akash tx cert generate client --from $AKASH_KEY_NAME --gas-prices="0.025uakt" --gas="auto" --gas-adjustment=1.5 --overwrite
akash tx cert publish client --from $AKASH_KEY_NAME --gas-prices="0.025uakt" --gas="auto" --gas-adjustment=1.15 -y
Создадим SDL, которое использует хранилище данных:
curl -s https://gist.githubusercontent.com/waitrouz/dc1c3f7dec3fa2f662061d480614e982/raw/4b9fd09baab49df727a7b09490dac98333639ccb/deploy.yaml > deploy.yaml
Создадим развертывание:
akash tx deployment create deploy.yaml --from $AKASH_KEY_NAME --node $AKASH_NODE --chain-id $AKASH_CHAIN_ID --gas-prices="0.025uakt" --gas="auto" --gas-adjustment=1.5 -y
В ответ получим DSEQ, который нужно будет установить в виде переменной, OSEQ и GSEQ всегда равны 1:
AKASH_DSEQ=0
AKASH_OSEQ=1
AKASH_GSEQ=1
echo $AKASH_DSEQ $AKASH_OSEQ $AKASH_GSEQ
Посмотрим возможные ставки, по которым можно разместить наше развертывание:
akash query market bid list --owner=$AKASH_ACCOUNT_ADDRESS --node $AKASH_NODE --dseq $AKASH_DSEQ
Выберем желаемого провайдера и установим в виде переменной:
AKASH_PROVIDER=akash10cl5rm0cqnpj45knzakpa4cnvn5amzwp4lhcal
echo $AKASH_PROVIDER
Создадим аренду:
akash tx market lease create --chain-id $AKASH_CHAIN_ID --node $AKASH_NODE --owner $AKASH_ACCOUNT_ADDRESS --dseq $AKASH_DSEQ --gseq $AKASH_GSEQ --oseq $AKASH_OSEQ --provider $AKASH_PROVIDER --from $AKASH_KEY_NAME --gas-prices="0.025uakt" --gas="auto" --gas-adjustment=1.15
Проверим статус аренды:
akash query market lease list --owner $AKASH_ACCOUNT_ADDRESS --node $AKASH_NODE --dseq $AKASH_DSEQ
Нужно получить в ответ переменную state: active, но если ее нет, то отменим развертывание и создадим новое:
akash tx deployment close --node $AKASH_NODE --chain-id $AKASH_CHAIN_ID --dseq $AKASH_DSEQ --owner $AKASH_ACCOUNT_ADDRESS --from $AKASH_KEY_NAME --keyring-backend $AKASH_KEYRING_BACKEND -y --gas-prices="0.025uakt" --gas="auto" --gas-adjustment=1.15
В случае, если все нормально, то продолжим и отправим манифест:
akash provider send-manifest deploy.yaml --node $AKASH_NODE --dseq $AKASH_DSEQ --provider $AKASH_PROVIDER --home ~/.akash --from $AKASH_KEY_NAME
После отправки манифеста — развертывание завершено. Получим ссылку на наше развернутое приложение в переменной uris:
akash provider lease-status --node $AKASH_NODE --home ~/.akash --dseq $AKASH_DSEQ --from $AKASH_KEY_NAME --provider $AKASH_PROVIDER
Использование средств другого кошелька
Даем другому кошельку разрешение использовать ваши AKT для развертывания:
akash tx deployment authz grant $DEPLOY_WALLET 6000000uakt --from $FUNDING_WALLET --gas-prices="0.025uakt" --gas="auto" --gas-adjustment=1.5 -y
Выполним развертывание, используя средства другого кошелька:
akash tx deployment create --depositor-account $FUNDING_WALLET --from $DEPLOY_WALLET deploy.yaml --gas-prices="0.025uakt" --gas="auto" --gas-adjustment=1.5 -y
Отозвать права на использование AKT другим кошельком:
akash tx deployment authz revoke $DEPLOY_WALLET --from $FUNDING_WALLET --fees 5000uakt -y
Проверка разрешений:
akash query authz grants $FUNDING_WALLET $DEPLOY_WALLET
Подробнее в официальной документации.