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
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.
https://bitcoincore.org/en/2016/01/26/segwit-benefits/#block-capacitysize-increase
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/
https://blockstream.com/2017/07/31/en-segwit-myths-debunked/
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
Bordalix
Murch