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
。
此外,以下操作码的输入参数或输出必须重命名:
CALL
的gas
输入参数改为mana
;CALLCODE
的gas
输入参数改为mana
;DELEGATECALL
的gas
输入参数改为mana
;STATICCALL
的gas
输入参数改为mana
;GASLIMIT
的gasLimit
输出改为manaLimit
;以及GAS
的gas
输出改为mana
。
最后,以下 RPC 端点必须重命名:
eth_estimateGas
改为eth_estimateMana
;eth_gasPrice
改为eth_manaPrice
; 以及eth_maxPriorityFeePerGas
改为eth_maxPriorityFeePerMana
。
RPC 端点的描述必须相应地重命名:
eth_estimateMana
: 生成并返回允许交易完成所需的mana
量的估算值;eth_manaPrice
: 返回当前每个mana
的 wei 价格;以及eth_maxPriorityFeePerMana
: 返回当前每个mana
的maxPriorityFeePerMana
(以 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
的示例:
安全注意事项
没有与将 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.