ERC-3009:为 x402 支付提供动力的协议
发布: (2025年12月11日 GMT+8 04:24)
4 min read
原文: Dev.to
Source: Dev.to
引言
在 x402 的支付机制核心是 ERC‑3009,这是一种通过加密签名实现无 gas 代币转账的标准。理解该协议是掌握 x402 如何在不要求用户持有原生代币来支付 gas 的情况下实现无摩擦支付的关键。
使用 ERC‑20 approve/transferFrom 模式的用户体验问题
- 需要两笔交易:先
approve,再transferFrom。 - 两次 gas 费用:用户需要支付两次。
- 依赖原生代币:必须持有 ETH 才能转移 USDC。
- 顺序 nonce:交易必须按顺序执行,导致瓶颈。
ERC‑3009 如何解决这些问题
与链上批准不同,付款方在链下签署授权消息,任何人都可以提交该消息。
function transferWithAuthorization(
address from,
address to,
uint256 value,
uint256 validAfter,
uint256 validBefore,
bytes32 nonce,
uint8 v,
bytes32 r,
bytes32 s
) external;
function receiveWithAuthorization(
address from,
address to,
uint256 value,
uint256 validAfter,
uint256 validBefore,
bytes32 nonce,
uint8 v,
bytes32 r,
bytes32 s
) external;
工作流程
- 付款方使用 EIP‑712 类型化数据签署消息。
- 将消息发送给中继者或协助者(链下)。
- 中继者在链上提交签名。
- 合约验证签名并执行转账。
- 中继者支付 gas,付款方无需支付。
随机 Nonce 与顺序 Nonce 的比较
| 方面 | ERC‑2612(顺序) | ERC‑3009(随机) |
|---|---|---|
| Nonce 格式 | 0, 1, 2, 3… | 随机 bytes32 |
| 并行操作 | ❌ 必须有序 | ✅ 完全独立 |
| 高频使用 | ❌ 瓶颈 | ✅ 无限扩展 |
对于 x402 和 AI 代理而言,这具有变革性:代理可以生成成千上万的并发支付授权而不会产生冲突。
使用 ERC‑3009 的 x402 协议流程
- 客户端 请求受保护资源。
- 服务器 返回带有支付要求的
402响应。 - 客户端 构造 ERC‑3009 授权消息并使用钱包签名。
- 客户端 重新发送请求,携带包含签名消息的
X-PAYMENT头。 - 协助者 验证签名。
- 服务器 返回请求的内容。
- 协助者 通过调用
transferWithAuthorization完成结算。
代币支持
| 代币 | 发行方 | ERC‑3009 支持 |
|---|---|---|
| USDC | Circle | ✅ 是 (v2+) |
| EURC | Circle | ✅ 是 |
| USDT | Tether | ❌ 否 |
| DAI | MakerDAO | ❌ 否 |
这正是 x402 侧重使用 USDC 而非 USDT 的原因。
功能对比:ERC‑2612 vs. ERC‑3009
| 功能 | ERC‑2612 | ERC‑3009 |
|---|---|---|
| 目的 | 批准 allowance | 直接转账 |
| 步骤 | 签名 → 批准 → 转账 | 签名 → 转账 |
| Nonce 类型 | 顺序 | 随机 |
| 用例 | DeFi 协议 | 支付、x402 |
进一步阅读
- x402 开发者指南 – 构建你的第一个付费 API
- x402 协助者 – 理解结算基础设施
- 为何 x402 不支持 USDT – 代币兼容性解释
- Solana 的授权机制 – 非 EVM 等价实现
- EIP‑3009 规范
- EIP‑712:类型化数据签名
- Circle 的 USDC 实现
ERC‑3009 改变了我们对代币转账的认知。通过将授权移至链下,它实现了无摩擦、无 gas 的支付,使得 x402 成为可能。