Разработка Runes-токена (Bitcoin): от идеи до релиза

Разработка Runes-токена (Bitcoin) До Runes была путаница: BRC-20 работал поверх Ordinals, создавал inscription для каждого transfer, засорял mempool junk-транзакциями. Casey Rodarmor, создатель Ordinals, разработал Runes как clean-room решение для fungible токенов на Bitcoin — без лишних данных,

Направления блокчейн-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1452
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1310
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1005
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1270
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1012

Разработка Runes-токена (Bitcoin)

До Runes была путаница: BRC-20 работал поверх Ordinals, создавал inscription для каждого transfer, засорял mempool junk-транзакциями. Casey Rodarmor, создатель Ordinals, разработал Runes как clean-room решение для fungible токенов на Bitcoin — без лишних данных, с использованием существующих биткоин-примитивов. Runes решают проблему масштабирования токенов: каждый BRC-20 transaction создаёт ненужные inscription, увеличивая размер блокчейна. Runes используют UTXO и OP_RETURN, что в 10 раз компактнее. В этой статье разберём архитектуру, etching, передачу и индексирование Runes, а также покажем реальные примеры кода. Вы узнаете, как избежать типичных ошибок, таких как потеря токенов из-за pointer logic, и как правильно настроить индексер. Наш опыт — 5+ лет в блокчейн-разработке, 15+ проектов на Bitcoin и EVM. Гарантируем соответствие протоколу и отсутствие потерь из-за pointer logic. Свяжитесь для консультации — оценим сложность и сроки за 1 день.

Как работает протокол Runes?

Runes не требует изменений в Bitcoin консенсусе. Протокол живёт в OP_RETURN — данные не хранятся в UTXO set, блокчейн не засоряется (в отличие от BRC-20, хранящего состояние в satoshi).

Ключевые концепции:

  • Runestone — сообщение протокола в OP_RETURN. Содержит etching, mint, transfer, edict.
  • UTXO как носитель баланса — балансы Runes хранятся не в глобальном маппинге (как ERC-20), а в конкретных UTXO. Если вы держите 1000 RUNE, значит у вас есть UTXO с attached balance.
  • Rune ID — {block_height}:{tx_index} etching-транзакции. Например, первый Rune имеет ID 840000:3.
  • Spacers — визуальные разделители в имени (точки), например UNCOMMON•GOODS.

Как создать Rune (Etching)?

Etching — это транзакция с Runestone в OP_RETURN, объявляющая новый Rune.

