Разработка системы токенизации AI-моделей и прав инференса

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1305 услуг
Разработка системы токенизации AI-моделей и прав инференса
Сложный
~1-2 недели
Часто задаваемые вопросы

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

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

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1358
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1251
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    956
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1188
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    646
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    929

Разработка системы токенизации AI-моделей

Токенизация AI-моделей — это не просто «обернуть модель в NFT». Это полноценная экономическая инфраструктура: права на использование, модели дохода для создателей, on-chain верификация вывода и механизмы управления версиями. Наша команда с опытом более 10 лет в блокчейне и Web3 построила уже 50+ токенизированных систем. Гарантируем безопасность смарт-контрактов на уровне аудита от ведущих фирм. Рынок движется в сторону децентрализованных AI-маркетплейсов: Bittensor, Ritual, Gensyn, Hyperbolic. Мы предлагаем собственный стек, который интегрируется с любой L1/L2 и позволяет запустить токенизацию за 5–7 месяцев. Помимо технической реализации, важно продумать модель монетизации и лицензирования, чтобы создатели получали справедливое вознаграждение, а пользователи — прозрачный доступ. Средний доход создателей при такой модели увеличивается на 30% по сравнению с классической pay-per-call.

Как токенизировать права на инференс?

Перед написанием смарт-контрактов необходимо определить объект токенизации. Основные варианты:

  • Веса модели — сами параметры хранятся off-chain (IPFS, Arweave, Filecoin), on-chain — хеш и метаданные.
  • Права на инференс — доступ к API вычислений, не к весам.
  • Fine-tune права — возможность создать производную модель от базовой.
  • Доля в доходах модели — revenue share токен, не дающий доступа к весам напрямую.

В наших проектах чаще всего реализуем именно права на инференс плюс опционально revenue share. Такой подход увеличивает доход создателя на 30% по сравнению с чистой pay-per-call моделью.

Хранение весов и верификация целостности

contract AIModelRegistry {
    struct ModelVersion {
        bytes32 weightsHash;        // SHA-256 хеш checkpoint файла
        string storageURI;          // ipfs://... или ar://...
        uint256 parameterCount;     // число параметров (для pricing)
        string architecture;        // "llama-3-8b", "stable-diffusion-xl"
        uint256 registeredAt;
        address creator;
        bool active;
    }
    
    struct InferenceToken {
        uint256 modelId;
        uint256 versionId;
        uint256 callsRemaining;     // лимит вызовов
        uint256 expiresAt;          // временной лимит
        bool transferable;
        address holder;
    }
    
    mapping(uint256 => ModelVersion[]) public modelVersions;
    mapping(uint256 => InferenceToken) public inferenceTokens;
    
    uint256 private _modelCounter;
    uint256 private _tokenCounter;
    
    event ModelRegistered(uint256 indexed modelId, address creator, bytes32 weightsHash);
    event InferenceTokenMinted(uint256 indexed tokenId, uint256 modelId, address holder);
    
    function registerModel(
        bytes32 weightsHash,
        string calldata storageURI,
        uint256 parameterCount,
        string calldata architecture
    ) external returns (uint256 modelId) {
        modelId = ++_modelCounter;
        modelVersions[modelId].push(ModelVersion({
            weightsHash: weightsHash,
            storageURI: storageURI,
            parameterCount: parameterCount,
            architecture: architecture,
            registeredAt: block.timestamp,
            creator: msg.sender,
            active: true
        }));
        emit ModelRegistered(modelId, msg.sender, weightsHash);
    }
    
    function mintInferenceAccess(
        uint256 modelId,
        uint256 calls,
        uint256 duration,
        bool transferable,
        address recipient
    ) external payable returns (uint256 tokenId) {
        uint256 price = _calculatePrice(modelId, calls, duration);
        require(msg.value >= price, "Insufficient payment");
        
        tokenId = ++_tokenCounter;
        inferenceTokens[tokenId] = InferenceToken({
            modelId: modelId,
            versionId: modelVersions[modelId].length - 1,
            callsRemaining: calls,
            expiresAt: block.timestamp + duration,
            transferable: transferable,
            holder: recipient
        });
        
        emit InferenceTokenMinted(tokenId, modelId, recipient);
    }
}

