Чем отличается структура блока segwit от блока без segwit?

Есть ли разница в структуре блока segwit по сравнению с традиционным блоком без segwit? Схема будет полезна, если это возможно.

Ответы (2)

Coinbase-транзакция блока segwit должна содержать выход с обязательством по хэшу корня-свидетеля , см. BIP141 .

Обязательство записывается в scriptPubKey транзакции coinbase. Он должен быть не менее 38 байтов, включая первые 6 байтов 0x6a24aa21a9ed, то есть:

1-byte - OP_RETURN (0x6a)
   1-byte - Push the following 36 bytes (0x24)
   4-byte - Commitment header (0xaa21a9ed)
  32-byte - Commitment hash: Double-SHA256(witness root hash|witness reserved value)

39-й байт и далее: необязательные данные без согласованного значения

и свидетель ввода coinbase должен состоять из одного 32-байтового массива для зарезервированного значения свидетеля.

Если существует более одного scriptPubKey, соответствующего шаблону, предполагается, что тот, у которого самый высокий выходной индекс, является фиксацией.

На уровне транзакции транзакция segwit должна установить флаг-свидетель на 0001 и предоставить свидетелей до времени блокировки. Транзакция без SegWit не содержит ни одного из этих свойств.

Структура сделки

См. Биткойн Вики — Транзакция

Блок segwit отличается от блока без segwit тем, что требуется наличие свидетеля в выводе OP_RETURN транзакции coinbase. Кроме того, блок будет содержать данные-свидетели (да!), которые из-за увеличения ограничения размера блока до 4 000 000 единиц веса позволяют блоку превысить прежний предел размера блока в 1 МБ.

Segwit представил идентификатор транзакции-свидетеля (wtxid) для каждой транзакции в дополнение к обычному идентификатору транзакции (txid). txid не распространяется на данные-свидетели и, таким образом, не позволяет транзакциям, которые используют только входные данные SegWit, подвергаться гибкости транзакций третьей стороны (см. ). wtxid действительно покрывает данные подписи, содержащиеся в свидетеле, и, таким образом, по-прежнему уязвим. Для транзакций, не использующих SegWit, wtxid равен txid, и они по-прежнему уязвимы.

Чтобы блок зафиксировал данные свидетеля транзакций, которые не покрываются обычным корнем Меркла в заголовке блока, второе дерево Меркла вычисляется из wtxids и фиксируется в вышеупомянутом подтверждении свидетеля в выходных данных Coinbase.

Если блок не содержит segwit-транзакций, фиксация свидетеля необязательна.

  • Вы можете прочитать о структуре обязательства свидетеля здесь: BIP0141
  • Вы можете увидеть подтверждение последнего блока (558722) здесь:Отображение фиксации транзакции с высотой блока 558722

    через blockstream.info