Параметры etching: divisibility (0–38, аналог decimals в ERC-20), symbol (Unicode символ для отображения), premine (количество токенов для etcher'а сразу), terms (условия open mint, если разрешён) — amount, cap, height, offset, turbo (флаг совместимости с будущими версиями).

Структура данных Runestone кодируется через varint encoding (LEB128) — компактное представление чисел переменной длины.

Практическая реализация через ord CLI

# Установка ord (официальный клиент) cargo install ord # Синхронизация с Bitcoin нодой (или через RPC к внешней) ord --bitcoin-rpc-url http://user:pass@localhost:8332 index # Создание wallet ord wallet create # Etching нового Rune ord wallet etch \ --rune "MYTOKEN•NAME" \ --divisibility 8 \ --symbol "M" \ --supply 21000000 \ --premine 21000000 \ --fee-rate 20 # Mint (если включён open mint) ord wallet mint \ --rune "MYTOKEN•NAME" \ --fee-rate 20 

Через библиотеку (JavaScript/TypeScript)

Для интеграции в приложение используется runestone npm пакет или прямая работа с bitcoinjs-lib:

import { Runestone, Etching, Terms, RuneId } from "runestone-lib"; import * as bitcoin from "bitcoinjs-lib"; function buildEtchingTransaction( utxo: UTXO, runeName: string, divisibility: number, supply: bigint, feeRate: number ): bitcoin.Transaction { const runestone = new Runestone({ etching: new Etching({ rune: Rune.fromString(runeName), divisibility, symbol: "T", premine: supply, turbo: true, }), edicts: [{ id: new RuneId(0n, 0n), // 0:0 = самого себя при etching amount: supply, output: 1n, // output index для получения premine }], }); const psbt = new bitcoin.Psbt({ network: bitcoin.networks.bitcoin }); // Input: funded UTXO для оплаты fee psbt.addInput({ hash: utxo.txid, index: utxo.vout, witnessUtxo: { script: utxo.scriptPubKey, value: utxo.value }, }); // Output 0: OP_RETURN с Runestone psbt.addOutput({ script: bitcoin.script.compile([ bitcoin.opcodes.OP_RETURN, Buffer.from("52554e45", "hex"), // RUNE magic bytes runestone.encipher(), ]), value: 0, }); // Output 1: получатель premine (должен быть не dust) psbt.addOutput({ address: recipientAddress, value: 546, // dust limit для P2WPKH }); // Output 2: сдача psbt.addOutput({ address: changeAddress, value: changeAmount }); return psbt; } 
Технические детали Runestone Runestone — это бинарный формат, который может содержать etching, mint, transfer и edicts. Поле etching определяет атрибуты нового токена: имя (до 26 символов с разделителями), делимость (0-38), символ (один Unicode), премайн и условия open mint. Edicts — это инструкции передачи, каждая содержит id Rune, количество и номер output'а. Стоимость etching в mainnet составляет примерно $2–5 за транзакцию при текущих комиссиях.

Передача Runes (edicts)

Передача Runes — транзакция с Runestone, содержащим edicts. Каждый edict задаёт: какой Rune, сколько, в какой output.

Важное правило протокола: если Rune balance входного UTXO не полностью покрыт edicts — остаток автоматически идёт в первый non-OP_RETURN output (pointer). Нет явного указания = первый output. Это отличие от EVM, где неуказанные средства остаются у отправителя.

Пример: у вас UTXO с 1000 RUNE. Транзакция с edict: send 300 RUNE → output 2. Автоматически: 700 RUNE → output 1 (default pointer). Если output 1 = burn address — вы нечаянно сожгли 700 RUNE. Это основная причина потери токенов — непонимание pointer logic. При разработке кошелька для Runes нужно явно конфигурировать pointer output на change адрес пользователя.

Индексирование Runes: варианты и практика

Runes не имеют стандартного RPC API в Bitcoin Core — нужен отдельный индексер. Сравним варианты:

Индексер Тип Преимущества Недостатки
ord Self-hosted Полный контроль, открытый исходный код Требует Bitcoin ноду + ~100 ГБ SSD
Hiro Ordinals API Hosted Не требует своей ноды, простой REST Платный, риск недоступности
Unisat API Hosted Поддержка Runes, бесплатный лимит Rate limit для высоких нагрузок

Для production мы используем собственный ord индексер с репликацией — это даёт гарантию доступности и скорость. Экономия до 40% по сравнению с hosted-решениями.

Какие отличия Runes от BRC-20?

Характеристика Runes BRC-20
Модель данных UTXO с attached balance inscription с JSON-стейтом
Размер транзакции ~100–200 байт ~400–1000 байт
Требования к ноде Полная Bitcoin нода + ord Полная Bitcoin нода + Ordinals
Гибкость Только transfer/burn Только transfer/burn
Зрелость Активная разработка, май 2024 Стабильный, но багливый

Что входит в нашу разработку Runes-токена?

  • Анализ токеномики и протокольных параметров
  • Etching, mint, transfer логика
  • Интеграция с кошельками (список поддерживающих Runes)
  • Разработка индексного API (ord + кастомные эндпоинты)
  • UI для mint/transfer (опционально)
  • Тестирование в testnet и mainnet
  • Документация и обучение команды
  • Техническая поддержка 1 месяц после запуска

Ограничения Runes (что нужно знать заранее)

Runes — не смарт-контракты. Никаких conditional transfers, стейкинга или DEX без отдельного решения. Вся логика, привычная в Solidity, здесь невозможна on-chain. Доступны только: создание, transfer, burn.

Для DeFi поверх Runes нужен offchain matching (централизованный orderbook) или отдельный L2 с проверкой через Bitcoin SPV. Сравнение с ERC-20: EVM токены выигрывают в гибкости, но Runes дают native Bitcoin-безопасность и аудиторию.

Срок разработки: etching и базовый кошелёк — 1–2 недели. Полноценная интеграция с индексером и marketplace — 6–10 недель. Стоимость рассчитывается индивидуально после аудита требований. Получите консультацию по вашему проекту — мы оценим сложность и предложим оптимальное решение.

Наш опыт: 5+ лет в блокчейн-разработке, 15+ проектов на Bitcoin и EVM. Гарантируем соответствие протоколу и отсутствие потерь из-за pointer logic.