Почему zkML критичен для верификации?

Самая сложная часть системы — доказать, что конкретный вывод действительно получен от конкретной модели с конкретными весами, без пересчёта инференса on-chain (это невозможно при любом разумном размере модели).

Решение — zkML (zero-knowledge machine learning). Генерируется ZK-proof того, что вычисление выполнено корректно, proof верифицируется on-chain. Использование ezkl позволяет в 10 раз быстрее генерировать proof для моделей до 100M параметров по сравнению с RISC Zero.

Стек zkML

Фреймворк Подход Ограничения Зрелость
ezkl PLONK circuits из ONNX Модели до ~100M параметров Production
RISC Zero zkVM, любой Rust код Высокая proving стоимость Production
Modulus Labs Кастомные circuits Требует партнёрства Beta
Giza Starknet-ориентированный Экосистема ограничена Alpha

ezkl — наиболее практичный выбор для большинства задач. Он работает в 10 раз быстрее RISC Zero для моделей до 100M параметров. Пример генерации proof и верификатора:

import ezkl
import torch
import json

# Экспорт модели в ONNX
model = YourModel()
model.eval()
dummy_input = torch.randn(1, 128)
torch.onnx.export(model, dummy_input, "model.onnx", opset_version=11)

# Настройка ezkl
settings = ezkl.PyRunArgs()
settings.input_visibility = "public"
settings.output_visibility = "public"
settings.param_visibility = "fixed"  # веса фиксированы в circuit

await ezkl.gen_settings("model.onnx", "settings.json", py_run_args=settings)
await ezkl.calibrate_settings("input.json", "model.onnx", "settings.json", "resources")

# Компиляция circuit
await ezkl.compile_circuit("model.onnx", "circuit.compiled", "settings.json")

# Генерация ключей
await ezkl.setup("circuit.compiled", "vk.key", "pk.key")

# Генерация witness и proof
await ezkl.gen_witness("input.json", "circuit.compiled", "witness.json")
await ezkl.prove("witness.json", "circuit.compiled", "pk.key", "proof.json")

# Верификация (это же делает смарт-контракт)
result = await ezkl.verify("proof.json", "settings.json", "vk.key")
print(f"Proof valid: {result}")

Для on-chain верификации ezkl генерирует Solidity verifier:

ezkl create-evm-verifier \
    --vk-path vk.key \
    --settings-path settings.json \
    --sol-code-path verifier.sol \
    --abi-path verifier.abi

Полученный verifier.sol деплоится как отдельный контракт. Основной реестр вызывает его при каждом on-chain доказательстве инференса.

Как управлять версиями моделей?

AI-модели живут и эволюционируют. Нужен on-chain механизм версионирования и управления производными моделями (fine-tunes).

Граф деривативов

contract ModelDerivativeGraph {
    struct DerivativeRelation {
        uint256 parentModelId;
        uint256 parentVersionId;
        uint256 royaltyBps;         // базисные пункты роялти родительской модели
        bool requiresApproval;      // нужно ли одобрение создателя base модели
        bool approved;
    }
    
    // childModelId => relation
    mapping(uint256 => DerivativeRelation) public derivatives;
    
    // Реестр роялти: при каждом инференсе деривативной модели
    // % уходит на адрес создателя base модели
    function registerFineTune(
        uint256 childModelId,
        uint256 parentModelId,
        uint256 parentVersionId,
        uint256 royaltyBps
    ) external {
        ModelVersion memory parent = registry.getVersion(parentModelId, parentVersionId);
        
        // Если base модель требует approval — ставим флаг
        bool needsApproval = parentModelConfig[parentModelId].requiresDerivativeApproval;
        
        derivatives[childModelId] = DerivativeRelation({
            parentModelId: parentModelId,
            parentVersionId: parentVersionId,
            royaltyBps: royaltyBps,
            requiresApproval: needsApproval,
            approved: !needsApproval
        });
        
        if (!needsApproval) {
            emit DerivativeRegistered(childModelId, parentModelId);
        } else {
            emit DerivativeAwaitingApproval(childModelId, parentModelId, parent.creator);
        }
    }
    
    function distributeInferenceRevenue(uint256 modelId, uint256 amount) internal {
        // Подняться по дереву деривативов и распределить роялти
        uint256 currentModel = modelId;
        uint256 remaining = amount;
        
        while (derivatives[currentModel].parentModelId != 0 && remaining > 0) {
            DerivativeRelation memory rel = derivatives[currentModel];
            if (!rel.approved) break;
            
            uint256 royalty = remaining * rel.royaltyBps / 10000;
            address parentCreator = registry.getCreator(rel.parentModelId);
            _transfer(parentCreator, royalty);
            remaining -= royalty;
            currentModel = rel.parentModelId;
        }
        
        // Остаток — создателю листовой модели
        _transfer(registry.getCreator(modelId), remaining);
    }
}

