使用 VS Code、Hardhat 和 Slither 進行智能合約審計
介紹
直到一兩個星期前,我還了解智能合約安全和審計,但沒有接觸到當前真實和正確的流程,即在自動化部署和測試過程中使用威脅分析器從組裝層面進行合約審計。。
可以在此處[1]找到所發(fā)生事件的概要。
我深刻地認識到,我們必須使用一些工具,在發(fā)布到外面之前充分測試我們的合約,否則它們會被機器人利用,這些機器人的行動速度比你開始思考的速度快得多。
一個Python腳本可能會檢查你的智能合約的弱點,進行任何已知的攻擊,并通過將你的虛擬KNOX堡壘中的NFT或貨幣保護轉移到一個匿名的錢包中,在一分鐘內(nèi)將其價值完全耗盡到零。
當這種情況發(fā)生時,你無力阻止,而你肚子里的坑會擴大成一個深不可測的黑洞。
我學會了如何在我用來部署合約的環(huán)境中審計合約,我希望這個教程對人們有幫助,這樣他們就不會成為我所遭受的同樣攻擊的受害者,廢話不多說,我向你介紹一種從VSCode中創(chuàng)建、審計和部署合約的方法
前提條件
Node
Node 對于運行Hardhat和本地鏈是必不可少的,因此它是本教程的要求,它可以從這里[2]安裝。。
Python
static solidity analyzer需要Python和pip來執(zhí)行,在Windows、Mac和Linux上完成這個任務的最好方法是通過GUI安裝程序,因為它將為你修改PATH環(huán)境變量,使你在CLI執(zhí)行過程中避免任何全局關鍵字的問題。它可以在這里找到。
Hardhat
Hardhat 是一個出色的本地鏈開發(fā)環(huán)境,可讓您在將合約發(fā)布到主網(wǎng)之前徹底測試、部署和驗證合約。
它是任何智能合約開發(fā)人員的武器庫不可或缺的環(huán)境,可以從這里[3]安裝。
Slither
一旦你有了合約、部署腳本和hardhat環(huán)境,你現(xiàn)在就可以為靜態(tài)分析器安裝Slither程序集庫了。。
以管理員或根用戶身份打開一個新的命令提示符或終端窗口,輸入以下內(nèi)容
Visual Studio Code
一旦slither和hardhat都設置好了,你現(xiàn)在就可以準備安裝Visual Studio代碼了,可以在這里[4]找到。
安裝后,單擊左側菜單中的擴展圖標并搜索slither。
安裝擴展程序后,重新啟動 Visual Studio 代碼并重新打開您的hardhat項目,您現(xiàn)在應該會在左側任務欄中看到slither圖標。
如果擴展未加載,請檢查輸出控制臺,這很可能是您的環(huán)境變量的路徑問題,您可以通過鍵入 slither 來測試它。在任何合約目錄的終端窗口中,如果它拋出命令未找到錯誤,您將需要設置環(huán)境變量。
編譯你的合約
合約目錄
如果將所有合約保存在一個文件夾中,維護起來會更容易,并記住在刪除、創(chuàng)建或更改任何合約后,您需要使用這些命令清理本地類型鏈工件。
分析/審計
要運行審計,只需導航到slither圖標并單擊“播放”按鈕,這將掃描您當前目錄中所有已編譯的合約以查找任何漏洞。
研究修復
通過使用 google 查找被slither標記的問題并研究和測試可能的修復,優(yōu)先修復最嚴重的錯誤。
請記住,每次更改solidity 文件時,您都必須在掃描之前再次清理和重新編譯。
這個階段可能非常復雜,為了充分理解、測試和建??刂屏?,您需要具備良好的開發(fā)知識水平,以便真正測試邏輯并確保其按預期工作。
實現(xiàn)這一點的最佳方法是通過自動化測試腳本,可以在此處[5]找到一篇關于此的精彩文章。
部署和驗證
下面概述的是帶有構造函數(shù)參數(shù)的721A[6]合約的示例部署腳本,將此文件放入hardhat項目的腳本目錄中,可以對其進行修改以啟動或部署任何類型的合約,而不僅僅是721A。
https://gist.github.com/Arkay92/f0ec3ed3b866607802c3f2b69c83c135.js
在我的示例中,testnet 鏈接到以太坊的 Goerli 網(wǎng)絡,但它可以被命名并定向到您喜歡的任何網(wǎng)絡。最后一個標志對應于您的網(wǎng)絡名稱,該名稱在hardhat項目的 config.ts 文件中設置。
為了驗證,請務必在此配置文件中設置您的 etherscan / polygonscan api 密鑰。
配置完成后,確保將部署腳本放入腳本目錄并運行以下命令。
npx hardhat run scripts/myDeployScript.ts — 網(wǎng)絡測試網(wǎng)
就是這樣,您現(xiàn)在已經(jīng)學會了如何在一個地方部署、測試、審計和驗證合約!