Перейти к содержимому
buybitcoinsmart

Глоссарий / Справочник разработчика

OP_RETURN

Что такое OP_RETURN?
OP_RETURN является опкодом, который делает выход транзакции заведомо неспособным к расходованию, что позволяет записать в блокчейн небольшой объем произвольных данных, не раздувая набор активных монет.

Выход, скрипт которого начинается с 0x6a, никто никогда не сможет потратить, поэтому полные узлы удаляют его из набора UTXO, который им приходится держать под рукой. Bitcoin Core 0.9.0 сделал такие выходы стандартными в марте 2014 года с допуском в 40 байт, который в 0.11.0 повысили до 80 байт полезной нагрузки. Если вы покупаете и держите, создавать такой выход вам не понадобится никогда, но за чужие выходы вы платите через рынок комиссий.

Как это работает

OP_RETURN завершает скрипт неудачей в тот самый момент, когда до него доходит исполнение. Ничто не может удовлетворить выход, заблокированный таким образом, и в отличие от адреса сжигания, куда монеты отправляют на хеш, ключа от которого ни у кого нет, эта невозможность видна программному обеспечению, а не всего лишь вероятна. Вся суть именно в этой видимости: узел ведет индекс каждого тратимого выхода, и выход, который доказанно мертв, в этот индекс может не попадать.

Кошельки, которые создают такой выход, устанавливают его стоимость в ноль и помещают полезную нагрузку после опкода, обычно одним push. В результате получается транзакция с обычным выходом, который платит кому-то, и вторым выходом, который несет байты и никаких денег.

Первая версия опкода обернулась катастрофой. В 2010 году скрипт входа и скрипт выхода исполнялись сцепленными, и OP_RETURN завершал вычисление с сообщением об успехе, поэтому тратящий мог дописать его в конец и уйти с монетами, принадлежащими другому человеку. Исправление того же года развело две половины исполнения и превратило опкод в безусловный отказ. Его современное применение как носителя данных появилось четыре года спустя, когда разработчики уже запихивали данные в поддельные публичные ключи, которые узлы никак не могли отсеять.

Затем появились ограничения на ретрансляцию, и ни одно из них не было правилом консенсуса. Bitcoin Core поставил стандартный носитель данных на 40 байт в версии 0.9.0, удвоил допуск до 80 байт в 0.11.0 в июле 2015 года и разрешил один такой выход на транзакцию. Версия 30.0 отменила предельный размер по умолчанию и правило одного выхода после долгого и раздраженного публичного спора, исходя из того, что ограничения обходились без труда и загоняли данные в еще худшие места. Bitcoin Knots сохранил более строгие значения по умолчанию, и это расхождение в политике узлов остается одним из живых разногласий в биткоине сегодня.

Почему это важно при покупке биткоина

Создать выход OP_RETURN вас никогда не попросят, а если сайт предлагает отправить биткоин на такой выход, это мошенничество: отправлять там некуда. Некоторые биржи и блокчейны используют поля memo, но при выводе биткоина они не нужны никогда.

До вас доходит комиссия. Данные, записанные ончейн, конкурируют с вашим выводом за одно и то же ограниченное место, и эффект измерим. Блок 840 000, добытый 20 апреля 2024 года, собрал около 37,6 биткоина комиссий, больше любого другого блока на сегодня, потому что на этой самой высоте активировался новый протокол токенов и тысячи людей бросились в него записывать. Тот, кто в тот день случайно выводил средства с биржи, заплатил за эту привилегию в несколько раз больше текущей ставки.

Защита состоит в выборе момента, а не в возмущении. Комиссии меняются на порядок в течение одной недели, поэтому объединение ваших биткоинов, вывод их с биржи или любой неспешный перевод в спокойные выходные стоит долю того, что тот же перевод стоит во время наплыва данных. Кошельки, которые позволяют задать собственную ставку комиссии, а не угадывают ее за вас, стоит предпочитать именно по этой причине. Если вопрос политики для вас важен, запуск Bitcoin Knots вместо Bitcoin Core является прямым способом его выразить, поскольку политику ретрансляции каждый оператор узла выбирает самостоятельно.

