La página de pago se quedó colgada cinco segundos; me tembló la mano y volví a tocar una vez más. En un pago normal aún puedes consultar dos movimientos de forma separada, pero cuando haces una transacción privada donde tanto el monto como los participantes quedan ocultos, ¿con qué “pruebas” la red sabría que no te gastaste dos veces el mismo dinero?
Siguiendo esta pregunta, desmonté de nuevo el Phoenix del @Dusk . No registra los fondos como un saldo público, sino que los divide en notas cifradas (notes) y escribe el compromiso de la note en un árbol de Merkle. En el momento del gasto, las pruebas de conocimiento cero se encargan de demostrar que esa note existe realmente, está controlada por el usuario y que se respetan las reglas de conservación de entrada y salida, sin revelar el monto exacto ni las notes correspondientes.
Quien realmente detecta el “doble gasto” es el nullifier: se puede entender como una marca de invalidación única que queda después de usar una note. El mundo exterior no puede reconstruir la note original a partir de ella, pero la red sí puede comprobar si esa marca ya apareció. Si la misma note se construye como dos transacciones, ambas entrarán en conflicto en el mismo nullifier, y no pueden ser válidas al mismo tiempo.
La documentación de Dusk también indica que, en el mempool, cuando ocurren conflictos de nullifier en transacciones Phoenix, solo una nueva transacción con un precio de Gas estrictamente más alto puede reemplazar la antigua. Volver a enviar aumentando la tarifa de gas puede significar que estás sustituyendo el pago, no que estés agregando un pago nuevo. Pero una vez que la transacción entra en un bloque aceptado y se ejecuta, incluso si el contrato devuelve un error, tanto la note como el Gas relacionado se consumen; además, hay que esperar a que el bloque se “finalice” (finalized) para que sea una conclusión realmente definitiva.
Por eso, la criptografía resuelve que los activos no puedan copiarse, pero la wallet aún tiene que explicar el estado: pendiente, reemplazado, ejecución fallida y confirmación final. Si solo muestra “fallido”, el usuario igual puede seguir intentando una y otra vez.
$DUSK es Gas y un activo en garantía, pero no puede avalar la experiencia de producto. Lo que realmente quiero ver es si la wallet puede mostrar la relación de reemplazo, el motivo del consumo de la note y el estado de finalización. La privacidad puede ocultar detalles, pero no puede ocultar si la transacción ocurrió.
#dusk $DUSK