LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资讯 > 深入探索以太坊的 Gas 价格机制

深入探索以太坊的 Gas 价格机制

2019-11-06 区块律动BlockBeat 来源:区块链网络

原文标题:《深入探索以太坊的 Gas 价格机制》
原文来源:Unitimes



在九月份早期,我们注意到执行以太坊交易所需的手续费迅猛地上涨以及同时越来越多交易需要整整一个小时才能被确认。

以太坊的区块就像运送交易的货车,每辆卡车 (区块) 只能装载一定数量的货物 (Gas)。人们把他们想要投递的包裹 (交易) 放置到码头上,并附上他们愿意支付的费用。以太坊的矿工查看一下在码头上的所有包裹 (待打包队列) 并基于经济最优的原则把包裹填充至货车进行挖矿。

实际上,矿工会率先把 Gas 价格最高的的包裹填充至货车上,并按照这个原则依次类推到 Gas 价格更低的包裹上。当货车已经满了,在码头上所有剩余的包裹只能等下一辆准备好的货车。因为持续会有人把各个 Gas 价格的交易放置在码头上,所以一笔低 Gas 价格的交易不能保证最终一定会被填充至货车上

为了更加深入理解当前 Gas 价格的状态以及其未来的演变,我们深入研究了相关的数据。基于以太坊进行数据分析让人兴奋的点是,所有的数据都是开放给任何人的。研究使用这些数据并不需要获得其他的人的授权。

我写了个脚本把以太坊的区块和相关交易都下载下来,然后提取了几天的交易费并保存至本地文件。

这类探索类的项目我使用的工具栈一般是用 jupyter notebook [1] 写 python,并使用 pandas[2]、matplotlib [3] 以及 seaborne [4] 这些优秀的库。

我了解到,最好将数据收集阶段与数据分析阶段分开。这样的话,我就可以无缝地基于一个已知的数据集进行数据分析。下载数据花费了我不少的时间,如果以后每次进行数据分析都需要重新下载数据的话,那么会是很糟糕的体验。

首先,我拿到每个区块的平均 Gas 价格,并运行粗粒度的移动平均算法去平滑数据。



这里的平均 Gas 价格走势有很强的日变化规律,即每天 Gas 的最高价格是最低价格的两倍。而且,正如我们所注意到的,总体 Gas 价格确实有上涨的趋势

每日的价格高峰期出现在 GMT 1:30 pm,相当于旧金山的 6:30 am,纽约的 9:30 am,巴黎的 3:30 pm,莫斯科的 5:30 pm,北京的 9:30 pm 以及首尔的 10:30 pm。相应地,8 个小时之后会迎来最低的 Gas 价格。峰值的位置正如你所预期的那样,当全球大部分人都处于醒着的状态时,Gas 价格将迎来高峰。

然后,峰值后的快速下跌表明,亚洲地区对 Gas 费定价有着不成比例的影响,要么是因为亚洲的交易量很高,要么是因为该地区的交易者愿意为交易支付更多的 Gas 费用。

同样有趣的是,我们研究的移动平均图隐藏了更多有价值的信息。实际上,区块与区块之间也存在着很大的差异




上图展示了从 2019 年 9 月 6 号到 11 号的区块的平均 Gas 价格的变动情况。这个图已经完全不平滑了,充满了各种幅度的上下波动。当不进行移动平均的时候,我们可以看到每天的区块平均 Gas 价格在 5 倍到 6 倍的区间范围变化

然而,这还不是故事的全部!每个区块中包含着上百笔独立的交易,而每笔交易有着自身的 Gas 价格。让我们从单个交易的层次继续进行分析。



从上图可以看出,通过研究这段时间内 3,652,871 笔交易的 Gas 价格,我可以开始看清故事的全貌。我们可以发现一个区块内的每笔交易的 Gas 价格波动很大!在同一个区块中,有一些人愿意支付 50 到 100 gwei 的 Gas 价格,而另一些人只愿意支付 5 gwei。

下图聚焦放大 10 个连续区块的情况进行研究 (跟前面的处理方式一样,没有展示包含最高 Gas 价格的交易)。




在仅仅 4 分钟内,Gas 价格下滑为原来的 50%,然后又恢复到原来的水平。

