Leer las restricciones del circuito Phoenix me detuvo. En Dusk $DUSK #dusk @Duskfoundation el Transfer Contract nunca mira los valores reales de la nota ni qué hoja de Merkle se gasta.
Solo comprueba una prueba PLONK de que las entradas privadas satisfacen cinco condiciones: el hash de la nota se abre frente a una raíz reciente de Merkle de notas, el probador conoce la clave secreta de la nota, el nulo es igual a Poseidon(npk′ ‖ position), los compromisos de salida se abren correctamente y la suma de los valores de entrada es igual a las salidas más la tarifa más cualquier depósito.
Los nullifiers en sí se publican para que la red pueda rechazar el reuso. Como cada uno se deriva de la clave oculta de la nota y de la posición, ningún observador puede mapear un nullifier de vuelta a una hoja específica. La validez vive enteramente dentro de la satisfacción del circuito; el contenido nunca aparece en el libro mayor.
Lo que cambió para mí fue darme cuenta de que la protección contra doble gasto y la integridad del balance están tanto dentro de la prueba como no en ningún cambio de estado visible.
Próxima comprobación: si los nullifiers publicados de cada transacción Phoenix aceptada permanecen únicos en el conjunto de nullifiers en cadena después de la finalización.
@Dusk