Runes (рунсы): стандарт взаимозаменяемых токенов на Биткоине

Runes — это минималистичный ончейн-протокол взаимозаменяемых токенов (FT) для сети Биткоина, разработанный Кейси Родармором (автор Ordinals). В отличие от «надстроек» с внешним состоянием, Runes целиком опирается на модель UTXO и сообщения в OP_RETURN, фиксируя все значимые действия (создание, выпуск, перевод) прямо в L1. Ключевая цель — «чистая» работа с UTXO без мусора, простая индексация и предсказуемые комиссии.

Runes Standeart Vzaimozamenyaemyh Tokenov Na Bitcoine

В Runes введены три базовых элемента:

  • Runestone — «сообщение протокола» в выходе с OP_RETURN, где закодированы параметры токена и действия.
  • Etching — процедура «чеканки» (создания) нового руна с зашитыми свойствами.
  • Edicts — инструкции распределения/перевода руна по выходам транзакции.

За счёт этого Runes стремится быть простым, ончейн-самодостаточным и дружелюбным к индексаторам/кошелькам, оставаясь при этом совместимым с ограничениями Script и политиками мемпула.

Основы модели

Учёт в UTXO. Баланс руна «привязан» не к аккаунту, а к конкретным выходам (UTXO): один UTXO может содержать любое количество разных рун. Передача — это перераспределение количеств между выходами новой транзакции согласно *edicts*. Такой подход наследует достоинства UTXO-модели: параллелизм трат, очевидная финальность, простая проверка.

OP_RETURN как носитель протокольных данных. Транзакция считается «протокольной», если содержит OP_RETURN-выход с маркером Runes и полезной нагрузкой (*Runestone*). В ней индексатор видит: создаётся ли новый рун (*etching*), допускается ли mint (дальнейшая эмиссия), какие *edicts* выполняются и к каким выходам применяется перевод.

Минимализм формата. Поля Runes умышленно ограничены: имя, делимость, символ, условия эмиссии (премайн/минт), RuneID/привязки к высотам и список *edicts*. Простая, компактная схема облегчает индексацию и уменьшает риск расхождений у разных реализаций.

Жизненный цикл руна

Чеканка (etching). Создатель формирует транзакцию с Runestone, описывающим свойства руна:

  • Имя (уникальное в протоколе, 1–28 символов, допускаются некоторые разделители-«пули» в ряде имплементаций).
  • Делимость (*divisibility*) — сколько знаков «после запятой» допускается (0 означает неделимый актив).
  • Символ — краткий «значок» валюты; если не задан, в ряде интерфейсов показывается общий знак (например, ¤).
  • Премайн — объём, попадающий к создателю при etching (опционально).
  • Условия минтинга — открытый/закрытый выпуск, лимиты по количеству минтов, кап эмиссии, окна по высотам блоков (start/end), периодичность.

Чеканка задаёт правила навсегда: изменить делимость/имя и пр. после etching нельзя. Индексатор присваивает рунам RuneID и начинает учитывать их выпуск/переводы.

Минт (mint). Если рун создан с «открытым» минтом, любой участник может выпустить дополнительное количество в рамках заданных лимитов (например, N минтов по M единиц в каждом, только в окне блоков X–Y). Минт оформляется отдельной транзакцией с Runestone, удовлетворяющей условиям.

Перевод (transfer). Передача осуществляется через *edicts* — список «кому-сколько» для конкретного руна. Важная деталь: edicts распределяют уже существующую у входов «массу» руна по выходам. Правила консервативны: сумма на выходах не может превышать доступную сумму на входах минус сожжённое/зарезервированное.

Сжигание (burn). Сокращение предложения реализуется как edict, который направляет часть количества «в никуда» (например, не присваивает ни одному выходу, либо использует специальные конвенции). Поддержка «жёсткого» burn — в компетенции конкретных реализаций/индексаторов, но в ончейн-логике это всегда выглядит как уменьшение «массы», остающейся распределённой.

