Consumir errores de require () en el cliente web3.js

El uso requireayuda 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 requirede hecho regrese false. El ejemplo mencionado en esta respuesta usa eventos que se activan después de probar una ifcondició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 falseresultado? ¿O se puede canalizar a un evento que se puede consumir en un web3.jscliente?

Desde un web3,jscliente, puede invocar y manejar muy fácilmente una llamada de función que se activa require(<false condition>), si eso es lo que quiere decir. Lo hago todo el tiempo (como parte de las pruebas y la verificación).

Respuestas (2)

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)

Está bien. Supongamos que un contrato dependía de otro contrato que tuvo una requirefalla. Esto no puede ser manejado por front-end. ¿Cómo se enfrenta uno a tal escenario?
Simplemente no puedes. La ejecución fallará y el usuario no sabrá por qué. Lo mejor que puede hacer es explicar lo mejor posible bajo qué condiciones una determinada función puede fallar.

Las cadenas de motivo de error para revertir y requerir se han introducido en solidity 0.4.22. Puede definir el motivo de reverty 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

Sin embargo, ¿cómo puede acceder a estos errores desde web3?
@Makaronodentro esto aún no es posible, se está trabajando para esto. Aunque en Remix puede ver la cadena de motivo del error.
¿Es posible acceder a los errores de web3 ahora? @Aniket
@deju También es compatible con truffle, pero web3 parece admitirlo en la versión estable 1.0 que tiene como objetivo el 30 de junio. Siga esto para actualizaciones: github.com/ethereum/web3.js/issues/1707