Alert Source Discuss
⚠️ Draft Meta

EIP-7768: 无以太币交易与自由交易小费

没有以太币的外部账户可以使用新的“自由交易”桶发送交易并支付小费

Authors William Entriken (@fulldecent)
Created 2024-09-14
Discussion Link https://ethereum-magicians.org/t/eip-7768-no-ether-transactions-with-free-for-all-tips/21108

摘要

介绍了一种技术,其中没有以太币的外部账户可以使用新的“自由交易”桶并使用其自己的 origin.tx 发送交易并支付小费。 这不需要客户端更改,并且与现有的生态系统部分兼容。

动机

在以太坊和竞争网络上,人们对第三方支付交易非常感兴趣。

其他提案需要更改以太坊客户端,即交易使用单独的帐户和/或其他额外的事项发送到网络(即 tx.origin)。

相比之下,本提案介绍并标准化了一个问题的解决方案,该解决方案仅适用于现有客户端和技术,并且保留了交易发起者的 tx.origin

规范

最终用户流程

  1. 控制外部账户的最终用户(例如 Alice)将准备她想要执行的交易,并签署此(一系列)交易。
  2. 如果 Alice 想要为执行这些交易提供报酬,她将确保网络上一个众所周知的地址“自由交易桶”将在她的一系列交易结束时控制 token(例如 20、721、1155 token)。
  3. Alice 仔细安排她的交易 nonce,考虑到最终执行的可能是:
    1. 没有一个;
    2. 只有第一个;
    3. 第一个,然后是第二个;
    4. 第一个,然后是第二个,…然后是第 N 个交易,而不是她的一系列交易中的最后一个;或者
    5. 所有她的交易,按顺序排列。
  4. Alice 将这一系列交易发送给与区块提议者通信的服务。
    1. 目前,基线客户端中的内存池不会传播此类交易。

例如,如果报酬被发送到自由交易地址,这通常是她的一系列交易中的最后一个。

区块准备者流程

  1. 签署一笔交易(来自任何来源),以将以太币发送给 Alice,代表当前 gas 价格乘以当前区块大小。
  2. (可选) 准备并签署一笔交易到自由交易账户,以预加载任何必要的响应。
  3. 启动一个执行上下文,并包括此发送以太币交易和 Alice 的所有交易。
  4. 在执行上下文中,识别发送到自由交易合约地址的 token(例如 20、721、1155)或其他应计到自由交易账户的宝贵报酬。
  5. 签署一笔交易(来自任何来源),以从自由交易账户中获得报酬的安全性,并将此交易包括在执行上下文中。
  6. 评估花费的总 gas。
  7. 回滚执行上下文。 并使用以下更改重复步骤 1 到 4:
    1. 步骤 1:使用实际所需的 gas 量(以以太币计)。
    2. 步骤 4:如果第二次迭代中收到的报酬不是第一次迭代的预期金额,则中止。
  8. 使用一些本地业务逻辑来比较步骤 1(第二次迭代)中花费的以太币与步骤 4 中收到的报酬,并将结果分类为有利或不利。
  9. 如果结果有利,请将此执行上下文提交到主线。 或者,如果结果不利,请回滚此执行上下文。
    1. 此决定的结果可能会反馈到信誉跟踪系统中,以避免评估未来无结果的交易。
  10. 继续执行,并发布该区块。

自由交易桶

这种方法要求最终用户必须能够在不知道区块提议者是谁的情况下向区块提议者发送报酬,并且区块提议者必须能够实现此报酬。

此 EIP 建议为此目的使用一个众所周知的合约账户部署。 这是所需的接口:

interface FreeForAll {
  // 执行调用
  function execute(address recipient, memory bytes, uint256 gasLimit, uint256 value);

  // 仅在此区块中为此合约下一次被调用 N 次准备返回值
  // [待办事项:详细说明]
  function preloadExecutions(memory bytes[]);
  
  // 从 preloadExecutions 返回此区块中的下一个返回值
  fallback() {
  }
}

理由

对于不想或无法在其帐户中添加以太币的最终用户来说,此方法可能很有用。

这种方法允许使用正确的 origin.tx,这对于重要的交易(如 ERC-721 setApprovalForAll)可能是必需的。

与其他更改共识客户端或交易可以从 (origin.tx) 不同账户执行的方法相比,此方法可能会使用更多的 gas。

考虑的替代方案

  • 更新 EIP-1559,使 gasPrice = 0 的交易合法,但前提是区块准备者将在同一区块中烧掉相应数量的 gas。
  • 创建一种新的交易类型,封装另一个已签名的交易。
  • 创建一个新的操作码来获取下一个区块的 coinbase。

向后兼容性

安全考虑

版权

CC0 下放弃版权及相关权利。

Citation

Please cite this document as:

William Entriken (@fulldecent), "EIP-7768: 无以太币交易与自由交易小费 [DRAFT]," Ethereum Improvement Proposals, no. 7768, September 2024. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7768.