Puedo emitir el evento correcto de DuskVM y aun así enviar un backend que no puede leerlo.
El paso oculto es el registro en Forge. dusk_core::abi::emit(topic, value) coloca el evento en la ejecución, pero solo la emisión no lo agrega al esquema generado. Para que el controlador de datos decodifique ese evento, todavía tengo que definir el tipo de evento serializable, implementar ContractEvent, registrarlo en #[dusk_forge::contract(events = [...])], y luego emitir ese tipo registrado.
Si se pierde uno de esos enlaces, el contrato puede ejecutarse correctamente mientras la integración pierde la superficie legible del evento de la que depende.
La consecuencia que me importa es una redención que queda atascada en la app después de que ya se completó en cadena. El estado del contrato se movió. La transacción del usuario se finalizó. Mi backend sigue esperando porque los bytes del evento no tienen un decodificador generado que sepa cómo usar.
Probaría el evento desde fuera del contrato: construir el driver, inspeccionar el esquema, decodificar los bytes emitidos y luego hacer que la interfaz de redención dependa de ello.
En DuskVM, “evento emitido” no es la línea final. “Evento decodificado por el consumidor” es.
#dusk $DUSK @Dusk
El paso oculto es el registro en Forge. dusk_core::abi::emit(topic, value) coloca el evento en la ejecución, pero solo la emisión no lo agrega al esquema generado. Para que el controlador de datos decodifique ese evento, todavía tengo que definir el tipo de evento serializable, implementar ContractEvent, registrarlo en #[dusk_forge::contract(events = [...])], y luego emitir ese tipo registrado.
Si se pierde uno de esos enlaces, el contrato puede ejecutarse correctamente mientras la integración pierde la superficie legible del evento de la que depende.
La consecuencia que me importa es una redención que queda atascada en la app después de que ya se completó en cadena. El estado del contrato se movió. La transacción del usuario se finalizó. Mi backend sigue esperando porque los bytes del evento no tienen un decodificador generado que sepa cómo usar.
Probaría el evento desde fuera del contrato: construir el driver, inspeccionar el esquema, decodificar los bytes emitidos y luego hacer que la interfaz de redención dependa de ello.
En DuskVM, “evento emitido” no es la línea final. “Evento decodificado por el consumidor” es.
#dusk $DUSK @Dusk