图:https://github.com/ethereum/go-ethereum/blob/master/params/protocol_params.go
Gas Price 指的是,你愿意为消耗的每单位 Gas 支付多少的单价。Gas Price 的单位通常用 Gwei 表示,1 Gwei = 0.000000001 ETH。
Gas Limit 指的是,你愿意为这笔操作支付的 Gas 数量上限。默认情况下,Gas Limit 是 21000 Gas。一般情况下,我们也不需要调整 Gas Limit 的数值,但涉及到复杂一些的操作,比如在以太坊区块链上“刻字”,就要调整 Gas Limit 上限了,否则活还没干完就已经消耗完了 Gas 数量。
图:知矿大学“爱在七夕,链上有你”活动中,某个上链内容实际消耗的 Gas 数量为 22632 Gas,所以 Gas Limit 在事先调整到了 42000 Gas。
那以太坊系统为什么要设置 Gas Limit 这个参数呢?一方面,是为了防止某些有 Bug 的程序陷入死循环(消耗完 Gas 数量后就自动停止了),另外一方面是为了防止某笔操作耗尽账户上的所有 ETH。
明白了这三个概念,我们再来看下以太坊的矿工费计算公式:
矿工费 = 实际消耗的 Gas 数量 * Gas Price
其中,「实际消耗的 Gas 数量」小于或等于 Gas Limit,这点很容易理解。
上文提到过,每个运算步骤需要消耗多少 Gas,以太坊系统里都有所规定,所以「实际消耗的 Gas 数量」我们无法调整,我们能调整的是「Gas Price」。
以太坊矿工和比特币矿工一样,都是趋利的,谁给的 Gas Price 高,就优先给谁打包确认。因此,遇到特别紧急、需要马上确认的情况,我们需要给更高的 Gas Price,从而让矿工第一时间给我们打包确认;而在不紧急的情况下,我们则可以把 Gas Price 调低一些,以节省不必要的矿工费开支。
现在,很多钱包都很“智能”,通过对当前网络拥堵情况的分析,告诉你 Gas Price 的推荐值。当然,你也可以自己手动调整 Gas Price,钱包会告诉你调整后预计需要多久才能被矿工打包。
除了钱包推荐的 Gas Price 数值,还可以参考 Gas Now 这个网址给出的数值:
网址:https://gasnow.sparkpool.com
如上图,截图的这一刻,如果想在 15 秒内(即下一个区块)被矿工确认,可以将 Gas Price 设置为 32 Gwei,如果不着急,可以选择“缓慢”模式,设置为 16 Gwei。通常情况下,选择“一般”模式推荐的矿工费即可。
Gas Now 是当前最大的以太坊矿池——星火矿池,根据矿池节点交易池中实时交易的 Gas Price 分布给出的推荐值,其数据更具实时性、准确性,更有参考价值。近期,imToken、麦子钱包、MYKEY、TokenPocket、Trust Wallet 等钱包已经宣布使用 Gas Now 的服务。
最后,我们总结一下今天的内容:
1、以太坊转账的矿工费由「实际消耗的 Gas 数量」与「Gas Price」的乘积所得,前者是系统事先规定好的,后者我们可以自己调整从而减少不必要的矿工费开支。
2、调整「Gas Price」时,可以参考钱包给的推荐值,也可以参考实时性、准确性更强的 Gas Now 网址。
3、另外,如果涉及更加复杂的操作,还需要调整 Gas Limit 的数值,以防止活还没干完就把 Gas 消耗完了的情况出现。