Skip to content

v0.1.0

Latest

Choose a tag to compare

@1227cwx 1227cwx released this 05 Jul 10:12

✨ 更新亮点

Tip

本次更新是以 安全性、稳定性、可维护性 为主的系统升级

  • 支付订单查询安全性
  • 链上监听准确性
  • 归集和转出任务稳定性
  • Gas 钱包并发保护
  • OpenAPI / 易支付兼容安全性
  • 数据库初始化完整度
  • 后台路由和访问控制规范性

🧩 新增功能

  • 支付页面公开访问开关
  • 订单访问令牌保护
  • 每笔订单独立监听进度
  • Gas 补充交易状态记录
  • 默认网络、代币、汇率初始化数据

🛠 优化调整

1. 订单监听更安全

监听逻辑从原来的全局游标方式,优化为:

订单级监听起点 + 网络/代币统一扫块

这样既避免每个订单单独扫块造成 RPC 压力,也避免全局游标导致新订单漏扫。

2. 归集任务按网络串行处理

归集任务现在按网络加锁执行:

  • 同一个网络同一时间只处理一个归集任务。
  • 避免多个任务同时使用 Gas 钱包,导致 nonce 冲突。
  • 已发送交易的任务不会重复发交易。

3. 转出任务按网络串行处理

转出任务也改为按网络串行处理:

  • 防止重复转出。
  • 防止 Gas 钱包并发发交易。
  • 异常任务可按状态恢复。

4. 统一 Gas 钱包锁

归集和转出只要需要 Gas 钱包发交易,都会先拿统一网络锁,这样可以更好地保护 Gas 钱包交易顺序。

5. 钱包加密密钥缓存

WALLET_ENCRYPTION_KEY 现在会缓存到内存中:

  • 不再每次加密/解密都读取 .env 文件。
  • 减少长驻进程下的文件读取开销。

6. 钱包密钥结构优化

网络账户密钥改为保存账户级 xprv:

  • 根钱包保存根 seed。
  • 网络账户保存当前账户级 xprv。
  • 单个网络账户泄露时,不会直接影响其它网络账户。

7. Pay 页面加载体验优化

支付页面在带订单号访问时:

  • 不再先加载创建订单选项。
  • 直接加载订单状态。
  • 易支付订单也可以直接通过易支付订单号轮询状态。
  • 支付成功后会自动清理 URL,回到默认 /pay

🐞 BUG 修复

1. 修复订单过期不冻结问题

订单过期检查提前执行,不再依赖 RPC 请求成功。
即使当前网络暂时没有继续扫块,也可以正确处理过期订单和冻结子地址。

2. 修复监听可能跳块的问题

移除旧的全局监听游标表,改为每个订单保存自己的扫描进度,避免新订单被旧游标跳过。

3. 修复公开订单详情暴露问题

删除公开订单详情接口,只保留必要的订单状态查询,并要求携带访问令牌。

4. 修复地址分配并发风险

创建订单、分配地址、写入订单现在放在同一个事务中处理。
地址分配也增加了原子条件,避免多个订单抢到同一个地址。

5. 修复易支付绑定重复问题

易支付订单绑定收款订单时增加原子条件,避免并发情况下重复绑定。

6. 修复 OpenAPI 删除风险

API 配置删除前会检查是否有关联数据:

  • 交易订单
  • 易支付订单
  • 回调日志

如果已经有关联数据,则不能删除,只能禁用。

7. 修复归集/转出 processing 卡死问题

如果任务异常停留在处理中状态,系统会按网络账户超时时间自动恢复:

  • 已有交易哈希:恢复到链上确认状态。
  • 没有交易哈希:转为需要手动处理。

8. 修复后台历史路由残留

删除 /hdupay/transactions 历史兼容路由,避免无效页面继续访问。

🔐 安全增强

1. URL 安全校验

回调地址和同步跳转地址增加安全校验:

  • 只允许 http://https://
  • 禁止 localhost。
  • 禁止内网 IP。
  • 域名解析后如果指向内网地址,也会拒绝。
  • 禁止自动跟随回调重定向。

⚠️ 升级注意事项

  • 历史订单不做兼容处理,建议使用新订单测试本功能。
  • 建议升级前备份数据库与 .env 配置文件。