Пример расчета: сколько стоят 80 байт

Выход-носитель данных старого формата максимального размера занимает 92 байта в сети: 8 байт стоимости, установленной в ноль, один байт длины скрипта, затем 83 байта скрипта, состоящих из опкода, команды push, байта длины и 80 байт полезной нагрузки. Ничто из этого не является данными свидетеля, поэтому каждый байт считается за четыре единицы веса, что дает 368 единиц веса или 92 виртуальных байта. При 10 сатоши за виртуальный байт это 920 сатоши, не считая остальной части транзакции.

Для сравнения, обычный выход нативного SegWit занимает 31 байт, или 31 виртуальный байт, так что выход с данными стоит втрое дороже, чем платеж кому-то. Данные никогда не были бесплатными, и рынок комиссий является единственным механизмом нормирования, который есть у биткоина.

OP_RETURN vs транзакция с нулевыми данными

OP_RETURN является опкодом; транзакция с нулевыми данными является тем, что Bitcoin Core называет целым шаблоном транзакции, когда в ней появляется один из таких выходов. Программное обеспечение указывает тип выхода как "nulldata" в декодированном JSON, и именно эту строку обычно показывают обозреватели блоков. Различие небольшое, но оно предотвращает распространенное ошибочное прочтение: транзакция с нулевыми данными не является транзакцией, которая не переводит деньги. Почти всегда она еще и платит кому-то, а данные едут рядом во втором выходе.

OP_RETURN vs надпись

Надписи вовсе не используют OP_RETURN, и отсюда проистекает бесконечная путаница вокруг хранения данных в биткоине. Схема ordinals, выпущенная в январе 2023 года, прячет содержимое внутри ветви скрипта Taproot, которая никогда не исполняется, и эта ветвь находится в свидетеле, где каждый байт стоит одну единицу веса вместо четырех. Практическое следствие состоит в масштабе. Полезная нагрузка OP_RETURN целое десятилетие была ограничена политикой ретрансляции до 80 байт, тогда как одна надпись может приблизиться к размеру целого блока при четверти стоимости в единицах веса за байт. Runes, запущенный в апреле 2024 года, пошел в обратную сторону и намеренно кодирует свои сообщения протокола в OP_RETURN, поэтому два спора о данных в биткоине на самом деле являются спорами о двух разных механизмах.

Не путать с

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

Можно ли записать сообщение в блокчейн биткоина?

Да, в выходе OP_RETURN, и вы платите действующую ставку комиссии за каждый его байт. Максимальная устаревшая полезная нагрузка в 80 байт добавляет к вашей транзакции около 92 виртуальных байт, что примерно втрое дороже обычного платежного выхода.

Теряются ли навсегда биткоины, отправленные на выход OP_RETURN?

Отправлять нечего. Эти выходы создаются со значением ноль, и ни один кошелек не позволит вам оплатить такой выход. Если сайт просит вас отправить биткоин на адрес OP_RETURN, это мошенничество, потому что такого адреса не существует.

Действительно ли Bitcoin Core отменил ограничение в 80 байт?

Bitcoin Core 30.0 отменил ограничение размера по умолчанию и правило одного выхода на транзакцию, а Bitcoin Knots сохранил прежние, более строгие настройки по умолчанию. Ни одно из этих ограничений никогда не было правилом консенсуса, поэтому майнеры всегда могли включать более крупные данные, если хотели.

Используют ли надписи OP_RETURN?

Нет. Надписи хранят свое содержимое в неисполняемой ветви скрипта Taproot внутри свидетеля, которая оплачивается по одной единице веса за байт, а не по четыре. Данные OP_RETURN находятся в части транзакции без свидетеля и стоят вчетверо дороже за байт.

Читайте далее

Связанные термины

Еще в разделе «Справочник разработчика»

Читать эту страницу на английском