Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

使用签名授权进行结算

ERC-3009 允许代币持有者通过签名消息来授权转账。任何人都可以在链上提交该签名授权来执行转账。发送方无需直接调用合约。

这是 Stable 上 x402 支付背后的结算机制。

它解决了什么问题?

额度问题

传统上,ERC-20 第三方转账的模式是 approve + transferFrom。发送方首先调用 approve 授权销费额度,然后第三方调用 transferFrom 转移资金。这存在一些众所周知的问题:

  • 需要两次交易:发送方必须在任何转账发生之前发送一笔链上 approve 交易。这会消耗 Gas 并增加延迟。
  • 无限额度风险:为避免重复的授权交易,许多应用程序会请求无限支出权限,这会带来重大的安全风险。

ERC-3009 采用了不同的方法。发送方不是授予额度,而是为特定转账签署一次性授权。没有单独的批准步骤,也没有长期存在的支出权限。

连续随机数问题

ERC-2612 (permit) 也支持签名授权,但它使用连续的随机数。多个许可存在排序依赖性:如果随机数 5 未被消耗,则随机数 6 永远无法执行。

ERC-3009 通过唯一随机数解决了这个问题。每个授权都使用一个 32 字节的值,而不是连续计数器。可以独立创建和提交多个授权,以任何顺序,互不依赖。

比较

属性ERC-20 (approve)ERC-2612 (permit)ERC-3009
链上步骤2 (approve + transferFrom)1 (transferFrom)1 (transferWithAuthorization)
使用额度模型需要(链上交易)是(通过 permit 设置额度)不需要(签名)
随机数模型连续连续唯一
并发授权

工作原理

transferWithAuthorization

发送方签署EIP-712类型数据消息,其中包含转账详情。任何人都可以使用该签名消息在代币合约上调用 transferWithAuthorization。合约验证签名,检查有效期窗口,执行转账,并标记随机数为已使用。

签名授权包含:

  • from:发送方(签名者)的地址
  • to:接收方的地址
  • value:转账金额
  • validAfter:此授权可执行的最早时间(Unix 时间戳)
  • validBefore:此授权可执行的最晚时间(Unix 时间戳)
  • nonce:确保唯一性的 32 字节值

时间窗口 (validAfter/validBefore) 使发送方能够精确控制转账发生的时间。授权可以安排在未来,设置截止日期,或两者兼有。如果窗口在提交前过期,则授权将失效,资金将保留在发送方手中。

receiveWithAuthorization

此函数与 transferWithAuthorization 完全相同,但增加了一个额外的检查:调用者必须是接收方。这可以防止抢先交易攻击,即第三方观察到待处理的授权并首先提交它以操纵交易顺序。

这在支付场景中非常有用,例如商家或服务提供商应发起结算。

cancelAuthorization

发送方可以在未执行之前撤销未使用的授权。发送方签署 EIP-712 取消消息,合约标记随机数为已使用,而不执行转账。原始授权不能再被提交。

内置安全特性

  • 一次性使用:每个唯一的随机数只能使用一次。重新提交相同的签名授权将导致回滚。
  • 有时效性validAfter/validBefore 窗口确保授权不会无限期有效。
  • 自包含:一个签名授权一次特定的转账到特定的接收方,金额特定。没有长期存在的权限。
  • 非托管:提交者从不持有发送方的资金。转账直接在合约内从发送方转移到接收方。

Stable 上的 ERC-3009

Stable 上的 USDT0 本身实现了 ERC-3009。任何应用程序都可以使用 transferWithAuthorization,无需部署额外的合约或中继基础设施。

单资产结算

在以太坊上,即使使用 ERC-3009,提交者仍需要 ETH 来支付调用 transferWithAuthorization 的 Gas 费。转账本身是以 USDT 进行的,但执行依赖于单独的原生资产。

在 Stable 上,USDT0 既是支付代币,又是 Gas 代币。从授权到链上结算的整个支付生命周期都在一个稳定币上运行。任何步骤都不需要单独的原生资产。

这一特性使得 Stable 上的 ERC-3009 成为更高级别支付协议的强大基础。x402 直接利用了这一点,将 ERC-3009 作为其在标准 HTTP 通信中的链上结算机制。

主要收获

  • ERC-3009 允许代币持有者通过签名消息授权转账。任何人都可以提交该签名授权来执行转账。
  • 它用一次性、自包含的授权取代了 ERC-20 额度模型。没有 approve 步骤,没有长期存在的权限,也没有重复花费的风险。
  • 独特的随机数允许同时创建和提交多个授权,顺序不限。
  • Stable 上的 USDT0 原生支持 ERC-3009,并且由于仅使用 USDT0 即可完成结算,它为 x402 提供了实用的基础。
另请参阅: