Разработка системы инференса AI на блокчейне

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1 услугВсе 1306 услуг
Разработка системы инференса AI на блокчейне
Сложная
от 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
    1056
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    828

Разработка системы инференса AI на блокчейне

On-chain AI inference — это не маркетинговый термин, это конкретная инженерная проблема с несколькими частичными решениями, каждое из которых имеет собственный trade-off. Клиент обычно приходит с запросом «мы хотим, чтобы результаты нашей модели были верифицируемы и нельзя было подделать». Это разумное требование. Вопрос в том, как его реализовать не сжигая $50k в gas на один inference.

Прямое исполнение нейронной сети в EVM-контракте — не вариант. GPT-2 tiny (117M параметров) при наивной реализации потребовал бы ~10^9 операций умножения с плавающей точкой. EVM не имеет float, каждая арифметическая операция стоит gas, 30M gas limit блока Ethereum — это физический потолок. Реальные подходы идут другим путём.

Три архитектурных подхода

1. ZK-proof of inference (zkML)

Модель исполняется off-chain, on-chain верифицируется zero-knowledge proof корректности исполнения. Это наиболее перспективный и наиболее технически сложный подход.

Основные фреймворки:

EZKL — самый зрелый zkML тулкит на сегодня. Принимает ONNX-модели, генерирует Halo2 circuits, верифицирует on-chain через Solidity-верификатор.

# Экспорт модели в ONNX
python -c "
import torch, ezkl
model = MyModel()
x = torch.randn(1, 784)  # пример MNIST
torch.onnx.export(model, x, 'model.onnx', opset_version=11)
"

# Компиляция в circuit
ezkl gen-settings -M model.onnx -O settings.json
ezkl calibrate-settings -M model.onnx -D input.json -O settings.json
ezkl compile-circuit -M model.onnx -S settings.json --compiled-circuit model.compiled

# Генерация SRS и ключей
ezkl get-srs --settings-path settings.json
ezkl setup -M model.compiled --vk-path vk.key --pk-path pk.key

# Proof generation (это медленно)
ezkl gen-witness -M model.compiled -D input.json -O witness.json
ezkl prove --witness witness.json --compiled-circuit model.compiled --pk-path pk.key --proof-path proof.json

# Деплой верификатора on-chain
ezkl create-evm-verifier --vk-path vk.key --sol-code-path verifier.sol

Ограничения EZKL: время генерации proof для простой CNN (ResNet-18) — 5–20 минут на CPU, 30–120 секунд на GPU. Размер SRS (structured reference string) — гигабайты для больших моделей. Это ограничивает применимость к малым моделям (< 1M параметров) или к сценариям где latency proof generation не критична.

Риго (Risc Zero) + Boundless — альтернативный подход через zkVM. Модель компилируется в RISC-V, исполняется в Risc Zero zkVM, proof верифицируется on-chain. Менее эффективен для ML-специфичных операций чем специализированные zkML circuits, но позволяет использовать произвольный Rust/C++ код.

// Гость (guest) программа в Risc Zero
use risc0_zkvm::guest::env;

fn main() {
    let input: Vec<f32> = env::read();
    let result = run_inference(&input);  // ваша модель
    env::commit(&result);
}

Модели подходящие для zkML сейчас:

  • Логистическая регрессия, SVM — без ограничений
  • Небольшие MLP (< 100k параметров) — proof за секунды
  • CNN для классификации изображений (< 1M параметров) — proof за минуты
  • LLM, diffusion models — нереально в 2024–2025 без специализированного железа

2. Оптимистичный подход (fraud proofs)

Inference происходит off-chain, результат публикуется on-chain. Любой желающий может повторить вычисление и оспорить (challenge) некорректный результат.

Этот подход используют Giza Tech и Modulus Labs. Экономика: challenge period = N блоков, challenger должен предоставить fraud proof (partial execution trace). Работает при наличии достаточного числа верификаторов — это economic game theory, а не математическая гарантия.

// Упрощённая схема оптимистичного AI оракула
contract OptimisticAIOracle {
    struct InferenceResult {
        bytes32 inputHash;
        int256[] outputs;
        address submitter;
        uint256 submittedAt;
        bool challenged;
        bool resolved;
    }
    
    uint256 public constant CHALLENGE_PERIOD = 7200; // ~24h в блоках
    uint256 public constant SUBMITTER_BOND = 1 ether;
    
    mapping(uint256 => InferenceResult) public results;
    
    function submitResult(
        uint256 requestId,
        bytes32 inputHash,
        int256[] calldata outputs
    ) external payable {
        require(msg.value >= SUBMITTER_BOND, "Insufficient bond");
        results[requestId] = InferenceResult({
            inputHash: inputHash,
            outputs: outputs,
            submitter: msg.sender,
            submittedAt: block.number,
            challenged: false,
            resolved: false
        });
    }
    
    function challenge(uint256 requestId, bytes calldata fraudProof) external {
        InferenceResult storage result = results[requestId];
        require(block.number < result.submittedAt + CHALLENGE_PERIOD, "Challenge period expired");
        
        // Верификация fraud proof — partial execution
        bool isFraud = verifyFraudProof(result.inputHash, result.outputs, fraudProof);
        if (isFraud) {
            // Слэш бонд submitter, наградить challenger
            result.challenged = true;
        }
    }
}

Проблема: verifyFraudProof — это сам по себе дорогостоящий on-chain computation. Для ML-моделей частичная верификация исполнения нетривиальна.

3. Decentralized inference networks (TEE + economic security)

Galadriel — EVM-совместимый L1, специально заточенный под AI. Смарт-контракты могут делать системные вызовы к LLM-провайдерам прямо из Solidity:

