Skip to content

Latest commit

 

History

History
222 lines (178 loc) · 5.02 KB

工具鏈現代化遷移計劃.md

File metadata and controls

222 lines (178 loc) · 5.02 KB

🔄 工具鏈現代化遷移計劃

📊 當前狀態評估

❌ 遺留工具鏈風險

工具 狀態 風險等級 影響
Truffle 🔴 已歸檔 高 無安全更新、EVM 兼容性問題
Ganache 🔴 停止維護 高 新 Solidity 版本不支持
Drizzle 🔴 終止服務 中 基於過時 Redux 模式

✅ 保留的最佳實踐

  • Express RPC 代理層 (安全隔離)
  • 分層測試策略 (L1/L2/L3)
  • Vitest 前端測試
  • Monorepo 結構

🎯 遷移策略

Phase A: 評估與準備 (1-2 天)

# 1. 備份當前架構
git branch backup/legacy-truffle
git commit -am "Backup: Legacy Truffle architecture"

# 2. 創建現代化分支
git checkout -b feature/modernize-toolchain

Phase B: L1 智能合約層現代化 (3-5 天)

選項 1: Hardhat (推薦 - 學習曲線平緩)

# 安裝 Hardhat
cd contracts
npm uninstall truffle ganache @truffle/hdwallet-provider
npm install --save-dev hardhat @nomicfoundation/hardhat-toolbox
npx hardhat init

選項 2: Foundry (高性能 - 學習曲線陡峭)

# 安裝 Foundry
curl -L https://foundry.paradigm.xyz | bash
foundryup

# 初始化 Foundry 項目
cd contracts
forge init --force

Phase C: L3 前端層現代化 (2-3 天)

移除 Drizzle,採用 Wagmi + Viem

cd frontend
npm uninstall drizzle @drizzle/store @drizzle/react-plugin
npm install wagmi viem @tanstack/react-query

Phase D: 測試層適配 (1-2 天)

更新測試配置

  • L1: Hardhat/Mocha 或 Foundry/Forge
  • L3: Vitest + Mock Wagmi Hooks

📋 詳細遷移步驟

🔧 Step 1: Hardhat 遷移 (推薦路徑)

1.1 初始化 Hardhat

// hardhat.config.js
require("@nomicfoundation/hardhat-toolbox");

module.exports = {
  solidity: "0.8.19",
  networks: {
    hardhat: {
      chainId: 1337
    },
    localhost: {
      url: "http://127.0.0.1:8545"
    }
  }
};

1.2 遷移合約測試

// test/contract/MyContract.test.js (Hardhat 格式)
const { expect } = require("chai");
const { ethers } = require("hardhat");

describe("MyContract", function () {
  let contract;
  let owner;

  beforeEach(async function () {
    [owner] = await ethers.getSigners();
    const Contract = await ethers.getContractFactory("MyContract");
    contract = await Contract.deploy();
  });

  it("Should work correctly", async function () {
    // 測試邏輯
  });
});

🎨 Step 2: Wagmi 前端遷移

2.1 配置 Wagmi

// frontend/src/wagmi.config.ts
import { createConfig, http } from 'wagmi'
import { mainnet, sepolia, hardhat } from 'wagmi/chains'

export const config = createConfig({
  chains: [mainnet, sepolia, hardhat],
  transports: {
    [mainnet.id]: http(),
    [sepolia.id]: http(),
    [hardhat.id]: http('http://127.0.0.1:8545'),
  },
})

2.2 替換 Drizzle 組件

// 舊 Drizzle 方式
import { drizzleConnect } from "@drizzle/react-plugin";

// 新 Wagmi 方式
import { useReadContract, useWriteContract } from 'wagmi'

function MyComponent() {
  const { data } = useReadContract({
    address: '0x...',
    abi: contractABI,
    functionName: 'getData'
  })
  
  return <div>{data}</div>
}

🧪 Step 3: 測試現代化

3.1 Hardhat 測試腳本

// contracts/package.json
{
  "scripts": {
    "test": "hardhat test",
    "node": "hardhat node",
    "compile": "hardhat compile"
  }
}

3.2 Vitest Wagmi 模擬

// frontend/src/__tests__/setup.ts
import { vi } from 'vitest'

vi.mock('wagmi', () => ({
  useReadContract: vi.fn(),
  useWriteContract: vi.fn(),
  useAccount: vi.fn(() => ({ address: '0x123...' }))
}))

📅 遷移時程表

階段 時間 任務 輸出
Week 1 Day 1-2 Phase A: 評估準備 備份分支、風險評估
Day 3-5 Phase B: L1 現代化 Hardhat 環境
Week 2 Day 1-3 Phase C: L3 現代化 Wagmi 集成
Day 4-5 Phase D: 測試適配 完整測試套件

🎯 成功指標

✅ 遷移完成檢查清單

  • Hardhat 編譯成功
  • 本地節點啟動 (npx hardhat node)
  • 合約測試通過
  • Wagmi 前端連接成功
  • ABI 同步機制正常
  • CI/CD 流程更新

📊 性能提升預期

指標 遺留工具 現代工具 提升
編譯速度 Truffle Hardhat 2-3x
測試執行 Ganache Hardhat Network 5-10x
前端狀態 Drizzle Wagmi 更簡潔

🚨 風險緩解

回滾計劃

# 如果遷移失敗,快速回滾
git checkout backup/legacy-truffle
npm install  # 恢復舊依賴

並行開發

  • 保持舊架構分支可運行
  • 新功能在現代化分支開發
  • 逐步遷移,降低風險

🔗 參考資源


生成時間: 2025-12-15 11:20
基於: 工具鏈維護狀態評估