Ciò che mi ha disturbato in Midnight era quanto presto possa verificarsi la vera perdita.
Un contratto può essere utilizzato correttamente con zero conoscenza. La prova può essere valida. Lo stato privato può rimanere offchain. L'app può comunque esporre l'utente prima che tutto ciò abbia importanza, semplicemente perché il valore sensibile è stato inserito attraverso il percorso sbagliato per primo.
Quel rischio è diventato molto più chiaro per me una volta che ho smesso di leggere Compact come un normale impianto di smart contract.
In Midnight, i circuiti esportati di alto livello sono punti di ingresso del contratto. I loro argomenti si trovano al confine del contratto. Non è una zona nascosta di pre-prova. Midnight è anche molto esplicito riguardo ai dati dei testimoni. Possono provenire da testimoni dichiarati, ma possono anche entrare tramite argomenti del costruttore o argomenti del circuito esportato. Una volta che un valore è derivato dai dati dei testimoni, è comunque trattato come dato di testimone. Sembra una distinzione tecnica, ma crea un problema molto umano.
Immagina un'app che dice all'utente di inserire qualcosa di sensibile nella prima schermata. Forse è una preferenza privata, un'offerta privata, un dettaglio di reclamo, o qualche input legato all'identità che l'utente presume appartenga alla parte protetta del flusso. L'interfaccia sembra privata. L'app parla come un'app per la privacy. Ma se quel valore viene passato come argomento di circuito esportato al confine del contratto, l'utente ha già perso la cosa che pensava Midnight stesse proteggendo. La prova può ancora avere successo dopo. Il contratto può ancora comportarsi esattamente come progettato. L'errore è avvenuto prima, nel momento dell'instradamento dell'input.
Questa è la parte che penso le persone sottovalutino.
Molte discussioni sulla privacy ancora appiattiscono tutto in un'unica storia confortante: l'utente inserisce un segreto, il segreto va in una prova, e solo la prova raggiunge la catena. Midnight pone una domanda molto più dura. Il valore è entrato attraverso un percorso di testimoni che rimane privato, oppure è entrato attraverso un punto di ingresso pubblico del contratto che non è mai stato privato fin dall'inizio? Midnight è abbastanza rigoroso che questa non è una distinzione filosofica. È un onere di design dell'applicazione.

Il segnale più forte è disclose(). Midnight tratta la privacy come predefinita e la divulgazione come eccezione. Se i dati che possono contenere materiale di testimoni devono essere memorizzati nel registro pubblico, restituiti da un circuito esportato, o passati a un altro contratto, la divulgazione deve essere resa esplicita. Il compilatore non consente a quel confine di rimanere sfocato. Se i dati derivati da testimoni raggiungono un'operazione di registro pubblico senza la giusta gestione, il codice viene rifiutato. Questo mi dice che Midnight non sta solo proteggendo segreti nella scrittura finale. Sta costringendo gli sviluppatori ad essere onesti su ogni attraversamento dal flusso privato al flusso pubblico.
Questo rende il confine del contratto più importante dell'etichetta sulla privacy dell'app.
Cambia anche il modo in cui penso al valore di esecuzione. $NIGHT diventa significativo in pratica solo quando l'app è progettata affinché la parte sensibile del flusso di lavoro raggiunga effettivamente il giusto percorso privato. Se l'utente perde l'input critico prima che la generazione della prova inizi, la catena può comunque eseguire, le commissioni possono ancora essere pagate, e il contratto può comunque completarsi. Ciò che è fallito è stata l'assunzione di privacy al confine dell'app. Questo rende l'instradamento corretto dell'input parte del vero valore di Midnight, non solo un dettaglio di implementazione.

Ecco perché la domanda che mi è rimasta è se Midnight possa mantenere un segreto una volta che il segreto è già all'interno del giusto flusso di testimoni. Chiaramente può. La domanda più difficile è se gli utenti sapranno, nel momento esatto in cui digitano qualcosa di sensibile, se stanno entrando in un percorso di testimoni protetto o in un punto di ingresso di contratto pubblico che non è mai stato privato in primo luogo. Su Midnight, quella differenza non è solo cosmetica. È dove la storia della privacy inizia correttamente o fallisce prima che la prova abbia fatto alcun lavoro. #night $NIGHT @MidnightNetwork
