前言#
本篇會介紹常用的幾種 Solidity 開發環境,同時會推薦一種最為合適的開發環境並且安裝必要的內容。
環境介紹#
目前 Solidity 開發環境大致分為 2 類
-
线上类:依賴於瀏覽器的一體式開發環境,可以方便的進行 debug,管理賬戶餘額,配置環境等等操作。
-
线下类:適用於本地開發的環境。
线上类#
线上类產品主要是 Remxi https://remix.ethereum.org/
Remix 是 ETH 官方提供的線上開發環境,是一個非常強大的整合雲環境開發 IDE。提供了文件管理,在線編譯,靜態分析,部署以及運行交易,測試等功能。並且內置了強大的插件系統。
Remix 在各個方面都非常強大,甚至能直接修改讀取本地文件。美中不足的是不支持多版本編譯器。在面對一些簡單開發,或者臨時對鏈上進行一些分析或數據調用操作是非常合適的。
线下类#
Truffle Suite#
Truffle Suite 是一個套件名稱,其中包含了 truffle,ganache,drizzle 等工具。
Truffle:一個適用於 EVM 的開發環境,包含測試等工具套件。
Ganache:一個用於測試開發的 evm 本地節點,可用於合約的部署開發測試等功能。
Drizzle:基於 Redux 的前端組件,方便在前端進行交互。
Hardhat#
前身 Builder,是一個功能超級齊全的 Solidity 開發框架,幾乎涵蓋了所有的 Solidity 開發需要的功能。自帶智能合約的測試,編譯,以及本地節點,是一個高整合的開發框架,並且具有強大的插件系統,使得開發更為簡單。
Foundry#
基於 Rust 開發的一個 solidity 開發框架,以速度為主打。同樣也是涵蓋了開發,測試,本地節點功能。與 Hardhat 不同的是,foundry 的測試代碼使用的是 solidity 編寫,但是配合 vm cheat code 也能和本地環境進行互動。但是相比於 Hardhat 還是缺少了一些功能。
還有一些使用 python 開發的框架,本文並不一一闡述,有興趣的朋友可以自行搜索。
Hardhat 的環境搭建#
在三種主流的開發環境下,Hardhat
其強大的功能讓他成為了開發框架的標杆,如果有人還在推薦truffle
作為你的開發框架,請自豪的搬出 Hardhat 並且讓他也加入 Hardhat 的大家族。
當然,這並不是代表 Hardhat 沒有缺點,只不過在優點和缺點進行權衡利弊後顯得微不足道。當然 Foundry 也是一個非常強大的框架,但是他的功能依然沒有 Hardhat 全面,不過,將 Hardhat 和 Foundry 一起使用會有意想不到的效果。
不過,我們暫時不去做這種事情,因為 Hardhat 目前已經足以應對大部分情況。
廢話不多說,直接進入下一步。
創建項目,安裝 Hardhat#
找到一個你喜歡的目錄,新建文件夾後,用 vscode 打開這個文件夾。你也可以使用終端,輸入 code \path\to\your\project,即可用 vscode 一鍵打開項目目錄。
打開 VSCode 後,我們按下Command+J
這個組合鍵即可打開 VSCode 的 Terminal 欄。在這裡我們進行安裝 Hardhat。
輸入npx hardhat
等待提示按下回車,稍等片刻(如果比較慢請開啟科學上網)。
這裡我們按一下 下方向鍵,選擇Create a TypeScript project
當然你完全可以選擇Create a Javascript project
只不過並不是很推薦,因為 TS 在多人協作比 JS 具有更多的優勢。
按照提示完成初步設定,不過注意要在Do you want to install this sample project's dependencies with npm
時輸入 n。因為我們需要用Yarn
來管理依賴。
然後我們輸入yarn add "hardhat@^2.11.1" @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat-network-helpers @nomicfoundation/hardhat-chai-matchers @nomiclabs/hardhat-ethers @nomiclabs/hardhat-etherscan chai ethers hardhat-gas-reporter solidity-coverage @typechain/hardhat typechain @typechain/ethers-v5 @ethersproject/abi @ethersproject/providers
進行依賴安裝。
注意⚠️#
如果你出現了這個錯誤。不用慌,這在 JS 的世界是再常見不過的事情了,將來還會遇到各種各樣的問題,比如缺少 python 編譯環境啦,架構不對啦等等。
這裡遇到的問題是當前的 node 版本並不符合要求。可以看到,需要 node 的版本為 ^14,^16,^18。所以這裡我們需要重新安裝 node 到符合條件的版本,這個問題可能是因為你安裝的 node 版本不對,或者是你使用了brew install nvm
,如果是,你可以輸入brew uninstall nvm
然後使用以下命令安裝:curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
。然後重啟終端。
安裝完成#
安裝完成後,你的目錄結構應該是這樣。
安裝其他必要依賴#
當然,我們教程的目的是企業級工程,所以只安裝本體的 Hardhat 是完完全全不夠的,因為這還缺少一個工程可持續升級的功能。
Typescript#
因為我們創建的是 typescript 項目,所以我們需要安裝 typescript 的依賴。
yarn add ts-node typescript chai @types/node @types/mocha @types/chai
Hardhat deploy#
這是 hardhat 工程化必要的插件,這個插件用來幫忙管理代碼部署,你能輕鬆的在代碼中根據名稱獲取到你部署的合約地址,同時也能根據上下文來決定什麼合約需要部署。還能和 migration 一樣設定只能部署一次的合約。同時也給測試提供了非常方便的函數來進行靈活的合約部署,比如你可以只部署帶有某些 tag 的合約。
安裝Hardhat deploy
只需要輸入以下命令
yarn add hardhat-deploy @nomiclabs/hardhat-ethers@npm:hardhat-deploy-ethers ethers
然後在hardhat.config.ts
文件中添加import "hardhat-deploy"
。
到此,deploy 就已經安裝完成。我們在根目錄下建立 deploy 文件夾,以後的 deploy 文件都會放在這個文件夾下。
Dotenv#
dotenv 是可以把.env
文件導入到系統環境變量中給程序使用的一個 js 包,這個包非常有用,因為我們在工程化開發代碼的時候,一定會使用 git 或者其他的版本管理工具。對於私有項目來說,一些機密的變量上傳到版本庫可能問題不太大,但是如果是公有項目,那將會或多或少的有一些安全問題。所以我們需要把一些變量放到不會被上傳到版本控制的文件。
輸入
yarn add dotenv
然後修改hardhat.config.ts
在最上面添加import 'dotenv/config'
。
到此為止,我們必要的項目工程包就已經安裝完成,你可以把這個包做成一個模版,保存起來以後使用。
我們運行一下測試命令來看看我們的整合包是否正常。
yarn hardhat test
當你看到以上內容時,那麼恭喜你,一個符合工程標準的環境就搭建好了。
VSCode 插件(可選內容)#
當然,給我們的 VSCode 裝點插件可以更好的幫助我們開發。我這裡推薦幾個插件。
-
Hardhat Solidity - 這個是 Hardhat 團隊開發的 Solidity 插件,非常好用
-
Copilot - Github 的智能補全代碼插件,也是非常好用
-
Material Theme Icons - 美化插件
-
Material Theme - 還是個美化插件
最後安裝效果如下。
當然啦,每個人自己對美都有一種定義,所以如果你決定不好看,請隨意的更換。
總結#
本章講述了如何安裝 Hardhat 的工程環境,在後續的教程中,會通過實現一個與 Uniswap 進行互動的程序來開展後面的內容。