NAC_Blockchain/ISSUE_WALLET_FIX_20260310.md

119 lines
3.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 工单:预售网站钱包连接与购买功能修复
**日期**: 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`,购买按钮被禁用。
### 问题2Add XIC to Wallet 按钮缺失
**文件**: `client/src/pages/Home.tsx`
**原因**: 代码中从未实现此功能,需要新增。
### 问题3钱包检测逻辑不完整
**文件**: `client/src/hooks/useWallet.ts`
**原因**: `detectProvider()` 函数仅检测 `window.ethereum`,未处理中国钱包的多种注入方式(`window.okxwallet`、`window.bitkeep.ethereum`、`providers[]` 数组等)。
---
## 修复内容
### 修复1contracts.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);
```
### 修复2Home.tsx - 新增 Add XIC to Wallet 按钮
在 BSC 网络购买面板底部新增按钮,使用 `wallet_watchAsset` 方法:
- 支持 MetaMask、TokenPocket、OKX、Bitget 等所有 EVM 钱包
- 用户拒绝时静默处理(不显示错误)
- 中英文双语支持
### 修复3useWallet.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*