Alert Source Discuss
⚠️ Draft Standards Track: Core

EIP-7791: GAS2ETH 操作码

引入一个新的操作码 `GAS2ETH`,用于将 gas 转换为 ETH

Authors Charles Cooper (@charles-cooper), Pascal Caversaccio (@pcaversaccio)
Created 2024-08-13
Discussion Link https://ethereum-magicians.org/t/eip-7791-gas2eth-opcode/21418
Requires EIP-2929

摘要

本 EIP 引入了一个新的 GAS2ETH 操作码,该操作码能够直接将 gas 转换为以太币 (ETH)。

动机

本 EIP 基于以下前提:智能合约作者、编译器团队和公共物品项目通常应该因其贡献而获得补偿。 此外,他们的补偿应该与他们合约的使用情况成比例。 一个被广泛使用和流行的合约通过其功能为用户提供了重要的价值,并通过推动对区块空间的需求为网络提供了重要的价值——这是以太坊的 raison d’être。 这种增加的需求也有利于矿工和验证者,他们因执行这些合约而获得奖励。

截至本文撰写之时,以可扩展的方式将智能合约货币化仍然具有挑战性。 从各种智能合约中采用的许多不同的货币化策略就可以看出这种困难——从费用结构到发行具有不同复杂程度的“代币经济学”的代币。 此外,许多公共物品项目都在努力获得资金。

引入 GAS2ETH 操作码为合约作者以及他们使用的工具提供了一种实现其货币化目标的新方法。 通过收取 gas,他们与既熟悉又被用户理解的既定用户体验相集成。 拟议的指令确保现有的交易创建和处理工具保持不变。 此外,通过收取 gas,合约作者在经济上与网络活动保持一致;他们在网络使用密集期间从更高的补偿中受益,而在活动低迷时则获得较少的补偿。 这有助于协调智能合约作者、验证者和更广泛的网络的激励。

规范

本文档中的关键词“必须”,“不得”,“必需”,“应该”,“不应该”,“推荐”,“不推荐”,“可以”和“可选”应按照 RFC 2119 和 RFC 8174 中的描述进行解释。

引入了一个新的操作码 GAS2ETH (0xFC),它:

  • 从堆栈中弹出两个值:addr 然后是 gas_amount。如果堆栈上的值少于两个,则调用上下文应因堆栈下溢而失败。
  • 从当前调用上下文中扣除 gas_amount
  • 通过将 gas_amount 乘以当前交易上下文的 gas_price (EELS) 来计算 wei_val
  • 赋予地址 addrwei_val wei。
  • 如果此操作码的 gas 成本 + gas_amount 大于当前调用上下文中可用的 gas,则调用上下文应因“out-of-gas”而失败,并且任何状态更改都将被恢复。
  • wei_val 推送到堆栈上。

请注意,将 wei_val 转移到给定帐户不能失败。 特别是,不执行目标帐户代码(如果有),或者,如果该帐户不存在,则仍然将余额添加到给定的地址 addr

Gas 成本

此操作码的建议成本与最近提出的 PAY 操作码相同。

常量

Constant Definition
WARM_STORAGE_READ_COST EIP-2929
COLD_ACCOUNT_ACCESS_COST EIP-2929
GAS_NEW_ACCOUNT EELS
GAS_CALL_VALUE EELS

Gas 计算

  • addr 是否在 accessed_addresses 中?
    • 如果是,WARM_STORAGE_READ_COST
    • 否则,COLD_ACCOUNT_ACCESS_COST
  • addr 是否存在或 val 是否为零?
    • 如果是,则为零;
    • 否则,GAS_NEW_ACCOUNT
  • val 是否为零?
    • 如果是,则为零;
    • 否则,GAS_CALL_VALUE

理由

  • GAS2ETH vs. 比例分成:比例分成模型激励夸大合约 gas 使用量以人为地增加费用。 相比之下,此提案允许合约作者直接收取他们想要的金额,从而无需不必要的 gas 消耗。
  • 目标地址 vs. 简单地增加当前执行合约的余额:使用目标地址更灵活,使合约作者能够编写更模块化的代码,并将费用收集与合约功能分开。 例如,合约可能希望指定一个特定的费用接收者,而不一定授予他们直接提款权限。
  • 收取 gas 而不是 ETH:直接收取 ETH 会使用户体验复杂化,并阻止合约作者直接参与 gas 需求的波动。
  • 对于 gas_price 的值,使用与用于计算 ETH 中交易成本的 gas 价格相同的 gas 价格。 这导致 GAS2ETH 和用户创建交易时的体验之间最一致的计算。

向后兼容性

未发现向后兼容性问题。

测试用例

待定

参考实现

待定

安全考虑

需要讨论。

版权

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

Citation

Please cite this document as:

Charles Cooper (@charles-cooper), Pascal Caversaccio (@pcaversaccio), "EIP-7791: GAS2ETH 操作码 [DRAFT]," Ethereum Improvement Proposals, no. 7791, August 2024. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7791.