El uso require
ayuda a validar las entradas del usuario antes de que se pueda realizar una acción. Sin embargo, parece que no existen muchas opciones para manejar el escenario cuando require
de hecho regrese false
. El ejemplo mencionado en esta respuesta usa eventos que se activan después de probar una if
condición. Esta respuesta dice sin rodeos que no es posible manejar revert
(aunque la pregunta era sobre require
) desde el front-end.
Entonces, ¿es posible consumir un require
false
resultado? ¿O se puede canalizar a un evento que se puede consumir en un web3.js
cliente?
Cuando requiere / afirma / revierte todo lo que se hizo o se haría en la función se revierte, eso también incluye Eventos.
Entonces, no, si ocurre un requerimiento/reversión/afirmación, no hay forma de informar o devolver algo útil para manejar el error.
Como mencioné en otra pregunta similar, también deberá verificar estos posibles errores en el lado del cliente para que pueda evitar que el contrato llegue a ese estado. (Por ejemplo: si una función requiere que msg.sender == propietario, en la interfaz si el usuario registrado no es el propietario, deshabilite/oculte el botón que llama a esta función de contrato)
require
falla. Esto no puede ser manejado por front-end. ¿Cómo se enfrenta uno a tal escenario?Las cadenas de motivo de error para revertir y requerir se han introducido en solidity 0.4.22. Puede definir el motivo de revert
y require
. Con algunas correcciones de errores, la última versión de solidity es 0.4.23.
Para más detalles: https://medium.com/secureblocks/solidity-0-4-22-enhancements-94d2b9b8b6fe
buena vibración
web3,js
cliente, puede invocar y manejar muy fácilmente una llamada de función que se activarequire(<false condition>)
, si eso es lo que quiere decir. Lo hago todo el tiempo (como parte de las pruebas y la verificación).