Поля руна и представление количеств

Делимость и формат отображения. Делимость задаёт точность. Например, при делимости 2 количество 1234 отображают как 12.34 единицы; при делимости 0 — как 1234 неделимых единиц. Это соглашение унифицирует UX кошельков и бирж интерфейсов.

Символ. Символ — опциональный «знак валюты». Он показывается после количества (в ряде гайдов/реализаций), но не участвует в правилах учёта. Если пустой — интерфейсы подставляют общий символ.

Имя. Имена рунам уникальны: нельзя отчеканить второй рун с тем же именем. Это снижает путаницу и фишинговые риски, характерные для систем, где имена повторяются.

RuneID. Идентификатор руна кодируется детерминированно (например, на основе высоты/индекса транзакции etching) и однозначно указывает исходное событие чеканки. Для пользователя RuneID — «технический» ключ; для индексации — источник правды при коллизиях имен.

Runestone и edicts: как кодируются действия

Runestone. Это полезная нагрузка OP_RETURN-выхода с маркером протокола. Внутри — набор TLV/varint-полей, достаточный для:

* объявления etching (свойств руна и начального распределения); * разрешения/ограничения mint (окна высот, лимиты); * набора *edicts* для распределения по выходам; * опционального «указателя» (*pointer*), связывающего edicts с конкретными выходами в транзакции.

Edicts. Каждый edict описывает: какой рун, какое количество, в какой выход направить. Совокупность edicts должна соответствовать инвариантам сохранения «массы» (inputs ≥ outputs + burn). При наличии *pointer* можно компактно адресовать нужные выходы без дублирования.

Почему это важно. Единообразная структура сообщений делает индексаторы простыми: чтобы восстановить состояние, достаточно последовательно прочитать цепочку транзакций, извлекая Runestone и применяя edicts. Внешние «сервера состояния» не требуются.

Отличие от BRC-20, RGB и Taproot Assets

Против BRC-20. BRC-20 кодирует состояние через инскрипции/тексты, порождая множество «мусорных» UTXO, а также полагается на эвристику сопоставления. Runes исходит из UTXO-балансов и жёстко определённых edicts; индексация однозначна, количество UTXO не раздувается сверх необходимости.

Против RGB. RGB мощен, но сложен и опирается на офчейн-данные/клиентскую валидацию. Runes — ончеин-самодостаточен: все факты о создании и перемещении хранятся в блокчейне, что упрощает внедрение в кошельки и сервисы.

Против Taproot Assets. TA используют сложные деревья обязательств/сидкар-данные и тоже имеют офчейн-аспекты. Runes проще в индексации, но менее выразителен по части сложных активов и мостов. Выбор зависит от требований продукта: «минимализм и простота индексирования» (Runes) или «богатая внешняя модель активов» (TA).

Комиссии и «чистота» UTXO

Экономия блокового пространства. Вместо многочисленных мелких транзакций протокол заставляет аккуратно распределять массы внутри одного tx за счёт *edicts*. Один UTXO может «нести» несколько руна сразу, что уменьшает разрастание графа UTXO.

Мемпул-практики. Поскольку сообщения Runes живут в OP_RETURN, разумные лимиты и RBF/CPFP-тактика применимы так же, как для обычных платежей транзакциями UTXO. Важно избегать длинных цепочек зависимостей и следить за ancestor/descendant-ограничениями — особенно при массовых минтах.

Сборы при массовых событиях. Горячие запуски руна (public mint) способны резко нагружать мемпулы и комиссии — UX-слой (кошельки/минтеры) должен уметь выстраивать очереди, «шардировать» суммы и использовать пакетирование.

Безопасность и вектор злоупотреблений

Детерминированность состояния. Поскольку учёт на 100% ончейн, любая честная реализация индексатора приходит к одному и тому же состоянию. Это снижает риски «рассинхрона» с внешними серверами/кэшами.

