Еще один пример работы с Error
В протоколе Dopex встретил хороший пример работы с ошибками (require / error) в контракте.
Была создана специальная функция для валидации входящих условий:
function _validate(bool _clause, uint256 _errorCode) internal pure {
if (!_clause) revert RdpxV2CoreError(_errorCode);
}
которая проверяет условие в родительской функции, и если не true, то порождает Error с нужным кодом. Сам Error выглядит максимально просто:
error RdpxV2CoreError(uint256);
ну, и в коде, в комментариях, есть список ошибок по номеру, например:
// ERROR CODES
// E1: "Insufficient bond amount",
// E2: "Bond has expired",
// E3: "Invalid parameters"
Как это работает? Например, у нас есть функция, которая должна принимать адрес в качестве аргумента:
function getAddress(address addr) external {...}
и нам нужно проверить, чтобы этот адрес не был нулевым, поэтому мы передаем условие в функцию _validate():
function getAddress(address addr) external {
_valudate(addr != address(0), 4);
}
Идет проверка, если адрес окажется нулевым, по код выдаст ошибку под номером 4, из чего мы узнаем о проваленной проверке.
Вот такое простое решение.
#error
Post #849
874
- 👍 5