我们可以发现红色的区块(区块高度为 8,509,003)中包含了 Gas 价格超低的交易,这些交易支付的 Gas 价格相当于市价的 1/20。这个区块是由 Ethermine 挖出的,Ethermine 把自身的交易以低于市价的方式打包到自己挖出区块,从而降低自身的交易成本。

后面的几个区块,最低的 Gas 价格从 20 gwei 下滑到 12 gwei。这些区块挖出的速度比较快,所以矿工拥有更少的时间把更高 Gas 价格的新交易纳入区块。相反地,他们选择基于在交易池比较久的、Gas 价格相对较低的交易进行挖矿打包。

在上图最后一个区块中,Gas 价格恢复到原来的水平,原因在于这个区块花了前面几个区块平均时间的 6 倍进行挖矿,即矿工可以有时间收集足够的高价交易而不打包低价交易

一个区块挖矿所花的时间直接影响着 Gas 的价格。在最近几天,耗时 10 秒的区块的 Gas 价格低于 25 秒的区块大概 5 gwei。

纵观所有的区块,我们同时可以发现用户倾向于设置 Gas 价格为 5 或 10 gwei 的倍数。

那么,我们可以从中得知什么呢?

以太坊交易的供给侧 (网络可容纳的吞吐量) 与需求侧 (用户的交易需求) 不能适配。在过去的 18 个月,以太坊的 Gas 上限(gas limit)提升了仅仅一次,而且仅提高了 20%。这种刚性的供给意味着每个人都需要去竞价固定的区块 Gas 上限,而且需求只要稍稍变化,Gas 价格就会急速地变化。

你支付的 Gas 费用超过平均的 Gas 价格越多,那么你的交易就有越大的概率被快速确认。

如果你需要「实时」交易,那么你需要支付更多的 Gas 费用和其他有同样需求的人一起竞争。如果同时有足够多的人有同样的需求,那么交易费就会快速飙升。

近期来看,每日 Gas 价格的峰值看起来有很大的概率会持续上涨,且 Gas 价格的瞬时上涨会变得更加频繁。

如果你关心你的交易啥时候会被确认,那么你需要知道你现在是在每天 Gas 价格的上升期还是下降期。如果 Gas 价格在往上涨而你的交易被推迟确认,那么应该需要等待好几个小时让 Gas 价格回落到之前的水平。

如果你并不需要实时交易,那么选择一天中比较「安静」的时间段发送交易。这可以让你节省 4 倍的交易费。

很多以太坊的交易似乎采用固定 Gas 价格的策略,但是这个策略是不可取的。固定的 Gas 价格策略,不考虑即时 Gas 市场的动态,在两种可能的情况中都是糟糕的:(1)在市价比较低的时候,给予过高的交易费;(2)在市价比较高的时候,交易被延迟。

如果你有一个进行交易签发的自动化系统,那么你不必一开始就出价那么高,而应该定一个合理的出价让交易大概率地被矿工打包。如果交易经过一段相当长的时间都没被矿工打包,那么你可以创建一笔拥有与前一笔交易相同 nonce 值及相对更高的 Gas 价格的新交易,因为具有相同的 nonce 值的多笔交易只有一笔能被矿工打包。然后,因为新的交易拥有更高的 Gas 价格,所以你的交易不需要被堵塞数个小时。通过这种方式,你不需要一开始就设置一个很高的初始 Gas 值。



(以太坊区块链上一天的交易 Gas 价格分布)


以太坊用户在每笔交易上都对有着固定容量限制的网络相互竞价。同一个区块内交易 Gas 价格的巨大差异表明了大部分系统对 Gas 定价的策略还是过于简单。

你不会在股票市场看到这样的情况:对于同一个公司的股票,不可能会存在有一个投资者以 450 美元的价格买入,而人群中却出现出价 200 美元购买同一家公司的股票的情况。然而,单个区块内的 Gas 价格分布区间比上述股票的例子还要大。

经过上面的分析,我们现在可以稍微增加默认的 Gas 价格来确保我们的交易能够顺利打包,且交易确认延迟也不再是一个问题。



原文链接: https://medium.com/originprotocol/diving-into-ethereum-gas-prices-6bf8b8e9135  

参考链接:
[1]:https://jupyter.org/
[2]:https://pandas.pydata.org/
[3]:http://matplotlib.org/
[4]:https://seaborn.pydata.org/

—-

编译者/作者:区块律动BlockBeat

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

知识 以太坊 Gas
LOADING...
LOADING...