@1shotapi 团队在实验 @PayPal 的 $PYUSD 进行 x402 付款时发现了一种有趣的失败模式,事后看来可能是显而易见的。 与 $USDC 不同,PYUSD(这是 @Paxos 的实现)在调用 `transferWithAuthorization` 时,如果使用了已用的 nonce,则不会回滚。 因此,如果促进者/验证逻辑在链上明确检查已用的 nonce,促进者将告诉服务器该交易是有效的,而 `/settle` 将消耗燃气处理一个不转移 PYUSD 的交易,而只是简单地发出 `AuthorizationAlreadyUsed` 事件,这将使客户可以免费使用付费 API,除非促进者正在检查发出的事件。 这也为这种类型的实现的高吞吐量用例提供了一个潜在的边缘案例,其中恶意用户可能会向服务器发送大量使用相同 nonce 的 x402 付款,即使进行链上读取,所有这些也都会验证,而促进者最终将为不会转移 PYUSD 的坏交易支付燃气,并且在包含在区块之前也不会回滚。 促进者保护自己免受此影响的唯一方法是保持已提交 nonce 的链下记录,并检查在最终结算中是否发出了 `Transfer` 事件,以便不被绕过付费 API。 我们希望听到 x402 协议贡献者的意见。