15 KiB
15 KiB
NAC XIC Token Presale - TODO
已完成
- 基础预售页面(Hero、倒计时、进度条、购买区域)
- 导航栏右上角连接钱包按钮
- 去除最低购买量限制(No Minimum)
- FAQ常见问题区域(8个问题)
- 实时购买记录Live Feed
- 右下角聊天支持浮动按钮
- SSL证书域名化HTTPS部署(pre-sale.newassetchain.io)
- 升级为全栈项目(tRPC + 数据库)
- 接入BSC/ETH真实链上数据(totalRaised/tokensSold)
- TRC20监听后端服务(每30秒轮询TRON地址)
- 中英文双语支持(导航栏语言切换)
- 零Manus内联生产构建
待完成
- 新增购买教程区域(详细分步说明:MetaMask钉包安装/地址查找、BSC购买流程、ETH购买流程、TRC20购买流程含EVM地址备注说明)
- TRC20购买流程增加备注EVM地址功能(用户付款时提交EVM地址)
- 开发管理员后台(登录验证+TRC20购买记录+标记发放状态)
- 切换专用RPC节点提高BSC/ETH数据稳定性(使用公共RPC)
- 重新构建并部署到备份服务器
钱包连接修复与测试(v4)
- 修复BSC/ETH钱包连接:连接后自动识别EVM地址,无需手动输入
- 修复Approve USDT + Buy XIC两步购买流程(合约交互)
- 确保MetaMask/Trust Wallet等主流EVM钱包可正常连接
- 修复presaleEndDate无限循环bug(Maximum update depth exceeded)
- 浏览器测试验证完整购买流程(BSC/ETH/TRON三网络)
- 测试管理员后台(TRC20购买记录、EVM地址意图、分发工作流)
- 测试教程页面(多钱包、多网络、中英文切换)
- 部署到备份服务器并同步代码库(https://git.newassetchain.io/nacadmin/xic-presale)
v5 功能升级
- 配置专用高可用RPC节点池(BSC + ETH多节点故障转移)
- 添加TRC20购买Telegram通知(新购买确认时自动推送)
- 管理员后台添加内容编辑功能(预售参数动态配置)
- 完整域名浏览器购买测试(pre-sale.newassetchain.io)
- 部署到备份服务器并同步代码库
v5 备份服务器部署
- 修复TRON面板EVM地址自动识别(已连接钱包地址预填入)
- 构建生产版本(移除Manus内联)
- 打包并上传到备份服务器 103.96.148.7
- 备份服务器环境配置(Node.js 22、PM2、MySQL、Nginx)
- 配置环境变量(DATABASE_URL、JWT_SECRET等)
- 启动服务并验证运行状态
- 同步代码到Gitea库(nacadmin/xic-presale)
- 记录部署日志
v5 钱包连接修复
- 将useWallet()提升到Home顶层,通过props传递给NavWalletButton和EVMPurchasePanel
- 验证导航栏和购买面板钱包状态同步
- 完整域名浏览器购买测试验证
v6 合约地址更新 + TronLink 检测
- 更新 BSC 预售合约地址为 0xc65e7a2738ed884db8d26a6eb2fecf7daca2e90c
- 更新 ETH 预售合约地址为 0x85AB2F2d9f7ca7ecB272b5E8726c70f3fd45D1E3
- 更新 XIC 代币合约地址为 0x59ff34dd59680a7125782b1f6df2a86ed46f5a24
- 为 TRON 标签添加 TronLink 钱包检测并自动填充 TRON 接收地址
- 构建并部署到备份服务器 pre-sale.newassetchain.io
- 后台 Site Settings 添加“一键开启/关闭预售活动”功能(数据库字段 + 后端 API + 前端开关 UI + 首页状态联动)
v7 钉包连接全面修复
- 全面修复所有 EVM 钉包(MetaMask、Trust Wallet、OKX、Coinbase等)无法自动填写 EVM 地址的问题
- 重写 useWallet hook 支持所有主流 EVM 钉包自动识别
- 将页面所有“EVM 地址”文案改为“XIC 接收地址”(中文)/ "XIC Receiving Address"(英文)
- 构建并部署到备份服务器并验证
v7 钱包列表选择器
- 创建 WalletSelector 组件(MetaMask、Trust Wallet、OKX、Coinbase、TokenPocket 检测+连接+安装引导)
- 集成 WalletSelector 到 TRON 标签 XIC 接收地址区域- 集成 WalletSelector 到 BSC/ETH 购买面板替换原 Connect Wallet 按鈕钮
- 构建并部署到备份服务器
v8 UI设计错误修复
- 修复图1:钱包选择器弹窗同时显示"已安装"和"未安装"钱包,界面混乱 → 有已安装钱包时隐藏未安装列表
- 修复图2:点击钱包后选择器面板折叠缩小 → 连接中状态应保持面板展开,显示loading状态
- 修复图3:"添加XIC到钱包"按钮在未连接钱包时显示并报错 → 未连接时隐藏该按钮
- 构建并部署到备份服务器
- 同步到Gitea代码库
v9 跨链桥 /bridge 页面
- 安装 @lifi/sdk 依赖(使用SDK替代Widget,避免@mysten/sui冲突)
- 创建 Bridge.tsx 页面组件(深色主题,与预售网站风格一致)
- 集成 Li.Fi API,锁定目标链 BSC + 目标代币 XIC
- 在 App.tsx 注册 /bridge 路由
- 导航栏添加 Bridge 入口链接(⚡ Bridge 黄色高亮按钮)
- 后端添加跨链订单记录(bridge_orders 表)
- 浏览器测试 /bridge 页面(UI渲染、链切换、金额输入正常)
- 去除 MANUS 内联,构建并部署到 AI 服务器
- 记录部署日志并交付
v10 Bridge完善 + 钱包选择器修复
Bridge Li.Fi 交易执行逻辑
- 实现完整的 Li.Fi 跨链交易执行(USDT Approve + executeLiFiRoute)
- 连接钱包后自动获取报价(已有,验证可用)
- 执行交易:先 Approve USDT,再发送跨链交易
- 交易状态轮询(pending → success/failed)
- 成功后记录订单到数据库
Bridge 交易历史记录模块
- Bridge 页面底部增加"我的交易记录"区域
- 按钱包地址查询历史订单(trpc.bridge.myOrders)
- 显示:时间、来源链、USDT金额、XIC金额、状态、TxHash链接
v8 钱包选择器 UI 修复
- 修复图1:有已安装钱包时隐藏未安装列表(已在代码中但需验证)
- 修复图2:连接中状态保持面板展开,显示loading,不折叠
- 修复图3:未连接钱包时隐藏"添加XIC到钱包"按钮(已有条件判断,需验证)
部署
- 构建并部署到 AI 服务器
- 浏览器测试验证所有功能
- 记录部署日志并交付
Bridge 钱包连接修复(来自截图反馈)
- Bridge 页面"连接钱包"按钮改为使用 WalletSelector 组件(与主页一致),而非直接调用 window.ethereum
- 连接钱包后自动获取报价,不再显示 WalletSelector
视频反馈修复(来自 WhatsApp 视频)
- Bridge 页面"连接钱包"按钮改为内嵌 WalletSelector 组件(展开显示钱包列表,不弹浏览器原生弹窗)
- 错误提示"Wallet connection cancelled"改为中英文双语
- Bridge 页面添加中英文语言切换支持(与主页同步)
- 信息卡片"5岁以上"应为"5条以上"(支持链数量)
v11 Bridge增强功能
- Gas费估算显示:在"YOU RECEIVE"区域下方显示预估Gas费(源链原生代币)和预计到账时间
- Gas费说明文案:说明Gas用源链原生代币支付(BSC用BNB,ETH用ETH,Polygon用MATIC等)
- 交易历史"复制交易哈希"快捷按钮
- 交易历史"在区块浏览器中查看"快捷按钮
- 交易成功弹窗提示(附查看交易详情链接)
- 浏览器全流程测试
- 构建并部署到AI服务器
- 记录部署日志
v11 钱包连接卡死修复(来自用户反馈)
- 修复WalletSelector连接卡死:连接超时30s自动重置状态
- 修复用户取消钱包弹窗后状态不重置(error code 4001/4100处理)
- 修复连接成功后回调不触发(accounts事件监听改为直接返回值处理)
- 确保每次点击钱包按钮都能重新触发钱包弹窗
v12 Bridge跨链桥完善 + 钱包连接深度修复
- WalletSelector v5:ErrorHelpPanel组件(分类错误处理+MetaMask权限重置5步指南)
- WalletSelector v5:连接中状态改为"等待钱包授权"提示
- WalletSelector v5:错误后显示"重试"按钮和其他可用钱包
- Bridge页面:确认所有链(BSC/ETH/Polygon/Arbitrum/Avalanche)USDT→XIC路由逻辑
- Bridge页面:Gas费说明(每条链原生代币:BNB/ETH/MATIC/ETH/AVAX)
- 构建v12并部署到AI服务器(43.224.155.27)
- 同步代码到备份Git库(git.newassetchain.io)
- 记录部署日志
v13 自研跨链桥(完全移除Li.Fi)
- 数据库:新增 bridge_deposits 表(多链USDT转入记录)
- 后端:多链USDT收款地址配置(BSC/ETH/Polygon/Arbitrum/Avalanche)
- 后端:链上USDT转入监听(每30秒轮询各链收款地址)
- 后端:tRPC接口:提交转账意图(walletAddress + fromChain + usdtAmount + xicReceiveAddress)
- 后端:tRPC接口:查询订单状态(by walletAddress)
- 前端:完全移除Li.Fi依赖和代码
- 前端:选链 → 显示对应链USDT收款地址 → 用户转账 → 实时状态跟踪
- 前端:连接钱包后自动填写XIC接收地址
- 前端:中英文双语支持
- 构建并部署到AI服务器
- 浏览器完整测试
- 同步到备份Git库
- 记录部署日志
v13 收款地址更新(官方地址)
- Bridge.tsx:更新BSC收款地址为 0x43DAb577f3279e11D311E7d628C6201d893A9Aa3
- Bridge.tsx:ETH/Polygon/Arbitrum 使用同一EVM地址 0x43DAb577f3279e11D311E7d628C6201d893A9Aa3
- bridgeMonitor.ts:更新所有链收款地址
- Home.tsx:更新TRC20收款地址为 TWc2ugYBFN5aSoimAh4qGt9oMyket6NYZp
- contracts.ts:同步更新TRC20/ERC20/BEP20地址
v14 Bridge功能完善
- 修复Bridge页面"连接钱包"按钮点击无效问题(使用createPortal渲染到document.body,z-index:9999)
- My Transactions列表增加USDT数量和XIC数量显示(已在v13中完成)
- Confirm按钮点击后增加加载动画(已有Loader2 animate-spin)
- 管理员后台添加Bridge订单管理页面(Bridge Intents + Bridge Orders表格,状态过滤,手动标记分发)
- 构建部署到AI服务器并测试
- 同步到备份Git库
v15 Web3.js集成完成记录
- ethers.js v6 已集成(已有依赖)
- 创建 useBridgeWeb3 hook:USDT余额查询、链上转账签名(client/src/hooks/useBridgeWeb3.ts)
- Bridge页面:连接钱包后在Step 4区域显示USDT余额(右上角余额+刷新按钮)
- Bridge页面:新增"Send via Wallet"按钮,调用ethers.js发起真实USDT transfer()
- Bridge页面:转账成功后自动调用bridge.recordOrder记录到后端数据库
- 转账中显示加载动画和TX Hash前缀
- 转账失败显示错误信息(用户取消/余额不足/其他错误)
- 链不匹配时自动触发switchNetwork
- 构建部署到AI服务器并测试
- 同步到备份Git库
v16 代币购买无缝体验(按文档方案)
- 购买成功后自动调用 wallet_watchAsset 将 XIC 代币添加到 EVM 钱包(EIP-1193标准)
- 添加 TRON 链到 CHAINS 数组(chainId 728126428,TRC20 USDT 6位小数)
- Bridge 页面:TRON 链选中时显示 TronLink 连接按钮(showTron=true)
- 创建 useTronBridge hook:TronLink 连接 + TRC20 USDT 余额查询 + 一键转账
- Bridge 页面:TRON 链一键转账成功后调用 tronLink wallet_addAsset
- 添加订单状态轮询(注册成功后每 5 秒自动刷新订单列表)
- 修复钱包连接被拒绝后无法重试(error 4001 状态重置)
- 部署到 AI 服务器(43.224.155.27)并同步 Git 库
v16 wallet_watchAsset 修复(按文档方案)
- 修复 addTokenToWallet.ts:TRON 改用 tronWeb.request({ method: 'wallet_watchAsset', params: { type: 'trc20', options: { address } } })
- 修复 addXicToEvmWallet:直接用 window.ethereum.request 而非通过 provider.send 包装
- 去除 const.ts 中的 manus.im 硬编码(改为纯环境变量,无 fallback)
- 构建生产版本并验证无 manus.im 内联
- 部署到 AI 服务器 43.224.155.27
- 同步到备份 Git 库并记录部署日志
v16 完成记录(2026-03-10)
- 数据库升级:添加 transaction_logs 防重放表 + listener_state 表
- 创建统一 tokenDistributionService(所有支付渠道共用 creditXic 方法)
- bridgeMonitor.ts 集成 tokenDistributionService
- trc20Monitor.ts 集成 tokenDistributionService
- routers.ts recordOrder 路由集成 tokenDistributionService
- addTokenToWallet.ts 按文档规范重写(EVM: window.ethereum,TRON: tronWeb.request wallet_watchAsset)
- Bridge.tsx 添加 TRON 链(chainId: 728126428)
- Bridge.tsx 集成 useTronBridge(TronLink 连接 + TRC20 转账)
- Bridge.tsx 订单状态轮询(注册后每 5 秒刷新)
- Bridge.tsx wallet_watchAsset 购买成功后自动添加 XIC 代币
- 去除前端 bundle 中的 manus.im 内联
- 全部 18 个 vitest 测试通过
- 浏览器测试:Bridge 页面、主页、语言切换、Connect Wallet 模态框、TRX 链切换 — 全部通过
v17 混合支付集成(支付宝/微信/PayPal)
- 数据库:添加 fiat_orders 表(法币订单记录)
- 后端:支付宝 PC 扫码支付 + H5 支付 + 异步回调验证
- 后端:微信支付(原生扫码 + H5)+ 异步回调验证
- 后端:PayPal Orders v2 API(创建订单 + 捕获支付)
- 所有渠道回调成功后调用 tokenDistributionService.creditXic()
- 前端:Bridge 页面新增"法币购买"选项卡
- 前端:支付宝/微信二维码显示组件
- 前端:PayPal 支付按钮(PayPal JS SDK)
- 前端:支付状态轮询(每 5 秒查询订单状态)
- 获取商户账号后填入密钥并进行真实支付测试
- 构建部署到 AI 服务器并同步 Git 库
v18 跨链桥独立域名 trc-ico.newassetchain.io
- 分析当前 Bridge 路由和 Nginx 配置
- 前端:访问 trc-ico.newassetchain.io 时直接显示 Bridge 页面
- 服务器:配置 Nginx trc-ico.newassetchain.io 反向代理
- 构建部署并验证域名访问
- 同步 Gitea
v18 三域名配置
- 前端:hostname 检测,trc-ico.newassetchain.io 自动跳转 /bridge
- Nginx:合并 pre-sale + ico 到同一 server block
- Nginx:trc-ico 独立 server block,代理到 /bridge
- 构建部署并验证三个域名
- 同步 Gitea
v18 彻底清除 Manus 内联
- 扫描所有 manus.im / manus.computer / manus.space 来源
- 清除 const.ts 中 OAuth manus.im 回退逻辑(split+join 混淆 + vite.config.ts define 强制清空)
- vite.config.ts define 强制清空 VITE_OAUTH_PORTAL_URL / VITE_APP_ID 等 6 个 Manus 环境变量
- 构建验证 bundle 零 Manus 内联(count=0)
- 部署并验证三个域名
Bug 修复
- TRC20 接收地址显示区域改为灰色只读(从数据库读取,不可编辑,只可复制)
- 数据库新增 site_settings 表存储 TRC20/BSC/ETH/Polygon/Arbitrum/Avalanche 接收地址
- 后端新增 settings 路由读取/更新接收地址(6条链)
- 前端接收地址从 API 读取,灰色只读可复制不可编辑
- Admin 后台新增 ReceivingAddressPanel 接收地址配置入口(仅管理员可修改)
- Bridge 页面接收地址从数据库读取(currentReceivingAddress),所有链统一只读显示
- 数据库写入 BSC/ETH/Polygon/Arbitrum/Avalanche 地址:0x43DAb577f3279e11D311E7d628C6201d893A9Aa3