內建錢包(BIP39 助記詞、HD 派生、AES-256 本地加密)+ DEX 聚合器(Uniswap V2/V3 Router)。私鑰永遠不離開用戶裝置,支援 MetaMask 與 WalletConnect V2 連接外部錢包,多鏈 (Ethereum / Polygon / BSC / Arbitrum)。
點擊左側導航在「資產 / Swap / DApp / 錢包創建」之間切換。Swap 頁可即時換算匯率(ETH/USDC 真實匯率模擬)並計算滑點,按 Swap 會 demo 交易簽名流程。
這 12 個單詞是恢復錢包的唯一方法。請按順序手抄保存,不要截圖、不要分享。
技術架構只是手段 — 下方五個區塊才是我做這個產品時真正交付的東西:問題定義、目標用戶、競品差異化、成功指標、MVP 假設。
當 CEX 客戶站穩後,下一個問題立刻浮現:怎麼接觸 Web3 原生用戶? Web3 用戶不信任 CEX 託管私鑰,他們要自管錢包 + 鏈上 DEX。客戶想滿足這群用戶,但自建錢包成本高得嚇人。
客戶自建 Web3 錢包的痛點:
我們的市場機會:提供「品牌客製 + 多鏈現成 + 安全模組打包」的白標 Web3 錢包。客戶不用養 Web3 工程團隊,就能讓自家品牌進入 Web3 生態。
| 類型 | 佔比 | 主要需求 | 關鍵體驗 |
|---|---|---|---|
| 🧠 DeFi 老手 | ~20% | 已有 MetaMask,看不上內建錢包 | WalletConnect 連外部錢包 + Approve 管理 |
| 🌱 Web3 新手 | ~70% | 第一次接觸錢包,怕弄丟助記詞 | 內建錢包 + 助記詞引導 + 防呆設計 |
| 🌉 跨鏈 Swap 用戶 | ~10% | 追新項目,多鏈跳轉 | 多鏈一鍵切換 + 路由聚合 + Gas 預估 |
我學到的事:Web3 用戶分群比 CEX 更極端 — 老手嫌簡單、新手怕複雜。產品要同時做出「給老手的進階模式」與「給新手的引導模式」,UI 切換不能讓任一邊覺得被冒犯。
| 方案 | 誰用 | 品牌客製 | 多鏈支援 | 主要痛點 |
|---|---|---|---|---|
| MetaMask | DeFi 老手 | ❌ 不可 | 需手動加 | 客戶無法做品牌延伸 |
| Phantom | Solana 用戶 | ❌ 不可 | 只 Solana 系 | 多鏈支援薄弱 |
| Coinbase Wallet | 新手 | ❌ 不可 | EVM + Solana | 綁定 Coinbase 生態 |
| 客戶自建 | — | ✅ 100% | 要自己做 | 成本太高,安全是無底洞 |
| 我們(白標) | 客戶的終端用戶 | ✅ 完全客製 | 4+ 主流 EVM 鏈 | —(市場甜蜜點) |
我們的差異化:不是要打敗 MetaMask 的「通用性」— 我們服務「想做品牌錢包但不想自建的客戶」。MetaMask 是通用工具,我們是 B 端品牌延伸方案。
| 階段 | 指標 | 設計目標 |
|---|---|---|
| Acquisition | App 下載 → 完成錢包創建轉換率 | ≥ 60% |
| Activation | 創建錢包 → 完成第一筆 Swap 的比例(7 日內) | ≥ 30% |
| Retention | 7 日留存(散戶 segment) | ≥ 25% |
| Revenue | 每月活躍用戶 Swap 平均金額 | $2,000 |
| Referral | 邀請好友連結轉換率 | ≥ 5% |
同時做內建錢包 + WalletConnect 外部錢包是必要的,不能二選一。
驗證方法:上線後外部錢包用戶 ≥ 20%(如果 < 5% 代表新手都用內建,WalletConnect 可砍)。
80% 的客戶只要 4 條主流 EVM 鏈(ETH / Polygon / BSC / Arbitrum),多鏈不會吵著要 Solana / Cosmos。
驗證方法:前 6 個客戶的鏈需求清單,若 > 50% 客戶要非 EVM 鏈,產品方向錯。
客戶買單我們的關鍵賣點是「安全模組打包好」,不只是錢包功能。
驗證方法:銷售過程中,「安全偵測 / 防詐騙模組」被提及次數 > 「Swap 路由 / Gas 估算」。
不只做內建錢包 — 同時接 MetaMask + WalletConnect V2。我評估:重度用戶不會放棄熟悉的 MetaMask,新手又需要內建錢包的引導。雙模式雖然增加開發成本,但兩邊用戶都能 onboard,這個 trade-off 是值得的。
ethers.js 是業界元老,但 wagmi/viem 已成為 React DApp 事實標準(連 Uniswap 都換了)。Hook 設計優雅、TypeScript 友好、生態整合好。我決定第一版直接用 wagmi,省去未來重構成本 — 技術選型要看「未來 3 年的方向」,不是「現在誰最熟」。
無限 Approve 是 Web3 詐騙最大來源。雖然 UX 會多一次簽名(用戶體驗稍差),但能避免 99% 的 Rug Pull 損失。我認為「差的 UX vs 用戶資金損失」— 後者代價太高。這個決策是「安全 > 體驗」的明確表態。
MVP 用 Uniswap 官方 Auto Router — 省 4 週開發 + 路由品質高 + 流動性深。自建多 DEX 聚合(Uniswap + Curve + 1inch)留到 Phase 2 評估,前提是用戶反映滑點問題。先不過度設計。
跨鏈橋是 Web3 最高風險的領域(Ronin / Wormhole / Multichain 都被攻擊過上億美金)。我評估了三條路:(1) 自建 — 安全成本與責任無法承擔;(2) LayerZero — 設計新但流動性與 EVM 偏重;(3) Wormhole — 雖然 2022 被攻擊但已強化、生態最廣。最終選 Wormhole,5 個關鍵原因:
這個決策的核心邏輯:跨鏈橋本身不是我們的差異化,「不跳離自家錢包」才是。Wormhole 的 Connect UI 嵌入體驗讓用戶感覺整個跨鏈都在我們錢包內完成 — 這是品牌價值。
以下技術方案由我主導定義 — 從市場調研、PRD 到原型皆一手完成;工程團隊負責實作落地。在還沒有 AI 工具的年代,這些規格是我一頁一頁手寫、一張一張手畫出來的。
私鑰永遠不離開用戶裝置是 Web3 原則 — 但這意味著每次簽名要解密私鑰、用戶要記得密碼、助記詞要妥善保存。採用 AES-256-GCM 加密 + scrypt KDF (N=262144),平衡安全性與解鎖速度。
Alchemy / Infura 任一節點掛掉用戶就無法交易。設計 FallbackProvider 自動切換主備節點,每條鏈獨立 RPC 池,監控延遲與成功率動態調權。
無限 Approve 是 Web3 詐騙最大來源。產品端強制預設精確授權 + 提供「授權管理」頁面讓用戶撤銷舊授權。
9 大功能層獨立解耦:用戶入口層 / 錢包核心 / 第三方錢包 / DEX 引擎 / 區塊鏈交互 / Gas / Tx 監控 / 資產管理 / 安全。
Web (React + TS + Vite) + Mobile (RN/Flutter) + Chrome Extension (MV3)
BIP39 助記詞、BIP32/BIP44 HD 派生、AES-256-GCM + scrypt 本地加密
WalletConnect V2 + MetaMask SDK + wagmi/viem 抽象層
Token List + Price Quote + Approve Manager + Uniswap Router
FallbackProvider 多節點容錯、WebSocket 區塊監聽、Chain Registry 配置
EIP-1559 fee 估算、Slow/Standard/Fast 三檔、餘額檢查
PENDING / CONFIRMING / SUCCESS / FAILED / DROPPED 五狀態追蹤
Multicall3 批量讀取餘額、CoinGecko 價格、Etherscan 交易歷史
簽名預覽、釣魚域名黑名單、合約風險偵測、Approve 撤銷
採用 BIP39/BIP32/BIP44 標準,路徑 m/44'/60'/0'/0/x 支援多帳號派生。所有私鑰使用 AES-256-GCM 加密儲存於本機 Secure Storage (iOS Keychain / Android EncryptedSharedPreferences / Web IndexedDB + WebCrypto)。
// 助記詞生成 (BIP39) const mnemonic = ethers.Mnemonic.entropyToPhrase(ethers.randomBytes(16)); // 12 words const wallet = ethers.HDNodeWallet.fromPhrase(mnemonic, undefined, "m/44'/60'/0'/0/0"); // 加密存儲 const encryptedJson = await wallet.encrypt(userPassword); // scrypt KDF // 存入 IndexedDB(Web)或 Keychain(App) // 解密還原 const decryptedWallet = await ethers.Wallet.fromEncryptedJson(encryptedJson, userPassword);
// wagmi config — 統一管理所有 Connector
export const config = createConfig({
chains: [mainnet, polygon, arbitrum, bsc],
connectors: [
injected(), // MetaMask
walletConnect({ projectId: 'YOUR_WC_PROJECT_ID', ... }),
],
transports: {
[mainnet.id]: http('https://eth-mainnet.g.alchemy.com/v2/KEY'),
[polygon.id]: http('https://polygon-mainnet.g.alchemy.com/v2/KEY'),
...
},
});
// 1. 檢查 Allowance
const allowance = await tokenContract.allowance(userAddress, ROUTER_ADDRESS);
// 2. 如需 Approve(精確授權)
if (allowance < amountIn) {
await tokenContract.approve(ROUTER_ADDRESS, amountIn); // ⚠️ 不用 MaxUint256
}
// 3. 執行 Swap
const swapTx = await routerContract.swapExactTokensForTokens(
amountIn,
amountOutMin, // 扣除滑點
[tokenA, tokenB],
userAddress,
deadline
);
// 多節點容錯
const provider = new ethers.FallbackProvider([
{ provider: alchemyProvider, priority: 1, stallTimeout: 2000 },
{ provider: infuraProvider, priority: 2, stallTimeout: 2000 },
]);
| 狀態 | 觸發 | UI 表現 |
|---|---|---|
| PENDING | tx.hash 取得後 | 轉圈動畫、顯示 hash |
| CONFIRMING | 確認數 < threshold | 1/12 確認進度 |
| SUCCESS | receipt.status === 1 | 綠勾 + 結果 |
| FAILED | receipt.status === 0 | 紅叉 + 解碼 revert reason |
| DROPPED | 超時未上鏈 | 提示加速或取消 |
⚠️ 私鑰永遠不離開用戶裝置。
❌ 私鑰永遠不會:傳送到後端伺服器 / 寫入 log / 出現在 URL / 存入未加密 Storage。
| 風險 | 防護措施 | 實作 |
|---|---|---|
| 截圖洩露 | 禁止截圖 | Android FLAG_SECURE / iOS 監聽截圖 / Web user-select:none |
| 剪貼簿洩露 | 不允許複製 | 禁用長按複製,提示手抄 |
| 記憶體殘留 | 使用後立即清除 | mnemonic = null; Uint8Array.fill(0) |
| 本地存儲被讀 | 強加密 | AES-256-GCM + scrypt(N=262144, r=8, p=1) |
| 暴力破解密碼 | 限制嘗試次數 | 5 次錯誤鎖 30 秒,10 次鎖 5 分鐘 |
| XSS 竊取 | CSP 策略 | Content-Security-Policy default-src 'self' |
| 風險 | 偵測方式 | 用戶提示 |
|---|---|---|
| 假 Token | 對比 Token List 白名單 | 🟡 此 Token 未經驗證 |
| Rug Pull | 檢查合約是否含 pause() / blacklist() | 🔴 合約含可暫停交易函式 |
| 蜜罐 Honeypot | 模擬 sell 交易,失敗 → 蜜罐 | 🔴 此 Token 可能無法賣出 |
| 未驗證合約 | Etherscan API 查驗證狀態 | 🟡 原始碼未公開驗證 |
// ❌ 危險:無限授權
await token.approve(router, ethers.MaxUint256);
// ✅ 安全:精確授權
await token.approve(router, exactAmountNeeded);
// 一鍵撤銷授權
async function revokeApproval(tokenAddr, spenderAddr, signer) {
const token = new ethers.Contract(tokenAddr, ERC20_ABI, signer);
return token.approve(spenderAddr, 0); // 設為 0
}
UI 設計:Swap 時預設精確授權;提供「授權管理」頁面列出所有已授權 Token + Spender;每項顯示「撤銷」按鈕。
啟動時載入 MetaMask 釣魚黑名單 (auto-updated)。DApp 連線前檢查 domain:blacklist 直接阻擋、whitelist 直接通過、unknown 顯示警告。所有外部連結強制顯示完整 URL,可疑 URL 高亮提醒。
當 SimonEx 的 DEX 聚合層延伸到鏈上永續、或提供流動性金庫(Vault)作為做市與接盤方時,必須正面回應 2025 年 3 月 Hyperliquid JELLY 事件:攻擊者用數個新帳戶自己當雙方,先讓一筆過度槓桿的空單被清算、灌進強制接盤金庫,再拉抬低流動性幣種現貨、經標記價把金庫的空單推入巨額帳面虧損(一度達金庫 NAV 的 27%)。根因是標記價貼著可操縱的現貨、單一市場無曝險上限、金庫無法拒絕接盤。以下防護與 CEX 6.5 呼應,聚焦鏈上場景。
| 攻擊環節 | SimonEx 防護設計 |
|---|---|
| 標記價貼著可操縱現貨 | 預言機多源中位數,並納入去中心化預言機(Chainlink 或 Pyth)交叉驗證;低流動性幣種標記價改用 TWAP 或 EWMA 降低即時敏感度 |
| 單一市場曝險過大 | 每市場未平倉量(OI)上限綁金庫規模;金庫對單一永續市場的曝險設硬上限 |
| 金庫被迫吞下有毒部位 | 接盤前做風險檢查;超限市場暫停自動接盤,改走人工或拍賣式清算,金庫可拒絕異常對手方 |
| 攻擊者自己當雙方對敲 | 關聯帳戶叢集偵測與自成交防制(STP);新帳戶大額部位限速與冷卻 |
| 事後臨時下架惹爭議 | 上下架與極端事件處置規則事前明訂、鏈上可查、可預期,避免臨時裁量損及公信力 |
6~8 週不是「我們從零開發 DEX 錢包的時間」— 基礎套組與客製模組庫已經沉澱好。6~8 週是一個新 B 端客戶從簽約到正式上線的完整交付時間。Web3 比 CEX 快,因為錢包是 stateless 的 — 沒有撮合引擎、沒有訂單帳本,主要工作落在「品牌客製 + 客製模組組裝」。
客戶簽約那一刻起,能拿到的不是空白專案,而是下面這些已經做好、隨時可組裝的模組:
| 模組 | 內容 | 客戶可否關閉 |
|---|---|---|
| 內建錢包核心 | BIP39 助記詞 / HD 派生 / AES-256-GCM 加密存儲 | ❌ 必裝 |
| 外部錢包整合 | MetaMask + WalletConnect V2 | ✅ 可關閉 |
| 多鏈支援 | 4 條主流 EVM 鏈(ETH / Polygon / BSC / Arbitrum) | ❌ 必裝(鏈可選) |
| Swap 引擎 | Uniswap V3 Auto Router + 滑點控制 + Gas 估算 | ❌ 必裝 |
| 安全模組 | 合約風險偵測 / 釣魚黑名單 / 精確 Approve / 助記詞防呆 | ❌ 必裝 |
| 交易監控 | 5 狀態追蹤(pending → confirming → success/failed/dropped) | ❌ 必裝 |
| DApp 瀏覽器 | EIP-1193 兼容 + 預設 DApp 列表 | ✅ 可關閉 |
| 基礎管理後台 | 用戶管理 / 交易監控 / 黑名單 / 報表 | ❌ 必裝 |
Web3 客戶要的客製化比 CEX 更深 — 因為很多客戶就是「想推自己的 Token」,這牽涉到代幣經濟學、流動性設計、質押收益這些核心 DeFi 模組。我為這些需求設計了可組裝的客製模組庫:
| 模組 | 適合客戶 | 開發狀態 |
|---|---|---|
| 🪙 代幣經濟學設計 | 有自有 Token 的項目方(總量分配、解鎖曲線、燃燒機制) | 已沉澱(含模擬器) |
| 💧 LP 質押系統 | 想做 DeFi 收益的項目方(流動性挖礦 + 雙幣質押) | 已沉澱 |
| 🏊 流動池建立與管理 | 想在自家錢包內提供 Uniswap V3 / Curve 流動性的客戶 | 已沉澱 |
| 💰 流動池理財產品 | 把 LP 包裝成「結構化理財產品」給散戶用(一鍵入金 + 自動 rebalance) | 已沉澱 |
| 🎁 空投 / 任務系統 | 新 Token 發行型客戶(連結錢包 → 完成任務 → 領空投) | 已沉澱 |
| 🖼️ NFT 收藏與展示 | NFT / GameFi 品牌(NFT 列表、Floor Price、稀有度) | 已沉澱 |
| 🌉 跨鏈橋整合(Wormhole) | 需要 EVM + 非 EVM 跨鏈資產傳輸的客戶 | 已沉澱(Wormhole SDK 嵌入) |
| 📊 治理投票系統 | 有 DAO 結構的客戶(鏈上投票 + Snapshot 整合) | 客戶需求觸發 |
第一個客戶 6~8 週是「沉澱期 + 交付期」加總。從第二個客戶開始,如果沒新模組需求,交付時間應該縮到 4~5 週:
| 客戶序號 | 預估交付時間 | 關鍵縮短點 |
|---|---|---|
| 第 1 個客戶 | 6~8 週 | 沉澱基礎套組 + 第一輪流程 |
| 第 2 個客戶 | ~5 週 | 基礎套組複用、tokenomics 流程已知 |
| 第 3 個客戶 | ~4 週 | LP/質押模組已存在(除非要新代幣模型) |
| 需要全新代幣模型客戶 | +1~2 週 | 代幣經濟學重新設計與模擬 |
跟 CEX 對比:CEX 客戶交付 12 週(含合約引擎 + 金流通路);DEX 客戶交付 6~8 週(stateless + 不用接金流)。DEX 是 CEX 之後的自然延伸 — 同一批 30 人團隊複用核心架構與部分客製模組。
上線後客戶可隨時加購:
React 18 + TypeScript 5 Vite 5 + TailwindCSS wagmi v2 + viem v2(外部錢包整合) ethers.js v6(內建錢包核心,BIP39/BIP44/加密) @walletconnect/modal v2.7 + @walletconnect/ethereum-provider v2.17 @tanstack/react-query v5 + Zustand v5 Alchemy SDK + Multicall3 + FallbackProvider