以太坊 - 高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成本的主要内容,如果未能解决你的问题,请参考以下文章
以太坊搭建常见错误,以太坊部署智能合约,Error: insufficient funds for gas * price + value