Könnten Taproot oder Graftroot die Ausführung komplexer Skripte ermöglichen?

Nach meinem Verständnis verwendet Taproot eine Merkle Tree-Struktur, deren Wurzel das Ergebnis eines Skripts darstellt. Diese Darstellung hat die Form einer Signatur, die die Eingaben entsperren kann, die mit ihrem öffentlichen Schlüsselgegenstück verbunden sind, das von allen Teilnehmern geteilt wird.

Dazu habe ich zwei Fragen:

Erstens, wie ist das Skript im Baum strukturiert? Stellt jeder Pfad ein anderes Ausführungsergebnis dar? Wenn ja, wie werden die möglichen Ergebnisse definiert?

Zweitens, wenn es einer Merkle Tree-Struktur folgt, gibt es eine Begrenzung in Bezug auf die Größe des Skripts? Ich neige dazu, nein zu sagen, da dies außerhalb der Kette geschieht, aber ich könnte mich irren.

Antworten (1)

Erstens, wie ist das Skript im Baum strukturiert? Stellt jeder Pfad ein anderes Ausführungsergebnis dar? Wenn ja, wie werden die möglichen Ergebnisse definiert?

Die Taproot-E-Mail gibt nicht an, wie das Skript im Merkle-Baum platziert wird. Es kann sein, dass jeder Blattknoten im Baum ein anderes Skript ist (BIP114-Stil) oder dass ein Parameter übergeben werden kann, der das Extrahieren mehrerer Blätter ermöglicht, sodass Teile des Skripts wiederverwendet werden können (BIP116-Stil).

Der Grund, warum dieses Detail nicht in der Taproot-E-Mail enthalten ist, liegt darin, dass es in dieser E-Mail darum ging, die vorherigen Ideen zu merklisierten Skripten (MAST) neu anzuordnen, sodass die erwartete Standardbedingung (jeder unterschreibt) die einfachste und billigste Option war, die verwendet werden konnte, ohne dass sie tatsächlich behandelt werden musste der Merkle-Baum im erwarteten Fall. Die Ideen zur Organisation und Verwendung des Baums sind eine separate Diskussion.

Zweitens, wenn es einer Merkle Tree-Struktur folgt, gibt es eine Begrenzung in Bezug auf die Größe des Skripts? Ich neige dazu, nein zu sagen, da dies außerhalb der Kette geschieht, aber ich könnte mich irren.

Der Merkle-Root/öffentliche Schlüssel für Taproot verbraucht eine feste Anzahl von Bytes ( z von Pfadinformationen), was beweist, dass das bereitgestellte Skript eine Verbindung zum Merkle-Stamm von taproot herstellt.

Diese Informationen unterliegen der grundlegenden Blockgrößenbeschränkung von 4 Millionen Gewichtseinheiten und können, je nach Implementierung, auch den aktuellen Beschränkungen von Bitcoin für die Zeugengröße (10.000 Gewichtseinheiten für Segwit v0) unterliegen. Die gute Nachricht ist, dass es für eine ehrliche Person unmöglich ist, einen Merkle-Baum zu erstellen, der mehr als etwa 8.000 Bytes benötigt, um den Merkle-Beweis zu erstellen (das Skript nicht mitgezählt), selbst wenn sie über die gesamte Energie des Universums verfügen würde. (Angenommen, wir verwenden die SHA256d-Hash-Funktion von Bitcoin.)

Das Obige ist eine Illustration aus meinem Artikel über MAST, die zeigt, wie die Codierung alternativer Skripte (Subskripte) in einen MAST bei log2 wächst, während sie linear mit dem bestehenden Mechanismus wächst.

Für ein Skript mit einer Million möglicher Ergebnisse (Baumtiefe gleich 20) wären etwa 643 Byte ( 20 * 32 + ceil(20 / 8)) erforderlich, sodass das tatsächliche Zeugenskript und die Zeugendaten bis zu etwa 9.300 Byte umfassen könnten. Wenn alle unterschreiben, müssen Sie natürlich keine dieser Daten bereitstellen – Sie drücken einfach eine einzige Unterschrift.

Sehr hilfreich, danke David. Was ist also die Beziehung zwischen Pfahlwurzel und MAST? Es scheint, als wäre taproot eine vorgeschlagene Implementierung von MAST, aber mit den zusätzlichen Vorteilen eines konsolidierten pubKey?
Das ist richtig, Taproot ist eine Form von MAST, bei der die Merkle-Root mit einem öffentlichen Schlüssel kombiniert wird, um einen sekundären öffentlichen Schlüssel zu erstellen, der von dem privaten Schlüssel ausgegeben werden kann, der dem primären öffentlichen Schlüssel entspricht. Wenn Sie einen öffentlichen ECDSA-Schlüssel nehmen und ihm eine Ganzzahl hinzufügen, um einen sekundären öffentlichen Schlüssel zu erstellen, können Sie den entsprechenden sekundären privaten Schlüssel erstellen, indem Sie ihm den Namen Ganzzahl hinzufügen. Die spätere Offenlegung der Nummer verringert nicht die Sicherheit des primären Schlüsselpaars. Wenn Sie also den Merkle-Stamm veröffentlichen müssen, um MAST zu verwenden, können Sie dies tun – aber ansonsten können Sie einfach unterschreiben.