Box

Box

3BoxTech Founder / Web3Box Founder/ solidity dev./Several years of experience in Solidity and full-stack development.
twitter

Web3企業級工程-初級篇:2. Solidity環境

前言#

本篇會介紹常用的幾種 Solidity 開發環境,同時會推薦一種最為合適的開發環境並且安裝必要的內容。

環境介紹#

目前 Solidity 開發環境大致分為 2 類

  • 线上类:依賴於瀏覽器的一體式開發環境,可以方便的進行 debug,管理賬戶餘額,配置環境等等操作。

  • 线下类:適用於本地開發的環境。

线上类#

线上类產品主要是 Remxi https://remix.ethereum.org/

Remix 是 ETH 官方提供的線上開發環境,是一個非常強大的整合雲環境開發 IDE。提供了文件管理,在線編譯,靜態分析,部署以及運行交易,測試等功能。並且內置了強大的插件系統。

Remix 在各個方面都非常強大,甚至能直接修改讀取本地文件。美中不足的是不支持多版本編譯器。在面對一些簡單開發,或者臨時對鏈上進行一些分析或數據調用操作是非常合適的。

线下类#

Truffle Suite#

網址:https://trufflesuite.com/

Truffle Suite 是一個套件名稱,其中包含了 truffle,ganache,drizzle 等工具。

Truffle:一個適用於 EVM 的開發環境,包含測試等工具套件。

Ganache:一個用於測試開發的 evm 本地節點,可用於合約的部署開發測試等功能。

Drizzle:基於 Redux 的前端組件,方便在前端進行交互。

Hardhat#

網址:https://hardhat.org/

前身 Builder,是一個功能超級齊全的 Solidity 開發框架,幾乎涵蓋了所有的 Solidity 開發需要的功能。自帶智能合約的測試,編譯,以及本地節點,是一個高整合的開發框架,並且具有強大的插件系統,使得開發更為簡單。

Foundry#

網址:https://getfoundry.sh/

基於 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 等待提示按下回車,稍等片刻(如果比較慢請開啟科學上網)。

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 。然後重啟終端。

安裝完成#

image

安裝完成後,你的目錄結構應該是這樣。

安裝其他必要依賴#

當然,我們教程的目的是企業級工程,所以只安裝本體的 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 - 還是個美化插件

最後安裝效果如下。

image

當然啦,每個人自己對美都有一種定義,所以如果你決定不好看,請隨意的更換。

總結#

本章講述了如何安裝 Hardhat 的工程環境,在後續的教程中,會通過實現一個與 Uniswap 進行互動的程序來開展後面的內容。

subscribe://

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。