以太坊 - 高gas成本

Posted

技术标签:

【中文标题】以太坊 - 高gas成本【英文标题】:Ethereum - High gas costs 【发布时间】:2018-11-22 11:37:47 【问题描述】:

不知何故,我的汽油成本高得离谱?有人可以帮忙吗?

我在solidity中有一个函数:

function setMessage(uint8[] _fMessage) public returns (uint256)
    emit Message(_fMessage);

还有我的活动:

 event Message(uint8[] message);

当我用这个来调用它时:EthProj.setMessage.sendTransaction([72, 193, 77], from: my address)

EthProj 是我的合同。这是如何消耗25027 气体的。当我使用我的交易的transactionHash 运行eth.getTransactionReceipt 时,它会显示:gasUsed: 25027。据此:https://github.com/djrtwo/evm-opcode-gas-costs/blob/master/opcode-gas-costs_EIP-150_revision-1e18248_2017-04-12.csv,更具体,这部分 LOG0 375 + 8 * (number of bytes in log data) 它应该只花费大约 400 气体,因为事件中只有 3 个字节。这么大的成本从何而来?

【问题讨论】:

【参考方案1】:

每笔交易都会立即产生 21000 的内在气体成本。来自Ethereum documentation:

任何交易都会收取 21000 gas 作为“基本费用”。这涵盖了从签名中恢复发件人地址的椭圆曲线操作的成本,以及存储交易的磁盘和带宽空间。

从那里开始,执行的每个操作码都会消耗气体。这包括读取状态、返回值、发出事件等。您所指的计算仅适用于将事件数据写入状态的部分。

要更全面地了解交易将消耗多少气体,请查看opcode gas spreadsheet(此版本来自最初的发布,但我还没有看到更新的版本)。您还可以查看write-up 的交易成本。

【讨论】:

感谢您的回答

以上是关于以太坊 - 高gas成本的主要内容,如果未能解决你的问题,请参考以下文章

以太坊gas limit啥意思

以太坊搭建常见错误,以太坊部署智能合约,Error: insufficient funds for gas * price + value

智能合约实战 gas gasprice gaslimit

智能合约实战 gas gasprice gaslimit

以太坊GasLimit的计算方法

以太坊交易费用、gas 限额和已用 Gas