Was ist der Kontrollblock in Taproot?

Was ist die Definition von „Kontrollblock“ im Zusammenhang mit Taproot?

Darauf wird in standard.cpp im Bitcoin Core Repo und in BIP 341 verwiesen .

Antworten (2)

Es gibt zwei Möglichkeiten, eine Taproot-Ausgabe auszugeben:

  • Über den Schlüsselpfad : Einfach eine BIP340-Signatur bereitstellen, die die Ausgabentransaktion mit dem öffentlichen Schlüssel in der Ausgabe signiert.
  • Durch den Skriptpfad : Enthüllen, dass die Ausgabe tatsächlich ein optimierter Schlüssel war, indem das Original und die Optimierung enthüllt wurden und gezeigt wurde, dass diese Optimierung auf ein Skriptblatt festgeschrieben wird. Hier kommt der Steuerblock ins Spiel.

Bei Ausgaben über den Skriptpfad muss der Unterzeichner eine Reihe von Daten angeben, damit seine Ausgaben überprüft werden können:

  1. Das offenbarte Drehbuch.
  2. Die Eingaben, die erforderlich sind, um dieses Skript zu erfüllen (Signaturen und alle anderen Daten, die es möglicherweise benötigt).
  3. Die Blattversion (vorerst immer 0xc0, wie in BIP342 angegeben).
  4. Der interne Schlüssel (der öffentliche Schlüssel vor der Optimierung)
  5. Der Merkle-Pfad, um zu beweisen, dass der Tweak sich auf das offenbarte Skript und die Blattversion (#1 und #2) festlegt.
  6. Ein Vorzeichenbit, um anzugeben, ob der Ausgabeschlüssel negiert wurde oder nicht (dies ist erforderlich, um die Stapelvalidierung zu aktivieren).

Die Optimierung selbst wird nicht offenbart. Es wird vom Verifizierer aus dem offenbarten Skript, der Blattversion und dem internen Schlüssel neu berechnet. Dann wird verifiziert, dass das Optimieren des internen Schlüssels mit dieser Optimierung mit dem öffentlichen Schlüssel in der ausgegebenen Ausgabe übereinstimmt.

Dies bringt uns zu der Frage, wie all diese Informationen im Zeugenstapel der Ausgabeneingabe codiert sind:

  • Zuerst werden alle Eingaben für das ausgegebene Skript ausgegeben (Nr. 2 oben).
  • Als vorletztes Element das enthüllte Skript (Nr. 1 oben)
  • Als letztes Element der Kontrollblock , der alle weiteren Informationen enthält:
    • Sein erstes Byte speichert die Blattversion (#3) (obere 7 Bits) und das Vorzeichenbit (#6) (unterstes Bit).
    • Die nächsten 32 Bytes speichern die (nur X-Koordinate, weil nur x-Schlüssel) des internen öffentlichen Schlüssels (#4)
    • Jeder Block von 32 Bytes danach kodiert eine Komponente des Merkle-Pfads (#5), der das Blatt mit der Wurzel (und dann dem Tweak) verbindet und von unten nach oben verläuft.
"Durch den Skriptpfad: Enthüllen, dass die Ausgabe tatsächlich ein optimierter Schlüssel war" Aber jede Ausgabe ist ein optimierter Schlüssel, richtig? Selbst wenn Sie über den Schlüsselpfad bezahlen, war es immer noch ein optimierter Schlüssel. So wie Sie es hier formuliert haben, klingt es so, als wäre es für Schlüsselpfadausgaben kein optimierter Schlüssel (oder möglicherweise kein optimierter Schlüssel) bitcoin.stackexchange.com/questions/99325/…
Das BIP empfiehlt, immer zu optimieren, auch wenn keine Skriptpfade vorhanden sind. Aber es gibt offensichtlich keine Möglichkeit, dies durchzusetzen, da nicht offengelegt wird, ob dies für Schlüsselpfadausgaben der Fall ist oder nicht. Es ist durchaus möglich, einen öffentlichen Schlüssel direkt zu nehmen, ihn in eine Adresse umzuwandeln, jemanden dafür bezahlen zu lassen und ihn dann direkt zu signieren.
Interessant, danke. Es stellt sich also die Frage, ob Wallets dem BIP folgen oder dieses Detail im BIP ignorieren und hier eine Abkürzung nehmen. Ich dachte an den BIP als den "Standard", den Wallets implementieren würden. Aber ja, ich kann die Abkürzung sehen, die von einigen Brieftaschen hier genommen wird.
Ich erwarte nicht, dass eine Brieftasche diese Abkürzung nimmt, aber es ändert nichts an der Tatsache, dass Sie, wenn Sie nur eine Schlüsselpfadausgabe sehen, technisch gesehen nicht wissen können, ob es sich um einen optimierten Schlüssel handelt oder nicht (und wenn ja, optimiert mit). Was).
Also nur Semantik. Wenn buchstäblich null Wallets die Abkürzung nehmen, dann wissen Sie, dass so ziemlich jeder öffentliche Schlüssel von Taproot ein optimierter Schlüssel ist (unabhängig davon, ob sie den Skriptpfad benötigen oder nicht). Sie benötigen eine Teilmenge von Brieftaschen, um die Abkürzung zu nehmen, damit Unsicherheit besteht, ob es sich um einen optimierten Schlüssel handelt oder nicht.

Der Kontrollblock sind die Daten, die erforderlich sind, um nachzuweisen, dass sich ein bestimmtes Skript im Taproot-Baum (Skriptpfad) befindet.

Murch definiert hier den Kontrollblock (ersetzt "inner key" durch "internal key"):

Wenn ein Fallback auf den Sicherungsschlüssel erforderlich ist, muss die Existenz des Taproot-Baums offengelegt werden. Wenn es nur ein einzelnes Blatt gibt, liefert der Spender nur den internen Schlüssel. Das Optimieren des internen Schlüssels mit dem gehashten Blatt führt zum öffentlichen Schlüssel. Zusammenfassend werden die Daten, die zum Nachweis der Existenz eines Skriptpfads erforderlich sind, als Kontrollblock bezeichnet.

BIP 341 fügt zusätzliche Details zum "Steuerblock" hinzu:

Das letzte Stapelelement wird Steuerblock c genannt und muss eine Länge von 33 + 32 m haben, für einen Wert von m, der eine ganze Zahl zwischen 0 und 128 einschließlich ist. Scheitern, wenn es keine solche Länge hat.

BIP 341 Pfahlwurzelbaum

Um zu beweisen, dass sich D (der Hash eines bestimmten Skripts) im Taproot-Baum befindet, müsste der Kontrollblock die folgenden Daten in dieser Reihenfolge enthalten:

<control byte with leaf version and parity bit> <internal key p> <C> <E> <AB>

Um zu beweisen, dass sich D im Taproot-Baum befindet, müssen Sie in der Lage sein, bis zur Merkle-Root (ABCDE) zu hashen, und dazu müssen Sie C mit D hashen, dann E mit CD und dann AB mit CDE.