119 lines
3.8 KiB
Markdown
119 lines
3.8 KiB
Markdown
# 工单:预售网站钱包连接与购买功能修复
|
||
**日期**: 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*
|