以太坊 - 高昂的天然气成本

时间:2018-06-13 01:23:37

标签: ethereum solidity web3 geth

不知怎的,我的汽油成本非常高?有人可以帮忙吗?

我有一个稳固的功能:

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天然气的。当我使用我的交易的eth.getTransactionReceipt运行transactionHash时,它会显示:gasUsed: 25027。根据这个:https://github.com/djrtwo/evm-opcode-gas-costs/blob/master/opcode-gas-costs_EIP-150_revision-1e18248_2017-04-12.csv,更多的specefic,这部分LOG0 375 + 8 * (number of bytes in log data)它应该只花费大约400气体,因为事件中只有3个字节。这笔巨额费用来自哪里?

1 个答案:

答案 0 :(得分:2)

每笔交易都有21000固有的天然气成本。来自Ethereum documentation

  

任何交易都会收取21000个燃气作为基本费用"。这包括椭圆曲线操作的成本,以从签名中恢复发件人地址以及存储事务的磁盘和带宽空间。

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

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