PLONK: Wie man auf der Chain Berechnungen „beweisbar“, statt „reproduzierbar“ macht
In den letzten Tagen schaue ich mir das PLONK-Beweissystem genauer an. Je mehr ich es verstehe, desto mehr habe ich das Gefühl, dass die Blockchain-Validierung diese Logik komplett neu schreibt.
Zuerst ein naives Problem: Wie bestätigt man auf der Chain, dass eine Berechnung korrekt ist?
Der naheliegendste Ansatz ist: „nochmal alles neu berechnen“ – jeder Knoten führt dieselbe Berechnung aus, und wenn die Ergebnisse übereinstimmen, gilt es.
Das ist zwar dumm, aber funktioniert. Nur steigen die Kosten dann linear mit der Rechenmenge: Je komplexer die Berechnung, desto größer wird der Overhead, weil das ganze Netzwerk sie immer wieder erneut verifizieren muss.
Was PLONK stattdessen macht, ist: Aus „nochmal alles berechnen“ wird „einen Beweis fester Größe für etwas bereitstellen“.
Egal wie komplex die Berechnung ist – die Größe des Beweises, die der Verifizierer prüfen muss, bleibt im Wesentlichen konstant. Der Aufwand wächst kaum mit der Größe der Berechnung an. Das ist keine bloße Optimierung, sondern ein grundlegender Austausch der Kostenstruktur.
━━━━━━━━━━━━━━
Das dahinter steckt: KZG-Polynomverpflichtungen (KZG Polynomial Commitments)
PLONK kodiert die gesamten Randbedingungen des Schaltkreises in mehrere Polynome. Der Beweiser muss dir keine Rechendetails offenlegen – er muss nur beweisen, dass die Werte dieser Polynome an bestimmten Punkten korrekt sind.
Der Verifizierer erhält dann nur ein paar Gruppenoperationen, die sich sehr leicht ausführen lassen. Eine ganze Menge Ausführungstrajektorien wird zu einigen wenigen prägnanten algebraischen Prüfungen verdichtet.
Ein weiterer Schlüsselentwurf ist: Preprocessing.
Die Teile des Schaltkreises, die öffentlich und fest sind, kann man bereits im Voraus offline berechnen, sodass man bei jeder Verifikation nicht wieder von vorn anfangen muss.
Bei der On-Chain-Validierung muss man dann nur noch die leichten Bestandteile verarbeiten, die sich auf diesen konkreten Beweis beziehen. Deshalb kann PLONK „universell und aktualisierbar“ sein: Dasselbe Framework kann Schaltkreise in unterschiedlicher Größe bedienen, ohne dass man jedes Mal die vertrauenswürdige Einrichtung neu durchlaufen muss.
━━━━━━━━━━━━━━
Wenn man es auf Dusk überträgt: Dieses Beweissystem wird direkt über CVM aufgerufen.
Nach der Ausführung eines Privacy-Contracts wird das Ergebnis nicht einfach herausgeworfen, damit andere es erneut verifizieren, sondern es wird direkt ein Beweis ausgegeben – die Ausführung selbst ist dabei der Prozess der Beweisgenerierung.
Das ist der grundlegendste Unterschied zwischen „beweisbar“ und „reproduzierbar“: Das eine setzt darauf, dass alle es nochmal neu berechnen wollen, das andere nutzt Mathematik, sodass man dir vertraut, ohne dass du überhaupt rechnen musst.
@Dusk $DUSK #dusk