閱讀時間 6 分鐘
概覽
像Hardhat這樣的以太坊開發環境,讓開發者能更輕鬆地處理智慧合約和以太坊節點。它們提供了一套工具,可讓開發者無縫地編寫、測試和部署智慧合約。在本指南中,我們將使用 Hardhat 和 Quicknode 建立一個「Hello World」智慧合約,並將其部署到 Sepolia 測試網。
先決條件
- Quicknode 帳戶(點此免費註冊)
- 一款相容於 EVM 的錢包(例如MetaMask)
- 已安裝Node.js
- 已安裝Hardhat(本指南中也會介紹相關內容)
- 命令列介面/終端機視窗
- 程式碼或文字編輯器(例如 VSCode)
- Sepolia 測試網上的 ETH(您可以使用Quicknode 多鏈水龍頭免費領取一些)
什麼是 Hardhat?
Hardhat是一個開發環境,旨在協助開發者編譯、部署、測試及除錯他們的以太坊應用程式。其文件不僅條理清晰,內容也極為詳盡。Hardhat 還提供類似 JavaScript 的 console.log() 功能,用於除錯。此外,Hardhat 擁有眾多外掛程式,進一步擴充了其功能。
安裝 Hardhat 及其他依賴項
我們將使用npm 來安裝 Hardhat,npm 是隨node.js 一併提供的。
首先,建立一個新的專案目錄,並進入該目錄。您也可以在此處自由使用自己的名稱:
mkdir HardhatTutorial
cd HardhatTutorial
在您的專案目錄中開啟終端機/命令提示字元,並輸入以下指令。
npm init --y
npm install --save-dev hardhat
既然已經安裝了 Hardhat,就來建立一個新的 Hardhat 專案吧。我們將使用 npx 來執行此操作。npx 有助於處理 Node.js 可執行檔。
npx hardhat init
您將看到 CLI Hardhat 介面。請選擇「建立一個空的 hardhat.config.js 檔案」,然後按下 Enter 鍵。

現在,讓我們安裝使用 Hardhat 所需的其他依賴項。
npm install --save-dev @nomiclabs/hardhat-ethers ethers @nomiclabs/hardhat-waffle ethereum-waffle chai
我們需要這些依賴項,才能為合約編寫自動化測試。
使用 npm 安裝套件時最常見的問題,可能是 `node-gyp` 發生內部錯誤。您可以參閱此處的 node-gyp 安裝說明。
注意:若您遇到 node-gyp 相關問題,請確保您的 Python 版本與上述說明中列出的相容版本之一相符。
另一個常見的問題是快取過期。只需在終端機中輸入以下指令,即可清除您的 npm 快取:
npm cache clean
現在,讓我們為錢包取得私鑰、準備一些用於支付 gas 費的測試用 ETH,並架設一個以太坊節點;這些都是我們部署智慧合約所必需的。
建立/擷取私密金鑰
我們需要一個以太坊錢包,才能支付智慧合約部署的費用。
一旦建立好錢包並取得其私鑰後,我們將在下一節中將其新增至 Hardhat 設定檔(例如:hardhat.config.js)中。
您可以參考 Quicknode 的指南,使用JavaScript、Ruby、Python、Go 或PHP 來產生私鑰和以太坊地址。
若要從您的MetaMask錢包取得私鑰,請依照以下說明操作:
- 請點擊瀏覽器上的 MetaMask 圖示(一個風格化的狐狸頭)。如果看不到該圖示,請檢查瀏覽器的「擴充功能」頁面。
- 點擊⋮圖示,然後選擇「帳戶詳細資訊」。
- 接著,點擊「顯示私密金鑰」,並依照指示操作。

請複製並儲存私密金鑰;後續步驟中我們會用到它。
建議將私鑰等敏感資訊儲存於.env檔案中,並透過環境變數將其導入設定檔;或者,專門為開發用途建立一個新的輔助 MetaMask 錢包。
取得測試網 ETH
我們將把合約部署到 Sepolia 測試網。要開始操作,我們需要在MetaMask錢包中存入一些測試用 ETH,這點我們在上一步驟中已經提過。
請前往Quicknode 多鏈水龍頭,並連接您的錢包或貼上您的錢包地址。您需要選擇以太坊鏈和Sepolia網路,然後申請資金。
注意:您必須在以太坊主網帳戶中持有至少 0.001 ETH 的餘額,才有資格使用該水龍頭。

設定 Quicknode 以太坊端點
若要在以太坊的 Sepolia 區塊鏈上部署我們的合約,我們需要存取一個以太坊 Sepolia 節點。為此,我們幾乎可以使用任何以太坊客戶端,例如 Geth 或 OpenEthereum(前身為 Parity)。由於僅為了部署單一合約而言,這步驟稍顯繁瑣,因此我們只需在此處建立一個免費的 Quicknode 帳戶,即可輕鬆產生一個以太坊端點。 建立免費的以太坊 Sepolia 端點後,請將您的 HTTP 提供者 URL 備妥,因為您將在下一節中需要用到它。