Маллеабилити и строгость правил. Данные протокола неизменяемы после включения в блок; любые попытки «воспроизведения» сообщений вне контекста трат парируются простыми проверками «inputs → outputs» в edicts.

Фишинг по именам. Уникальность имён снижает, но не отменяет фишинг: похожие строки (например, с точками/пулями) возможны. Лучшие практики — показывать RuneID и источник etching в интерфейсах.

Риски гиперспекуляции. Как и любые FT, руны подвержены памп-энд-дамп динамике. Это не вопрос протокола, но важно учитывать в UX/дисклеймерах (см. нашу базовую статью Безопасность в крипте).

Экосистема и интеграции

Кошельки. Поддержка Runes сводится к: (1) чтению OP_RETURN, (2) применению правил edicts, (3) правильному конструированию трат с множеством «цветов» в одном UTXO. Хорошей практикой является пометка UTXO по «содержимому» и защита от случайного смешивания при смене адреса.

Маркетплейсы/пулы. Сервисы листинга/mint часто требуют лишь корректной индексации и удобного UX поверх стандартной транзакции. L1-простота ускоряет появление инфраструктуры вторичного рынка.

Связь с L2. Runes — L1-стандарт; мосты в L2/сайдсистемы возможны, но это отдельная дизайн-задача (см. сайдчейны, роллапсы). Для платежей малых сумм релевантна комплементарность с Lightning Network.

Лучшие практики (для разработчиков и интеграторов)

  • Не дублируйте имена. Проверяйте уникальность, показывайте RuneID и tx etching.
  • Следите за делимостью. Отображайте количества единообразно, скрывайте «пыль».
  • Пакетируйте переводы. Один tx с несколькими edicts лучше десятка разрозненных.
  • Управляйте UTXO. Не дробите без нужды, соблюдайте политики coin control.
  • Поддерживайте RBF/CPFP. Это критично для массовых минтов и пиковой нагрузки.
  • Защищайте UX от коллизий. Вводите предупреждения на похожие имена/символы, давайте быстрый доступ к исходному etching-tx.

Сравнение подходов

Стандарт Где живут данные Сторонние сервера/клиентская валидация Модель учёта Особенности/риски
Runes Ончейн (OP_RETURN + UTXO) Не требуются UTXO-балансы, edicts Простая индексация, «чистый» UTXO, ажиотажные минты
BRC-20 Ончейн инскрипции + эвристика Необязательно, часто да Псевдо-аккаунтная «Мусорные» UTXO, неоднозначности, тяжёлые индексы
RGB Ончейн сиды + офчейн граф Требуются Клиентская валидация Мощно, но сложно и «тяжело» для UX
Taproot Assets Ончейн якоря + офчейн данные Обычно да UTXO + деревья обязательств Богатая модель активов, сложность интеграции

Частые вопросы (FAQ)

Можно ли поменять делимость/имя после etching? Нет. Свойства задаются раз и навсегда, чтобы исключить путаницу и «списки совместимости».

Кто «держит» руны — адрес или UTXO? UTXO. Один выход может нести несколько разных рун одновременно.

Почему OP_RETURN, а не инскрипции? OP_RETURN прост, ограничен по размеру и чётко отделяет протокольные сообщения от трат. Это упрощает индексаторы и снижает риски путаницы.

Можно ли сделать премайн и открытую эмиссию? Да. Параметры premine/minter-rules задаются при etching. Дальше их не изменить.

Как бороться с переполнением мемпула на минтах? Пакетирование, динамические комиссии, очереди, RBF/CPFP. Кошельки должны уметь «вежливо» ретраить и не строить длинных зависимостей.

Есть ли «идеальная» альтернатива Runes? Каждый стандарт решает свою задачу. Если вам нужна ончейн-простота и UTXO-«гигиена» — Runes хорошая отправная точка. Для сложных активов/мостов смотрите Taproot Assets или решения L2.

См. также

Task Runner