Alert Source Discuss
🚧 Stagnant Standards Track: Interface

EIP-6789: 将 gas 重命名为 mana

此 EIP 建议将 gas 重命名为 mana,正如 Vitalik Buterin 在 2015 年提出的那样

Authors Pascal Caversaccio (@pcaversaccio)
Created 2023-03-27
Discussion Link https://ethereum-magicians.org/t/eip-6789-rename-gas-to-mana/13570

摘要

此 EIP 建议将 gas 重命名为 mana,正如 Vitalik Buterin 在 2015 年提出的那样。

动机

重提 Vitalik 在 2015 年提出的最初提议的根本动机是,我们终于迎来了权益证明时代,并且鉴于未来的路线图(即“The Surge”,“The Scourge”,“The Verge”,“The Purge”和“The Splurge”),我认为现在是进行如此意义深远的语义更改的最后机会。

规范

本文档中使用的关键词“MUST”,“MUST NOT”,“REQUIRED”,“SHALL”,“SHALL NOT”,“SHOULD”,“SHOULD NOT”,“RECOMMENDED”,“NOT RECOMMENDED”,“MAY”和“OPTIONAL”应按照 RFC 2119 和 RFC 8174 中的描述进行解释。

核心术语 gas 必须重命名为 mana

以下操作码必须重命名:

  • GASPRICE 改为 MANAPRICE
  • GASLIMIT 改为 MANALIMIT;以及
  • GAS 改为 MANA

此外,以下操作码的输入参数或输出必须重命名:

  • CALLgas 输入参数改为 mana
  • CALLCODEgas 输入参数改为 mana
  • DELEGATECALLgas 输入参数改为 mana
  • STATICCALLgas 输入参数改为 mana
  • GASLIMITgasLimit 输出改为 manaLimit;以及
  • GASgas 输出改为 mana

最后,以下 RPC 端点必须重命名:

  • eth_estimateGas 改为 eth_estimateMana;
  • eth_gasPrice 改为 eth_manaPrice; 以及
  • eth_maxPriorityFeePerGas 改为 eth_maxPriorityFeePerMana

RPC 端点的描述必须相应地重命名:

  • eth_estimateMana: 生成并返回允许交易完成所需的 mana 量的估算值;
  • eth_manaPrice: 返回当前每个 mana 的 wei 价格;以及
  • eth_maxPriorityFeePerMana: 返回当前每个 manamaxPriorityFeePerMana (以 wei 为单位)。

理由

  • mana 反映了权益证明的环境友好性提高;
  • mana 通常被理解为短暂且不可转让的,这更好地代表了 gas 的概念;以及
  • mana 通常被描绘成可再生的,而(天然)gas 是不可再生的。

向后兼容性

此提案不向后兼容,因为它重命名了核心术语 gas

测试用例

示例 1

如果交易需要的 mana 超过 manaLimit 允许的量,则该交易将被还原为 mana 不足 交易。

示例 2

一个 Solidity 合约,用于通过新的 manaleft() 语法(替换 gasleft())估算专用函数调用的已用 mana

// SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.19;

contract ManaMetering {
    function oldWay() external view returns (string memory, uint256 manaUsed) {
        string memory hiMom = "Hi Mom, ";
        string memory missYou = "miss you.";
        uint256 startMana = manaleft();
        string memory concat = string(abi.encodePacked(hiMom, missYou));
        manaUsed = startMana - manaleft();
        return (concat, manaUsed);
    }

    function newWay() external view returns (string memory, uint256 manaUsed) {
        string memory hiMom = "Hi Mom, ";
        string memory missYou = "miss you.";
        uint256 startMana = manaleft();
        string memory concat = string.concat(hiMom, missYou);
        manaUsed = startMana - manaleft();
        return (concat, manaUsed);
    }
}

在 Vyper 中,可以通过新的交易属性 msg.mana 复制相同的行为,该属性替换 msg.gas

示例 3

如何在 MetaMask 中设置 manaLimit 的示例:

MetaMask manaLimit

安全注意事项

没有与将 gas 重命名为 mana 直接相关的安全注意事项。

版权

版权及相关权利通过 CC0 放弃。

Citation

Please cite this document as:

Pascal Caversaccio (@pcaversaccio), "EIP-6789: 将 gas 重命名为 mana [DRAFT]," Ethereum Improvement Proposals, no. 6789, March 2023. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-6789.