Разработка Ordinals-инскрипций (Bitcoin NFT)
Протокол Ordinals появился в январе 2023-го и изменил представление о Bitcoin как о «скучном» активе без смарт-контрактов. Каждый сатоши имеет уникальный порядковый номер (ordinal), и к нему можно прикрепить произвольные данные — изображение, HTML, JavaScript, даже работающий 3D-движок. Это inscription. Никаких смарт-контрактов, никакого второго слоя — данные хранятся напрямую в Bitcoin witness (SegWit v1, Taproot).
Разработка Ordinals-коллекции отличается от EVM-разработки принципиально: нет Solidity, нет ABI, нет событий. Есть UTXO-модель, лимит размера witness, и специфика работы с Bitcoin transaction builder'ами.
Как работает протокол Ordinals
Нумерация сатошей
Ordinals protocol (Casey Rodarmor, BIP-300) вводит детерминированную нумерацию: первый сатоши первого блока получает номер 0, последний сатоши последнего блока в эпоху — максимальный номер. Нумерация стабильна и верифицируема независимо.
«Редкость» сатоши определяется его позицией: сатоши из первого блока каждой эпохи халвинга — «legendary», из первого блока каждого difficulty adjustment — «rare», и т.д. Торговля редкими сатошами — отдельный рынок внутри Ordinals экосистемы.
Inscription как envelope в Tapscript
Инскрипция создаётся через Tapscript в SegWit v1 транзакции. Данные упаковываются в OP_FALSE OP_IF ... OP_ENDIF envelope, который Bitcoin нодами игнорируется при выполнении, но хранится в witness. Content type указывается тегом ord + MIME type:
OP_FALSE
OP_IF
OP_PUSH "ord"
OP_1
OP_PUSH "image/png"
OP_0
OP_PUSH <image_data_chunk_1>
OP_PUSH <image_data_chunk_2>
...
OP_ENDIF
Лимит на одну инскрипцию — 520 байт на push операцию, но pushек может быть много. Практический лимит — размер witness данных в блоке (около 4MB с witness discount). Изображения 400KB+ помещаются без проблем.
Sat-to-inscription binding
Инскрипция привязана к первому сатоши первого output транзакции commit (точнее, reveal). При передаче этого UTXO — инскрипция переходит новому владельцу. Маркетплейсы (Magic Eden Bitcoin, Gamma.io, Unisat) отслеживают движение UTXO и показывают нового владельца.
Это принципиально отличается от EVM: нет ownerOf вызова, нет revert при несанкционированном трансфере. Владение определяется через UTXO-модель Bitcoin — у кого UTXO с этим сатошем, тот и владелец.
Рекурсивные инскрипции
Технически наиболее интересная часть: инскрипция может ссылаться на другую инскрипцию через специальный путь /content/{inscription_id}. Браузер (Ordinals explorer или маркетплейс) резолвит эти ссылки и рендерит композит.
Применение: 10 000-элементная коллекция, где каждый trait (фон, голова, тело) — отдельная инскрипция размером 2-5KB. Финальное изображение — HTML-инскрипция, которая ссылается на trait-инскрипции и собирает их через <img> теги или canvas. Вместо 10K × 50KB изображений — 20 trait-инскрипций × 3KB + 10K × 1KB HTML. Экономия на fees существенная.
Инвариант рекурсии: referenced инскрипции должны существовать до момента создания referencing инскрипции. Нельзя создать HTML-инскрипцию, ссылающуюся на trait-инскрипции, которые ещё не созданы.
Инструменты разработки
ord CLI
Официальный инструмент от Casey Rodarmor. Требует полную Bitcoin ноду (Bitcoin Core) или можно использовать через RPC с --bitcoin-rpc-url. Основные команды:
# Создание инскрипции из файла
ord wallet inscribe --fee-rate 15 --file image.png
# Получение информации об инскрипции
ord index info --inscription <inscription_id>
Для production batch inscribing — кастомные скрипты через bitcoinlib (Python) или bitcoin-ts (TypeScript) с прямой работой с PSBT (Partially Signed Bitcoin Transactions).
Работа с PSBT для коллекций
Batch минт 10K инскрипций через CLI — медленно и ненадёжно. Используем программный подход:
- Генерируем trait-инскрипции пачками по 100
- Для каждой пары (commit tx, reveal tx) строим PSBT
- Подписываем через HD wallet (BIP-32 derivation)
- Broadcast через Bitcoin RPC или Mempool API
Управление fee rate критично: при congestion mempool fee за byte может вырасти в 10-20x. Скрипт должен проверять текущий fee market через mempool.space/api/v1/fees/recommended и выбирать оптимальный уровень.
Verifier для коллекции
Аналог rarity checker для EVM: скрипт, который по inscription ID получает метаданные (через API Ordinals explorer или собственную ноду), парсит traits из JSON-инскрипции, строит rarity таблицу. Публикуется как open source — пользователи могут верифицировать рарити независимо.
Разница Ethereum vs Bitcoin Ordinals
| Аспект | EVM NFT | Bitcoin Ordinals |
|---|---|---|
| Хранение данных | IPFS / on-chain (дорого) | Нативно в Bitcoin witness |
| Трансфер | safeTransferFrom + revert |
UTXO перемещение, нет защиты |
| Метаданные | JSON с trait attributes | Произвольный content (image, HTML, JSON) |
| Royalties | EIP-2981 (опциональные) | Нет нативного механизма |
| Комиссии за минт | Gas (вариабельно) | Bitcoin sat/vbyte × размер witness |
| Смарт-контракты | Полный EVM | Отсутствуют |
Отсутствие royalties на уровне протокола — ключевой недостаток для монетизации команды. Маркетплейсы (Magic Eden Bitcoin) реализуют «soft royalties» через UI, но техническая принудительность отсутствует.
Процесс работы
Подготовка контента (зависит от проекта). Для рекурсивных коллекций: генерация trait-инскрипций, проверка корректности HTML-шаблонов, тест рендеринга в Ordinals explorer.
Testnet деплой (1-2 дня). Bitcoin signet или testnet для проверки всего пайплайна. Ordinals работает на testnet — можно полностью проверить минт и отображение.
Batch inscribing (зависит от размера). 10K инскрипций при fee rate 15 sat/vbyte — примерно 1-2 BTC в fees для изображений среднего размера. Для рекурсивных — значительно меньше.
Листинг на маркетплейсах. Magic Eden Bitcoin, Gamma.io — верификация коллекции через форму или API.
Ориентиры по срокам
Простая коллекция без рекурсии (static images) — 3-5 дней включая инструменты. Рекурсивная коллекция с HTML-генератором — 1-1.5 недели. Стоимость Bitcoin fees для минта обсуждается отдельно — зависит от текущего fee market.







