權限掃描器允許掃描 DeFi 協定或任何智慧合約系統以取得授權功能。它傳回智慧合約、已識別的許可功能和各自的權限所有者的清單。
為了掃描協議中的授權功能,目標協議是根據鍊和所有已部署合約的一組位址來指定的。這些合約都必須在公共區塊瀏覽器上進行驗證。您可以在此處找到受支援的鍊和瀏覽器的清單。然後,權限掃描器從瀏覽器下載合約的原始程式碼,掃描這些合約的權限,從對應的儲存槽讀取權限擁有者,並將結果寫入輸出檔案。
solc
編譯器建立並啟動虛擬Python環境,並使用以下指令安裝所需的Python套件
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
將.env.example
檔案複製到.env
,並根據部署合約的網絡,填寫 RPC 提供者的 url 和有效的區塊瀏覽器 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 領域的安全所做的所有工作。