Wie verhindert die Aufbewahrung des Zeugen außerhalb des Blocks Formbarkeit?

Ich habe eine Frage dazu, wie getrennte Zeugen arbeiten.

Ich lese diesen Beitrag und in der Antwort existiert dieser Satz

Da Signaturdaten (Zeugendaten) außerhalb der Transaktion (und außerhalb des Standardblocks) gespeichert werden, bedeutet dies, dass diese Daten nicht auf die Blockgröße angerechnet werden müssen.

Jetzt habe ich drei Fragen zu diesem Argument

  1. Die Daten des scriptSig werden von TransactionInput nach RawTransaction verschoben, also hat RawTransaction keine Formbarkeit? Vielleicht kann ich mir nicht vorstellen, was wirklich mit Nicht-Zeugen-Transaktionen während der Formbarkeit passiert ist, können Sie mir ein Beispiel geben?
  2. Warum werden die Zeugendaten außerhalb des Blocks gespeichert? Was meinst du? Ich glaube, ich verstehe den Sinn dieser Platzersparnis nicht, da die Zeugendaten in der blk-Datei vorhanden sind
  3. Wie (wenn ich das richtig verstehe) verwendet Bitcoin Core den Merkle-Baum zur Überprüfung der Signatur? (Diese Frage hängt mit der ersten zusammen, ich glaube nicht, dass ich das Phänomen der Formbarkeit so verstanden habe, wie es passiert.)

Antworten (2)

Die Daten des scriptSig werden von TransactionInput nach RawTransaction verschoben, also ist die Raw-Transaktion nicht formbar? Vielleicht kann ich mir nicht vorstellen, was wirklich mit Nicht-Zeugen-Transaktionen während der Formbarkeit passiert ist, können Sie mir ein Beispiel geben?

Die Transaktions-ID ist ein Hash der gesamten Transaktionsdatenstruktur (Version, Eingaben, Ausgaben, Signaturen, Anzahl der Eingaben und Ausgaben, Sperrzeit, alles). Elliptische-Kurven-Signaturen, wie sie von Bitcoin verwendet werden, enthalten eine Zufallszahl als Teil der Signatur. Die Verwendung einer anderen Zufallszahl führt ebenfalls zu einer gültigen, aber anderen Signatur. Wenn sich die Signatur ändert, würde sich auch der Hash des gesamten Transaktionsobjekts ändern.

Bei segregierten Witness-Transaktionen sind diese Signaturdaten nicht Teil der Basistransaktionsdatenstruktur – das bedeutet, dass eine Änderung der Signatur die txid nicht mehr ändert, da der Rest der Transaktion nicht geändert wurde.

Warum werden die Zeugendaten außerhalb des Blocks gespeichert? Was meinst du? Ich glaube, ich verstehe den Sinn dieser Platzersparnis nicht, da die Zeugendaten in der blk-Datei vorhanden sind

Das Verschieben der Zeugendaten aus dem Block ermöglicht es Bitcoin, effektiv mehr Transaktionen in einen Block zu packen – Der Platz, der zuvor von allen Signaturen verwendet wurde, ist jetzt verfügbar, um weitere Transaktionen hinzuzufügen.

Wie (wenn ich das richtig verstehe) verwendet der Bitcoin-Kern den Merkle-Baum zur Überprüfung der Signatur? (Diese Frage hängt mit der ersten zusammen, ich glaube nicht, dass ich das Phänomen der Formbarkeit so verstanden habe, wie es passiert.)

Merkle-Bäume haben nichts mit der Signaturprüfung zu tun. Merkle-Bäume werden verwendet, um eine Verpflichtung aufzubauen, zu der Transaktionen in einen Block aufgenommen werden, der dann im Block-Header platziert und mithilfe des Proof-of-Work-Systems gesperrt wird. Dies wirkte sich auf die Transaktionsformbarkeit aus, da das Ändern einer Transaktions-ID innerhalb der für den Block ausgewählten Transaktionen den Merkle-Baum ändern würde - dies ist aus den oben genannten Gründen nicht mehr möglich.

Vielen Dank für Ihre Antwort, aber ich verstehe nicht, weil definiert ist, dass die Zeugendaten außerhalb des Blocks liegen. Was ist außerhalb des Blocks gemeint? warum dann, wenn die Daten innerhalb des Blocks deserialisiert werden?
Getrennte Zeugendaten sind immer noch Teil des Blocks und sogar dazu verpflichtet. Es befindet sich nur in einem Bereich, der (a) nicht zu txids beiträgt (um die Formbarkeit zu beheben) und (b) von alten Knoten nicht gesehen wird, wodurch die bestehenden Größenbeschränkungen umgangen werden.
Ah, ok danke, zu dem Problem der bestehenden Größenbeschränkungen gibt es eine BIP? Wenn ja, wie heißt du?
Eine weitere Frage @PieterWuille zur Formbarkeit der Transaktions-ID, wenn ich eine neue Transaktion erstelle, die ich nicht bezeuge, und ich an das Netzwerk Bitcoin sende, wie sich diese Transaktions-ID ändert? Die Art und Weise, wie txid berechnet wurde, ermöglicht es jedem, kleine Änderungen an der Transaktion vorzunehmen
BIP62 listet eine Reihe bekannter Möglichkeiten auf, Transaktionen zu manipulieren.

Warum werden die Zeugendaten außerhalb des Blocks gespeichert? Was meinst du? Ich glaube, ich verstehe den Sinn dieser Platzersparnis nicht, da die Zeugendaten in der blk-Datei vorhanden sind.

Die Unterschriften sind im Block. Alle Signaturen eines Blocks bilden einen weiteren Merkle-Baum und werden in einer Ausgabe des Coinbase-Tx gespeichert. Ich denke, dies bezieht sich auf das "UTXO-Set", das wie ein Hauptbuch ist, in dem die Miner die UTXOs aufzeichnen und überprüfen. Segwit TXs behalten die Signaturen nicht in der TXID, also wird der Zeuge im Block gespeichert, aber nicht im "UTXO-Set".

Das ist richtig, aber verwirrend. Transaktionseingaben schaffen es auch nie in das UTXO-Set, aber sie werden nicht getrennt.