Il turnstile
TL;DR
- Il turnstile (tornello) è una regola contabile pubblica che tiene traccia di quanto valore entra ed esce da ogni pool schermata
- Permette a chiunque di verificare che una pool non paghi mai più di quanto vi è stato immesso, anche se le transazioni al suo interno sono private
- Questo protegge la quantità di ZEC nelle pool schermate da un bug nascosto, perché monete contraffatte non possono uscire da una pool senza alterare il conteggio
- I pagamenti all'interno di una pool restano privati. Una transazione che sposta ZEC tra le pool mostra l'importo che sposta
- Il turnstile è il motivo per cui la migrazione da Orchard a Ironwood può dimostrare che la quantità di ZEC nelle pool schermate è solida
Per chi è questo contenuto
- Chiunque voglia capire come Zcash mantiene affidabile la propria offerta privata
- Gli utenti che seguono la migrazione da Orchard a Ironwood e si chiedono come faccia a dimostrare che l'offerta è reale
- I nuovi arrivati curiosi di sapere come un sistema monetario privato possa comunque essere verificato
La sfida
Lo Zcash schermato nasconde importi, mittenti e destinatari. Questa privacy è il punto fondamentale. Ma solleva una domanda difficile: se nessuno può vedere dentro la pool schermata, come fa qualcuno a sapere che la quantità totale di ZEC è corretta? Come si controlla denaro che non si può vedere?
Se un bug permettesse mai a qualcuno di forgiare monete all'interno di una pool schermata, la falsificazione sarebbe nascosta dalla stessa privacy che protegge gli utenti onesti. Senza una salvaguardia, questa incertezza minerebbe la fiducia nell'intera offerta. Il turnstile è la salvaguardia che risolve questo problema.
Che cos'è il turnstile
Immagina ogni pool schermata come una stanza con un'unica porta conteggiata. Ogni volta che il valore entra nella pool dall'esterno, o ne esce per andare altrove, passa attraverso la porta e viene contabilizzato pubblicamente. Le transazioni all'interno della stanza restano private, ma il totale progressivo alla porta è visibile a tutti.
La regola è semplice: una pool non può mai far uscire più valore di quanto ne sia entrato. I nodi rifiutano qualsiasi blocco che porterebbe il saldo di una pool sotto zero. La quantità che si ritiene presente in una pool è nota in ogni momento, perché è semplicemente il totale entrato meno il totale uscito. Questo conteggio pubblico è il turnstile.
Come funziona
Zcash ha avuto diverse pool schermate nel corso della sua storia, come Sprout, Sapling e Orchard. Il valore si sposta tra la chain trasparente e queste pool, e talvolta anche tra le pool stesse. Il turnstile osserva questi movimenti:
- Quando ZEC entra in una pool schermata, l'importo viene aggiunto al saldo pubblico di quella pool
- Quando ZEC esce da una pool, l'importo viene sottratto
- La rete rifiuta qualsiasi blocco che renderebbe negativo il saldo di una pool, cioè quando è uscito più valore di quanto ne sia mai entrato
- Ogni transazione mostra solo il suo flusso netto in entrata o in uscita da una pool, il suo saldo di valore. Per un pagamento all'interno di una sola pool, si tratta semplicemente della commissione
La rete tiene traccia in questo modo di un saldo per ogni pool di valore, inclusi Sprout, Sapling, Orchard, la nuova pool Ironwood, e i saldi trasparenti e lockbox. Grazie a questo, anche se il contenuto esatto di una pool è nascosto, il massimo che potrà mai uscirne è limitato da ciò che vi è entrato. Nessuna inflazione nascosta può sfuggire ed entrare in circolazione.
Come viene controllato il saldo di valore
Il conteggio alla porta è affidabile solo perché ogni transazione è costretta a dimostrare di aver spostato un importo veritiero, anche se l'importo stesso resta nascosto. Ogni transazione schermata pubblica un unico numero onesto: il valore netto che sposta dentro o fuori dalla pool, chiamato value balance. Un value balance positivo significa che i fondi sono usciti dalla pool verso il lato trasparente, uno negativo significa che i fondi sono entrati. I dettagli privati restano sigillati, ma questa singola cifra netta è pubblica, ed è ciò che il turnstile somma.
La parte ingegnosa è il modo in cui una transazione dimostra che quel numero pubblico è onesto senza rivelare gli importi privati che ci stanno dietro. Il meccanismo differisce a seconda della pool, ed è questa la vera meccanica del turnstile.
Nella pool Sprout originale, ogni transazione usa un JoinSplit. Un JoinSplit spende due note nascoste e ne crea due nuove, e contiene due campi pubblici: vpub_old, il valore che entra nella pool schermata dal lato trasparente, e vpub_new, il valore che lascia la pool tornando al lato trasparente. Ogni JoinSplit deve essere bilanciato di per sé, e la sua prova a conoscenza zero garantisce che gli input nascosti e gli output nascosti si sommino correttamente. Il saldo della pool Sprout è semplicemente il totale progressivo di tutti i vpub_old meno tutti i vpub_new lungo la chain. Ecco perché Sprout è un esempio utile più avanti: poiché vpub_old è l'unico modo in cui il valore può entrare nella pool, una sola regola che lo disattivi può sigillare la pool per sempre.
In Sapling, Orchard e Ironwood, il bilancio viene dimostrato in modo più intelligente, usando una binding signature. Invece di bilanciare ogni trasferimento da solo, l'intera transazione si impegna rispetto a ogni importo nascosto usando un value commitment. Un value commitment è una busta sigillata per un numero, costruita con un impegno di Pedersen omomorfico, che ha una proprietà speciale: le buste possono essere sommate e sottratte senza essere aperte. La rete somma tutti i commitment di input, sottrae tutti i commitment di output e confronta il risultato con l'unica cifra netta dichiarata dalla transazione, il suo campo valueBalance. Solo una transazione i cui importi nascosti corrispondono davvero a quel valueBalance pubblico può produrre una binding signature valida sui commitment combinati. Se qualcuno cercasse di spostare più valore di quanto dichiarato, i commitment non tornerebbero, la binding signature non verrebbe verificata e la transazione verrebbe rifiutata. Ironwood usa lo stesso protocollo di Orchard, quindi funziona allo stesso modo.
Questo è anche ciò che rende sicuro il controllo di un trasferimento tra pool. Quando i fondi si spostano da una pool schermata a un'altra, per esempio da Orchard a Ironwood, la transazione non può nascondere gli importi alla contabilità. Ogni pool ha il proprio saldo di valore che deve essere soddisfatto dalle proprie prove: il lato Orchard deve mostrare un deflusso corrispondente tramite la sua firma vincolante, e il lato Ironwood deve mostrare l'afflusso corrispondente tramite la propria. Il valore che esce da una pool e quello che entra nell'altra vengono entrambi dimostrati in modo indipendente, quindi uno spostamento tra pool è in realtà costituito da due attraversamenti del turnstile che avvengono in un'unica transazione, uno in uscita e uno in entrata, ed entrambi vengono contabilizzati pubblicamente anche se gli importi sottostanti restano privati.
Quindi il turnstile non è fiducia. Ogni transazione dimostra matematicamente il proprio effetto netto, la rete somma questi effetti netti dimostrati per pool, e una regola di consenso (ZIP 209) rifiuta qualsiasi blocco che porterebbe negativo il saldo di una pool. Prova a livello di transazione, applicazione a livello di chain.
Perché è importante
Il turnstile offre a Zcash tre cose contemporaneamente.
Primo, compartimentalizza il rischio. Un bug crittografico in una pool resta confinato a quella pool, perché il turnstile impedisce al valore falsificato di attraversare il confine ed entrare nell'offerta più ampia.
Secondo, permette alla comunità di verificare l'offerta retrospettivamente. Se in seguito viene scoperto un bug, il registro del turnstile mostra se da una pool sia mai uscito più valore di quanto vi sia entrato. Un registro pulito è una forte prova del fatto che nessuna contraffazione sia stata sfruttata.
Terzo, mantiene privati i pagamenti all'interno di una pool mentre fa tutto questo. Ogni transazione pubblica solo il proprio flusso netto in entrata o in uscita da una pool, che per un pagamento all'interno della stessa pool è solo la commissione. Un trasferimento tra pool, ad esempio da Orchard a Ironwood, mostra l'importo che attraversa le pool. Verificabilità e privacy coesistono, cosa insolita e uno dei punti di forza silenziosi di Zcash.
Il turnstile in azione
Il turnstile non è una novità, ed è stato usato in momenti chiave della storia di Zcash.
Quando Zcash è passato dalla pool Sprout originale alla più recente pool Sapling, il turnstile ha protetto la transizione. In seguito la pool Sprout è stata limitata in modo da non poter ricevere nuovi afflussi, incoraggiando così gli utenti a migrare mentre il turnstile manteneva onesta la contabilità. Anni dopo, il fatto che nessun valore sia mai uscito impropriamente da Sprout costituisce una prova del fatto che la sua crittografia iniziale non sia mai stata sfruttata con successo.
Lo stesso schema ora protegge il passaggio da Orchard a Ironwood. Nel 2026 è stato trovato e corretto un bug di solidità nel sistema di proving di Orchard. Non ci sono prove che sia mai stato sfruttato, ma poiché l'attività schermata è privata, la certezza era impossibile. La risposta consiste nel sigillare la vecchia pool Orchard e far migrare a tutti i propri fondi attraverso il turnstile verso Ironwood, una nuova pool che usa il protocollo corretto. Forzare i fondi a passare attraverso il turnstile significa che eventuali monete contraffatte ipotetiche rimaste indietro non possono seguirli, e una volta completata la migrazione chiunque può confermare che la quantità di ZEC nelle pool schermate è solida.
Deprecazione unidirezionale della pool
Il turnstile rende possibile ritirare in sicurezza una vecchia pool, in una sola direzione, senza mai compromettere la garanzia sull'offerta. Il trucco è chiudere l'entrata lasciando aperta l'uscita.
Sprout è l'esempio più chiaro. Per deprecarla, ZIP 211 ha aggiunto una singola regola di consenso: dalla sua altezza di attivazione, il campo vpub_old di ogni JoinSplit deve essere zero. Poiché vpub_old è l'unico modo in cui il valore può entrare in Sprout, imporre che sia zero significa che nessun nuovo valore potrà più entrarvi, mentre il valore potrà ancora uscire verso il lato trasparente o proseguire verso Sapling. La pool è diventata unidirezionale. Può solo svuotarsi, mai riempirsi. Il turnstile continua a contare per tutto il tempo, quindi il saldo può diminuire mentre i fondi escono ma non può mai aumentare, e non può mai andare in negativo.
La migrazione da Orchard a Ironwood usa la stessa idea. Con l'aggiornamento NU6.3, la pool Orchard viene chiusa a nuovi afflussi, e i portafogli sono indirizzati a inviare i fondi Orchard attraverso il turnstile nella nuova pool Ironwood. Orchard diventa una pool unidirezionale che può solo svuotarsi. Poiché ogni uscita è un attraversamento del turnstile che deve essere dimostrato, qualsiasi ipotetico valore contraffatto rimasto in Orchard non può seguire silenziosamente i fondi onesti in uscita. Resta bloccato in una pool che può solo svuotarsi ed è sorvegliata alla porta. Col tempo questo porta la vecchia pool verso lo svuotamento e permette a chiunque di confermare che il valore uscito non è mai stato superiore al valore che vi era entrato onestamente.
Questa è la ragione più profonda per cui il turnstile conta, oltre alla semplice contabilità. È il meccanismo che permette a Zcash di deprecare una pool schermata, sia per ridurre la complessità come nel caso di Sprout, sia per recuperare da un bug scoperto come nel caso di Orchard, mantenendo al tempo stesso una garanzia continua, pubblica e dimostrabile sull'offerta.
Idee sbagliate comuni
- Il turnstile (tornello) non rivela chi ha inviato cosa a chi. Mostra però l'importo di qualsiasi transazione che sposta ZEC tra le pool
- Non identifica nominalmente un falsario. Limita quanto può uscire da una pool, ed è questo che protegge l'offerta
- Non è una nuova invenzione per Ironwood. Ha protetto ogni grande transizione tra pool schermate nella storia di Zcash
- Un totale pubblico della pool non indebolisce la privacy dei pagamenti all'interno della pool. Spostare ZEC tra le pool mostra l'importo spostato, ed è per questo che ZIP 318 chiede ai portafogli di migrare gradualmente in importi standard
Risorse
- ZIP 209: Impedire saldi fuori intervallo nei Chain Value Pool - la regola di consenso alla base del turnstile
- ZIP 211: Disattivazione dell'aggiunta di nuovo valore alla pool di valore della chain Sprout - come la pool Sprout è stata chiusa a nuovi depositi
- ZIP 258: NU6.3 - l'aggiornamento che introduce la pool Ironwood e indirizza il valore attraverso il turnstile
- Applicazione del turnstile contro la contraffazione - la spiegazione originale di Electric Coin Company
- Specifica del protocollo Zcash - vedi le sezioni su bilancio e binding signature per tutti i dettagli
- Value Pools, il libro di Zebra - come un nodo tiene traccia del value balance di ciascun pool
Pagine correlate
- Pool schermate - come le transazioni schermate di Zcash mantengono privati i dettagli
- Halo - il sistema di proof alla base della pool Orchard
- Aggiornamenti di rete - come Zcash attiva cambiamenti come le nuove pool schermate