在 Web3 的開發旅程中,工具箱是你最可靠的伙伴。這篇文章將帶領你了解三款熱門開發者工具:Truffle、Hardhat 與 MetaMask,並示範它們如何協同工作讓你快速上手區塊鏈開發。
從專案初始化、程式碼編譯、測試到部署,最後再透過 MetaMask 與網路互動,我們會一步步拆解流程,讓你在實際操作中掌握每個工具的重點。
開發者工具總覽
本節將說明 Truffle、Hardhat 與 MetaMask 的功能定位,以及它們在區塊鏈開發流程中的角色。
Truffle Framework
- 功能定位:一套完整的開發框架,提供專案結構、編譯、測試與部署工具。
- 安裝方式:
npm install -g truffle
- 基本流程:
truffle init 初始化專案。
- 在
contracts/ 資料夾放置 Solidity 檔。
truffle compile 編譯合約。
- 在
migrations/ 資料夾放置遷移腳本。
truffle migrate 部署到測試網路。
- 範例:下面示範一個簡易的 HelloWorld 合約與部署腳本。
// contracts/Hello.sol
pragma solidity ^0.8.0;
contract Hello {
string public greet = "Hello, Web3!";
}
// migrations/2_deploy_hello.js
const Hello = artifacts.require("Hello");
module.exports = function (deployer) {
deployer.deploy(Hello);
};
Hardhat
- 功能定位:輕量級開發環境,提供靈活的任務系統、測試框架與內建本機節點。
- 安裝方式:
npm install --save-dev hardhat
- 初始化專案:
npx hardhat -> 選擇「Create a basic sample project」。
- 主要命令:
npx hardhat compile 編譯 Solidity 合約。
npx hardhat test 執行測試(使用 Mocha)。
npx hardhat run scripts/deploy.js --network localhost 部署腳本。
- 範例:HelloWorld 合約與部署腳本。
// contracts/Hello.sol
pragma solidity ^0.8.0;
contract Hello {
string public greet = "Hello, Hardhat!";
}
// scripts/deploy.js
const hre = require("hardhat");
async function main() {
const Hello = await hre.ethers.getContractFactory("Hello");
const hello = await Hello.deploy();
await hello.deployed();
console.log("Hello contract deployed to:", hello.address);
}
main()
.catch((error) => {
console.error(error);
process.exit(1);
});
MetaMask
- 什麼是 MetaMask:一款瀏覽器擴充功能,作為以太坊錢包與網路之間的橋樑。
- 安裝:從 Chrome Web Store 或 Firefox Add‑ons 下載,或直接至官方網站安裝。
- 創建帳號:
- 新增或導入現有私鑰。
- 記錄好助記詞,勿透露給他人。
- 與 dApp 互動:
- 在區塊鏈專案中使用
window.ethereum 或 ethers.js 的 Web3Provider 連接。
- 例子:使用 Metamask 連線與讀取 Hello 合約的 greet 字串。
const { ethers } = require("ethers");
// 連線至 MetaMask
const provider = new ethers.providers.Web3Provider(window.ethereum);
await provider.send("eth_requestAccounts", []);
const signer = provider.getSigner();
// 合約地址與 ABI (示例)
const contractAddress = "0xYourContractAddr";
const abi = [
{"inputs":[],"name":"greet","outputs":[{"internalType":"string","name":"",
"type":"string"}],"stateMutability":"view","type":"function"}
];
const hello = new ethers.Contract(contractAddress, abi, signer);
async function readGreet() {
const message = await hello.greet();
console.log(message);
}
readGreet();
如何選擇工具
- Truffle:若你需要一個成熟、完整的開發與部署流程,且偏好 Truffle 的測試框架(Mosaic)。
- Hardhat:適合想要高度自訂、快速迴圈開發,並利用 Hardhat Network 進行單元測試。
- MetaMask:必備的錢包與網路連線工具,任何前端 dApp 都會依賴它。
總結
這三款工具各有特色,通常會一起搭配使用:先在 Truffle 或 Hardhat 內部開發、測試與部署;再透過 MetaMask 在前端對接。掌握它們,你就能順利進入 Web3 開發的世界。