Розробка 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.







