Как декодировать пользовательскую ошибку Solidity
Симуляция может вернуть структурированные байты, даже когда текст RPC сообщает лишь об откате. Сопоставьте данные с объявлениями ошибок в ABI.
Отделите селектор от аргументов
Пусть ABI задаёт error InsufficientBalance(uint256 available,uint256 required). Возьмите первые четыре байта Keccak-256 от канонической сигнатуры ниже. Сверьте их с началом данных отката и декодируйте следующие два слова как беззнаковые целые числа.
InsufficientBalance(uint256,uint256)
Если получились 3 и 5, покажите их как доступное и требуемое значения. Учитывайте точность токена лишь тогда, когда из контракта известны единицы измерения. Сохраните исходные байты для повторного разбора.
Уточните источник ошибки
Данные отката могут подняться из вложенного вызова, а произвольный код способен вернуть ту же сигнатуру. Совпадение объясняет формат данных. Если важен контракт-источник, определите кадр ошибки по трассировке. docs.soliditylang.org Solidity ABI