Глоссарий / Транзакции и комиссии
Номер версии транзакции
- Что такое номер версии транзакции?
- Номер версии транзакции занимает первые четыре байта транзакции и сообщает проверяющим узлам, какие наборы необязательных правил, например относительные временные блокировки, к ней применяются.
Смысл когда-либо имели только три значения. Это поле не является версией программного обеспечения, не является версией протокола и не служит подсказкой о том, какие типы адресов внутри транзакции, а именно так чаще всего и предполагают люди, впервые его увидев. Консенсус в значительной мере к нему безразличен, а политика ретрансляции нет, и в этом разрыве вся суть поля.
Как это работает
Версия занимает байты с 1 по 4 сериализованной формы, перед счетчиком входов, и Bitcoin Core читает ее как знаковое 32-битное целое число.
Версия 1 является исходной, ее использовала каждая транзакция в первые годы существования цепи. Версия 2 существует потому, что BIP68 требовал способа переосмыслить номера последовательности как относительные временные блокировки, не делая недействительными более старые транзакции, поэтому новое значение было привязано к повышению версии. Начиная с блока 419 328 в июле 2016 года номера последовательности транзакции, объявляющей версию 2, проверяются как периоды ожидания, а у транзакции, объявляющей версию 1, нет. Современные кошельки по умолчанию ставят версию 2 независимо от того, используют они временные блокировки или нет, поэтому почти все, что вы смотрите в обозревателе блоков, показывает 2.
Версия 3 появилась вместе с Bitcoin Core 28.0 в октябре 2024 года под названием topology restricted transactions, или TRUC. Объявление версии 3 означает выбор более строгих условий: транзакция всегда считается заменяемой, у нее может быть не более одного неподтвержденного родителя и одного неподтвержденного потомка, потомок ограничен 1000 виртуальными байтами, а сама транзакция ограничена 10 000. Эти ограничения звучат как шаг назад, пока вы не столкнетесь с пиннингом, когда контрагент прикрепляет к вашей неподтвержденной транзакции огромного дешевого потомка, чтобы повышение комиссии стало недоступным по цене. Реализации Lightning приняли версию 3 именно по этой причине.
Ничто в правилах консенсуса не отвергает транзакцию за то, что у нее версия 7 или версия 0. Это делает стандартность: Bitcoin Core не ретранслирует и не включает в блок версии вне принятого набора, поэтому необычная версия означает транзакцию, которая должна попасть к майнеру каким-то другим путем.
Где это видно
Каждый обозреватель блоков показывает версию в верхней части страницы сведений о транзакции, а decoderawtransaction в Bitcoin Core возвращает ее первым полем.
Для всех, кто покупает или хранит биткоин, это средство диагностики, а не основание для решения. Вы ее никогда не выбираете, это делает ваш кошелек. Практическая ценность версии в распознавании незнакомого программного обеспечения: кошелек, который в мире относительных временных блокировок все еще создает транзакции версии 1, является старым, а платеж, объявляющий версию 3, почти наверняка вышел из механизма каналов узла Lightning, а не от человека, нажавшего кнопку отправки.
Номер версии транзакции vs номер версии блока
Транзакции и блоки оба несут четырехбайтовое поле версии, и они никак друг с другом не связаны.
Версия блока отражает обновления консенсуса. Блоки версии 2 стали обязательными на блоке 227 931 в марте 2013 года, когда BIP34 потребовал указывать высоту блока внутри входа coinbase, версия 3 ввела обязательное строгое кодирование подписей в формате DER по BIP66, а версия 4 появилась вместе с развертыванием CHECKLOCKTIMEVERIFY. С 2015 года поле было перепрофилировано снова, теперь как набор битов сигнализации по BIP9, чтобы майнеры могли голосовать за мягкий форк, изменяя один его бит. Версия транзакции ничего этого не делает. Она никогда не сигнализирует, никогда не растет с каждым обновлением и относится к одной транзакции, а не к набору правил всей сети.