Я попытался использовать метод 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:
вместо отображения «Ошибка: недопустимый человек». Может ли кто-нибудь сказать мне, что я делаю неправильно здесь.
Вы неправильно понимаете, что revert()
делает.
Это вызовет исключение, если выражение оценивается как ложное.
Возможность добавления объяснения всплывала в стеке с момента выпуска Byzantium. Это поддерживается на уровне EVM и на уровне компилятора solc, поэтому вы можете успешно включить объяснение ошибки в свои контракты.
Надеюсь, поможет.
Поддержка «строки причин» для ошибок возврата доступна в версии 5 Truffle, которая в настоящее время находится в стадии бета-тестирования.
Вернуть с причиной строки!! Выясните причину.
Используя это, вы должны иметь возможность писать тесты, которые проверяют конкретную причину возврата функции, а не фиксируют общую ошибку.
aib92
Роб Хитченс
.catch(...
сделать исключение и сделать вывод, что ОС просто обрабатывает его как сбой. Взгляните на идею Шона о бета-версии Truffle 5. Лучшие варианты находятся в стадии разработки.