Как декодировать пользовательскую ошибку Solidity

Симуляция может вернуть структурированные байты, даже когда текст RPC сообщает лишь об откате. Сопоставьте данные с объявлениями ошибок в ABI.

Отделите селектор от аргументов

Пусть ABI задаёт error InsufficientBalance(uint256 available,uint256 required). Возьмите первые четыре байта Keccak-256 от канонической сигнатуры ниже. Сверьте их с началом данных отката и декодируйте следующие два слова как беззнаковые целые числа.

InsufficientBalance(uint256,uint256)

Если получились 3 и 5, покажите их как доступное и требуемое значения. Учитывайте точность токена лишь тогда, когда из контракта известны единицы измерения. Сохраните исходные байты для повторного разбора.

Уточните источник ошибки

Данные отката могут подняться из вложенного вызова, а произвольный код способен вернуть ту же сигнатуру. Совпадение объясняет формат данных. Если важен контракт-источник, определите кадр ошибки по трассировке. docs.soliditylang.org Solidity ABI