1分钟搞清Gas/ Gas Price/ Gas Limit

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1分钟搞清Gas/ Gas Price/ Gas Limit相关的知识,希望对你有一定的参考价值。

参考技术A 好多朋友第一次接触以太坊的时候,都会搞不清什么是Gas,更搞不清Gas Price和Gas Limit是什么。 本文将逐一介绍并理清这三者之间的关系,相信你看完后就会理解这三个gas相关的概念了。

Gas

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。

说到这里,聪明如你就会意识到以太坊的手续费计算公式很简单:

1交易手续费(Tx Fee) = 实际运行步数(Actual Gas Used) * 单步价格(Gas Price)

例如你的交易需要以太坊执行50步完成运算,假设你设定的Gas Price是2 Gwei ,那么整个交易的手续费 就是50 * 2 = 100 Gwei 了。

Gas Limit

Gas Limit就是一次交易中Gas的可用上限,也就是你的交易中最多会执行多少步运算。 由于交易复杂程度各有不同, 确切的Gas消耗量是在完成交易后才会知道,因此在你提交交易之前,需要为交易设定一个Gas用量的上限。

如果说你提交的交易尚未完成,消耗的Gas就已经超过你设定的Gas Limit,那么这次交易就会被取消,而 已经消耗的手续费同样被扣取 —— 因为要奖励已经付出劳动的矿工。 而如果交易已经完成,消耗的Gas未达到Gas Limit, 那么只会按实际消耗的Gas 收取交易服务费。 换句话说,一个交易可能被收取的最高服务费就是Gas Limit * Gas​​ Price 了。

最后值得一提的是Gas Price 越高,你提交的交易会越快被矿工接纳。 但通常人们都不愿多支付手续费, 那么究竟应该将Gas Price设置为多少,才可以在正常时间(eg 10 mins)内,确保交易被确认到区域链上呢?  这个网站 可以帮到你。 写这篇文章时候,1 Gwei的Gas Price 就可以确保 交易在50 秒左右被接纳。

数组倒装

            $price_new=array();
			if(!empty($price)){
				foreach($price as $k=>$v){
					$price_new[]=$v;
				}
				$level[$k1][‘price‘]=$price_new;
			}else{
				$level[$k1][‘price‘]=$price;
			}


$whe_re_c="";
$whe_re_c[‘fid‘]=array(‘in‘, $ids_fz);
$res_re_car=M(‘car_sort‘)->where($whe_re_c)->order(‘sort desc, addtime desc‘)->select();
$res_re_car_cou=M(‘car_sort‘)->where($whe_re_c)->count();
$chexing=M(‘car‘)->field(‘id,title‘)->where(‘is_hot=1 and status=1‘)->order(‘sort desc,addtime desc‘)->limit(18-$res_re_car_cou)->select();
foreach($res_re_car as $k=>$v){
$whe="";
$whe[‘status‘]=1;
$cx=M(‘car‘)->where($whe)->find($v[‘bid‘]);
if(empty($cx)){
continue;
}
$chexing_new[]=$cx;
}
foreach($chexing as $k=>$v){
$chexing_new[]=$v;
}
$this->assign(‘chexing‘,$chexing_new);

  

以上是关于1分钟搞清Gas/ Gas Price/ Gas Limit的主要内容,如果未能解决你的问题,请参考以下文章

如何解决“gas * price + value”的资金不足?

[Contract] ETH 与 Gas 之间的价格转换关系, Ethereum Gas Price Chart

以太坊。 gas * price + value 资金不足

使用 geth --dev 的 gas * price + value 资金不足

错误:gas * price + value 资金不足

gas 资金不足 * 价格 + 价值