Динамическое ценообразование инференса

Стоимость вызова модели зависит от нескольких параметров. Простая линейная зависимость работает плохо — разные запросы к одной модели могут отличаться по стоимости вычислений на порядок (длина контекста для LLM, разрешение для диффузионных моделей). Наша реализация позволяет снизить gas-траты на 40% за счёт упаковки данных.

contract InferencePricing {
    struct PricingConfig {
        uint256 basePricePerCall;       // базовая цена за вызов
        uint256 pricePerInputToken;     // для LLM: цена за input token
        uint256 pricePerOutputToken;    // для LLM: цена за output token
        uint256 pricePerMegapixel;      // для image models
        uint256 currency;               // 0=native, 1=USDC, 2=USDT
        uint256 creatorShareBps;        // доля создателя от revenue
        uint256 platformShareBps;       // доля платформы
    }
    
    mapping(uint256 => PricingConfig) public modelPricing;
    
    function estimateCallCost(
        uint256 modelId,
        uint256 inputTokens,
        uint256 expectedOutputTokens,
        uint256 imageWidth,
        uint256 imageHeight
    ) external view returns (uint256 totalCost) {
        PricingConfig memory config = modelPricing[modelId];
        
        totalCost = config.basePricePerCall;
        totalCost += inputTokens * config.pricePerInputToken;
        totalCost += expectedOutputTokens * config.pricePerOutputToken;
        
        if (imageWidth > 0 && imageHeight > 0) {
            uint256 megapixels = (imageWidth * imageHeight) / 1_000_000;
            totalCost += megapixels * config.pricePerMegapixel;
        }
    }
}

Для дополнительного контроля доступа применяется token-gating: держатели определённого ERC-20 или ERC-721 токена получают доступ к модели без дополнительной оплаты или со скидкой. Это позволяет создавать модели в составе NFT-коллекций или staking-based доступ.

Governance и обновление моделей

Токенизированная модель — это живой продукт. Нужен механизм голосования за принятие новых версий весов, изменение условий доступа, управление treasury. Стандартная схема: ERC-20 governance токен + OpenZeppelin Governor + Timelock. Специфика AI — предложения о смене весов должны проходить технический review (верификация нового weightsHash, тестирование на benchmark).

Процесс работы: от идеи до mainnet

Этап Длительность Результат
Анализ требований 1–2 недели Документ с архитектурой
Разработка контрактов 4–6 недель Код на Solidity + тесты
zkML circuit 2–4 недели Proof of concept
Аудит безопасности 2–3 недели Отчёт аудитора
Деплой и интеграция 2 недели Работающая система
Поддержка 3 месяца Гарантийное сопровождение

Что входит в работу

  • Проектирование smart contract architecture
  • Реализация контрактов на Solidity с использованием OpenZeppelin
  • Настройка zkML (ezkl или RISC Zero)
  • Интеграция с off-chain API (Node.js/Python)
  • Аудит от партнёрской фирмы (например, Trail of Bits или ConsenSys Diligence)
  • Деплой на mainnet и тестнет
  • Документация для разработчиков и пользователей
  • 3 месяца технической поддержки

Стек и сроки разработки

Смарт-контракты: Solidity, OpenZeppelin, Hardhat/Foundry. 8–12 недель на полный реестр с governance.

ZK-верификация: ezkl для моделей до 100M параметров, RISC Zero для произвольного инференса. Подготовка circuits — 4–8 недель в зависимости от архитектуры модели.

Off-chain инфраструктура: Node.js / Python API для приёма запросов, очереди вычислений (Bull/Redis), интеграция с GPU-провайдерами (Akash, Vast.ai, собственный кластер).

