Was ist das Blockgrößenlimit nach Segwit und wie gehen Legacy-Knoten mit Segwit-Transaktionen um?

Normalerweise habe ich gehört, dass die Bitcoin-Blockgröße 1 MB beträgt, aber mit dem Segwit-Update kann die Blockgröße bis zu 4 MB betragen, also sollten wir sagen, dass die Blockgröße 4 MB beträgt, richtig? Darüber hinaus erhalten Legacy-Knoten nur die Ein- und Ausgabedaten von Segwit-Transaktionen. Wie überprüfen die Legacy-Knoten die Gültigkeit von Segwit-Transaktionen? Der Legacy-Knoten kann dies während der Weitergabe von einem Segwit-Knoten überprüfen, aber wie funktioniert es bei der Weitergabe zwischen zwei Legacy-Knoten, bei denen die Segwit-Daten vollständig fehlen? Danke

Antworten (2)

Normalerweise habe ich gehört, dass die Bitcoin-Blockgröße 1 MB beträgt, aber mit dem Segwit-Update kann die Blockgröße bis zu 4 MB betragen, also sollten wir sagen, dass die Blockgröße 4 MB beträgt, richtig?

Vor der Aktivierung von segwit war der Block auf 1.000.000 Bytes begrenzt. Dieses Limit wurde mit der Aktivierung von SegWit durch ein Blockgewichtslimit von 4.000.000 Gewichtseinheiten (WU) ersetzt. Ein Byte Zeugendaten trägt 1 WU bei und ein Byte Nichtzeugendaten trägt 4 WU zum Limit bei. Theoretisch könnte der Block also bis zu 4.000.000 Bytes groß sein, wenn er ausschließlich aus Witness-Daten zusammengesetzt wäre. In der Praxis wird erwartet, dass sogar Blöcke, die nur aus Segwit-Transaktionen bestehen, im Bereich von 2,1 bis 2,7¹ MB landen, da Transaktionen immer über Nicht-Zeugen-Daten verfügen. Blocksize ist daher nicht mehr die korrekte Bezeichnung für das Limit, sondern wir sollten sagen, dass „das Blockgewichtslimit 4 MWU beträgt“ .

Darüber hinaus erhalten Legacy-Knoten nur die Ein- und Ausgabedaten von Segwit-Transaktionen. Wie überprüfen die Legacy-Knoten die Gültigkeit von Segwit-Transaktionen? Der Legacy-Knoten kann dies während der Weitergabe von einem Segwit-Knoten überprüfen, aber wie funktioniert es bei der Weitergabe zwischen zwei Legacy-Knoten, bei denen die Segwit-Daten vollständig fehlen?

Die Transaktions-ID (txid) von Segwit-Transaktionen wird aus der gestrippten Transaktion berechnet, dh den Transaktionsdaten ohne die Witness-Daten. Dies hat zwei Auswirkungen: Erstens verwenden Legacy-Knoten dieselbe Kennung für Segwit-Transaktionen wie vollständige Knoten. Zweitens ist die txid einer nicht signierten Transaktion die gleiche wie die der signierten Transaktion (nützlich für die Einrichtung von Smart Contracts, z. B. LN-Kanälen). Wenn ein Legacy-Knoten eine Segwit-Transaktion anfordert, erkennt der andere Knoten, dass der anfordernde Knoten auf einer veralteten Version ist, und stellt ihm die entfernte Transaktion bereit. Legacy-Knoten können die gestrippte Transaktion auch untereinander weiterleiten. Um die Signaturen abzudecken, haben Segwit-Transaktionen zusätzlich eine Witness Transaction ID (wtxid), die die vollständigen Daten der signierten Transaktion abdeckt. Segwit-Blöcke müssen sich auch zu den signierten Transaktionen verpflichten, obwohl! Dazu wird ein zweiter Merkle-Baum aus den wtxids aufgebaut. Die Merkle-Wurzel des wtxid-Baums wird als „Witness Commitment“ in einer OP_RETURN-Ausgabe der Coinbase-Transaktion gespeichert. Dies ist zusätzlich zur regulären Merkle-Wurzel im Block-Header, der sich an die txids der Transaktionen bindet und für Legacy-Knoten lesbar bleibt.

