Während wir auf das Urteil im Storm-Prozess warten, ist es gut, daran erinnert zu werden, dass geschützte Pools nur Mathematik sind und nicht allzu schwer zu verstehen. Jeder kann einen implementieren. Hier ist also ein Thread mit der grundlegenden Intuition, wie sie funktionieren:
Das Ziel ist es, ein System zu schaffen, in dem alle Informationen in jeder Transaktion vollständig privat für die Nutzer bleiben. Wir sollten von unseren Transaktionssystemen nicht weniger erwarten. Dies ist das grundlegende Menschenrecht auf Privatsphäre.
Das Problem ist, wenn alle Informationen privat sind, wie weiß die Blockchain, dass die Transaktion gültig ist? Wie weiß sie, dass der Benutzer tatsächlich die Mittel hat, die er senden möchte? Dass er nicht doppelt ausgibt? Die offensichtliche Antwort ist: zk-Proofs. Aber ist es wirklich so einfach?
Angenommen, Sie haben ein Konto mit einem Guthaben von 10. Sie möchten 5 an Romans Verteidigung senden. Also erstellen Sie einen zk-Beweis, der zeigt, dass Sie 10 haben, und Ihre Transaktion sendet 5. Klingt einfach genug!
Aber warte! Als du einen Beweis dafür erbracht hast, dass du 10 hast, bezog sich dieser Beweis auf einen Zustand in der Vergangenheit, vor dem neuesten Block, in dem deine Transaktion enthalten wurde. Vielleicht hast du seitdem alle Münzen ausgegeben! Wie kannst du beweisen, dass du immer noch 10 im neuesten Block hast?
Das ist tatsächlich ziemlich knifflig und der Grund, warum geschützte Pools in kontobasierten Systemen nicht wirklich funktionieren - es gibt keinen einfachen, zuverlässigen Weg, um einer Blockchain in zk den neuesten Zustand in Echtzeit nachzuweisen. Die Lösung? Verwenden Sie UTXOs. Die berühmten "Unspent Tx Outputs" von Bitcoin.
Mit UTXOs haben Sie kein einzelnes aktualisierbares Konto, sondern individuelle "Notizen", die nur einmal vollständig ausgegeben werden können (wie eine echte Münze). UTXO-Systeme sind im Allgemeinen etwas lästig zu entwickeln, aber diese "einmalige Ausgaben"-Eigenschaft macht sie sehr nützlich für geschützte Pools.
In einem UTXO-System wie Bitcoin können alle Full Nodes überprüfen, ob ein UTXO existiert (er wurde in der Vergangenheit erstellt) und ob er noch nicht ausgegeben wurde, wenn Sie versuchen, einen UTXO auszugeben. Das ist ganz einfach. Aber wenn alle Daten im UTXO verschlüsselt sind, wie können wir das überprüfen?
Nicht nur sind die Daten verschlüsselt, sondern wir wollen nicht einmal verraten, *welcher* UTXO ausgegeben wird. Wenn wir das tun würden, wüsste die Person, die dir den UTXO geschickt hat, wann du ihn ausgegeben hast. In einem idealen Design eines geschützten Pools wird durch eine Transaktion NULL Informationen preisgegeben.
Der zentrale Trick von geschützten Pools besteht darin, einen "Nullifier"-Wert einzuführen, der öffentlich offengelegt werden kann, aber für jeden UTXO einzigartig vom Ausgeber abgeleitet wird. Um den UTXO auszugeben, überprüft die Blockchain, ob der Nullifier bereits existiert. Dies stellt sicher, dass jeder UTXO nur einmal ausgegeben werden kann.
Jetzt können wir zu unserem zk-Proof zurückkehren. Wir müssen einfach nur beweisen, dass der UTXO, den wir ausgeben, tatsächlich on-chain existiert und dass der Nullifier, den wir dafür offenbart haben, korrekt aus dem UTXO abgeleitet ist, den wir ausgeben. Das war's!
In der Praxis bedeutet dies, dass geschützte Pool-Systeme typischerweise zwei verschiedene Merkle-Bäume führen. Einer enthält die Hashes der UTXOs (UTXOs werden oft als "Notizen" bezeichnet, und ihre Hashes als "Notizverpflichtungen"), und der andere enthält die Nullifier. Beide Bäume sind nur anhängbar!
Wenn eine neue Note erstellt wird, wird ihr Hash im Merkle-Baum der Note gespeichert. Die Note selbst ist verschlüsselt. Wenn ein Benutzer später diese Note ausgeben möchte, berechnet er den Nullifier für die Note und erstellt einen zk-Beweis, der zeigt, dass die Note im Merkle-Baum vorhanden ist und der Nullifier korrekt ist.
Der Nullifier wird öffentlich offengelegt und die Blockchain überprüft, ob er bereits im Nullifier-Baum existiert. Er wird dann dort gespeichert, sodass der Schein nicht erneut ausgegeben werden kann. Niemand kann tatsächlich sagen, welcher Schein ausgegeben wird, da der ursprüngliche Schein im Scheinbaum unberührt bleibt!
Da habt ihr es, das grundlegende Design aller geschützten Pools heute, einschließlich @Zcash, @TornadoCash, @penumbrazone, @namada und mehr. Natürlich gibt es noch viel mehr, was beim Design geschützter Pools zu beachten ist. Bleibt dran für weitere Threads, in denen wir tiefer in diese Mechaniken eintauchen werden.
@AThryver @0xkaiserkarel Häufige Fehlannahme und möglicherweise irreführende Verwendung des Begriffs „zk“ hier. Siehe
Ethan Buchman (🐝,🦇)
Ethan Buchman (🐝,🦇)24. Juli 2024
TEE? ZKP? MPC? FHE? Alles, was Sie über die wichtigsten Akronyme mit drei Buchstaben in der Kryptobranche wissen müssen Oder wie du Freunde und TEE-Fluence-Leute 🧵 gewinnst
33,8K