Pemindai izin memungkinkan pemindaian protokol DeFi, atau sistem kontrak pintar apa pun, untuk fungsi yang diizinkan. Ini mengembalikan daftar kontrak pintar, fungsi izin yang teridentifikasi, dan masing-masing pemilik izin.
Untuk memindai protokol untuk fungsi yang diizinkan, protokol target ditentukan dalam bentuk rantai dan serangkaian alamat dari semua kontrak yang diterapkan. Semua kontrak ini harus diverifikasi di penjelajah blok publik. Anda dapat menemukan daftar rantai dan penjelajah yang didukung di sini. Pemindai izin kemudian mengunduh kode sumber kontrak dari penjelajah, memindai izin tersebut, membaca pemilik izin dari slot penyimpanan masing-masing, dan menulis hasilnya dalam file keluaran.
solc
Buat dan aktifkan lingkungan Python virtual, dan instal paket Python yang diperlukan
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Salin file .env.example
ke .env
dan, bergantung pada jaringan tempat kontrak diterapkan, isi url penyedia RPC Anda dan kunci api penjelajah blok yang valid. Kemudian muat variabel dengan
source .env
Lengkapi file ./contracts.json
dengan nama rantai dan alamat semua kontrak protokol. Temukan daftar rantai yang didukung di sini.
Kemudian jalankan skrip pemindai dengan
python src/main.py
Catatan, jika Anda tidak memiliki versi kompiler solc
yang benar, versi tersebut akan diinstal secara otomatis oleh skrip.
Script akan menulis hasil pemindai di file baru ./permissions.json
.
Setelah analisis Anda selesai, Anda dapat menonaktifkan kembali lingkungan Pyhton dengan perintah berikut
source deactivate
Rantai yang didukung untuk mengambil dan menyaring kontrak
"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")
Pemindai izin TIDAK menjamin bahwa rangkaian alamat kontrak yang diberikan sudah lengkap, atau bahwa kontrak sebenarnya merupakan bagian dari protokol.
Izin diidentifikasi dengan penggunaan pengubah onlyOwner
atau pemeriksaan msg.sender
dalam fungsi kontrak. Bentuk izin lain mungkin ada yang tidak tercakup dalam pendekatan ini.
Pemindai izin mencoba membaca pemilik izin dari penyimpanan kontrak secara langsung. Hal ini bisa gagal, khususnya jika kontrak menggunakan pola kemampuan upgrade, dan harus diverifikasi secara manual.
Pemindai izin hanya mengidentifikasi izin dan pemiliknya tetapi tidak menilai dampak atau risiko dari izin tersebut.
Pemindai izin dibangun di atas penganalisis statis Slither. Kami berterima kasih kepada tim Trail of Bits karena telah menciptakan alat sumber terbuka ini dan semua pekerjaan yang telah mereka lakukan untuk keamanan di sektor DeFi.