以太坊ETH中的 gas、gasprice 和 gaslimit
Gas:
gas是“燃料”的意思,在以太坊区块链上实现了一个EVM(以太坊虚拟机)的代码运行环境,在链上执行写入操作时,网络中的每个全节点都会进行相同的计算并存储相同的值,这种执行的消耗是昂贵的,为了促使大家将能在链下进行的运算都不放到链上进行,也为了奖励矿工,因此在链上每执行一个写入操作时,都需要支付一定的费用,用gas为单位来计数,每个在链上可以执行的命令都设置了一个消耗的gas值,例:PUSH操作需要消耗3个gas,一次转账一般要消耗21000gas,gas使用ETH来支付。
Gas对应于一个交易(Transaction)中以太坊虚拟机(EVM)的实际运算步数。 越简单的交易,例如单纯的以太币转帐交易,需要的运算步数越少, Gas亦会需要的少一点。 反之,如果要计算一些复杂运算,Gas的消耗量就会大。 所以你提交的交易需要EVM进行的计算量越大,所需的Gas消耗量就越高了。
Gas Price:
Gas Price就是你愿意为一个单位的Gas出多少Eth,一般用Gwei作单位。 所以Gas Price 越高,就表示交易中每运算一步,会支付更多的Eth。大家可能对Gwei 这个单位感到陌生,Gwei 其实就是10 ^ -9 Eth,也就是说1 Gwei = 0.000000001 Eth。所以,当你设定Gas price = 20 Gwei ,就意味着你愿意为单步运算支付0.00000002 Eth。
说到这里,聪明如你就会意识到以太坊的手续费计算公式很简单:
交易手续费(Tx Fee) = 实际运行步数(Actual Gas Used) * 单步价格(Gas Price)
例如你的交易需要以太坊执行 50步/50 gas 完成运算,假设你设定的Gas Price是2 Gwei ,那么整个交易的手续费
就是50 * 2 = 100 Gwei 了。
Gas Limit
Gas Limit就是一次交易中Gas的可用上限,也就是你的交易中最多会执行多少步运算。 由于交易复杂程度各有不同,确切的Gas消耗量是在完成交易后才会知道,因此在你提交交易之前,需要为交易设定一个Gas用量的上限。
如果说你提交的交易尚未完成,消耗的Gas就已经超过你设定的Gas Limit,那么这次交易就会被取消,而已经消耗的手续费同样被扣取 —— 因为要奖励已经付出劳动的矿工。 而如果交易已经完成,消耗的Gas未达到Gas Limit,那么只会按实际消耗的Gas 收取交易服务费,没有使用完的gas会退还到原账户。 换句话说,一个交易可能被收取的最高服务费就是 Gas Limit * Gas Price 了。
最后值得一提的是Gas Price越高,你提交的交易会越快被矿工接纳。