import "./interfaces/IOracle.sol";

contract AIChatbot {
    IOracle public oracle;
    
    struct Message {
        string role;
        string content;
    }
    
    mapping(uint256 => Message[]) public conversations;
    
    function startChat(string memory userMessage) external returns (uint256) {
        uint256 runId = IOracle(oracle).createLlmCall(msg.sender);
        conversations[runId].push(Message("user", userMessage));
        return runId;
    }
    
    // Callback от oracle
    function onOracleLlmResponse(
        uint256 runId,
        IOracle.LlmResponse memory response,
        string memory errorMessage
    ) public {
        require(msg.sender == address(oracle), "Only oracle");
        conversations[runId].push(Message("assistant", response.content));
    }
}

Ritual — децентрализованная сеть инференса. Nodes используют TEE (Trusted Execution Environment) для верификации инференса без раскрытия весов модели. Eigen Layer restaking для economic security.

Opaque Labs — специализируется на конфиденциальном инференсе через SGX/TDX.

Выбор подхода

Подход Верификация Latency Стоимость Размер модели
EZKL (zkML) Математическая Минуты Высокая < 1M param
Оптимистичный Экономическая Секунды Средняя Любой
Galadriel Доверие к сети < 30s Низкая LLM-класс
Ritual TEE Аппаратная Секунды Средняя Любой
Risc Zero Математическая Минуты Высокая < 10M param

Практическая архитектура production системы

Большинство реальных проектов используют гибридный подход: zkML для небольших, критически важных моделей (например, fraud detection на транзакции) и оптимистичный или TEE-based для LLM-функций.

[User/Contract] 
    ↓ inference request + deposit
[Inference Request Queue (on-chain)]
    ↓ event
[Off-chain inference node cluster]
    ↓ runs model, generates proof
[Proof submission + result]
    ↓
[On-chain verifier contract]
    ↓ verify ZK proof
[Callback to requesting contract]

On-chain интерфейс

Стандартный паттерн — Oracle-style с callback:

interface IInferenceOracle {
    struct InferenceRequest {
        bytes model_id;      // хеш или CID модели
        bytes input;         // ABI-encoded или raw bytes
        address callback;    // контракт для callback
        bytes4 callbackSig;  // сигнатура callback функции
        uint256 maxFee;      // максимальная плата за inference
    }
    
    function requestInference(InferenceRequest calldata req) 
        external payable returns (uint256 requestId);
    
    function fulfillInference(
        uint256 requestId,
        bytes calldata result,
        bytes calldata proof
    ) external;
}

Работа с фиксированной точкой

EVM не поддерживает float. Все ML-вычисления on-chain или в proof inputs требуют quantization:

# Quantization перед inference
import numpy as np

def quantize_input(x: np.ndarray, scale: int = 2**16) -> np.ndarray:
    """Конвертация float в Q16.16 fixed-point"""
    return (x * scale).astype(np.int32)

def dequantize_output(x: np.ndarray, scale: int = 2**16) -> np.ndarray:
    return x.astype(np.float32) / scale

Для EZKL квантизация происходит автоматически при calibrate-settings — важно проверить accuracy после квантизации, потери > 1% обычно недопустимы для финансовых моделей.

Хранение модели и verifiability

Ключевой вопрос: как on-chain контракт знает, что inference выполнен на правильной модели, а не подменённой? Решения:

Model commitment — хеш модельных весов хранится on-chain. Inference node доказывает (через ZK или подпись TEE), что использовала модель с этим хешем.

IPFS/Filecoin для весов — CID модели фиксируется on-chain. Любой может скачать и верифицировать.

contract ModelRegistry {
    struct Model {
        bytes32 weightsHash;    // keccak256 от весов в ONNX
        string ipfsCID;         // для загрузки
        address owner;
        bool isPublic;
    }
    
    mapping(bytes32 => Model) public models;
    
    function registerModel(
        bytes32 modelId,
        bytes32 weightsHash,
        string calldata ipfsCID
    ) external {
        models[modelId] = Model(weightsHash, ipfsCID, msg.sender, true);
    }
}

Где это применяется сейчас

DeFi risk scoring — on-chain кредитный скоринг по on-chain активности. Небольшие модели (логрег, XGBoost) хорошо ложатся в zkML.

Генеративные NFT — атрибуты NFT определяются ML-моделью, результат верифицируем. Модели в диапазоне 1–10M параметров, tolerable proof time.

Автономные агенты — AI агент управляет on-chain позициями. Здесь zkML пока нереален для LLM-агентов, используется TEE или оптимистичный подход.

On-chain fraud detection — каждый swap проходит через fraud scoring, результат влияет на fee tier или доступность. Логрег — ideal candidate для zkML.

Этапы разработки

Фаза 1 — Model selection & quantization (2–3 нед). Подбор архитектуры модели под zkML constraints, обучение, quantization, проверка accuracy. Часто это самый болезненный этап — модель приходится упрощать.

Фаза 2 — Circuit compilation (1–2 нед). Компиляция ONNX → Halo2 circuit через EZKL, калибровка настроек, измерение proof time и размера proof.

Фаза 3 — On-chain verifier (1–2 нед). Деплой Solidity-верификатора, разработка oracle интерфейса, тестирование end-to-end flow.

Фаза 4 — Infrastructure (2–3 нед). Inference nodes (GPU), proof generation pipeline, мониторинг, fallback mechanisms.

Фаза 5 — Integration (1–2 нед). Интеграция в requesting контракт, тестирование на testnet, оптимизация gas для верификации.

Итого: 7–12 недель до production. Основной неизвестный фактор — насколько конкретная модель поддаётся квантизации без потери качества.