Как сверить селектор функции с ABI контракта

Поиск имени по четырём байтам может приписать вызову чужую функцию. Пересчитайте селектор по фактическому ABI контракта.

Приведите сигнатуру к канонической форме

Для функции перевода ERC-20 вычислите Keccak-256 от текста ниже в UTF-8 и возьмите первые четыре байта. Исключите имена параметров, пробелы и тип результата. Даже если в Solidity указан uint, в каноническую сигнатуру входит uint256.

transfer(address,uint256) → 0xa9059cbb

Сравните 0xa9059cbb с первыми четырьмя байтами входных данных. Остаток декодируйте по двум объявленным типам. В слове ABI адрес занимает младшие 20 байт.

Разберите неоднозначное совпадение

Разные сигнатуры могут иметь одинаковые четыре байта. Сверьте реализацию и ABI адресата на блоке исполнения, особенно для прокси. Fallback способен принять любые входные данные, поэтому совпадение селектора само по себе не доказывает выбор ветки кода. docs.soliditylang.org Solidity ABI