Разработка сервиса Bitcoin-инскрипций начинается не с интерфейса, а с UTXO и commit-reveal. Сервис инскрипций требует понимания лимитов witness данных. Инскрипции — не смарт-контракты, а данные, встроенные в SegWit-транзакции и привязанные к конкретным сатоши через протокол нумерации Ordinals. Сделать сервис, который надёжно создаёт, отслеживает и передаёт такие записи — задача, не решаемая стандартными Bitcoin библиотеками «из коробки». Опыт команды — 7+ лет в Bitcoin-инфраструктуре, 20+ проектов по инскрипциям. Мы берёмся за такие проекты под ключ: от проектирования архитектуры до деплоя и мониторинга. После запуска обеспечиваем поддержку: мониторинг ноды, обновление индексатора, оптимизацию fee estimation. Гарантия на код — 3 месяца. Экономия от использования собственного индексатора может достигать 5,000 USD в месяц на API-запросах, а кэширование на Redis даёт дополнительно до 3,000 USD экономии в месяц. Типичные затраты на комиссии при минте коллекции из 1000 инскрипций — 0.5–1 BTC. Получите консультацию по архитектуре вашего сервиса.
Создание сервиса Bitcoin-инскрипций: от UTXO до продакшена
Инскрипция создаётся через commit-reveal паттерн из двух транзакций. В commit-транзакции формируется P2TR (Pay-to-Taproot, BIP-341) output с данными внутри witness-скрипта. Структура скрипта — это OP_FALSE OP_IF ... OP_ENDIF с маркером протокола, content-type и данными, разбитыми на чанки по 520 байт. Эта ветка никогда не исполняется, что делает данные witness-информацией, а не исполняемым кодом. Техническая спецификация описана в BIP-341. Максимальный размер инскрипции — около 4 МБ (лимит блока), но надёжнее ограничиться 380 КБ, чтобы пройти в любой блок. Reveal-транзакция тратит этот output, раскрывая скрипт в блокчейне. Инскрипция привязывается к первому сатоши первого input'а reveal-транзакции по ordinal theory.
Почему так легко сжечь инскрипцию при трансфере?
Самая частая ошибка в production — смешивание обычных UTXO с UTXO-носителями инскрипции. Если inscribed sat попадает в input транзакции не в той позиции, ordinal theory считает его потраченным, и инскрипция безвозвратно теряется. Правило: всегда проверять UTXO через ord API перед включением в транзакцию. Мы гарантируем, что каждый UTXO проходит валидацию до того, как стать input'ом. Управление UTXO — ключевая компетенция нашей команды.
Почему важно использовать PSBT?
Для интеграции с пользовательскими кошельками (Unisat, Xverse, OKX Wallet) транзакции строятся как Partially Signed Bitcoin Transactions (BIP-174). Сервер формирует PSBT с корректными referrer-UTXO, скриптами и control block'ами, а подписывает кошелёк. PSBT в 3 раза безопаснее сырых транзакций при подписании, так как проверяет консистентность inputs/outputs. Плюс — прозрачность: пользователь видит, что именно подписывает.
Преимущества собственного индексатора
Готовые сторонние API (Hiro, OrdinalsBot) удобны для прототипирования, но в production они вносят задержки и лимиты на запросы. Собственный индексатор на базе ord с кэшированием Redis в 2-3 раза сокращает время ответа на запросы к истории коллекции. Это критично для маркетплейсов и лаунчпадов, где каждый лишний миллисекунда — потерянный пользователь.
Архитектура сервиса Bitcoin-инскрипций
Компоненты сервиса
- Bitcoin нода — Bitcoind с
txindex=1. Настройка Bitcoin ноды включает активацию txindex для полноценного сканирования. - Ordinals индексатор — ord 0.18+ с собственной SQLite базой.
- Wallet management — каждый пользователь получает P2TR-адрес. Используем
bitcoinjs-lib(TypeScript),rust-bitcoinилиpython-bitcoinlib. HD-деривация по BIP-86. - Fee estimation — актуальные fee rates через
estimatesmartfeeRPC или mempool.space API. При 50 sat/vByte и 200KB инскрипции комиссия может достигать 0.1 BTC. Типичная комиссия за минт — 0.005–0.01 BTC при fee rate 20–30 sat/vByte.
Пошаговый процесс создания инскрипции — создание сервиса bitcoin
- Генерация ключевой пары и derivation пути по BIP-86.
- Формирование envelope-скрипта с данными, разбитыми на чанки по 520 байт.
- Создание P2TR output с tapscript, содержащим скрипт.
- Построение commit-транзакции с этим output.
- Построение reveal-транзакции, тратящей commit-output и раскрывающей скрипт.
- Подписание PSBT кошельком и отправка в сеть.
import * as bitcoin from 'bitcoinjs-lib';
import { ECPairFactory } from 'ecpair';
import * as ecc from 'tiny-secp256k1';
const ECPair = ECPairFactory(ecc);
async function createInscription(
content: Buffer,
contentType: string,
feeRate: number, // sat/vByte
recipientAddress: string,
): Promise<{ commitTx: string; revealTx: string }> {
const keypair = ECPair.makeRandom({ network: bitcoin.networks.bitcoin });
// Строим envelope скрипт
const envelope = bitcoin.script.compile([
bitcoin.opcodes.OP_FALSE,
bitcoin.opcodes.OP_IF,
Buffer.from('ord'),
bitcoin.opcodes.OP_1,
Buffer.from(contentType),
bitcoin.opcodes.OP_0,
// данные разбиваются на чанки по 520 байт
...chunkData(content, 520),
bitcoin.opcodes.OP_ENDIF,
keypair.publicKey.slice(1), // x-only pubkey для Taproot
bitcoin.opcodes.OP_CHECKSIG,
]);
// Создаём P2TR output с инскрипцией в tapscript
const scriptTree = { output: envelope };
const p2tr = bitcoin.payments.p2tr({
internalPubkey: keypair.publicKey.slice(1),
scriptTree,
network: bitcoin.networks.bitcoin,
});
// Commit TX отправляет средства на p2tr.address
// Reveal TX тратит этот output, раскрывая скрипт
// ...
} PSBT и подписание
const psbt = new bitcoin.Psbt({ network: bitcoin.networks.bitcoin });
psbt.addInput({
hash: utxo.txid,
index: utxo.vout,
witnessUtxo: {
script: p2tr.output!,
value: utxo.value,
},
tapLeafScript: [
{
leafVersion: 0xc0,
script: envelope,
controlBlock: p2tr.witness![p2tr.witness!.length - 1],
},
],
});
psbt.addOutput({
address: recipientAddress,
value: 546, // dust limit
});
const psbtBase64 = psbt.toBase64();
Индексирование и работа с существующими инскрипциями
Ordinals индексатор предоставляет JSON API для Ordinals (ord server):
GET /inscriptions/{address} GET /incription/{incription_id} GET /sat/{sat_number} Для production с высокой нагрузкой мы строим собственный индексатор поверх базы ord (SQLite или PostgreSQL) с кэшированием на Redis. Это даёт стабильный RPS и независимость от внешних API. Интеграция BRC-20 также реализуется через собственный индексатор.
Форматы и ограничения
| Параметр | Значение |
|---|---|
| Теоретический размер | ~4 MB (лимит блока) |
| Надёжный размер | ~380 KB |
| Content types | Любой MIME (image/png, text/plain, application/json, text/html) |
| Recursive inscriptions | Ссылки на /content/{id} внутри контента |
| BRC-20 | JSON-инскрипции с off-chain консенсусом |
Что вы получите в результате
Детальный перечень deliverables
- Репозиторий с кодом API (документация в формате OpenAPI).
- Развёрнутая Bitcoin нода и индексатор ord (docker-compose или helm-чарты).
- Интеграция с кошельками (Unisat, Xverse, OKX).
- Настроенный fee estimation через mempool.space API.
- Инструкция по мониторингу и restart-скрипты.
- Гарантия на код 3 месяца и опция поддержки после запуска.
Мы сдаём проект с полным набором deliverables. Стоимость разработки рассчитывается индивидуально, исходя из объёма и сложности. Получите консультацию по вашему проекту — обсудим детали.
Сроки и стек
| Компонент | Технология |
|---|---|
| Нода | Bitcoin Core с txindex=1 |
| Ordinals индексатор | ord |
| Backend | TypeScript/Node.js + bitcoinjs-lib |
| Wallet интеграция | Unisat API / Xverse Provider API |
| Fee estimation | mempool.space API |
| База данных | PostgreSQL + Redis |
Базовый сервис (минт + трансфер + просмотр коллекции) — 3–4 недели. Расширенный функционал (BRC-20, recursive, маркетплейс) оценивается отдельно. Гарантируем качественную разработку сервиса Bitcoin-инскрипций, включая API для Ordinals, настройку Bitcoin ноды и интеграцию BRC-20.
Закажите разработку сервиса инскрипций — мы готовы взяться за проект любой сложности. Свяжитесь с нами для консультации и получите детальную смету.







