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

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Інтеграція з Akash Network (децентралізовані обчислення)
Середній
~2-3 дні
Часті запитання

Напрямки блокчейн-розробки

Етапи блокчейн-розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1285
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1198
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    902
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1122
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    589
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    859

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

Akash Network — це Cosmos-based ринок для хмарних обчислень. Провайдери пропонують 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 сховище на 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 для сховища обов'язковий для будь-яких даних, які повинні пережити перезапуск контейнера. Без нього — еквівалентне сховище, усе втрачається при перезапуску. Клас 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 };
}

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

async function watchBidsAndCreateLease(dseq: number, ownerAddress: string) {
    // Чекаємо бiди (зазвичай 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-eндпоінти провайдера, не blockchain транзакції. Eндпоінт провайдера дізнаємось з 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 інференс сервіси — найпопулярніший випадок використання на Akash. Важливо: моделі вагою 7–70B параметрів не вміщаються в пам'ять при запуску, потребують persistent сховища та правильного управління завантаженням моделі. Рекомендуємо: окремий init контейнер для завантаження моделі, health check з таймаутом 5–10 хвилин.

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

Stateless бекенди — найпростіший випадок. Горизонтальне масштабування через 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 або парсимо активні бiди
    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 trigger або моніторинг 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 контрактом, escrow та автоматичним lifecycle management — 3–5 тижнів.