Использование ошибок require() в клиенте web3.js

Использование requireпомогает в проверке ввода пользователя, прежде чем можно будет предпринять какое-либо действие. Однако кажется, что существует не так много вариантов для обработки сценария, когда requireдействительно возвращается false. В примере, упомянутом в этом ответе , используются события, которые запускаются после проверки ifусловия. Этот ответ прямо говорит о том, что невозможно справиться revert(хотя вопрос был о require) с фронтенда.

Итак, возможно ли require falseвообще потреблять результат? Или его можно передать в событие, которое можно использовать в web3.jsклиенте?

Из web3,jsклиента вы можете очень легко вызвать и обработать вызов функции, который запускает require(<false condition>), если вы это имеете в виду. Я делаю это все время (как часть тестирования и проверки).

Ответы (2)

Когда вы требуете / утверждаете / возвращаете все, что было сделано или будет сделано в функции, откатывается, включая события.

Итак, нет, если происходит запрос/возврат/утверждение, нет способа сообщить или вернуть что-либо полезное для обработки ошибки.

Как я упоминал в другом подобном вопросе, вам также нужно будет проверить эти потенциальные ошибки на стороне клиента, чтобы вы могли предотвратить достижение контрактом такого состояния. (Например: если функция требует, чтобы msg.sender == owner, во внешнем интерфейсе, если зарегистрированный пользователь не является владельцем, отключите/скройте кнопку, которая вызывает эту контрактную функцию)

Хорошо. Предположим, что контракт зависит от другого контракта, который потерпел requireнеудачу. Это не может быть обработано передним концом. Как справиться с таким сценарием?
Вы просто не можете. Выполнение завершится ошибкой, и пользователь не будет знать, почему. Лучшее, что вы можете сделать, это как можно лучше объяснить, при каких условиях может произойти сбой той или иной функции.

Строки причин ошибки для возврата и требования были введены в Solidity 0.4.22. Вы можете определить причину revertи require. Последняя версия Solidity с некоторыми исправлениями ошибок — 0.4.23.

Подробнее: https://medium.com/secureblocks/solidity-0-4-22-enhancements-94d2b9b8b6fe .

Как вы можете получить доступ к этим ошибкам из web3?
@Makaronodentro это пока невозможно, над этим ведется работа. Хотя на Remix можно увидеть строку причины ошибки.
можно ли сейчас получить доступ к ошибкам из web3? @Аникет
@deju Он также поддерживается truffle, но web3 надеется поддерживать его в стабильной версии 1.0, запланированной на 30 июня. Следите за обновлениями: github.com/ethereum/web3.js/issues/1707 .