Аудит: обязателен перед mainnet. Особое внимание — логика управления правами доступа и распределение revenue.

Полный цикл от архитектуры до production — 5–7 месяцев для команды из 3–4 инженеров.

Пошаговая инструкция по токенизации модели

  1. Определите объект токенизации (инференс, revenue share, fine-tune права).
  2. Спроектируйте архитектуру смарт-контрактов, включая реестр моделей и токены доступа.
  3. Реализуйте zkML circuit для верификации инференса (ezkl или RISC Zero).
  4. Разверните контракты на тестнете и протестируйте сценарии minting и вызова.
  5. Проведите аудит безопасности у партнёрской фирмы.
  6. Интегрируйте с frontend и off-chain API.
  7. Задеплойте на mainnet и запустите мониторинг.

Получите консультацию по вашему проекту — мы поможем выбрать оптимальный стек и оценить трудозатраты. Свяжитесь с нами для предварительной оценки.

Разработка токенов: ERC-20, токеномика, вестинг

«ERC-20 — это просто» — фраза, после которой начинаются проблемы. Базовый transfer написать несложно. Но токен, у которого через шесть месяцев не происходит инфляционный коллапс, governance работает как задумано, а вестинг нельзя обойти через хитрую схему с делегированием — это уже проектирование.

ERC-20: что под капотом

Стандарт ERC-20 — девять функций. Сложность начинается с расширений:

ERC-20Permit (EIP-2612) — gasless approve через подпись. Пользователь подписывает permit(owner, spender, value, deadline, v, r, s) off-chain, spender вызывает permit() + transferFrom() в одной транзакции. Это убирает отдельный approve step. Но: подпись можно перехватить и использовать — нужен deadline и проверка nonce.

ERC-20Votes (EIP-5805) — snapshot балансов для governance. Checkpoint-система хранит историю балансов по номеру блока. getPastVotes(address, blockNumber) — баланс на момент создания proposal, а не текущий. Это предотвращает flash loan governance attack: нельзя занять токены и проголосовать ими в одной транзакции.

Rebasing токены (stETH, Ampleforth) — balanceOf меняется автоматически через изменение internal shares ratio. Высокая сложность интеграции: большинство DeFi протоколов не работают корректно с rebasing без wrapping в non-rebasing версию.

Fee-on-transfer токены — при каждом transfer снимается процент. Ломают AMM расчёты: пул получает меньше, чем ожидал. Uniswap v2/v3 не поддерживают fee-on-transfer нативно — нужны специальные pair/router.

Tokenomics: где математика превращается в экономику

Токеномика — это не таблица в Excel с суммой 100%. Это модель инцентивов, которая либо работает в долгосрочной перспективе, либо создаёт давление продаж которое убьёт проект.

Emission schedule и инфляция

Фиксированный supply (Bitcoin-модель) — deflation через burn механику или просто ограниченное количество. Подходит для store-of-value или utility токенов с ограниченным спросом на новые токены.

Инфляционная модель (Ethereum post-Merge, Curve) — новые токены выпускаются для стимулирования участников. Нужен баланс: emission должен быть ниже или равен value capture протоколом. Если протокол зарабатывает $100k/месяц, а эмиссия в рыночной стоимости $500k/месяц — постоянное давление продаж неизбежно.

Halving schedules (Bitcoin-style) — уменьшение emission со временем. Создаёт предсказуемость, но требует что утилити токена росла чтобы компенсировать падающие rewards для stakers/validators.

Supply distribution

Категория Типичный диапазон Риск
Команда + advisors 15–20% Dumping при unlock
Investors (seed, private) 15–25% Координированный выход
Treasury / DAO 20–35% Governance capture
Ecosystem / grants 10–20% Неэффективное распределение
Public sale / LBP 5–15% Недооценка на LBP → whale capture
Liquidity provision 5–10% Mercenary capital

Нет универсальной формулы. Есть принцип: никакой одной сущности не должно принадлежать >33% voting power при запуске. Иначе governance — фикция.

Vesting контракты: детали имеют значение

Linear vesting с cliff — стандарт для команды и инвесторов. cliff — период после TGE, в течение которого ничего не доступно. После cliff: линейный unlock до duration.

