Сканер разрешений позволяет сканировать протокол DeFi или любую систему смарт-контрактов на наличие разрешенных функций. Он возвращает список смарт-контрактов, идентифицированных разрешенных функций и соответствующих владельцев разрешений.
Чтобы сканировать протокол на предмет разрешенных функций, целевой протокол указывается в виде цепочки и набора адресов всех развернутых контрактов. Все эти контракты должны быть проверены в общедоступном обозревателе блоков. Вы можете найти список поддерживаемых цепочек и проводников здесь. Затем сканер разрешений загружает исходный код контрактов из проводника, сканирует его на наличие разрешений, считывает владельца разрешения из соответствующего слота хранилища и записывает результаты в выходной файл.
solc
компиляторСоздайте и активируйте виртуальную среду Python и установите необходимые пакеты Python с помощью
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Скопируйте файл .env.example
в .env
и, в зависимости от сети, в которой развернуты контракты, введите URL-адрес вашего поставщика RPC и действительный ключ API обозревателя блоков. Затем загрузите переменные с помощью
source .env
Заполните файл ./contracts.json
именем цепочки и адресами всех контрактов протокола. Список поддерживаемых сетей можно найти здесь.
Затем выполните сценарий сканера с помощью
python src/main.py
Обратите внимание: если у вас нет нужной версии компилятора solc
, она будет установлена автоматически сценарием.
Скрипт запишет результаты работы сканера в новый файл ./permissions.json
.
После завершения анализа вы можете снова деактивировать среду Pyhton с помощью следующей команды
source deactivate
Поддерживаемые цепочки для получения и проверки контрактов
"mainnet:" : (".etherscan.io", "etherscan.io")
"optim:" : ("-optimistic.etherscan.io", "optimistic.etherscan.io")
"goerli:" : ("-goerli.etherscan.io", "goerli.etherscan.io")
"sepolia:" : ("-sepolia.etherscan.io", "sepolia.etherscan.io")
"tobalaba:" : ("-tobalaba.etherscan.io", "tobalaba.etherscan.io")
"bsc:" : (".bscscan.com", "bscscan.com")
"testnet.bsc:" : ("-testnet.bscscan.com", "testnet.bscscan.com")
"arbi:" : (".arbiscan.io", "arbiscan.io")
"testnet.arbi:" : ("-testnet.arbiscan.io", "testnet.arbiscan.io")
"poly:" : (".polygonscan.com", "polygonscan.com")
"mumbai:" : ("-testnet.polygonscan.com", "testnet.polygonscan.com")
"avax:" : (".snowtrace.io", "snowtrace.io")
"testnet.avax:" : ("-testnet.snowtrace.io", "testnet.snowtrace.io")
"ftm:" : (".ftmscan.com", "ftmscan.com")
"goerli.base:" : ("-goerli.basescan.org", "goerli.basescan.org")
"base:" : (".basescan.org", "basescan.org")
"gno:" : (".gnosisscan.io", "gnosisscan.io")
"polyzk:" : ("-zkevm.polygonscan.com", "zkevm.polygonscan.com")
"blast:" : (".blastscan.io", "blastscan.io")
Сканер разрешений НЕ гарантирует, что предоставленный набор адресов контрактов является полным или что контракты фактически являются частью протокола.
Разрешения идентифицируются путем использования модификаторов onlyOwner
или проверок msg.sender
в функции контракта. Могут существовать и другие формы разрешений, которые не учитываются при этом подходе.
Сканер разрешений пытается напрямую прочитать владельцев разрешений из хранилища контрактов. Это может привести к сбою, в частности, если в контракте используется шаблон возможности обновления и его необходимо проверить вручную.
Сканер разрешений только идентифицирует разрешения и их владельцев, но не оценивает влияние или риски таких разрешений.
Сканер разрешений построен на статическом анализаторе Slither. Мы благодарим команду Trail of Bits за создание этого инструмента с открытым исходным кодом и всю работу, которую они проделали для обеспечения безопасности в секторе DeFi.