Legacy-Knoten erreichen denselben UTXO-Satz, da gestrippte Transaktionen angeben, welche UTXO in den Eingaben ausgegeben und welche neuen UTXO erstellt werden. Da Legacy-Knoten nichts über die Zeugendaten wissen, können sie die Signaturen von Segwit-Transaktionen nicht überprüfen. Daher sind Legacy-Knoten keine vollständig validierenden Knoten (vollständige Knoten), die alle Regeln des Bitcoin-Protokolls unabhängig durchsetzen (insbesondere erzwingen sie nicht die Regeln von Segwit). Die Segwit-Transaktionen erscheinen für die Legacy-Knoten als gültig, da die Eingaben nach ihrem datierten Verständnis der Regeln des Bitcoin-Protokolls „jeder ausgeben kann“ zu sein scheinen.


¹Am 11.08.2022 erreichte Block 748.918 eine Größe von 2.765.062 B und überschritt damit zum ersten Mal diesen geschätzten Bereich, indem er viele 2-von-3-P2WSH-Eingaben enthielt. H/T @bordalix für den Hinweis.

Nur um Sie wissen zu lassen, dass Block 748918 eine Größe von 2,77 MB hat
Danke, ich habe meine Antwort aktualisiert und darüber getwittert :)
  1. Segregated Witness nutzt daher diese Gelegenheit, um das Blockgrößenlimit auf fast 4 MB zu erhöhen, und fügt ein neues Kostenlimit hinzu, um sicherzustellen, dass die Ressourcennutzung der Blöcke ausgeglichen bleibt (dies führt effektiv zu einem effektiven Limit von näher an 1,6 bis 2 MB).

https://bitcoincore.org/en/2016/01/26/segwit-benefits/#block-capacitysize-increase

  1. Die maximale Blockgröße beträgt 4.000.000 Bytes (4 MB). Dies liegt daran, dass die Blockgewichtungsberechnung Basisgröße (in MB) * 3 + Gesamtgröße (in MB) = Blockgewicht ist (siehe BIP 141). Da die einzigen Einheiten MB sind, sind die einzigen Einheiten des Blockgewichts auch MB, daher ist die maximale Blockgröße gleich dem Blockgewicht.

Theoretisch können Sie 4M ziemlich nahe kommen, indem Sie Transaktionen haben, die fast ausschließlich aus Zeugendaten bestehen. In der Praxis wird das bei normalen Finanztransaktionen, näher an 2M, nicht passieren.

https://bitcoin.stackexchange.com/a/54949/

  1. Mit SegWit können Sie einfach Transaktionsdaten von Nichtzeugen überprüfen, ohne die Zeugen herunterzuladen (und dann zu verwerfen), was das Problem löst, dass Light-Clients Dinge herunterladen müssen, die ihnen egal sind und die sie sowieso nicht überprüfen können.

https://blockstream.com/2017/07/31/en-segwit-myths-debunked/

  1. Wenn Segwit-Transaktionen an Legacy-Knoten gesendet werden, werden die Zeugendaten entfernt. Der Schlüssel ist, dass diese „gestrippten“ Transaktionen immer noch gültige Transaktionen auf Legacy-Knoten sind, was uns gegenüber Nicht-Segwit-Transaktionen Einsparungen bringt. Somit können mehr Transaktionen in den an Legacy-Knoten gesendeten Block passen, ohne die 1.000.000-Byte-Grenze zu überschreiten.

Segwit-Knoten erhalten Segwit-Transaktionen und -Blöcke, die die Zeugendaten enthalten, indem alternative Netzwerknachrichten verwendet werden. Die neuen Netzwerknachrichten werden in BIP144 als Teil von Segwit definiert. Die Segwit-Blöcke, die die Zeugendaten enthalten, können über 1.000.000 Bytes groß sein. Legacy-Knoten erhalten, wie bereits erwähnt, die gleichen Blöcke und Transaktionen, jedoch mit entfernten Zeugendaten. Dies ist eine Möglichkeit, Segwit zu einer Soft Fork zu machen.

Die Segwit-Blöcke werden durch etwas namens Block Weight eingeschränkt. Das Blockgewicht ist ein neues Konzept, das in Segwit eingeführt wurde und pro Transaktion berechnet wird.

Jede Transaktion hat ein „Gewicht“, das folgendermaßen definiert ist:

(tx size with witness data stripped) * 3 + (tx size)

Segwit-Transaktionen werden ohne Witness-Daten an Legacy-Knoten übertragen, sodass diese Formel immer zu Blöcken führt, die an Legacy-Knoten übermittelt werden und kleiner oder gleich 1.000.000 Bytes sind. Auch aus diesem Grund ist Segwit eine weiche Gabel.

https://link.medium.com/3lvCPzo5q9

  1. Größe vs. Gewicht: Was ist Blockgewicht und wie unterscheidet es sich von der Blockgröße?