Ich habe diesen Satz in Taproot über den MAST-Build bemerkt.
Die verbleibenden Skripte sollten in den Blättern eines binären Baums organisiert werden. Dies kann ein ausgewogener Baum sein, wenn jede der Bedingungen, denen diese Skripte entsprechen, gleich wahrscheinlich ist. Wenn Wahrscheinlichkeiten für jede Bedingung bekannt sind, erwägen Sie, den Baum als Huffman-Baum zu konstruieren.
Aber im Fall eines ausgeglichenen Merkle-Baums kann ein Beobachter durch den Merkle-Beweis auf die Anzahl der Schichten im Baum schließen und erhält so eine ungefähre Anzahl von Blättern (Skripten). Zum Beispiel wird ein P2TR mit einem Zeitschloss entsperrt, und ich schließe aus dem Merkle-Beweis, dass es insgesamt 2 Skripte gibt. Dann kann ich vermuten, dass die andere Sperre eine Hash-Sperre ist (da dies das häufigste Skript mit zwei Bedingungen ist und eine davon eine Zeitsperre ist).
Es scheint, dass es auch eine Option wäre, den Benutzer zu zwingen, einen unausgeglichenen Merkle-Baum zu verwenden (z. B. die Koeffizienten zufällig zu initialisieren und dann einen Huffman-Baum zu konstruieren)? Oder vielleicht ein paar künstliche Blätter hineinlegen?
Zum Beispiel wird ein P2TR mit einem Zeitschloss entsperrt, und ich schließe aus dem Merkle-Beweis, dass es insgesamt zwei Skripte gibt.
Das kannst du nicht sicher ableiten. Sie wissen, aus welcher Schicht des Merkle-Baums das Skript stammt (in diesem Fall aus der ersten Schicht), aber es können Skripte auf der zweiten, dritten, vierten Schicht usw. vorhanden sein, von denen Sie nichts wissen. Ich stimme zu, dass, wenn ein Skript aus der ersten Schicht genommen wird, es möglich (vielleicht wahrscheinlich) ist, dass es zwei Skripte gibt.
Dann kann ich vermuten, dass dies ein MAST ist, der eine Hash-Zeitsperre enthält (da dies das häufigste Skript mit zwei Bedingungen ist und eine davon eine Zeitsperre ist).
Ich bin mir nicht sicher, warum Sie denken, dass ein Blattskript mit einem Timelock darauf schließen lässt, dass ein anderes Blattskript ein Hash-Timelock enthält. Wenn Sie sich auf Lightning beziehen, sind die häufigsten Kanalschließungen kooperative 2-von-2-Schließungen, bei denen keine alternativen Skriptpfade in die Ausgabe aufgenommen werden müssen. Bei selteneren unkooperativen Closes ist es für einen Blockchain-Beobachter offensichtlich, dass es sich um einen unkooperativen Lightning Channel Close handelt, das kann man nicht verbergen.
Es scheint, dass es auch eine Option wäre, den Benutzer zu zwingen, einen unausgeglichenen Merkle-Baum zu verwenden (z. B. die Koeffizienten zufällig zu initialisieren und dann einen Huffman-Baum zu konstruieren)? Oder vielleicht ein paar künstliche Blätter hineinlegen?
Sie können den Pfahlwurzelbaum auf jeden Fall so konstruieren, wie Sie es wünschen. Sie können Skripte in niedrigeren Ebenen ablegen, als sie sein müssen, sodass es für einen Blockchain-Beobachter so aussieht, als gäbe es mehr Skriptpfade, als tatsächlich vorhanden sind. Um Gebühren zu sparen, werden Sie normalerweise das Skript, das Sie am wahrscheinlichsten verwenden, auf einer höheren Ebene des Merkle-Baums platzieren wollen, aber wenn Sie sich mehr um den Datenschutz sorgen, können Sie sich dagegen entscheiden.
Die Antwort ist sehr einfach, Sie können nicht unabhängig überprüfen, ob der Benutzer einen unausgeglichenen Merkle-Baum verwendet, ohne dessen Struktur vollständig zu kennen – was alle Anonymitätsvorteile sinnlos macht. Aber Sie überschätzen, wie viele Informationen über den Merkle-Baum abgeleitet werden können. Da während einer Taproot-Ausgabe nur ein Merkle-Pfad aufgedeckt wird, gibt es keine Möglichkeit, sicher zu wissen, wie viele Ausgabenbedingungen definiert wurden, es sei denn, das Skript befindet sich direkt unter der Merkle-Wurzel – in diesem Fall ist es nachweislich das einzige Skript im Baum .
Um jedoch zu verhindern, dass irgendjemand vernünftige Vermutungen anstellt, könnte eine Wallet-Software die Merkle-Baumstruktur bei jeder Transaktion randomisieren, ähnlich wie einige Wallets die Transaktionsausgaben zufällig mischen, um die Änderungsausgabe zu verschleiern.
sphpmp