Как сверить селектор функции с 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