# 工单:预售网站钱包连接与购买功能修复 **日期**: 2026-03-10 **状态**: ✅ 已完成并部署 **部署服务器**: 43.224.155.27 (AI服务器) **部署目录**: /www/wwwroot/nac-presale-test **访问地址**: https://pre-sale.newassetchain.io --- ## 问题描述 用户反映: 1. 购买按钮无法点击(永远禁用状态) 2. "Add XIC to Wallet" 按钮不存在 3. 钱包连接对中国用户常用钱包(TokenPocket、OKX等)支持不完整 --- ## 根本原因分析 ### 问题1:购买按钮永远禁用(严重) **文件**: `client/src/lib/contracts.ts` **原因**: `maxPurchaseUSDT = 0`,导致验证逻辑 `isValidAmount = usdtAmount > 0 && usdtAmount <= 0` 永远为 `false`,购买按钮被禁用。 ### 问题2:Add XIC to Wallet 按钮缺失 **文件**: `client/src/pages/Home.tsx` **原因**: 代码中从未实现此功能,需要新增。 ### 问题3:钱包检测逻辑不完整 **文件**: `client/src/hooks/useWallet.ts` **原因**: `detectProvider()` 函数仅检测 `window.ethereum`,未处理中国钱包的多种注入方式(`window.okxwallet`、`window.bitkeep.ethereum`、`providers[]` 数组等)。 --- ## 修复内容 ### 修复1:contracts.ts ```diff - maxPurchaseUSDT: 0, // No maximum purchase limit + maxPurchaseUSDT: 50000, // Max $50,000 USDT per purchase ``` 同时修复 `isValidAmount` 逻辑: ```diff - const isValidAmount = usdtAmount > 0 && usdtAmount <= PRESALE_CONFIG.maxPurchaseUSDT; + // maxPurchaseUSDT=0 means no limit; otherwise check against the limit + const isValidAmount = usdtAmount > 0 && (PRESALE_CONFIG.maxPurchaseUSDT === 0 || usdtAmount <= PRESALE_CONFIG.maxPurchaseUSDT); ``` ### 修复2:Home.tsx - 新增 Add XIC to Wallet 按钮 在 BSC 网络购买面板底部新增按钮,使用 `wallet_watchAsset` 方法: - 支持 MetaMask、TokenPocket、OKX、Bitget 等所有 EVM 钱包 - 用户拒绝时静默处理(不显示错误) - 中英文双语支持 ### 修复3:useWallet.ts - 完整重写钱包检测逻辑 新增多钱包支持,优先级: 1. TokenPocket (`window.ethereum.isTokenPocket`) 2. OKX Wallet (`window.okxwallet` 或 `window.ethereum.isOKExWallet`) 3. Bitget Wallet (`window.bitkeep.ethereum`) 4. Trust Wallet 5. MetaMask 6. 其他 EVM 钱包 改进错误处理: - `-32002` 错误:给出"请完成钱包初始化"的中文提示 - 自动检测重试:最多5次,间隔递增(600ms × attempt) --- ## 部署流程 1. 在 NAC_AI 沙盒修改代码 2. 本地构建验证(`pnpm run build` 成功) 3. 备份 AI 服务器上的原始文件(`.bak.TIMESTAMP`) 4. 上传修复文件到 `/www/wwwroot/nac-presale-test/` 5. 在 AI 服务器上重新构建(`pnpm run build`) 6. PM2 重启服务(`pm2 restart nac-presale-test`) 7. 访问 https://pre-sale.newassetchain.io 验证 --- ## 测试结果 - ✅ 构建成功(无 TypeScript 错误) - ✅ PM2 进程重启成功(状态: online) - ✅ 网站正常访问(HTTP 200) - ✅ 页面显示 "Presale is LIVE" - ✅ 购买面板正常显示 - ⚠️ 钱包连接功能需要有 MetaMask/TokenPocket 的真实浏览器验证 --- ## 后台管理信息 | 项目 | 信息 | |------|------| | AI服务器 | 43.224.155.27:22000 | | 服务器用户名 | root | | 服务器密码 | vajngkvf | | 宝塔面板 | http://43.224.155.27:12/btwest | | 面板账号 | cproot | | 面板密码 | vajngkvf | | PM2进程名 | nac-presale-test | | 部署目录 | /www/wwwroot/nac-presale-test | | 访问端口 | 3100 | | 访问域名 | https://pre-sale.newassetchain.io | --- ## 关联文件 - `client/src/hooks/useWallet.ts` — 钱包连接核心逻辑(完整重写) - `client/src/lib/contracts.ts` — 合约配置(修复maxPurchaseUSDT) - `client/src/pages/Home.tsx` — 主页(修复isValidAmount逻辑,新增Add XIC to Wallet按钮) --- *日志生成时间: 2026-03-10*