設定配置檔
開啟hardhat.config.js檔案,並將以下內容貼入其中:
require("@nomiclabs/hardhat-waffle");
const endpointUrl = "ADD_YOUR_QUICKNODE_URL_HERE";
const privateKey = "ADD_YOUR_PRIVATE_KEY_HERE";
module.exports = {
solidity: "0.8.21",
networks: {
sepolia: {
url: endpointUrl,
accounts: [privateKey],
},
},
};
將ADD_YOUR_PRIVATE_KEY_HERE替換為上一步驟中取得的私鑰,並將ADD_YOUR_QUICKNODE_URL_HERE替換為上一步驟中取得的 HTTP 節點網址,然後儲存檔案。
上述程式碼的說明:
-
第 1 行:導入 hardhat-waffle 套件。
-
第 3-4 行:定義終點 URL 和私密金鑰。
-
第 6-14 行:提及 Solidity 版本並定義sepolia 網路。
建立合約
現在,關於我們的合約,請建立一個名為 contracts的新目錄,並在其中放置一個名為 HelloWorld.sol的新檔案。
mkdir contracts && echo > contracts/HelloWorld.sol
請將以下程式碼複製並貼上至您的HelloWorld.solSolidity 檔案中:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract HelloWorld {
string saySomething;
constructor() {
saySomething = "Hello World!";
}
function speak() public view returns(string memory) {
return saySomething;
}
}
上述程式碼的說明:
- 第 1 行:指定SPDX 授權類型,此為 Solidity ^0.6.8 之後新增的功能。
每當智慧合約的原始碼對外公開時,這些授權條款都能協助解決或避免著作權問題。若您不希望指定任何授權類型,可以使用特殊授權「UNLICENSED」,或直接省略整段註解(這樣不會導致錯誤,僅會顯示警告)。
-
第 2 行:宣告 Solidity 版本。
-
第 4 行:開始我們的名為
HelloWorld. -
第 6 行:建立變數
saySomething類型為字串。 -
第 8 至 10 行:呼叫建構函式,並將字串「Hello World!」儲存至
saySomething變數。 -
第 12-14 行:建立一個名為
說話類型為 public,該方法將傳回儲存於saySomething變數。
儲存檔案,並使用以下 Hardhat 指令編譯合約。
npx hardhat compile
如果您的合約編譯成功,輸出結果將類似如下:

部署「Hello World」智慧合約
現在要部署我們的合約,讓我們在一個名為scripts 的新目錄中建立一個deploy.js檔案。
mkdir scripts && echo > scripts/deploy.js
請將以下內容複製並貼上至您的 deploy.js 檔案中:
async function main() {
const [deployer] = await ethers.getSigners();
console.log(
"Deploying contracts with the account:",
deployer.address
);
const HelloWorld = await ethers.getContractFactory("HelloWorld");
const contract = await HelloWorld.deploy();
console.log("Contract deployed at:", contract.address);
const saySomething = await contract.speak();
console.log("saySomething value:", saySomething);
}
main()
.then(() => process.exit(0))
.catch(error => {
console.error(error);
process.exit(1);
});
上述程式碼的說明。
-
第 1 行:呼叫名為
主頁. -
第 3 行:取得用於簽署交易的以太坊地址,並將其儲存至部署者地址中。
-
第 5 至 8 行:將以太坊地址連同一個字串一起輸出至控制台。
-
第 10 行:呼叫 ethers.js 方法 ContractFactory. 這將搜尋
HelloWorld.sol檔案,並傳回一個可供我們使用的實例ContractFactory啟用方法。 -
第 11 行:呼叫 deploy 函式
ContractFactory以部署該合約。 -
第 13 行:將已部署合約的位址輸出至控制台。
-
第 15 行:呼叫函式
說話已部署合約的。 -
第 17 行:輸出函式的回傳值
說話傳送至主控台。 -
第 20 行:呼叫函式
主頁. -
第 21 至 24 行:檢查是否有錯誤,若有錯誤則輸出訊息,並結束程序。
儲存檔案,並執行以下指令以部署合約。
npx hardhat run scripts/deploy.js --network sepolia
合約成功部署後,您將看到一則輸出訊息,其中包含已部署合約的地址,以及 `speak` 函式的回傳值——即 `saySomething` 的值。

我們可以將已部署合約的地址複製並貼上至Sepolia Etherscan 的搜尋欄中,藉此驗證部署是否成功。這樣一來,系統便會顯示該已部署合約的相關資訊。

結論
就是這樣!您現在已經掌握了使用 Hardhat 建立、編譯和部署智慧合約的基礎知識。但這還不是全部——Hardhat 還提供了用於測試和除錯程式碼的工具。若想進一步深入了解,請參閱Hardhat 的官方文件。
訂閱我們的電子報,獲取更多關於以太坊的文章與指南。如有任何疑問,歡迎透過Discord上的專用頻道與我們聯繫,或使用下方表單提供意見回饋。請在Twitter及我們的Telegram 公告頻道上追蹤我們,掌握最新動態。
我們 ❤️ 您的回饋!
如果您有任何意見回饋或對新主題的建議,請告訴我們。我們非常樂意聽取您的意見。
