Интеграция с Akash Network (децентрализованные вычисления)

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1 услугВсе 1306 услуг
Интеграция с Akash Network (децентрализованные вычисления)
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы
Направления блокчейн-разработки
Этапы блокчейн-разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1221
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1163
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    855
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1058
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    828

Интеграция с Akash Network (децентрализованные вычисления)

Akash Network — это Cosmos-based marketplace для облачных вычислений. Провайдеры предлагают GPU/CPU мощности, клиенты размещают workload через SDL-манифесты, оплата в AKT. Ключевая особенность относительно конкурентов: поддержка произвольных Docker-контейнеров без кастомного runtime, что резко снижает порог переноса существующих приложений.

Типичные кейсы интеграции: размещение AI-инференс сервисов (LLM, Stable Diffusion) с оплатой в крипте; децентрализованный бэкенд для DApp; бэкапные вычислительные мощности при пиковой нагрузке; размещение blockchain нод и индексеров.

SDL-манифест: детали, которые важны

Stack Definition Language (SDL) — YAML-формат описания деплоя на Akash. На первый взгляд похож на docker-compose, но есть критичные отличия, которые ломают деплой, если не знать о них заранее.

---
version: "2.0"

services:
  inference-api:
    image: your-org/llm-inference:sha256-abc123  # пинить по digest, не по тегу
    expose:
      - port: 8080
        as: 80
        to:
          - global: true
    env:
      - MODEL_PATH=/models/llama-7b
      - MAX_CONCURRENT=4
    resources:
      cpu:
        units: 4.0
      memory:
        size: 16Gi
      storage:
        - size: 50Gi
          attributes:
            persistent: true    # критично для stateful данных
            class: beta3        # NVMe storage на Akash

profiles:
  compute:
    inference-api:
      resources:
        cpu:
          units: 4
        memory:
          size: 16Gi
        gpu:
          units: 1
          attributes:
            vendor:
              nvidia:
                - model: rtx3090  # указать конкретную модель
  placement:
    dcloud:
      pricing:
        inference-api:
          denom: uakt
          amount: 1000  # максимальная цена в микро-AKT за блок

deployment:
  inference-api:
    dcloud:
      profile: inference-api
      count: 1

Подводные камни SDL:

Атрибут persistent: true для storage обязателен для любых данных, которые должны пережить рестарт контейнера. Без него — эфемерное хранилище, всё теряется при перезапуске. Класс beta3 (NVMe) значительно быстрее beta2 (HDD), разница в IOPS критична для баз данных и моделей ML.

Пиннинг по digest вместо тега — обязательная практика. Провайдеры кэшируют образы, и latest может означать разные версии у разных провайдеров. При использовании тега latest нет гарантий воспроизводимости.

GPU-ресурсы доступны только у части провайдеров. При указании конкретной модели (nvidia rtx3090, a100) пул доступных провайдеров сужается. Если GPU не указан явно — Akash подберёт любой доступный GPU провайдер.

Программная интеграция через Akash SDK

Для автоматизации деплоя из вашего приложения — Akash JavaScript SDK или прямые вызовы через REST API Cosmos-based клиента.

import { Registry, DirectSecp256k1HdWallet } from "@cosmjs/proto-signing";
import { SigningStargateClient } from "@cosmjs/stargate";
import { MsgCreateDeployment } from "@akashnetwork/akash-api/akash/deployment/v1beta3";

const AKASH_RPC = "https://rpc.akashnet.net:443";
const AKASH_DENOM = "uakt";

async function createDeployment(sdlContent: string, walletMnemonic: string) {
    const wallet = await DirectSecp256k1HdWallet.fromMnemonic(walletMnemonic, {
        prefix: "akash",
    });

    const [account] = await wallet.getAccounts();
    const client = await SigningStargateClient.connectWithSigner(AKASH_RPC, wallet, {
        registry: new Registry(/* akash proto types */),
    });

    // Генерация deployment ID
    const dseq = Math.floor(Date.now() / 1000); // block height или timestamp

    const msg = {
        typeUrl: "/akash.deployment.v1beta3.MsgCreateDeployment",
        value: MsgCreateDeployment.fromPartial({
            id: {
                owner: account.address,
                dseq: BigInt(dseq),
            },
            groups: parseSDLGroups(sdlContent),  // парсинг SDL в proto структуры
            deposit: { denom: AKASH_DENOM, amount: "5000000" },  // депозит 5 AKT
        }),
    };

    const result = await client.signAndBroadcast(
        account.address,
        [msg],
        { amount: [{ denom: AKASH_DENOM, amount: "20000" }], gas: "800000" }
    );

    return { dseq, txHash: result.transactionHash };
}

После создания деплоя — процесс аукциона. Провайдеры делают биды, клиент выбирает оптимальный и создаёт lease. Это асинхронный процесс: нужно подписаться на события блокчейна через WebSocket или polling.

