稳定币支付网关有五个核心层:(1) 支付意图层,用于创建和管理每次支付的存款地址;(2) 链监控层,用于监视区块链的传入转账;(3) 确认引擎,用于验证收据并触发事件;(4) 记录所有支付状态的分类账;(5) 结算层,处理出口和金库管理。
本指南专注于生产 稳定币 网关背后的系统设计 - 不仅存在哪些组件,而且它们是如何连接的,故障发生在哪里,以及设计决策对于规模可靠性至关重要。
支付意图层
付款意图是在付款人发起付款时创建的。 它存储:预期金额,稳定币和链,分配的存款地址,到期时间,以及下游订单或发票参考。
充值地址推导
存款地址源自使用 BIP-44 的 HD 钱包。主种子存储在机密管理器(AWS Secrets Manager、Vault)中。每个支付意图都被分配一个唯一的派生路径索引。网关存储:衍生指数、预期金额、稳定币、链、到期日和支付状态。
在 EVM 链上,相同的衍生地址在所有 EVM 兼容的链上运行。 单个 HD 钱包 可以为 Base、Ethereum、Polygon 和 Arbitrum 提供单独的地址索引。
地址过期和重用
存款地址不应重复用于付款目的。 过期或成功付款后,地址在监控层中被禁用。 如果延迟付款到达过期地址,则网关将其记录为无与伦比的手动审查。
链监控层
链监控层监控ERC-20(或同等)转移事件到任何活跃的存款地址的区块链。 设计必须处理:高事件量(在繁忙的链上),实时检测,链重组,并同时监控多个链。
EVM链监控
Subscribe to ERC-20 Transfer events from the stablecoin contract address using WebSocket RPC (Alchemy, QuickNode). Filter by the to address matching any active deposit address. Use a bloom filter or database index on active addresses for O(1) lookup.
Fallback: poll for recent Transfer events every N seconds using eth_getLogs. WebSocket subscriptions are preferred but can drop connections — the polling fallback ensures no missed events.
Tron TRC-20 监控
TronGrid API 提供地址的交易历史记录。 使用 TronGrid REST API 的每个活跃存款地址进行TRC-20 t传输历史调查。 WebSocket 订阅在 Tron 上不那么可靠 - 民意调查是标准方法。
Solana SPL 令牌监控
Solana uses Associated Token Accounts (ATAs) — each wallet address has a corresponding ATA for each SPL token. Monitor the USDC ATA corresponding to each deposit address using WebSocket account subscriptions or polling getSignaturesForAddress.
确认引擎
确认引擎验证了检测到的转账并发出支付事件。 关键责任:
块深度检查: 在发出确认事件之前等待交易达到所需的确认深度。
金额验证: 与预期收到的金额进行比较。 处理不足支付(手动审查或基于产品宽容的拒绝)和过剩支付(信贷的全部金额,旗帜过剩)。
链重组处理: 如果在链重组中删除先前检测到的交易,请返回 payment_detected 事件,然后重新输入等待状态。 使用适用于链的重组风险的短确认深度。
幂等性: 每个确认的交易哈希都被存储。 重播相同的确认事件是一个no-op。
账本设计
付款账簿是所有 稳定币 付款活动的权威记录。 它必须是附件(没有更新,只有插入)和事件源 - 每个状态过渡(创建,检测,确认,到期,被扫描)是一个账本条目。
| 事件 | 触发器 | 下游行动 |
|---|---|---|
| 付款 - 创建 | 付款意图创建 | 返回存款地址给付款人 |
| 收费 - 检测 | 转移见到链上,等待 | 通知付款人;显示等待状态 |
| 付款 - 确认 | 所需的确认得到了 | 激活订单/订阅;触发 webhook |
| 付款期限 已到期 | 截止日期过去了,没有付款 | 释放存款地址;通知付款人 |
| 未付款 未付款 | 比预期少的数量 | 国旗审查;产品特定的处理 |
| 付款.Swept | 资金划入国库钱包 | 更新扫描记录;减少地址平衡 |
扫款和资金管理
金库钱包应该是用于生产部署的多重签名(例如 Safe/Gnosis Safe)——关键的金库操作需要多个签名者。
天然气资金: 每个存款地址都需要原生代币(ETH,TRX等),以支付扫描交易费。 该网关维持了天然气资助服务,在扫描之前将存款地址填充。
扫频触发: 通过平衡门槛,时间表或手动触发。 批量扫描降低了总气体成本。
扫一扫确认: Sweep交易被监控到确认。 成功时,扫描 ledger 事件被记录下来。
出口匝道集成架构
出口匝道将金库钱包中持有的稳定币转换为法定货币。集成模式:
出口匝道提供商帐户: 离境提供商(Bridge、Coinbase Prime等)提供稳定币目的地地址。 将 USDC 发送到此地址会触发 fiat 结算 到已配置的银行账户。
转移指令: 网关构建并签署从金库钱包到出口地址的转账。这需要金库钱包签名密钥访问——通常需要多重签名批准。
结算确认: 离线供应商发送网页或提供APIs以确认法定结算。 网关记录了法定结算事件,而不是离场转移。
生产注意事项
对于生产可靠性至关重要的建筑决策:
- 运行冗余的 RPC 节点连接(Alchemy primary + QuickNode fallback) - 单个 RPC 故障不应该导致错过的付款
- 事件排队(Kafka、SQS 或 Redis Streams)在链监测和确认引擎之间 - 将摄入与处理分开,并允许重播
- 围绕账本写作的数据库交易 - 确认事件和下游行动必须同时进行,或者两者都必须回滚
- 未成功的 webhook 交付的死信排队 - 重复使用指数反弹,警告重复的失败
- 监测和警告:链监测延迟,未与之匹配的付款,扫描失败,离场结算延迟
- 将签名密钥管理与网关应用程序逻辑分开——财务操作应需要多重签名批准
常见问题解答
网关应该是独立的服务,还是嵌入主应用程序?
如何处理用户发送错误的金额或错误的 稳定币?
如果 RPC 节点下降会发生什么?
该架构如何扩展到高体积?
需要生产级稳定币网关吗?
Gizmolab为金融科技产品和市场设计和构建定制的 稳定币支付网关基础设施。