Если вам попался контракт у которого на сайте скана пусто во вкладке Contract / Code и вы видите только байткод, ещё не всё так плохо, есть способ восстановить ABI из кода контракта.
Немного расскажу, как это работает.
При компиляции контракта имена всех методов становятся утерянными, они не нужны EVM, вместо них в байткоде можно увидеть четырёхбайтовый MethodID, который выглядит примерно так 0x8433e7f3
Этот MethodID не что иное, как первые 4 байта от хеша Keccak-256 взятого от строки «имяМетода(типАргумента)»
Например Keccak-256("activateOrRefund(address)") даст нам хеш 0x8433e7f315e0fb49ae73d262618ba3d4540a76cf19bd515eceada64d21f6c6b9
Возьмём от него первые 4 байта и получим 0x8433e7f3, можете сами поиграться и проверить
Существует большая база данных четырёхбайтных кусочков, по которой можно восстанавливать сигнатуры методов:
Есть один минус, так как четыре байта это не так много информации для точной идентификации, это приводит к коллизиям на большой выборке. Вот пример, когда для MethodID a9059cbb находятся 5 разных сигнатур
Существуют более удобные инструменты, которые вытаскивают из байткода все MethodID и ищут известные сигнатуры методов и формируют код ABI.
Одна из таких утилит https://abi.w1nt3r.xyz/ её минус в том, что она работает только для контрактов Ethereum
Попробуем проверить этот контракт: 0xf008eaad3760e2f0175f47a4d1d87e5c468bfd6d
Открываем abi.w1nt3r.xyz и видим только одну расшифрованную сигнатуру: 0x56973ee5 IMPL()
Скорее всего это прокси-контракт, открываем https://etherscan.io/proxycontractchecker?a=0xf008eaad3760e2f0175f47a4d1d87e5c468bfd6d
Находим реальную реализацию 0x8e357490dc8e94e9594ae910ba261163631a6a3a
Опять пробуем и получаем все сигнатуры: https://abi.w1nt3r.xyz/mainnet/0x8e357490dc8e94e9594ae910ba261163631a6a3a
Что делать если это не Ethereum, а какая-нибудь другая EVM-сеть?
Смотрим, что abi.w1nt3r.xyz под капотом использует библиотеку whatsabi - https://github.com/shazow/whatsabi
Можем написать простой код, в который нужно будет вставить только RPC и адрес контракта, а на выходе получим ABI:

После написания этой статьи я решил написать веб-утилиту, похожую на abi.w1nt3r.xyz, но работающую с любыми EVM сетями, нужно только указать rpc url и адрес контракта — https://whatsabi.surge.sh/

