Wäre es möglich, eine Funktionsausführung mit zkSNARKs zu verbergen?

Ich habe gelesen, dass es bei einer hypothetischen Integration von zCash/zkSNARK mit Ethereum möglich wäre, den Absender, den Empfänger und den Wert einer Transaktion zu verbergen.

Meine Frage ist, ob es auch möglich wäre, andere in einer Transaktion gesendete Daten zu verbergen, wie den Namen der Funktion, die Sie ausführen möchten, und die Parameter davon. Und in diesem Fall, wie sich das auf den Vertragszustand auswirken würde.

Antworten (1)

zkSNARKs beweisen in Zero-Knowledge, dass ein bestimmtes Argument wahr ist.

Zero-Knowledge bedeutet hier, dass nichts über das Argument preisgegeben wird, außer ob es wahr ist oder nicht. Ein Beispiel: Wenn Sie eine Karte aus einem Deck gezogen haben und ich Sie gefragt habe, ob es sich um ein Herz handelt, können Sie mir zeigen, dass dies wahr ist, ohne weitere Informationen über die Karte preiszugeben (z. B. ob es sich um ein Ass, eine 2 oder was auch immer handelt). zeigt mir alle Karten, die keine Herzen sind. Dies ist ein Beispiel für einen Beweis in Zero-Knowledge (zkp).

In ZCash beweist der zkSNARK meiner Meinung nach, dass Sie Eigentümer eines ZEC-Betrags sind, der größer oder gleich dem Betrag ist, den Sie für eine bestimmte Transaktion ausgeben möchten.

Ich glaube nicht, dass das Senden eines zkp, das Sie eine Funktion aufgerufen haben, ausreichen würde, um die Funktion tatsächlich aufzurufen. Vielleicht könnten Sie die Statusänderung einreichen, die als Ergebnis des Aufrufs der Funktion auftritt, zusammen mit einem zkSNARK, das beweist, dass Sie eine legitime Funktion auf legitime Weise aufgerufen haben und dies zu dieser Statusänderung geführt hat?

In dieser Situation müssten Sie etwas Komplexeres beweisen als „Ich besitze n ZECs und n>k, wobei k der Transaktionswert ist“. Es gibt ein Ergebnis, dass jede NP-Funktion in Zero-Knowledge nachgewiesen werden kann, und ich bin mir ziemlich sicher, dass zkSNARKs allgemein genug sind, dass dies bald eine Möglichkeit ist / sein wird. Aus der libsnark-Readme :

Eine Berechnung kann als NP-Anweisung in Formen wie der folgenden ausgedrückt werden:

  • "Das C-Programm foo gibt bei seiner Ausführung den Exit-Code 0 zurück, wenn es den Eingabebalken und einige zusätzliche Eingabe-Qux erhält."

  • "Der boolesche Schaltkreis foo ist durch ein Eingabe-Qux erfüllbar."

  • "Die arithmetische Schaltung foo akzeptiert den teilweisen Zuweisungsbalken, wenn er zu einem vollständigen Zuweisungs-Qux erweitert wird."

  • "Der Satz von Beschränkungen foo ist durch den Teilzuweisungsbalken erfüllbar, wenn er zu einem vollständigen Zuweisungsqux erweitert wird."

Sie müssten nicht einmal ZCash und Ethereum integrieren, sondern nur irgendwie libsnark verwenden und jemanden dazu bringen, Ihren seltsam geformten Funktionsaufruf zu akzeptieren. Es könnte nur eine nicht triviale Menge an Arbeit erfordern;)