【问题标题】:Ethereum - High gas costs以太坊 - 高gas成本
【发布时间】: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 个字节。这么大的成本从何而来?

【问题讨论】:

    标签: ethereum solidity web3 geth


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的回答
    猜你喜欢
    • 2019-11-19
    • 2021-11-19
    • 2019-05-21
    • 2021-05-27
    • 2016-02-28
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    相关资源
    最近更新 更多