Midnight offre ai costruttori due modi per recuperare un percorso Merkle. Se la posizione della foglia è nota, pathForLeaf() può ricostruire il percorso direttamente. Se l'app ha perso quella posizione, findPathForLeaf() deve cercare la foglia, e Midnight osserva che questo può richiedere una scansione O(n) dell'albero.

Quella differenza è dove l'appartenenza privata inizia a sembrare meno come crittografia e più come disciplina del prodotto.

Un utente apre un'app e cerca di intraprendere un'azione riservata ai membri senza rivelare quale membro sia. Il set nascosto esiste. Il circuito è pronto. Il testimone dovrebbe estrarre il percorso, inserirlo nella prova e lasciare che l'azione si svolga. Ma se l'app non ha mantenuto i metadati della posizione di inserimento quando quel membro è stato aggiunto, il flusso rallenta prima che la prova inizi a fare il lavoro interessante. Il pulsante viene premuto. L'app si ferma. Il testimone torna a findPathForLeaf(). Ora il prodotto sta cercando l'albero per i dati che dovrebbe già avere conservato.

Questo è il collo di bottiglia che ha cambiato il modo in cui leggo Mezzanotte.

Mezzanotte fornisce già ai costruttori i pezzi giusti dal lato della prova: MerkleTreePath, merkleTreePathRoot e helper testimoni che recuperano il percorso e lo passano nel circuito. Il punto debole è prima. L'app ha salvato abbastanza stato off-chain per rendere l'appartenenza privata economica quando l'utente torna più tardi, o ha lasciato il testimone riscoprire il posizionamento che il prodotto ha già creato una volta?

Quel compito del costruttore sembra più importante di quanto appaia inizialmente. Quando viene inserito un membro nascosto, l'app deve mantenere la posizione della foglia e mantenere quella mappatura disponibile per l'azione successiva. Non può trattare il posizionamento come una memoria temporanea dell'interfaccia utente. Deve sopravvivere a ricariche, tentativi e sessioni di ritorno. Se quella disciplina è allentata, l'appartenenza privata non fallisce crittograficamente. Degrada operativamente. La prova è ancora possibile. Il prodotto diventa solo più lento, disordinato e fragile perché la ricerca è stata trattata come un pensiero tardivo.

Ecco perché @MidnightNetwork ha iniziato a sembrare più seria per me attraverso questo preciso angolo. Il suo pattern MerkleTree e HistoricMerkleTree non abilita solo l'appartenenza nascosta. Espone il lavoro di supporto silenzioso di cui la privacy ha bisogno. La catena può mantenere il set nascosto. Il circuito può mantenere la prova anonima. Ma l'app deve comunque ricordare dove si trova il membro all'interno di quella struttura nascosta, oppure l'utente finisce per pagare per la privacy attraverso un lavoro di recupero che non avrebbe mai dovuto apparire in primo luogo.

Questo è anche dove $NIGHT diventa più concreto per me. Un'azione di appartenenza può avere il DUST di cui ha bisogno, la transazione può essere completamente finanziata e la prova può ancora sembrare lenta perché l'app ha perso i dati di indice che rendono il recupero economico. L'utente non sta aspettando perché l'esecuzione manca di risorse. L'utente sta aspettando perché il prodotto ha dimenticato i metadati che avrebbero dovuto consentire al testimone di ricostruire direttamente il percorso. L'esecuzione finanziata è ancora goffa quando la disciplina di indicizzazione fallisce a monte.

La domanda di prova che continuo a pormi è semplice.

Può @MidnightNetwork aiutare i costruttori a far scomparire questo onere prima che il recupero O(n) inizi a essere trattato come un normale sovraccarico di privacy? Perché se no, il primo costo visibile dell'appartenenza privata non sarà un dibattito astratto sul design della privacy. Sarà un utente che preme una volta, poi aspetta mentre l'app cerca ciò che avrebbe dovuto ricordare.

A Mezzanotte, nascondere chi è nel set è solo metà del lavoro.

La parte più difficile è non dimenticare dove si trovano.

#night $NIGHT @MidnightNetwork

NIGHT
NIGHTUSDT
0.04915
+9.19%