# Как узнать ABI неверифицированного контракта **Published by:** [Разнорабочий × 9kDAO](https://paragraph.com/@raznorabochiy/) **Published on:** 2023-08-15 **URL:** https://paragraph.com/@raznorabochiy/abi ## Content Если вам попался контракт у которого на сайте скана пусто во вкладке Contract / Code и вы видите только байткод, ещё не всё так плохо, есть способ восстановить ABI из кода контракта. Немного расскажу, как это работает. При компиляции контракта имена всех методов становятся утерянными, они не нужны EVM, вместо них в байткоде можно увидеть четырёхбайтовый MethodID, который выглядит примерно так 0x8433e7f3 Этот MethodID не что иное, как первые 4 байта от хеша Keccak-256 взятого от строки «имяМетода(типАргумента)» Например Keccak-256("activateOrRefund(address)") даст нам хеш 0x8433e7f315e0fb49ae73d262618ba3d4540a76cf19bd515eceada64d21f6c6b9 Возьмём от него первые 4 байта и получим 0x8433e7f3, можете сами поиграться и проверить Существует большая база данных четырёхбайтных кусочков, по которой можно восстанавливать сигнатуры методов:ethereum-lists/4bytes4byte.directoryЕсть один минус, так как четыре байта это не так много информации для точной идентификации, это приводит к коллизиям на большой выборке. Вот пример, когда для 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/ ## Publication Information - [Разнорабочий × 9kDAO](https://paragraph.com/@raznorabochiy/): Publication homepage - [All Posts](https://paragraph.com/@raznorabochiy/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@raznorabochiy): Subscribe to updates