Разработка маркетплейса Ordinals/BRC-20
Bitcoin Ordinals появился в начале 2023 года и сломал устоявшееся представление о Bitcoin как о «просто деньгах». За первый год объём торговли Ordinals превысил $1.5 миллиарда, сеть Bitcoin пережила несколько эпизодов перегрузки из-за inscription транзакций. Magic Eden, Ordinals Wallet, Gamma.io — маркетплейсы пришли быстро. Но стек разработки принципиально другой по сравнению с EVM: нет смарт-контрактов, нет native escrow, сделки атомарны через PSBT-механику.
Протоколы: Ordinals, BRC-20 и Runes
Ordinals — инскрипции в Bitcoin
Ordinals protocol (Casey Rodarmor, 2023) вводит концепцию порядковых номеров для сатоши. Каждый satoshi пронумерован в порядке майнинга. Inscription прикрепляет данные к конкретному satoshi через Bitcoin Script witness data. Данные хранятся on-chain в Bitcoin — это отличает Ordinals от NFT на Ethereum, где метаданные обычно в IPFS.
Технически: inscription создаётся через commit-reveal транзакцию. Commit транзакция создаёт P2TR output с Tapscript, содержащим данные. Reveal транзакция тратит этот output, публикуя данные в witness. После этого этот satoshi несёт inscription и может передаваться как NFT.
Для маркетплейса критически важно: парсинг inscription метаданных (JSON, image/png, image/webp, text/plain), определение Ordinal sat range в UTXO, трекинг ownership через Bitcoin адреса.
BRC-20 — токены поверх Ordinals
BRC-20 (март 2023, @domodata) — экспериментальный стандарт токенов на основе Ordinals. Операции кодируются в JSON-инскрипциях:
{ "p": "brc-20", "op": "deploy", "tick": "ordi", "max": "21000000", "lim": "1000" }
{ "p": "brc-20", "op": "mint", "tick": "ordi", "amt": "1000" }
{ "p": "brc-20", "op": "transfer", "tick": "ordi", "amt": "500" }
Важно понять: BRC-20 балансы не хранятся на адресе как ERC-20. Баланс — это сумма unspent transfer-инскрипций, привязанных к адресу. Для торговли на маркетплейсе нужен индексатор — сервис, который читает всю историю Bitcoin и строит актуальные балансы по каждому адресу.
Runes — следующее поколение
Runes protocol (апрель 2024, Casey Rodarmor) — более эффективная альтернатива BRC-20. Используют OP_RETURN output вместо witness data, что дешевле. Balances хранятся в UTXO модели, ближе к native Bitcoin. Runes уже поддерживают несколько маркетплейсов, но экосистема моложе BRC-20.
Атомарные сделки через PSBT
Главное отличие от EVM маркетплейсов: нет смарт-контракта как escrow. Bitcoin не поддерживает произвольный код. Сделки делаются через PSBT (Partially Signed Bitcoin Transaction).
Схема листинга и покупки:
- Seller создаёт PSBT: Input — UTXO с Ordinal, Output — адрес seller + запрашиваемая цена в BTC. Seller подписывает только свой input (SIGHASH_SINGLE | SIGHASH_ANYONECANPAY).
- PSBT публикуется на маркетплейс. Маркетплейс хранит это как листинг.
- Buyer дополняет PSBT: добавляет свои inputs (BTC для оплаты) и output на свой адрес (получение Ordinal). Подписывает своими ключами.
- Транзакция broadcast: атомарная — либо seller получает BTC и buyer получает Ordinal, либо ничего.
SIGHASH_ANYONECANPAY позволяет seller подписать частичную транзакцию, к которой любой может добавить inputs. Это и есть atomicity без смарт-контракта.
Для реализации используются библиотеки: bitcoinjs-lib (JavaScript), rust-bitcoin (Rust). PSBT построение и валидация — критическая часть, ошибка здесь = потеря NFT или BTC.
Архитектура индексатора
Индексатор — самый сложный компонент. Он должен:
- Читать весь Bitcoin blockchain от genesis (или от блока появления Ordinals — ~767430)
- Парсить все inscription транзакции, строить mapping satoshi → inscription data
- Трекать ownership: с каким Bitcoin адресом связан каждый Ordinal прямо сейчас
- Для BRC-20: парсить JSON операции, считать балансы по адресам
- Оставаться синхронизированным с новыми блоками в реальном времени
Открытые решения:
- ord (оригинальный индексатор Casey Rodarmor, Rust) — reference реализация
- hiro-systems/ordhook — более производительный, поддерживает webhooks
- unisat/ord-utils — JavaScript библиотека поверх ord индексатора
Для маркетплейса от нуля: запускаем ord ноду + Bitcoin full node, поверх строим собственный API с кешированием в PostgreSQL или Redis. Синхронизация от нуля занимает несколько дней.
Интеграция кошельков
Bitcoin кошельки, поддерживающие Ordinals:
- Unisat Wallet — самый популярный, browser extension, поддерживает PSBT signing
- Xverse — мобильный + extension, поддерживает BRC-20 и Ordinals
- Leather (hiro.so) — стек от Hiro Systems, хорошая документация
- OKX Wallet — крупнейший по числу пользователей в Азии
Стандарт взаимодействия с кошельком: Unisat провайдер API (де-факто стандарт для Ordinals). Аналог window.ethereum, но window.unisat. Методы: requestAccounts(), signPsbt(), pushPsbt().
const accounts = await window.unisat.requestAccounts()
const signedPsbt = await window.unisat.signPsbt(psbtHex, {
autoFinalized: false,
toSignInputs: [{ index: 0, address: sellerAddress }]
})
Для multi-wallet поддержки — sats-connect библиотека, аналог WalletConnect для Bitcoin.
Типичные проблемы реализации
UTXO splitting. Если Ordinal находится в UTXO вместе с dust BTC (например, 546 satoshi + Ordinal), при spend нужно правильно разделить outputs чтобы Ordinal пошёл на нужный адрес, а пыль — на другой. Ошибка в split = Ordinal уничтожен (отправлен как fee майнеру).
Mempool congestion. При высокой нагрузке на Bitcoin сеть fee за транзакцию резко вырастает. Листинг с заниженным fee может ждать включения в блок часами — Ordinal "завис". Нужна логика RBF (Replace-By-Fee) для ускорения транзакций.
Fake inscription. Верификация что inscription реальна, а не поддельная копия — через проверку sat number в официальном индексаторе. Сат с inscription ID должен совпадать с записью в ord индексаторе.
Процесс разработки
Инфраструктура (1 неделя). Bitcoin full node + ord индексатор, синхронизация blockchain, база данных листингов.
Backend API (2 недели). REST API: коллекции, листинги, search, активность. PSBT сервис для генерации и валидации сделок. WebSocket для realtime обновлений.
Frontend (2-3 недели). Next.js + TypeScript, multi-wallet support (Unisat, Xverse, Leather), галерея инскрипций, trading interface, BRC-20 балансы.
Тестирование (1 неделя). Testnet (signet) + regtест среда, тестирование PSBT сделок от начала до конца.
Ориентиры по срокам
MVP маркетплейс для Ordinals с базовым листингом и PSBT сделками — от 4-6 недель. Полный маркетплейс с BRC-20, Runes, индексатором и multi-wallet — 2-3 месяца.
Стоимость рассчитывается после обсуждения набора поддерживаемых протоколов и требований к индексатору.







