Skip to content
Все руководства по опционам и фьючерсам
Выходы транзакций Bitcoin11 min read

OP_RETURN в Bitcoin: data carrier, nulldata и неизрасходуемые выходы

Узнайте, как OP_RETURN записывает открытые данные, почему выход нельзя потратить, чем политика ретрансляции Bitcoin Core 31.1 отличается от консенсуса и как она отличается от witness-инскрипций.

В этом руководствеOP_RETURN помещает данные в блокирующий скрипт

Краткое резюме

OP_RETURN позволяет добавить открытые данные в скрипт выхода транзакции Bitcoin. Bitcoin Core считает выходы, скрипт которых начинается с OP_RETURN, заведомо неизрасходуемыми и исключает их из набора UTXO. Действующие ограничения ретрансляции относятся к локальной политике узлов, а не к общему для сети лимиту payload по правилам консенсуса.

OP_RETURN помещает данные в блокирующий скрипт

Выход транзакции Bitcoin содержит сумму и блокирующий скрипт scriptPubKey. Выход OP_RETURN, также называемый nulldata, начинается с опкода OP_RETURN, после которого можно поместить последовательность байтов. После включения транзакции в блок эти байты становятся общедоступной частью выхода. Такая схема не создает отдельный слой данных, баланс токена или личное сообщение.

Почему выход нельзя потратить повторно

OP_RETURN — опкод, выполнение которого завершается ошибкой. Попытка потратить выход со скриптом, начинающимся с него, не может пройти проверку. Поэтому Bitcoin Core помечает такой выход как неизрасходуемый и может сразу не включать его в набор UTXO, не храня монету, которой никогда нельзя воспользоваться. См. реализацию в script.h Bitcoin Core 31.1. Bitcoin Core 31.1 script implementation.

Скрипт больше, чем payload

Лимит data carrier может учитывать не только байты приложения. В необработанный скрипт выхода входят опкод OP_RETURN, инструкция push с кодированием длины и сам payload. Для payload в 80 байт может потребоваться скрипт в 83 байта: один байт опкода, два байта заголовка OP_PUSHDATA1 и 80 байт данных. В старых инструкциях «80 байт» часто относятся к payload, тогда как новые настройки могут измерять весь скрипт.

Политика data carrier по умолчанию в Bitcoin Core 31.1

В Bitcoin Core 31.1 параметр -datacarrier включен по умолчанию. Значение -datacarriersize по умолчанию — 100 000 байт; оно суммирует необработанные scriptPubKey всех выходов data carrier в одной транзакции. Несколько выходов NULL_DATA делят общий лимит, включая опкод и кодирование push. В Core 30.0 прежний предел скрипта 83 байта заменили общим пределом 100 000 байт и разрешили несколько выходов; Core 31.1 сохраняет эти настройки. См. параметры Core 31.1, реализацию политики и заметки к выпуску 30.0.

Схема без текста: поток данных выхода останавливается у барьера, а witness-данные входа поступают в цепочку блоков
Сравнение данных OP_RETURN в выходе и witness-данных во входе: они находятся в разных полях транзакции и подчиняются разным правилам

Ретрансляция и консенсус отвечают на разные вопросы

Узел может отключить ретрансляцию data carrier или уменьшить локальный размерный лимит; другие узлы и версии ПО могут работать с другими настройками. Если узел отверг транзакцию в своем mempool, это может означать лишь отказ ретранслировать ее по локальной политике, а не запрет консенсуса. Bitcoin Core применяет лимит data carrier при проверке стандартности, а правила консенсуса отдельно проверяет при валидации блока. Core consensus transaction checks. See Bitcoin Core 31.1 mempool standardness implementation.

Стоимость выхода теряется, комиссия считается отдельно

Выходу OP_RETURN можно назначить сумму, но вернуть ее нельзя: она навсегда остается неизрасходуемой. Кошельки обычно назначают ему нулевую сумму. Если указать 1 000 сат, они не становятся автоматически комиссией майнера. Комиссия по-прежнему равна сумме входов минус сумма всех выходов. Байты скрипта занимают вес транзакции и могут увеличить комиссию при той же ставке sat/vB. См. руководство по комиссиям Bitcoin.

