Использование require
помогает в проверке ввода пользователя, прежде чем можно будет предпринять какое-либо действие. Однако кажется, что существует не так много вариантов для обработки сценария, когда require
действительно возвращается false
. В примере, упомянутом в этом ответе , используются события, которые запускаются после проверки if
условия. Этот ответ прямо говорит о том, что невозможно справиться revert
(хотя вопрос был о require
) с фронтенда.
Итак, возможно ли require
false
вообще потреблять результат? Или его можно передать в событие, которое можно использовать в web3.js
клиенте?
Когда вы требуете / утверждаете / возвращаете все, что было сделано или будет сделано в функции, откатывается, включая события.
Итак, нет, если происходит запрос/возврат/утверждение, нет способа сообщить или вернуть что-либо полезное для обработки ошибки.
Как я упоминал в другом подобном вопросе, вам также нужно будет проверить эти потенциальные ошибки на стороне клиента, чтобы вы могли предотвратить достижение контрактом такого состояния. (Например: если функция требует, чтобы 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,js
клиента вы можете очень легко вызвать и обработать вызов функции, который запускаетrequire(<false condition>)
, если вы это имеете в виду. Я делаю это все время (как часть тестирования и проверки).