为什么我的以太坊交易成本比我预期的高出 21000 美元?



不知何故,与我认为我应该看到的相比,我的汽油成本高得离谱。

我有一个坚固的功能:

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 gas,因为事件中只有 3 个字节。

这笔巨额成本从何而来?

每笔交易都有直接的 21000 内在气体成本。来自以太坊文档:

21000 gas作为"基本费用"对任何交易收取。这包括椭圆曲线操作从签名中恢复发送方地址的成本以及存储事务的磁盘和带宽空间。

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

有关交易将消耗多少gas的更全面解释,请查看操作码gas电子表格(此版本来自初始发布,但我还没有看到更新的版本(。您还可以查看有关交易成本的这篇文章。

最新更新