區塊鏈基礎概念與開發環境

區塊鏈到底是什麼?

區塊鏈本質上是一個去中心化的資料庫。傳統的資料庫(如 PostgreSQL)由一個中心伺服器管理,而區塊鏈的資料由全球成千上萬的電腦(節點)共同維護。

傳統資料庫 vs 區塊鏈

| 特性 | 傳統資料庫 | 區塊鏈 | |------|-----------|--------| | 控制者 | 單一組織 | 所有人(去中心化) | | 資料修改 | 可以刪除/修改 | 一旦寫入就不可竄改 | | 當機風險 | 單點故障 | 除非所有節點同時當機 | | 透明度 | 由業者決定 | 完全公開透明 | | 速度 | 非常快 | 較慢(需要共識) |

區塊鏈的三大核心特性

  1. 去中心化 (Decentralization):沒有任何人可以控制整個網路
  2. 不可竄改 (Immutability):一旦資料上鏈,就永遠無法修改或刪除
  3. 透明公開 (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 瀏覽器擴充功能:

  1. 建立新錢包
  2. 備份你的「助記詞 (Seed Phrase)」——這是你的錢包恢復鑰匙!
  3. 切換到 Sepolia 測試網路
  4. 到 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!

本日總結

在本章中,你學到了:

  1. 區塊鏈核心概念:去中心化、不可竄改、透明公開
  2. 智慧合約:部署在區塊鏈上的自動執行程式
  3. 以太坊與 EVM:全球的「世界電腦」
  4. Gas、錢包、私鑰:Web3 開發的必備知識
  5. Hardhat 開發環境:從安裝到第一個合約部署
  6. 第一個 Solidity 合約:HelloWorld

下一章,我們將學習 Solidity 程式語言的完整語法!

會員專屬免費教學

本章節為註冊會員專屬的免費開放內容!請先登入或註冊會員,即可立即解鎖閱讀。

立即登入 / 註冊