编者按:本文来自以太坊爱好者,作者:阿剑,Odaily星球日报经授权转载。对于以太坊用户来说,真正的灵魂三问莫过于:我在做什么交易?我该给多少的Gas?应该把GasPrice设成多少才经济实惠?简单来说,Gas是用来度量以太坊上一笔交易所需花用的计算量的单位。一笔交易的复杂度越高,所需花用的Gas也就越多,所以,越是复杂的交易,在发起交易时越要设定较多的Gas额度,如果发起者预留的Gas数量不够多,交易会因为计算资源耗尽而失败。但是好就好在,这事用不着操心,可以设一个自己的账户支付得起又充分大的数值,因为,没有用掉的Gas是不会计算手续费的,换言之,虽然你设置了这笔交易可以用掉100Gas,但实际上只用掉了20Gas,那打包你的交易的出块者就只能得到20Gas的手续费,不能白收你的。此外,现在的Gas使用量估算技术已经很普遍了,用户使用Metamask钱包插件跟应用交互的时候,会发现自己根本不需要手动设置GasLimit,插件已经帮你估算好了。但是讲到GasPrice,就头疼了。大家都知道,这个参数表达的是交易发起者自己愿意为每一单位的Gas支付的价格,而这部分价格最终会被打包该笔交易的出块者得到;有鉴于此,出块者当然青睐那些GasPrice高的交易。但是,谁不想让手续费便宜一些呢?谁不想经济实惠地达成交易呢?因此,几乎所有的以太坊用户在日常使用中都会接触到一种工具:Gas价格指示器,它的作用是告诉你,你设置多少的GasPrice,就能让自己的交易在自己想要的时间内被打包。比如下图展示的就是生态里可能是最常用的Gas价格指示器:GasStation。
-它的大意是说:如果你想要自己的交易在2分钟之内被打包,那就要设置95Gwei乃至更高的Gas价格;如果你只需要它在5分钟之内被打包,那设置成79Gwei以上就好。-大多数像你我一样的用户,在使用GasStation时都不会发觉有什么问题。但是,假如你要做高频的交易呢?或者假如你要写一个交易机器人呢?GasStation真的可以依赖吗?这可不是在找茬,也不是装神弄鬼。这篇文章就提到了2020年3月14日时候许多用户的艰难遭遇:在以太坊协议中,一个账户发起的交易是有顺序的,由一个只增不减的流水号nonce来标记顺序;当你的前序交易因为GasPrice太低而被出块节点丢弃的时候,不论你给后序交易设置再高的GasPrice,都于事无补,因为节点不能越过前序交易直接打包后序交易,但是前序交易已经丢弃了,这就等于使你的账户锁死了。唯一的解救办法就是找回你最早一笔还未上链的交易,使用这笔交易的流水号重发一笔交易,并且GasPrice要足够高。同样地,许多交易机器人也因为同样的原因被卡,原因就是因为它们依赖的Gas价格报告器对网络Gas价格的预估有误,发出几笔交易之后,机器人就卡死了。这些血淋淋的教训充分说明了,为每一笔交易安排合适的Gas价格,有多么重要。因为当链上应用活跃的时候,一笔交易的成功不仅会影响这笔交易,还会影响后序交易。但是,是什么阻碍了我们获得准确的Gas价格估计呢?我们能克服吗?在最根本上来说,阻碍我们的是区块链网络的点对点网络架构:所有节点都是分散的,当某一笔交易被发送到一个节点时,该节点做一定的校验之后会把交易数据广播给其它节点;这种网络结构决定了,没有任何一个节点能实时获得整个网络的未处理交易的全局状态,交易的传播需要时间,也需要偶然。对于这一点,我们只能改善,不可能从根本上克服,因为我们不想要一个中心化的网络结构。但另一方面,至关重要的是我们预估Gas价格的方法。目前为止,绝大部分Gas价格指示器所用的方法,都是根据过去一段时间里被打包到区块里的交易的Gas价格加以统计方法处理,得出对未来Gas价格的估计。仔细想想这其实很不合理,在你发交易的这一刻,决定你的交易多快能上链的是现有未处理交易中比你交易的Gas价格更高的交易有多少,以及在你的交易还未打包的这段时间里有多少人发出了比你的Gas价格更高的交易。拿已经上链的交易,也就是历史数据,去做这样的预估,貌似合理,实则荒谬。当网络活动快速增加、Gas价格快速攀升的时候,按历史数据估计的方法大概率只能给出低估的Gas价格。更准确的估计应该基于现有未处理交易的Gas价格分布,哪怕还需要统计方法处理,也会比拿历史数据来估计要更简单。这就是GasNow厉害的地方。它不再基于历史数据来预测未来,它基于星火矿池节点的交易池中交易的Gas价格分布。为了收益的最大化,矿池一方面要尽可能地收集交易,另一方面,要从高到低打包交易池中待打包的交易。所以,GasNow给出的数据,是真正具有参考意义的。
-如图,网页直接告诉了你矿池交易队列中由高到低排序的第50笔、第200笔、第400笔交易的Gas价格。这就有的放矢了-理论上来说,所有的Gas价格指示器,都应该转变成GasNow这样的模式,不再根据历史数据,而是根据实时数据,来帮助用户做决策。但饶是如此,GasNow也是有竞争力的。因为矿池的交易池会比普通的、没有优化的节点的交易池更全面,更有参考意义。GasStation在自述中说,“希望能提高Gas价格的透明度”,这当然是个很有意义的目标;而且,Gas价格的不清晰,其实根值于网络的点对点特性,值得更多人作出更多的尝试,用服务本身的分散性来降低点对点网络带来的不确定性、使我们获得更全局的视野。但至少,GasNow应该是离这个理想更近一步了。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。