作者:宇星 / 来源:白话区块链
通过钱包转账 ETH 或是 ERC-20 Token 时,我们知道这个转账需要付手续费。另外,正如《赵丽颖结婚喜讯已上链,手把手教你打造区块链“钻戒”》一文中介绍的,我们还可以一边转账一边在区块链上“刻字”。
那么,转账的手续费是怎么算的呢?如果转账的同时还去“刻字”,是不是需要收取更高的手续费呢?今天,大白就给大家聊聊以太坊的 Gas 机制。
在以太坊网络中转账,虽然最后的手续费我们支付的是 ETH,但其实在以太坊内部并不直接消耗 ETH,而是消耗 Gas。“Gas”这个单词的英文意思是“(气体)燃料”,以太坊网络中的操作需要消耗 Gas,就如同汽车行驶需要消耗燃料一样。
那么,交易的手续费(ETH)是如何计算的呢?我们先看一下大白在以太坊网络中的一个转账截图:
在以太坊网络中转账,手续费的计算方式如下:
交易手续费(ETH)= Gas的单价 x 消耗的Gas数量
在大白的这笔交易中,Gas 的单价(Gas Price)是 5Gwei,也就是 0.0000000005ETH(小数点后面8个0)。这里大白再给大家介绍一下 ETH 的单位,ETH 的最小单位是 Wei,但是谈到以太坊 Gas 的时候,经常用 Gwei。ETH、Gwei、Wei 之间的关系如下:
1 ETH = 10^9 Gwei(9个0)= 10^18 Wei(18个0)
知道了 Gas 的单价,我们再看下大白这笔含“刻字”的转账消耗的 Gas 数量:24876。所以,按照上面的公式,单价乘以数量,即可得到大白花费的手续费:
手续费 = 0.0000000005ETH x 24876 = 0.00012438ETH
汽车去加油站添加燃料,燃料的价格基本是固定不变的,但是在以太坊网络中,Gas 的单价是可以自己设置的。不过,需要注意的是,Gas 的单价会影响这笔交易被打包的速度。也就是说,Gas 的单价你给的越高,矿工为了自身利益最大化,越会优先打包你的交易。
下图是 ethgasstation.info 网站统计的实际操作中 Gas 的单价和所需要等待的交易打包时间。在左边统计图中,我们可以看到,超过 70% 的以太坊网络转账给的 Gas 单价介于 4~20Gwei 之间,小于 1Gwei 或是大于 50Gwei 的交易占比很少。在右边的统计图中,我们可以看到,如果给的 Gas 单价是 4Gwei,打包交易需要的平均等待时间是 0.6 分钟;如果是 20Gwei,平均等待时间是 0.2 分钟。
大家常用的 imToken 钱包,在 Gas 的单价设置里,提供的是 5~100Gwei,钱包把最低单价设置为 5Gwei,保证了交易能在合理的时间内被打包,当然,如果想插队,尽快被矿工打包,你也可以自己提高 Gas 的单价。
说完了 Gas 的单价,我们再接着说消耗的 Gas 数量。
在以太坊网络中,每一笔转账,无论数额大小,消耗的 Gas 是固定的,为 21000,如果添加备注(“刻字”),需要消耗额外的 Gas。回到大白的那笔交易上,大白总共花费的 Gas 数量是 24876,其中包含了 21000 的固定消耗数量,以及备注消耗的 Gas 数量 3876。备注需要消耗多少数量的 Gas,和输入的内容长度有关,内容越多,需要消耗的 Gas 数量也越多。
如果你仔细观察大白的那张转账截图,你会发现,大白花费的 Gas 数量 24876 后面有个括号,里面是 41.46%。这个百分比是什么意思呢?如果你再仔细看截图,你会发现,上面还有一个 Gas Limit,数值是 60000,而且它的 41.46% 正好是 24876。
Gas Limit,是指这笔操作消耗的 Gas 数量上限,这个上限值你可以自己设置。比如,大白设置的是 60000,但实际操作中并没有达到这个上限,只用了 41.46%。一般的钱包都会默认帮你设置这个上限值,对我们普通用户而言,普通转账时这个上限值也不用去考虑。以太坊网络设置这个上限值,是以防万一,如果碰到恶意的智能合约,该合约执行将消耗无限的燃料,这样会导致交易方的 ETH 余额全部消耗(恶意的智能合约有可能是程序 Bug,如合约执行陷入一个死循环)。
Gas Limit 如果设置过低,比如设置为 10000,任何一笔转账需要的 Gas 数量至少 21000,远远超过你设置的 Gas Limit,就会导致转账失败。也就是说,Gas Limit 会影响一笔交易是否能成功。