Несколько выходов данных не увеличивают лимит

Bitcoin Core 31.1 разрешает несколько стандартных выходов NULL_DATA, но суммирует их скрипты в рамках общего лимита транзакции. Разделение payload не увеличивает доступный объем; дополнительные выходы добавляют данные и вес блока. Ретрансляция также зависит от веса, комиссий и других правил стандартности узла. Принятие кошельком или обозревателем не гарантирует распространение транзакции по всей сети.

OP_RETURN отличается от Taproot-инскрипции в witness

Данные OP_RETURN находятся в scriptPubKey выхода при создании транзакции. Данные SegWit witness сериализуются отдельно для каждого входа; BIP 141 описывает их как стековые данные входа. Taproot-расходование по пути скрипта может раскрыть скрипт и control block в witness входа. Программа Ordinals может распознать там формат inscription по прикладному соглашению, но это другой механизм, чем выход nulldata. См. BIP 141, BIP 341 и [руководство по Bitcoin Ordinals и инскрипциям](/learn/bitcoin-ordinals-inscriptions-satoshi-numbering-witness-data-explained).

Перед использованием проверьте политику, стоимость и приватность

Уточните версию Bitcoin Core и локальные параметры, от которых зависит ваше решение. Отдельно посчитайте полный размер необработанного скрипта выхода, общий вес транзакции, сумму неизрасходуемого выхода и комиссию майнера. Консенсус не придает значения произвольным байтам payload; также проверьте, распознает ли формат протокол или получатель. Данные в блокчейне публичны. О выходах и сдаче см. руководство по UTXO и coin control Bitcoin.

Частые вопросы

Q1Ограничивает ли консенсус Bitcoin OP_RETURN 80 байтами данных?

Нет. 80 байт — значение payload из старого примера политики стандартности, а не универсальный предел консенсуса. Bitcoin Core 31.1 по умолчанию использует общий лимит 100 000 байт для необработанных скриптов данных; каждый узел может изменить политику.

Q2Увеличит ли больший OP_RETURN комиссию транзакции?

Это возможно. Байты скрипта добавляют вес транзакции, поэтому при той же ставке sat/vB комиссия может вырасти. Саты, назначенные неизрасходуемому выходу, теряются отдельно и не являются комиссией майнера.

Q3OP_RETURN — это то же самое, что инскрипция Ordinals?

Нет. OP_RETURN находится в скрипте выхода и делает его неизрасходуемым. Типичная Taproot-инскрипция помещает содержимое в данные пути скрипта witness входа, которые Ordinals интерпретирует по собственным соглашениям.

Источники и дополнительное чтение

Сообщить о проблеме

Мы подготовим письмо со ссылкой на эту статью. Mark получит сообщение только после отправки

Быстрая проверка

Прочитали руководство? Проверьте себя в 3 вопросах

Вопрос 1 / 3

Вопрос 01

Что измеряет значение -datacarriersize по умолчанию в Bitcoin Core 31.1?

Выберите ответ, чтобы увидеть объяснение

Словарь опционов

Основы опционовЧто означают «в деньгах», «около денег» и «вне денег»?Узнайте, как страйк опциона соотносится с ценой базового актива и почему смысл различается для коллов и путовОсновы опционовКолл-опционы: право покупателя и риск продавцаУзнайте, чем отличаются покупатель и продавец колла, что означает страйк $50, как премия влияет на безубыточность и когда возможно назначениеОсновы опционовЧто такое пут-опцион?Узнайте, какое право есть у покупателя пута, какое обязательство принимает продавец пута и что означает страйкМеханика опционовЭкспирация опциона: исходы в деньгах и вне денегУзнайте, что происходит с опционами в деньгах и вне денег на экспирации, чем исполнение отличается от назначения и какие сроки брокера важныМеханика опционовЧто такое мультипликатор опционного контракта?Разберитесь, почему опционную премию часто умножают на 100 и почему условия контракта всё равно нужно проверить