區塊鏈基礎概念與開發環境
區塊鏈到底是什麼?
區塊鏈本質上是一個去中心化的資料庫。傳統的資料庫(如 PostgreSQL)由一個中心伺服器管理,而區塊鏈的資料由全球成千上萬的電腦(節點)共同維護。
傳統資料庫 vs 區塊鏈
| 特性 | 傳統資料庫 | 區塊鏈 | |------|-----------|--------| | 控制者 | 單一組織 | 所有人(去中心化) | | 資料修改 | 可以刪除/修改 | 一旦寫入就不可竄改 | | 當機風險 | 單點故障 | 除非所有節點同時當機 | | 透明度 | 由業者決定 | 完全公開透明 | | 速度 | 非常快 | 較慢(需要共識) |
區塊鏈的三大核心特性
- 去中心化 (Decentralization):沒有任何人可以控制整個網路
- 不可竄改 (Immutability):一旦資料上鏈,就永遠無法修改或刪除
- 透明公開 (Transparency):所有交易紀錄都可以在區塊瀏覽器上查詢
什麼是智慧合約 (Smart Contract)?
智慧合約是部署在區塊鏈上的自動執行程式。你可以把它想像成一個「自動販賣機」:
- 你投入 A 幣(觸發條件)
- 自動販賣機執行預設的邏輯(智慧合約程式碼)
- 你得到 B 幣作為回報(執行結果)
沒有人可以干預這個過程——程式碼就是法律。
以太坊與 EVM
以太坊 (Ethereum) 是第一個支援智慧合約的區塊鏈平台。它的核心是 EVM (Ethereum Virtual Machine)——一個在全球數千台電腦上同時運行的「世界電腦」。
重要概念
Gas(燃料費) 每次在以太坊上執行智慧合約,都需要支付 Gas 費用。Gas 費用 = Gas 使用量 × Gas 價格。
- 簡單的轉帳:21,000 Gas
- 部署合約:數十萬到數百萬 Gas
- 複雜的合約互動:數萬到數十萬 Gas
錢包 (Wallet) 錢包是你的區塊鏈身份。它包含一對密鑰:
- 公開金鑰 → 你的地址(類似銀行帳號)
- 私密密鑰 → 你的密碼(絕對不能告訴任何人!)
安裝開發環境
1. 安裝 Node.js
# 確認 Node.js 版本 >= 18
node --version
npm --version
2. 建立 Hardhat 專案
mkdir vibe-dapp
cd vibe-dapp
npm init -y
npm install --save-dev hardhat @nomicfoundation/hardhat-toolbox
# 初始化 Hardhat 專案
npx hardhat init
選擇「Create an empty hardhat.config.js」。
3. 安裝 OpenZeppelin 合約庫
npm install @openzeppelin/contracts
4. 安裝 Ethers.js 與其他工具
npm install ethers dotenv
5. 設定 Hardhat
編輯 hardhat.config.js:
require("@nomicfoundation/hardhat-toolbox");
require("dotenv").config();
module.exports = {
solidity: "0.8.20",
networks: {
// 本地開發網路
hardhat: {
chainId: 31337,
},
// Sepolia 測試網
sepolia: {
url: process.env.SEPOLIA_RPC_URL || "",
accounts: process.env.PRIVATE_KEY ? [process.env.PRIVATE_KEY] : [],
},
},
};
6. 安裝 MetaMask 錢包
前往 https://metamask.io 下載 MetaMask 瀏覽器擴充功能:
- 建立新錢包
- 備份你的「助記詞 (Seed Phrase)」——這是你的錢包恢復鑰匙!
- 切換到 Sepolia 測試網路
- 到 Sepolia Faucet 領取測試用 ETH:
第一個智慧合約
建立 contracts/HelloWorld.sol:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract HelloWorld {
string public message;
constructor() {
message = "Hello, Web3 World!";
}
function setMessage(string memory _newMessage) public {
message = _newMessage;
}
function getMessage() public view returns (string memory) {
return message;
}
}
編譯合約
npx hardhat compile
部署到本地測試網
建立 scripts/deploy.js:
const hre = require("hardhat");
async function main() {
const HelloWorld = await hre.ethers.getContractFactory("HelloWorld");
const contract = await HelloWorld.deploy();
await contract.waitForDeployment();
console.log("合約部署地址:", await contract.getAddress());
// 測試
let message = await contract.getMessage();
console.log("初始訊息:", message);
// 修改訊息
const tx = await contract.setMessage("Vibe Tutor Web3!");
await tx.wait();
message = await contract.getMessage();
console.log("修改後訊息:", message);
}
main().catch((error) => {
console.error(error);
process.exitCode = 1;
});
npx hardhat run scripts/deploy.js
輸出範例:
合約部署地址: 0x5FbDB2315678afecb367f032d93F642f64180aa3
初始訊息: Hello, Web3 World!
修改後訊息: Vibe Tutor Web3!
本日總結
在本章中,你學到了:
- ✅ 區塊鏈核心概念:去中心化、不可竄改、透明公開
- ✅ 智慧合約:部署在區塊鏈上的自動執行程式
- ✅ 以太坊與 EVM:全球的「世界電腦」
- ✅ Gas、錢包、私鑰:Web3 開發的必備知識
- ✅ Hardhat 開發環境:從安裝到第一個合約部署
- ✅ 第一個 Solidity 合約:HelloWorld
下一章,我們將學習 Solidity 程式語言的完整語法!