async function watchBidsAndCreateLease(dseq: number, ownerAddress: string) {
    // Ждём биды (обычно 15–60 секунд)
    const bids = await pollBids(dseq, ownerAddress, { timeoutMs: 120000 });

    if (bids.length === 0) throw new Error("No bids received");

    // Выбираем провайдера по цене (или по атрибутам)
    const bestBid = bids.sort((a, b) =>
        Number(a.bid.price.amount) - Number(b.bid.price.amount)
    )[0];

    // Создаём lease с выбранным провайдером
    await createLease(bestBid.bid.bidId, wallet);

    // Передаём манифест провайдеру напрямую через его REST API
    await sendManifestToProvider(bestBid.bid.bidId.provider, dseq, sdlContent);
}

Управление жизненным циклом деплоя

После создания lease деплой управляется через Provider Service API — это HTTP-эндпоинты провайдера, не транзакции блокчейна. Endpoint провайдера узнаётся из on-chain данных провайдера.

// Получение статуса деплоя
async function getDeploymentStatus(providerAddress: string, dseq: number, owner: string) {
    const providerInfo = await queryProviderInfo(providerAddress);
    const providerHost = providerInfo.hostUri;  // https://provider.example.com:8443

    const response = await fetch(
        `${providerHost}/lease/${owner}/${dseq}/1/1/status`,
        {
            headers: { Authorization: `Bearer ${await getProviderToken()}` }
        }
    );

    return response.json();
    // Содержит: состояние pods, IP/ports, логи
}

Мониторинг деплоя через Akash Provider API даёт статус контейнеров, форвардинг портов, возможность получить логи. Для production-систем — интеграция с внешним мониторингом (Prometheus/Grafana) через expose endpoints из контейнера.

Особенности для разных типов нагрузки

AI inference сервисы — самый популярный кейс на Akash. Важно: модели весом 7–70B параметров не влезают в memory при запуске, нужен persistent storage и правильное управление загрузкой модели. Рекомендуем: separate init container для скачивания модели, health check с таймаутом 5–10 минут.

Blockchain ноды — Ethereum full node, Cosmos validator. Критично: persistent storage достаточного размера (Ethereum — 1+ TB), поддержка UDP для P2P (Akash поддерживает proto: UDP в expose). Синхронизация с genesis занимает дни — используйте snapshot bootstrap.

Stateless бэкенды — наиболее простой случай. Horizontal scaling через count: N в SDL. Но нет нативного load balancer — нужен внешний (Cloudflare, nginx sidecar в том же деплое).

Базы данных — возможно, но с оговорками. Нет гарантии SLA от провайдеров на Akash — провайдер может уйти офлайн. PostgreSQL с репликацией или использование managed DB вне Akash для критичных данных.

Ценообразование и мониторинг расходов

Стоимость на Akash формируется в uAKT (1 AKT = 1,000,000 uAKT) за блок (~6 секунд). Для оценки до деплоя:

async function estimateCost(sdlContent: string): Promise<string> {
    // Используем Akash Console API или парсим активные биды
    const response = await fetch("https://api.cloudmos.io/v1/pricing", {
        method: "POST",
        body: JSON.stringify({ sdl: sdlContent }),
    });
    const { pricePerBlock, currency } = await response.json();
    const dailyCostUAKT = pricePerBlock * (86400 / 6);  // блоков в сутки
    return `${dailyCostUAKT / 1e6} AKT/day`;
}

Для production — автоматическое пополнение депозита через on-chain триггер или мониторинг balance. Деплой закрывается автоматически когда депозит исчерпан, без предупреждения пользователю.

Интеграция со смарт-контрактами

Для DApp, где оплата вычислений происходит on-chain с условной логикой — EVM контракт может взаимодействовать с Akash через Cosmos IBC или через bridge. Более реалистичный подход: off-chain сервис слушает события EVM контракта и управляет деплоями на Akash.

// Контракт принимает оплату и эмитит событие для off-chain worker
contract ComputeRequest {
    event ComputeTaskCreated(
        uint256 indexed taskId,
        address indexed requester,
        bytes sdlHash,          // IPFS CID SDL-манифеста
        uint256 maxBudgetUSDC
    );

    function requestCompute(bytes calldata sdlCid) external payable {
        uint256 taskId = ++taskCounter;
        // lock payment in escrow
        emit ComputeTaskCreated(taskId, msg.sender, sdlCid, msg.value);
    }
}

Off-chain worker (Node.js/Go) подписывается на события, создаёт деплой на Akash, по завершении вычисления вызывает completeTask() с результатом и разблокирует оплату.

Сроки интеграции

Базовая интеграция (ручной SDL, деплой через CLI) — 1–3 дня. Программная интеграция с автоматическим деплоем и мониторингом — 1–2 недели. Полная интеграция с EVM контрактом, эскроу и автоматическим lifecycle management — 3–5 недель.