稳定币收款为什么需要确认数和订单有效期
一笔稳定币交易出现在链上,并不等于业务系统应该立即把订单标记为最终成功。支付网关还需要处理区块确认、订单有效期、重复通知以及用户在过期后付款等情况。
确认数解决链上确定性问题
交易刚被节点看到时,通常处于待确认状态。等待适当的区块确认,可以降低短暂分叉、节点数据差异或交易状态变化带来的风险。需要多少确认,应结合网络特性、订单金额和业务交付速度决定。
订单有效期解决业务一致性问题
订单有效期用于限定报价、库存或充值请求的业务窗口。它不是阻止链上转账的技术开关。用户仍可能在页面过期后向原地址付款,因此系统必须继续识别这笔交易,并把它送入延迟到账或异常单流程。
状态设计应清楚区分阶段
- `pending`:订单已创建,尚未发现有效付款
- `confirming`:已经发现交易,正在等待确认
- `paid`:金额与确认条件满足,可以通知业务系统
- `expired`:业务有效期结束,尚未发现付款
- `exception`:金额、币种、网络或到账时间需要人工处理
回调必须保持幂等
网络重试和服务恢复可能导致同一状态被多次通知。商户系统应以订单号和事件标识做幂等处理,支付网关也应保存回调结果、重试次数和最后一次响应,避免重复入账。
更稳妥的落地方式
在创建订单时固定币种、网络、金额和有效期;发现交易后立即记录交易哈希;达到确认条件后再进入已支付状态;对少付、多付、错币种和过期到账设置独立的人工复核入口。这样既能保持正常支付快速,又不会让边界情况直接污染业务余额。