Wie unterscheidet sich die Struktur eines Segwit-Blocks von einem Nicht-Segwit-Block?

Gibt es einen Unterschied in der Struktur eines Segwit-Blocks im Vergleich zu einem herkömmlichen Nicht-Segwit-Block? Ein Diagramm wäre hilfreich, wenn möglich.

Antworten (2)

Die Coinbase-Transaktion eines Segwit-Blocks muss eine Ausgabe mit einer Verpflichtung zum Zeugen-Root-Hash enthalten , siehe BIP141 .

Das Commitment wird in einem scriptPubKey der Coinbase-Transaktion aufgezeichnet. Es muss mindestens 38 Byte groß sein, wobei die ersten 6 Byte von 0x6a24aa21a9ed, also:

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)

Ab 39. Byte: Optionale Daten ohne Konsensus-Bedeutung

und der Zeuge der Coinbase-Eingabe muss aus einem einzigen 32-Byte-Array für den reservierten Wert des Zeugen bestehen.

Wenn es mehr als einen scriptPubKey gibt, der mit dem Muster übereinstimmt, wird angenommen, dass derjenige mit dem höchsten Ausgabeindex das Commitment ist.

Auf Transaktionsebene muss eine Segwit-Transaktion das Witness-Flag auf 0001 setzen und die Witnesses vor der Sperrzeit bereitstellen. Eine Nicht-Segwit-Transaktion enthält keine dieser Eigenschaften.

Transaktionsstruktur

Siehe Bitcoin Wiki - Transaktion

Ein Segwit-Block unterscheidet sich von einem Nicht-Segwit-Block darin, dass er die Witness Commitment in einer OP_RETURN-Ausgabe der Coinbase-Transaktion haben muss. Zusätzlich wird der Block Zeugendaten (duh!) enthalten, die es dem Block aufgrund der Erhöhung des Blockgrößenlimits auf 4.000.000 Gewichtseinheiten ermöglichen, das frühere Blockgrößenlimit von 1 MB zu überschreiten.

Segwit führte die Witness Transaction ID (wtxid) für jede Transaktion zusätzlich zur regulären Transaktions-ID (txid) ein. Die txid deckt keine Zeugendaten ab und verhindert somit, dass Transaktionen, die nur Segwit-Eingaben verwenden, der Transaktionsformbarkeit durch Dritte unterliegen (siehe ). Die wtxid deckt die im Witness enthaltenen Signaturdaten ab und ist daher immer noch angreifbar. Bei Nicht-Segwit-Transaktionen entspricht die wtxid der txid und sie sind weiterhin anfällig.

Damit sich der Block auf die Witness-Daten von Transaktionen verpflichtet, die nicht durch die reguläre Merkle-Wurzel im Block-Header abgedeckt sind, wird ein zweiter Merkle-Baum aus den wtxids berechnet und in der oben genannten Witness-Commitment in der Coinbase-Ausgabe übergeben.

Wenn ein Block keine Segwit-Transaktionen enthält, ist das Witness Commitment optional.

  • Sie können hier über die Witness-Commitment-Struktur lesen: BIP0141
  • Sie können die Zeugenverpflichtung des letzten Blocks (558722) hier sehen:Zeigt die Commitment-Transaktion der Blockhöhe 558722

    über blockstream.info