首页 > 解决方案 > 在合同中存储气体

问题描述

是否可以存储合约内部未使用的气体,以便以后使用(假设可能需要一定量的气体调用函数)?

我正在尝试编写一个需要用户输入的合同,并在稍后的时间根据该输入做一些需要气体的事情。

由于从合同所有者的口袋中支付天然气听起来并不真正有吸引力,我正在寻找一种方法让合同的用户支付完成请求所需的天然气。

标签: ethereumsolidity

解决方案


实际上,确实可以将gas存储在合约中以备后用。

EVM中有一些操作可以返回一些之前支付的gas:

  • SSTORE:将存储值从非零更改为零释放 15000 气体
  • SELFDESTRUCT : 销毁合约释放 24000 gas

这意味着例如存储一些值需要 20k gas,但从存储中删除它只需要 5k gas,并释放 15k gas 供以后在同一交易中使用。实际上这是清理区块链存储的奖励。

您可以通过在Yellowpaper中搜索“refund”获取更多详细信息。

有一个GasToken项目使用这个特性在价格便宜时将 gas 存储在合约中,并在价格昂贵时释放(和使用)。


需要明确的是,我认为这根本不允许用户在不支付 gas 的情况下进行交易。


推荐阅读