Sari la conținutul principal

ZK / STARK și retrageri

Această pagină acoperă două subiecte conexe: sistemele de demonstrații ZK (snark și stark) folosite de rollup-urile decontate prin ZK și fluxul de retragere L2 → L1 care mută fondurile dintr-un rollup înapoi în QoreChain odată ce un lot este finalizat.

atenție

Verificarea ZK și STARK este o parte aflată în plină maturizare a RDK. Tratează sistemele de demonstrații și fluxul de retragere descrise aici ca intenție de proiectare, validează pe testnet-ul qorechain-diana și nu presupune garanții criptografice consolidate pentru producție pe mainnet deocamdată.


Sisteme de demonstrații ZK

Un rollup decontat prin ZK (modul de decontare zk) atașează o demonstrație de validitate fiecărui lot de decontare, dovedind că tranziția de stare este corectă fără a re-executa tranzacțiile rollup-ului. Decontarea ZK suportă două sisteme de demonstrații:

Sistem de demonstrațiiCaracteristici
snarkDemonstrații succinte
starkDemonstrații transparente — fără setup de încredere (trusted setup)

Modul de decontare zk necesită fie snark, fie stark; asocierea este impusă on-chain atunci când rollup-ul este creat. Prin contrast, decontarea optimistic folosește sistemul de demonstrații fraud, iar decontările based și sovereign folosesc none. Vezi Prezentare generală a rollup-urilor pentru întreaga matrice de compatibilitate.

Finalitate

Spre deosebire de rollup-urile optimiste — care așteaptă scurgerea unei ferestre de contestare prin demonstrație de fraudă — un lot ZK poate fi finalizat la verificarea unei demonstrații valide, fără o fereastră de dispută. Acesta este compromisul de bază al decontării ZK: finalitate mai puternică și mai rapidă în schimbul costului și complexității generării demonstrațiilor.

Maturitate

Verificarea demonstrațiilor ZK și STARK este încă în maturizare. Tratează decontarea ZK ca neconsolidată încă pentru producție: prototipează și validează pe testnet și urmărește notele de lansare ale RDK pentru starea verificării complete a demonstrațiilor înainte de a te baza pe ea pentru rollup-uri de valoare pe mainnet.


Cum transportă loturile retragerile

Când un rollup decontează un lot, acel lot poate, de asemenea, angaja mesajele inter-strat de ieșire ale rollup-ului — retragerile sale L2 → L1. Conceptual:

  • Un lot finalizat poate transporta un angajament către setul său de retrageri (o rădăcină Merkle peste mesajele de retragere ale lotului).
  • Fiecare retragere individuală este o frunză sub acea rădăcină, identificată prin indexul lotului și un index de retragere.
  • Odată ce lotul este finalizat, orice parte poate dovedi că o anumită frunză de retragere este inclusă sub rădăcina angajată și poate declanșa plata.

Acesta este motivul pentru care retragerile depind de decontare: o retragere poate fi executată doar față de un lot finalizat, deoarece finalizarea este cea care face canonică rădăcina de retrageri angajată.

Pentru modul în care loturile sunt trimise și finalizate — inclusiv submit-batch și calea de dispută challenge-batch pentru rollup-urile optimiste — vezi Implementarea unui rollup.


Executarea unei retrageri: execute-withdrawal

Comanda execute-withdrawal finalizează o retragere L2 → L1 față de rădăcina de retrageri a unui lot finalizat. Aceasta dovedește că o frunză de retragere este angajată în acea rădăcină și plătește destinatarul din escrow-ul modulului rdk. Acțiunea este fără permisiuni (permissionless) — oricine poate trimite o demonstrație validă.

qorechaind tx rdk execute-withdrawal \
[rollup-id] [batch-index] [withdrawal-index] [recipient] [denom] [amount] \
--proof <sibling-hash-1>,<sibling-hash-2>,... \
--from mykey \
--chain-id qorechain-diana \
--fees 500uqor

Argumente poziționale:

ArgumentDescriere
rollup-idRollup-ul căruia îi aparține retragerea
batch-indexLotul finalizat a cărui rădăcină de retrageri angajează această retragere
withdrawal-indexIndexul frunzei de retragere în cadrul acelui lot
recipientAdresa către care se face plata
denomDenominația de plătit
amountSuma de plătit

Flag:

FlagDescriere
--proofHash-uri Merkle de frați (siblings) în format hex, separate prin virgulă, ordonate de la frunză la rădăcină, care dovedesc că frunza de retragere este angajată în rădăcina de retrageri a lotului

Valoarea --proof este demonstrația de incluziune: hash-urile de frați de-a lungul căii de la frunza de retragere până la rădăcina de retrageri angajată a lotului. Modulul recalculează rădăcina din frunză și frații furnizați și o verifică față de rădăcina angajată a lotului finalizat înainte de a elibera fondurile din escrow.


Fluxul de retragere de la cap la cap

Calea L2 către L1: un lot de decontare angajează o rădăcină de retrageri, lotul se finalizează, apoi o demonstrație de incluziune fără permisiuni eliberează fondurile din escrow pe QoreChain.

  1. Decontează un lot. Operatorul rollup-ului trimite un lot de decontare cu submit-batch. Lotul poate angaja o rădăcină de retrageri peste mesajele sale de ieșire L2 → L1.
  2. Finalizează. Lotul se finalizează conform modului de decontare al rollup-ului — la verificarea unei demonstrații valide pentru zk sau după fereastra de contestare pentru optimistic (în timpul căreia challenge-batch îl poate disputa).
  3. Dovedește și execută. Odată finalizat, oricine trimite execute-withdrawal cu demonstrația de incluziune Merkle (--proof) pentru frunza de retragere specifică. Modulul verifică incluziunea față de rădăcina de retrageri a lotului finalizat și plătește destinatarul din escrow.

Deoarece pasul 3 este fără permisiuni și bazat pe demonstrație, o retragere nu depinde de cooperarea operatorului rollup-ului odată ce lotul care o transportă este finalizat.


Conexe