工具
狀態
風險等級
影響
Truffle
🔴 已歸檔
高
無安全更新、EVM 兼容性問題
Ganache
🔴 停止維護
高
新 Solidity 版本不支持
Drizzle
🔴 終止服務
中
基於過時 Redux 模式
Express RPC 代理層 (安全隔離)
分層測試策略 (L1/L2/L3)
Vitest 前端測試
Monorepo 結構
# 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
L1: Hardhat/Mocha 或 Foundry/Forge
L3: Vitest + Mock Wagmi Hooks
🔧 Step 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"
}
}
} ;
// 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 ( ) {
// 測試邏輯
} ) ;
} ) ;
// 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' ) ,
} ,
} )
// 舊 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} < / d i v >
}
// contracts/package.json
{
"scripts" : {
"test" : " hardhat test" ,
"node" : " hardhat node" ,
"compile" : " hardhat compile"
}
}
// 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: 測試適配
完整測試套件
指標
遺留工具
現代工具
提升
編譯速度
Truffle
Hardhat
2-3x
測試執行
Ganache
Hardhat Network
5-10x
前端狀態
Drizzle
Wagmi
更簡潔
# 如果遷移失敗,快速回滾
git checkout backup/legacy-truffle
npm install # 恢復舊依賴
保持舊架構分支可運行
新功能在現代化分支開發
逐步遷移,降低風險
生成時間: 2025-12-15 11:20
基於: 工具鏈維護狀態評估