Разработка маркетплейса Ordinals/BRC-20
Отметим: когда Bitcoin Ordinals ворвались в индустрию, разработчики столкнулись с задачей торговли активами без смарт-контрактов. Мы решили её через атомарные PSBT-сделки. На начальном этапе объём торговли Ordinals превысил $1.5 миллиарда, сеть Bitcoin несколько раз перегружалась из-за inscription-транзакций. Magic Eden, Ordinals Wallet, Gamma.io — маркетплейсы пришли быстро, но стек разработки принципиально другой по сравнению с EVM: нет смарт-контрактов, нет native escrow, сделки атомарны через PSBT-механику. Если вам нужен bitcoin nft маркетплейс, свяжитесь с нами для консультации.
Протоколы: Ordinals, BRC-20 и Runes
Ordinals — инскрипции в Bitcoin
Ordinals protocol вводит концепцию порядковых номеров для сатоши. Каждый 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 — экспериментальный стандарт токенов на основе 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 и строит актуальные балансы по каждому адресу. При разработке BRC-20 маркетплейса ключевым является индексатор.
Runes — следующее поколение
Runes protocol — более эффективная альтернатива BRC-20. Используют OP_RETURN output вместо witness data, что дешевле. Balances хранятся в UTXO модели, ближе к native Bitcoin. Runes уже поддерживают несколько маркетплейсов, но экосистема моложе BRC-20. Если рассматривать маркетплейс рунов, мы также можем предложить интеграцию этого протокола.
Сравнение протоколов
| Протокол | Тип данных | Механизм | Преимущество | Недостаток |
|---|---|---|---|---|
| Ordinals | NFT (произвольные данные) | Witness data | Полностью on-chain | Высокий вес транзакции |
| BRC-20 | Токены (JSON-операции) | Witness data | Децентрализованный | Нужен тяжёлый индексатор |
| Runes | Токены (UTXO модель) | OP_RETURN | Низкие комиссии | Меньше ликвидности |
Как работают атомарные сделки без смарт-контрактов?
Главное отличие от EVM маркетплейсов: нет смарт-контракта как escrow. Bitcoin не поддерживает произвольный код. Сделки делаются через PSBT (Partially Signed Bitcoin Transaction). Подробнее о PSBT можно прочитать в Wikipedia.
Схема листинга и покупки:
- 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).
- Парсить все inscription транзакции, строить mapping satoshi → inscription data.
- Трекать ownership: с каким Bitcoin адресом связан каждый Ordinal прямо сейчас.
- Для BRC-20: парсить JSON операции, считать балансы по адресам.
- Оставаться синхронизированным с новыми блоками в реальном времени (задержка не более 10 секунд).
Открытые решения:
- ord (оригинальный индексатор Casey Rodarmor, Rust) — reference реализация.
- hiro-systems/ordhook — более производительный, поддерживает webhooks.
- unisat/ord-utils — JavaScript библиотека поверх ord индексатора.
Для маркетплейса от нуля: запускаем ord ноду + Bitcoin full node, поверх строим собственный API с кешированием в PostgreSQL или Redis. Синхронизация от нуля занимает до 5 дней.
| Тип индексатора | Скорость синхронизации | Поддержка BRC-20 | Коммерческая лицензия |
|---|---|---|---|
| ord (reference) | 5-7 дней | Да | MIT |
| ordhook | 2-3 дня | Нет (только Ordinals) | Apache 2.0 |
| Unisat API | Мгновенно (удалённый) | Да | Вендорский ключ |
При использовании готового индексатора ординалов можно сократить время разработки.
Интеграция кошельков
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. Мы обеспечиваем unisat wallet интеграцию и поддержку других популярных кошельков.
Типичные проблемы реализации
Раскрыть список типичных проблем
- 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 индексаторе.
Что входит в работу
- Развёрнутая документация: схема PSBT-транзакций, описание индексатора, OAuth-схемы кошельков.
- Исходный код на GitHub с CI/CD и тестами (покрытие 90%+).
- Доступ к админ-панели с мониторингом транзакций.
- Инструкция по развёртыванию на собственные серверы.
- Консультационная поддержка на 30 дней после запуска.
Процесс разработки
Инфраструктура (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) + regtest среда, тестирование PSBT сделок от начала до конца.
Ориентиры по срокам
MVP маркетплейс для Ordinals с базовым листингом и PSBT-сделками — от 4 до 6 недель. Полный маркетплейс с BRC-20, Runes, индексатором и multi-wallet — 2-3 месяца. Стоимость рассчитывается после обсуждения набора поддерживаемых протоколов и требований к индексатору. Наш опыт в блокчейн-разработке превышает 7 лет, мы реализовали более 70 проектов, включая создание NFT платформ на разных сетях. Гарантируем прозрачность исходного кода и поддержку после запуска. Свяжитесь с нами, чтобы заказать маркетплейс биткоин под ключ. Получите консультацию по архитектуре и оценку сроков.