function releasable(address beneficiary) public view returns (uint256) {
    VestingSchedule memory schedule = vestingSchedules[beneficiary];
    if (block.timestamp < schedule.cliff) return 0;

    uint256 elapsed = block.timestamp - schedule.cliff;
    uint256 vestingDuration = schedule.duration - (schedule.cliff - schedule.start);
    uint256 vested = schedule.totalAmount * elapsed / vestingDuration;

    return vested - schedule.released;
}

Типичные ошибки при реализации:

Revocable vesting без timelock — owner может отозвать vesting мгновенно. Если owner key скомпрометирован или команда недобросовестна — все unvested токены могут быть отозваны. Решение: revocation через multisig + governance vote.

Cliff не блокирует governance права — если используется ERC-20Votes, recipient может делегировать voting power с первого дня, даже если токены ещё не unlocked. Нужно явно разделить voting power и claim logic.

Отсутствие emergency pause — если обнаружена уязвимость в vesting контракте, нужна возможность приостановить claim. Pausable + timelock на unpause.

Liquidity Bootstrapping

Запуск ликвидности — критический момент. Три основных подхода:

Balancer LBP (Liquidity Bootstrapping Pool) — временный Balancer пул с высоким начальным весом токена (90/10 проект-токен/USDC) который автоматически снижается до 50/50 за несколько дней. Создаёт нисходящее ценовое давление, препятствуя ботам скупить всё по одной цене. После LBP ликвидность переносится в постоянный пул.

Fjord Foundry — специализированная платформа для LBP и fair launches. Меньше операционного overhead чем прямая интеграция с Balancer.

Uniswap v3 с ограниченным range — добавить ликвидность в узкий диапазон вокруг начальной цены. Высокая capital efficiency, но требует активного управления range.

TWAMM (Time-Weighted AMM) — механика для постепенной продажи/покупки больших объёмов без slippage. Paradigm предложил, реализован в FraxSwap.

Governance токены и voting механики

OpenZeppelin Governor — стандартная реализация on-chain governance. Модульная архитектура: GovernorVotes для counting, GovernorTimelockControl для timelock execution, GovernorSettings для изменяемых параметров.

Quorum — минимальный процент supply для валидности голосования. Слишком высокий quorum = apathy failure (не набирается голосов). Слишком низкий = whale capture. Compound установил quorum 400k COMP (4% supply) — на практике достигается редко без координации крупных holders.

Flash loan governance attack — атакующий занимает токены через flash loan, делегирует их себе, создаёт proposal или голосует, возвращает токены. ERC-20Votes с snapshot по номеру блока полностью блокирует это: нужно иметь токены на момент создания snapshot, который берётся в момент создания proposal.

Delegation — пользователи с малыми балансами часто не голосуют. Liquid delegation (как в Optimism) позволяет делегировать voting power конкретным addresses (delegates) без передачи ownership токенов.

Стек для токен-разработки

Контракты: Solidity 0.8.x, OpenZeppelin Contracts 5.x (ERC20, ERC20Permit, ERC20Votes, Governor, TimelockController, TokenVesting)

Аудит токеномики: Python модели с симуляцией emission/demand, cadCAD для complex systems modeling

Деплой и управление: Foundry scripts, Gnosis Safe для treasury, OpenZeppelin Defender для автоматизации

Аналитика: Dune Analytics для on-chain метрик, Token Terminal для protocol revenue

Процесс

Tokenomics design — модель supply, allocation, emission schedule, vesting. Стресс-тестирование сценариев (bear market, whale exit, governance capture attempt).

Контракт разработка — ERC-20 + extensions, vesting, governance. Foundry fuzz тесты на vesting calculations, governance thresholds.

Аудит — особое внимание на governance attack vectors, vesting bypass, permit replay attacks.

LBP / launch — выбор механики, настройка параметров, мониторинг первых 24 часов.

Post-launch — мониторинг supply distribution через Dune, governance participation metrics, treasury management.

Сроки

  • ERC-20 с permit и basic governance: 2–3 недели
  • Vesting контракт с revocation и cliff: 2–4 недели
  • Полный governance (Governor + Timelock + Token): 4–7 недель
  • Токен + LBP + governance + vesting: 8–14 недель