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;

工作流程

  1. 付款方使用 EIP‑712 类型化数据签署消息。
  2. 将消息发送给中继者或协助者(链下)。
  3. 中继者在链上提交签名。
  4. 合约验证签名并执行转账。
  5. 中继者支付 gas,付款方无需支付。

随机 Nonce 与顺序 Nonce 的比较

方面ERC‑2612(顺序)ERC‑3009(随机)
Nonce 格式0, 1, 2, 3…随机 bytes32
并行操作❌ 必须有序✅ 完全独立
高频使用❌ 瓶颈✅ 无限扩展

对于 x402 和 AI 代理而言,这具有变革性:代理可以生成成千上万的并发支付授权而不会产生冲突。

使用 ERC‑3009 的 x402 协议流程

  1. 客户端 请求受保护资源。
  2. 服务器 返回带有支付要求的 402 响应。
  3. 客户端 构造 ERC‑3009 授权消息并使用钱包签名。
  4. 客户端 重新发送请求,携带包含签名消息的 X-PAYMENT 头。
  5. 协助者 验证签名。
  6. 服务器 返回请求的内容。
  7. 协助者 通过调用 transferWithAuthorization 完成结算。

代币支持

代币发行方ERC‑3009 支持
USDCCircle✅ 是 (v2+)
EURCCircle✅ 是
USDTTether❌ 否
DAIMakerDAO❌ 否

这正是 x402 侧重使用 USDC 而非 USDT 的原因。

功能对比:ERC‑2612 vs. ERC‑3009

功能ERC‑2612ERC‑3009
目的批准 allowance直接转账
步骤签名 → 批准 → 转账签名 → 转账
Nonce 类型顺序随机
用例DeFi 协议支付、x402

进一步阅读

ERC‑3009 改变了我们对代币转账的认知。通过将授权移至链下,它实现了无摩擦、无 gas 的支付,使得 x402 成为可能。

Back to Blog

相关文章

阅读更多 »