Passa al contenuto principale

ZK / STARK & Prelievi

Questa pagina copre due argomenti correlati: i sistemi di proof ZK (snark e stark) usati dai rollup con settlement ZK, e il flusso di prelievo L2 → L1 che sposta i fondi da un rollup verso QoreChain una volta che un batch è finalizzato.

attenzione

La verifica ZK e STARK è una parte dell'RDK in attiva maturazione. Tratta i sistemi di proof e il flusso di prelievo qui descritti come intento progettuale, validali sulla testnet qorechain-diana e non dare per scontate garanzie crittografiche pronte per la produzione sulla mainnet, per ora.


Sistemi di proof ZK​

Un rollup con settlement ZK (modalità di settlement zk) allega una validity proof a ogni batch di settlement, dimostrando che la transizione di stato è corretta senza ri-eseguire le transazioni del rollup. Il settlement ZK supporta due sistemi di proof:

Sistema di proofCaratteristiche
snarkProof succinte
starkProof trasparenti — nessun trusted setup

La modalità di settlement zk richiede uno tra snark o stark; l'abbinamento è imposto on-chain quando il rollup viene creato. Per contro, il settlement optimistic usa il sistema di proof fraud, mentre i settlement based e sovereign usano none. Vedi Panoramica dei Rollup per la matrice di compatibilità completa.

Finalità​

A differenza dei rollup ottimistici — che attendono lo scadere di una finestra di contestazione delle fraud proof — un batch ZK può finalizzarsi alla verifica di una proof valida, senza finestra di disputa. Questo è il compromesso fondamentale del settlement ZK: una finalità più forte e più rapida in cambio del costo e della complessità di generare le proof.

Maturità​

La verifica delle proof ZK e STARK è ancora in fase di maturazione. Considera il settlement ZK come non ancora pronto per la produzione: prototipa e valida su testnet, e segui le release notes dell'RDK per lo stato della verifica completa delle proof prima di farvi affidamento per rollup mainnet che gestiscono valore.


Come i batch trasportano i prelievi​

Quando un rollup effettua il settlement di un batch, quel batch può anche fare il commit dei messaggi cross-layer in uscita del rollup — i suoi prelievi L2 → L1. Concettualmente:

  • Un batch finalizzato può trasportare un commitment al suo insieme di prelievi (una Merkle root sui messaggi di prelievo del batch).
  • Ogni singolo prelievo è una foglia sotto quella root, identificata dal suo indice di batch e da un indice di prelievo.
  • Una volta che il batch è finalizzato, qualsiasi parte può dimostrare che una specifica foglia di prelievo è inclusa sotto la root sottoposta a commit, e attivare il payout.

Ecco perché i prelievi dipendono dal settlement: un prelievo può essere eseguito solo contro un batch finalizzato, perché è la finalizzazione a rendere canonica la root dei prelievi sottoposta a commit.

Per come i batch vengono sottomessi e finalizzati — incluso submit-batch e il percorso di disputa challenge-batch per i rollup ottimistici — vedi Distribuire un Rollup.


Eseguire un prelievo: execute-withdrawal​

Il comando execute-withdrawal finalizza un prelievo L2 → L1 contro la root dei prelievi di un batch finalizzato. Dimostra che una foglia di prelievo è sottoposta a commit in quella root e paga il destinatario dall'escrow del modulo rdk. L'azione è permissionless — chiunque può sottomettere una proof valida.

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

Argomenti posizionali:

ArgomentoDescrizione
rollup-idIl rollup a cui appartiene il prelievo
batch-indexIl batch finalizzato la cui root dei prelievi fa il commit di questo prelievo
withdrawal-indexL'indice della foglia di prelievo all'interno di quel batch
recipientL'indirizzo a cui effettuare il payout
denomLa denominazione da pagare
amountL'importo da pagare

Flag:

FlagDescrizione
--proofSibling hash Merkle in formato hex separati da virgola, ordinati dalla foglia alla root, che dimostrano che la foglia di prelievo è sottoposta a commit nella root dei prelievi del batch

Il valore di --proof è la inclusion proof: i sibling hash lungo il percorso dalla foglia di prelievo fino alla root dei prelievi sottoposta a commit dal batch. Il modulo ricalcola la root a partire dalla foglia e dai sibling forniti e la confronta con la root sottoposta a commit dal batch finalizzato prima di rilasciare i fondi in escrow.


Flusso di prelievo end-to-end​

Il percorso da L2 a L1: un batch di settlement fa il commit di una root dei prelievi, il batch si finalizza, poi una inclusion proof permissionless rilascia i fondi in escrow su QoreChain.

  1. Effettua il settlement di un batch. L'operatore del rollup sottomette un batch di settlement con submit-batch. Il batch può fare il commit di una root dei prelievi sui suoi messaggi L2 → L1 in uscita.
  2. Finalizza. Il batch si finalizza in base alla modalità di settlement del rollup — alla verifica di una proof valida per zk, oppure dopo la finestra di contestazione per optimistic (durante la quale challenge-batch può contestarlo).
  3. Dimostra ed esegui. Una volta finalizzato, chiunque sottomette execute-withdrawal con la Merkle inclusion proof (--proof) per la specifica foglia di prelievo. Il modulo verifica l'inclusione rispetto alla root dei prelievi del batch finalizzato e paga il destinatario dall'escrow.

Poiché il passaggio 3 è permissionless e basato su proof, un prelievo non dipende dalla cooperazione dell'operatore del rollup una volta che il batch che lo trasporta è finalizzato.


Correlati​