Wo wird die Signatur in einer SegWit-Transaktion gespeichert?

Ich verstehe, dass SegWit Transaktionsblockdaten kleiner macht, indem die Signatur nicht im Block gespeichert wird, sodass mehr Transaktionen in 1 MB passen. Dies liegt daran, dass die Signatur nicht mehr in der Blockchain gespeichert wird. Die Signatur macht fast 70 % des Datengewichts des Blocks aus. Bei einer SegWit-Transaktion wird also 70 % weniger in der Blockchain gespeichert. Aber wo werden die Signaturen gespeichert, wenn nicht in der Blockchain?

Antworten (2)

Das ist nicht genau. Der Zeuge wird in der Blockchain gespeichert.

Beim Segwit-Format ist die Signatur Teil des Zeugen, der Zeuge Teil der Transaktion und die Transaktion wird vollständig in den Block geschrieben. Knoten, die Segwit verstehen, laden die vollständige Transaktion einschließlich der Signatur herunter und speichern sie.

Segwit ist jedoch aufwärtskompatibel aufgebaut. Es ist so gemacht, dass es möglich ist, eine "gestrippte Version" einer Segwit-Transaktion zu erstellen, bei der der "Zeuge" weggelassen wird. Diese abgespeckte Version ist eine nicht standardmäßig gültige Transaktion gemäß den Pre-Segwit-Regeln. Dies bedeutet, dass Pre-Segwit-Knoten es nicht weitergeben, wenn es unbestätigt ist, sondern es akzeptieren, wenn es in einen Block aufgenommen wird. Segwit-fähige Knoten würden die gestrippte Version als unvollständig betrachten und sind daher darauf angewiesen, die vollständige Version der Transaktion von einem anderen Segwit-fähigen Knoten zu erhalten.

Da die Transaktionsausgaben Teil der gestrippten Transaktion sind (weil sie nicht Teil des Zeugen sind), kommen Pre-Segwit-Knoten zu demselben Schluss in Bezug auf das Eigentum an Geldern, indem sie den gestrippten Blöcken folgen wie segwit-fähige Knoten, die die vollständigen lesen Blöcke.

Ein Teil der Kritik an Segwit ist, dass Pre-Segwit-Knoten die Signatur von Segwit-Transaktionen nicht verifizieren, da sie den Zeugen nicht erhalten und nicht wissen, was sie damit anfangen sollen. Dies bedeutet, dass ein Legacy-Knoten möglicherweise einen segwit-ungültigen Block akzeptiert, bis dieser Block nicht mehr Teil der am meisten funktionierenden Kettenspitze ist. Ein solcher Block würde sich jedoch nicht gut im Netzwerk ausbreiten, da etwa 89 % der Knoten im Netzwerk segwit-fähig sind . Wenn Sie einen erheblichen Geldbetrag aus einer Segwit-Transaktion erhalten und einen Segwit-unfähigen Knoten betreiben, sollten Sie möglicherweise auf zusätzliche Bestätigungen warten, bevor Sie es für bare Münze nehmen. Bei erheblichen Beträgen wäre dies jedoch eine großartige Idee.

Vielen Dank für diese ausführliche Erklärung, aber ich bin mir nicht sicher, ob ich den allerletzten Satz verstehe
@EricLavault: Wenn Sie viel Geld erhalten, kann es für Leute interessant werden, Sie auszutricksen. Wenn Sie auf mehr als eine Bestätigung warten, wird es teurer und schwieriger für sie.
Dies ist keine Antwort auf meine Frage ... meine Frage war ; Wo wird die Signatur gespeichert, wenn sie von der Transaktion getrennt wird (SegWit-Format)? in der blockchain oder außerhalb der blockchain ?
@laizess: In der Blockchain. Siehe meinen zweiten Satz: "Im Segwit-Transaktionsformat ist die Signatur Teil des Zeugen, der Zeuge ist Teil der Transaktion und die Transaktion ist Teil des Blocks." Tatsächlich ist die Signatur nicht von der Transaktion getrennt, aber sie ist nur vom Rest des Eingabeskripts getrennt, aber immer noch innerhalb derselben Transaktion.
@Murch Das ist verwirrend. Wenn der Zeuge im Block ist , warum zählt er dann nicht zur Blockgröße? Nehmen Sie die Möglichkeit an, dass es nicht Teil des Blocks ist und stattdessen von einem separaten Kanal kommt. In diesem Fall ist klar, dass für jede Transaktion weniger Daten in der Blockchain gespeichert werden. Was Sie beschreiben, bringt genau die gleiche Menge an Daten in die Blockchain; also ich sehe nicht, wie es das Problem löst.

Es wird immer noch in der Blockchain gehalten. Es wird nur so gehalten, dass Nicht-Segwit-Clients die Signatur niemals sehen oder speichern.

Wenn sich die Signatur noch in der Blockchain befindet, wie ist es dann möglich, 70 % des Blockspace einzusparen, um mehr Transaktionen ohne die Signatur in denselben Block zu stellen? Unabhängig davon, ob Nicht-Segwit-Clients sie sehen können oder nicht? Wenn sich die Signatur noch in der Blockchain befindet, getrennt von der Transaktion, wie kann die Signatur jederzeit identifiziert werden, dass die Transaktionen gültig waren ( Signatur ) ? Wenn Transaktion und Signatur getrennt sind, aber beide in der Blockchain gespeichert werden, warum sollten sie dann überhaupt getrennt werden?
Segwit "spart" nicht wirklich Blockspace. Es ist ein Buchhaltungstrick. Es verschiebt Bytes aus dem Bereich, der gegen die Blockgröße gezählt wird, in einen Bereich, der nicht durch die (Presegwit) Blockgröße gezählt wird. Ein Nicht-Segwit-Knoten sieht niemals Segwit-Signaturen und kann sie nicht validieren. Dafür gibt es zwei Hauptgründe. 1) Die effektive Blockgröße kann ohne Hard Fork erhöht werden. 2) Es ist schön, eine Kennung für die Transaktion zu haben, die nicht geändert werden kann, ohne die Transaktion neu zu signieren.