Welche Arten von Transaktionen weisen eine quadratische Signatur-Hashing-Skalierung auf?

Es wurde festgestellt:

Ein großes Problem bei einfachen Ansätzen zur Erhöhung der Bitcoin-Blockgröße besteht darin, dass das Signatur-Hashing bei bestimmten Transaktionen eher quadratisch als linear skaliert.

https://bitcoincore.org/en/2016/01/26/segwit-benefits/#linear-scaling-of-sighash-operations

Was sind einige Beispiele für Transaktionen mit diesem Verhalten, und was haben sie gemeinsam?

Zeigt eine einfache Alice-pays-Bob-Transaktion mit einer Eingabe und zwei Ausgaben eine quadratische Signatur-Hashing-Skalierung?

Antworten (2)

Quadratisch bedeutet, dass etwas als quadratische Funktion von etwas anderem wächst. Wenn Sie nur von einer One-Input-Transaktion sprechen, ändert sich nichts.

Das quadratische Hashing-Problem besteht darin, dass die zu hashende Datenmenge zum Berechnen oder Verifizieren von Signaturen mit dem Quadrat der Anzahl der Nicht-Segwit-Eingaben wächst.

Die Art der Ein-/Ausgabeskripte spielt also keine Rolle. Die O(n2)-Abhängigkeit wird durch die aktuelle Hashing-Methode verursacht, die heute jede Mainnet-Transaktion betrifft? Warum in diesem Fall den Begriff „bestimmte Transaktionen“ im Zitat für die ursprüngliche Frage verwenden und nicht „alle Transaktionen“?
Richtig, jede Transaktion unterliegt den "Sighashing-Zeitskalen quadratisch mit der Anzahl der Eingaben", aber nur bei einigen Transaktionen (=solchen mit vielen Eingaben) führt dies zu einer merklich langsameren Validierung.

Das quadratische Hashing-Problem tritt bei der Überprüfung aller Pre-Segwit-Transaktionsformate auf. Es ergibt sich aus der Methode zur Überprüfung der Eingabeskripte.

Für jede Eingabe, die die Transaktion hat, werden alle anderen Eingaben von der Transaktion entfernt, um diese verbleibende Eingabe mit der ausgegebenen Ausgabe sowie der entsprechenden Signatur zu vergleichen. Da der Aufwand für das Strippen der Transaktion linear von der Anzahl der Eingaben abhängt und das Strippen für jede Eingabe wiederholt wird, leisten wir n-fache Arbeit, die linear mit n skaliert: O(n)*O(n) = O(n²), die Kosten wachsen quadratisch mit der Anzahl der Eingaben. Das bedeutet, dass sich bei doppelt so vielen Eingaben der Rechenaufwand für die Verifikation vervierfacht.

Rusty Russell erklärte das Rätsel in seinem Blog, als er „The Megatransaction: Why Does It Take 25 Seconds?“ analysierte. .

Ich verstehe. n ist die Anzahl der Eingänge. Es gibt eine lineare Zeitabhängigkeit O(n) für das Hashing einer einzelnen Eingabe. Es gibt eine zweite lineare Zeitabhängigkeit O(n), da die Prozedur für jede Eingabe wiederholt wird. Die Kombination der Zeitabhängigkeiten ergibt eine O(n2)-Skalierung. Mit anderen Worten, die Verdoppelung der Anzahl der Eingaben (für eine Transaktion oder Millionen) vervierfacht die Signatur-Hashing-Zeit. Dies gilt für jede Nicht-Segwit-Transaktion und ist unabhängig vom Inhalt der Ein-/Ausgabeskripte selbst. Recht?
Ja genau. Ich habe meine Antwort aktualisiert.