Gas 中译是:瓦斯、汽油,代表一种可燃气体。 这形象地比喻以太坊的交易手续费计算模式,不同于比特币中直接支付比特币作为转账手续费, 以太坊视为一个去中心化的计算网络,当你发送Token、执行合约、转移以太币或者在此区块上干其他的时候,计算机在处理这笔交易时需要进行计算消耗网络资源,这样你必须支付燃油费购买燃料才能让计算机为你工作。最终燃料费作为手续费支付给矿工,无论交易成功与否。
参考文章
What is gas? Why do transactions take so long?
以太坊技术与实现 Gas
经典例子
以太坊白皮书给出的转账时计算Gas的例子如下,假设合约存储开始时为空,发送一笔带有10 ETH、2000 Gas、0.001以太币Gas价格的交易,并且有两个数据字段:[2, ‘CHARLIE’]:
- 验证交易的有效性和格式:检查交易是否有效,格式是否正确。这包括验证交易的结构、签名以及发送者是否有足够的资金来支付最大可能的Gas费用。
- 检查发送者的资金:确保交易发送者账户中至少有2000 * 0.001 = 2 ETH。如果有,那么从发送者的账户中扣除2以太币作为可能的最大Gas费用。
注意:这是从交易发送者的钱包里扣除的,不是从10 ETH的交易金额中扣除的
- 初始化Gas和扣除字节费:初始化Gas为2000。假设交易长度为170字节,每字节费用为5,因此扣除850(170*5),剩下1150Gas。
- 处理交易金额:从发送者账户中再扣除10以太币,并将其加到合约账户中。这是交易中指定的转账金额。
- 执行代码:运行合约代码。在这个例子中,操作相对简单:检查合约存储的索引2是否已被使用,发现未被使用,于是将索引2的存储值设置为’CHARLIE’。假设这个过程消耗了187Gas,剩余Gas为1150 - 187 = 963。
- 退还剩余Gas:将未使用的Gas转换回以太币并退还给发送者。在这个例子中,退还的是963 * 0.001 = 0.963 ETH。最后返回交易执行后的状态。
- 计算扣除的总金额:发送的ETH(10 ETH)+ 实际消耗的Gas费用(1.037 ETH)= 用户账户最终减少的总金额(11.037 ETH)。
实际例子
以下是我用老ThinkPad电脑在测试网络里辛辛苦苦挖的一点币,大家也可以去挖挖试试
GoerliETH Faucet地址
现在我们从Account1转账0.001ETH给Account2,预估的Gas费用为0.0000315ETH,直接给你计算好了
也就是说我们这笔交易预估花费的总金额 = 0.001 ETH + 0.0000315 ETH = 0.0010315 ETH
稍作等待后,等到转账confirmed后,我们点击View on block explorer前往网页
也可以在 Goerli Testnet Explorer网站 搜寻transaction ID就行
可以从以下界面看到整个交易的过程
Transaction Fee = Gas Used * Gas Price = 21,000 Gas * 1.500000007 Gwei = 31500.000147 Gwei
注意:21000 Gas 是标准转账交易的gasUsed。因此一笔标准的转账交易你可以设置 gasLimit 为21000,多退少也不能补,因为少了的话就打水漂了。还有这个大小和你转账多少ETH没有关系,转0.001用的是21000Gas,转账1000ETH也是21000Gas,如果想要提高转账的速度,可以通过提高Gas价格(Gas Price)来实现。