Розробка сервісу Bitcoin-інскрипцій починається не з інтерфейсу, а з UTXO і commit-reveal. Сервіс інскрипцій потребує розуміння лімітів witness даних. Інскрипції — не смарт-контракти, а дані, вбудовані в SegWit-транзакції та прив'язані до конкретних сатоші через протокол нумерації Ordinals. Зробити сервіс, який надійно створює, відстежує та передає такі записи — задача, яку не вирішити стандартними Bitcoin бібліотеками «з коробки». Досвід команди — 7+ років у Bitcoin-інфраструктурі, 20+ проєктів з інскрипцій. Ми беремося за такі проєкти під ключ: від проєктування архітектури до деплою та моніторингу. Після запуску забезпечуємо підтримку: моніторинг ноди, оновлення індексатора, оптимізацію fee estimation. Гарантія на код — 3 місяці. Використання власного індексатора дозволяє значно скоротити витрати на API-запити. Комісії при мінті колекції залежать від кількості та розміру інскрипцій. Отримайте безкоштовну консультацію з архітектури вашого сервісу.
Створення сервісу 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.
Замовте розробку сервісу інскрипцій — ми готові взятися за проєкт будь-якої складності. Зв'яжіться з нами для консультації та отримайте детальний кошторис.







