Источник: Лю Цзяолянь
В четверг курс BTC немного колебался в диапазоне 86–87 тыс. Март 2025 года почти закончился. Март закончился, и первая четверть подходит к концу. Как сообщает Today’s Teaching Chain, этот первый квартал может оказаться худшим кварталом с 2018 года.
Время как вода, а годы как песни. BTC — это музыка, которую играет время. Однако в первые годы, особенно до 2013 года, в движении присутствовали некоторые разногласия. Эти несогласованные банкноты представляют собой повторяющиеся транзакции по чеканке монет (транзакции по чеканке монет).
Так называемая coinbase-транзакция (транзакция чеканки монет), также известная как coinbase-транзакция, является первой транзакцией в каждом вновь сгенерированном блоке BTC. Майнер, который добывает блок, обычно использует эту транзакцию для отправки вознаграждения за блок на свой собственный адрес.
Как мы все знаем, обычные транзакции BTC не могут быть повторены. Потому что обычные транзакции должны расходовать неизрасходованный выход существующей транзакции, так называемый UTXO, который цепочка сравнивает с «монетами». Эти монеты разные, поэтому каждая транзакция, расходующая эти монеты, также должна быть разной. Если монета тратится двумя транзакциями, это становится так называемой «двойной тратой», что строго запрещено BTC.
Однако было и исключение. Это и есть торговля на основе монет. Транзакции Coinbase являются транзакциями чеканки, поэтому вместо того, чтобы тратить монеты UTXO, новые BTC могут создаваться прямо из воздуха в качестве вознаграждения майнерам.
Если майнер добывает несколько блоков подряд и использует одну и ту же информацию при построении данных транзакции Coinbase, например, адрес получателя и другую дополнительную информацию, то можно построить две совершенно одинаковые транзакции. Это отражается в блокчейне в виде двух транзакций на основе монет, расположенных в разных блоках, но с одинаковыми данными транзакции и значением хэша.
Это повторяющаяся транзакция Coinbase.
Этот баг Bitcoin реален. Вот два реальных примера. Вы можете открыть любой браузер блокчейна BTC, чтобы проверить:
Высота блока 91812 и высота блока 91842 содержат две coinbase-транзакции с абсолютно одинаковыми значениями хэша.
Высота блока 91722 и высота блока 91880 содержат две coinbase-транзакции с абсолютно одинаковыми значениями хэша.
Хорошей новостью является то, что никто никогда не использовал такие дублирующие транзакции coinbase, чтобы потратить их и создать последующие обычные транзакции, которые также идентичны, тем самым загрязняя все пространство UTXO. После внедрения BIP-30 посредством софтфорка 15 марта 2012 года этот тип дублирующих транзакций больше не мог использоваться.
Кроме того, в марте 2013 года был активирован софтфорк BIP-34, который добавил информацию о высоте блока в качестве «номера версии» к конструкции транзакции coinbase, что сделало невозможным повторение хэш-значения транзакции coinbase.
В частности, с технической точки зрения высота блока добавляется к началу scriptSig транзакции coinbase. Первый байт — это количество байтов значения высоты блока — в настоящее время 0x03, что означает, что последующие 3 байта указывают высоту блока транзакции coinbase. Скрипт scriptSig в транзакции coinbase также называется скриптом coinbase. Это поле, которое майнеры могут свободно настраивать. Вначале он позволял записывать произвольные данные. Например, Сатоши Накамото написал заголовок The Times в этой области.
Более интуитивное сравнение. Давайте сначала рассмотрим scriptSig транзакции coinbase блока № 91812, где возникает проблема дублирования транзакции coinbase: 0456720e1b00 (OP_PUSHBYTES_4 56720e1b OP_0).
Когда я писал эту статью, скрипт транзакции coinbase для блока № 889678, который только что был создан Jiaolian, был следующим: 034e930d044260e5672f466f756e6472792055534120506f6f6c202364726f70676f6c642f23648154608b1500000000000 (OP_PUSHBYTES_3 4e930d OP_PUSHBYTES_4 4260e567 OP_PUSHBYTES_47).
Он начинается с 0x03, а следующие три байта — 43930d, что означает, что высота блока составляет 0x0d934e в шестнадцатеричном формате или 889678 в десятичном формате.
Плохая новость заключается в том, что до исправления в 2013 году некоторые из сгенерированных транзакций Coinbase также начинались с 0x03! Это позволяет будущим майнерам использовать это для намеренного создания дубликатов транзакций Coinbase.
Позвольте мне привести вам конкретный пример. Скрипт coinbase блока #164384 начинается с 0x03: 03d6441e014b0136 (OP_PUSHBYTES_3 d6441e OP_PUSHBYTES_1 4b OP_PUSHBYTES_1 36).
Мы не знаем, каковы были намерения майнера, когда он писал этот скрипт. Но мы знаем, что у него есть возможность воспользоваться этой уязвимостью и попытаться создать совершенно идентичную транзакцию Coinbase в будущем.
Сколько точно времени? Нам нужно провести простой расчет.
Согласно определению BIP-34, 3 байта, следующие за 0x03, представляют высоту блока. Для приведенного выше примера это d6441e, что в шестнадцатеричном формате равно 0x1e44d6 или 1983702 в десятичном формате.
Когда будет произведен блок №1983702? Поскольку BTC производит блок примерно каждые 10 минут, легко вывести, что от текущего блока № 889678 до будущего блока № 1983702 пройдет (1983072 - 889678)/6/24/365 = 20,8 лет, что составляет около 2046 года.
Плохая новость в том, что таких блоков все еще много. Вот полная таблица:
block_height,coinbase_height,равный
164384,1983702,ИСТИНА
169895,3708179,ИСТИНА
170307,3709183,ИСТИНА
171896,3712990,ИСТИНА
172069,3713413,ИСТИНА
172357,3714082,ИСТИНА
172428,3714265,ИСТИНА
174151,5208854,ИСТИНА
176684,490897,ИСТИНА
183669,3761471,ИСТИНА
196988,4275806,ИСТИНА
201577,5327833,ИСТИНА
206039,7299941,ИСТИНА
206354,7299941,ИСТИНА
209920,209921,ИСТИНА

Как видно из гистограммы выше, наибольшие риски ожидаются примерно в 2078 году.
Как видно из гистограммы выше, наибольшие риски ожидаются примерно в 2078 году.
Хорошей новостью является то, что при нынешней огромной и будущей еще большей вычислительной мощности сети, даже если бы у майнеров в то время была такая идея, им было бы сложно захватить права упаковки (права генерации, права майнинга) блока на этой высоте.
Более того, насколько скучно должно быть майнерам, чтобы пойти на такие большие усилия, чтобы заполучить права на майнинг, а затем создать транзакцию, которую невозможно будет потратить снова и которая имитирует данные прошлых лет, тем самым заставляя себя терпеть напрасные убытки?
Таким образом, можно сделать вывод, что нельзя сказать, что ошибка с дублированием транзакций Coinbase полностью решена, но вряд ли она вызовет какие-либо серьезные волнения.
Все комментарии