Требовать ошибку проверки не работает

Я попытался использовать метод require в Solidity следующим образом:

require(validate(personName),"Error: Invalid Person")

В этом случае я проверяю, добавлен ли человек в мой список лиц. Если нет, отобразите сообщение об ошибке в консоли «Invalid Person». Теперь моя проблема в том, что когда я запускаю функцию с допустимым именем, я не получаю ошибок. Но в случае недопустимого имени человека отображается:

Error: VM Exception while processing transaction: revert
    at XMLHttpRequest._onHttpResponseEnd (/usr/local/lib/node_modules/truffle/build/webpack:/~/xhr2/lib/xhr2.js:509:1)
    at XMLHttpRequest._setReadyState (/usr/local/lib/node_modules/truffle/build/webpack:/~/xhr2/lib/xhr2.js:354:1)
    at XMLHttpRequestEventTarget.dispatchEvent (/usr/local/lib/node_modules/truffle/build/webpack:/~/xhr2/lib/xhr2.js:64:1)
    at XMLHttpRequest.request.onreadystatechange (/usr/local/lib/node_modules/truffle/build/webpack:/~/web3/lib/web3/httpprovider.js:128:1)
    at /usr/local/lib/node_modules/truffle/build/webpack:/packages/truffle-provider/wrapper.js:134:1
    at /usr/local/lib/node_modules/truffle/build/webpack:/~/web3/lib/web3/requestmanager.js:86:1
    at Object.InvalidResponse (/usr/local/lib/node_modules/truffle/build/webpack:/~/web3/lib/web3/errors.js:

вместо отображения «Ошибка: недопустимый человек». Может ли кто-нибудь сказать мне, что я делаю неправильно здесь.

Ответы (2)

Вы неправильно понимаете, что revert()делает.

Это вызовет исключение, если выражение оценивается как ложное.

Возможность добавления объяснения всплывала в стеке с момента выпуска Byzantium. Это поддерживается на уровне EVM и на уровне компилятора solc, поэтому вы можете успешно включить объяснение ошибки в свои контракты.

Надеюсь, поможет.

так что я должен использовать, чтобы показать пользователю сообщение об ошибке (в настоящее время я использую консоль трюфеля. Я не подключил свои контракты к внешнему интерфейсу)
На стороне клиента вы можете .catch(...сделать исключение и сделать вывод, что ОС просто обрабатывает его как сбой. Взгляните на идею Шона о бета-версии Truffle 5. Лучшие варианты находятся в стадии разработки.

Поддержка «строки причин» для ошибок возврата доступна в версии 5 Truffle, которая в настоящее время находится в стадии бета-тестирования.

Вернуть с причиной строки!! Выясните причину.

Используя это, вы должны иметь возможность писать тесты, которые проверяют конкретную причину возврата функции, а не фиксируют общую ошибку.