以太坊源码情景分析之以太坊低TPS值理论分析

    TPS是指1秒钟能处理的交易数,由于以太坊出块速度是固定的,每15秒一个区块,因而以太坊的TPS值由一个区块里能够打包的交易数量决定。和比特币将区块大小限制在1M不同,以太坊对区块大小并没有限制,因而理论上一个区块可以打包任意多的交易,因此以太坊的TPS应该可以无限高啊,网络上以太坊的"低TPS评价"又是怎么来的呢?

    数据是最不能说谎的,我们以事实为依据,我们先来看下“以太猫"盛行时以太坊网络阻塞不堪时的区块交易数量(TPS),因为这个状态下的区块交易数(TPS)其实就接近最高值了。

“以太猫“时期TPS分析

    “以太猫"发布于2017.11.23。然后很快就风靡以太圈,12月3日开始,以太坊待处理交易几乎直线上升,也就是说网络已经开始产生拥堵。到12月9开始,以太网络被以太猫搞死的消息开始广泛传播。

    所以我们看看12月9日当日的区块交易数量数据

  

    从上面可见这一天的区块交易数量也就在100左右。

TPS为啥这么低

    为啥只有100左右呢?最开始我们分析过,TPS应该可以无限高啊?肯定有其他因素限制着。其实有两个因素

    1)全网广播速度限制

        以太坊对区块没有限制,但是网络广播速度限制了区块的大小。我们知道一个新块生产出来后需要全网广播,然后需要全网超过51%的节点收到该新区块才能得到认可。区块越大,数据量就大,全网广播的时间就越长。但是全网广播又必须尽量在下一个区块生产出来之前完成,所以这个全网广播时间就有了限制,就是区块出块速度。目前数据显示,1M的数据全网广播需要1.5s左右。因而以太坊在加上全网广播速度限制后,它的区块大小理论上最高可到10M.因此我们来看看上面的区块大小是不是10M,


    出乎意料,区块只有22k大小,和上面的10M大小相差甚远。因而这个因素不是罪魁祸首。那真正的“凶手”在哪里呢?

    2)gasLimit限制

     就是区块的总gas量,区块中的所有交易使用的油量的总和不能超过这个限制,并且这个油量限制是动态调整的。
    

区块gasLimit源码分析

    区块gas限制的逻辑在core/block_validator.go文件中

1)常量

    GasLimitBoundDivisor=1024
    MinGasLimit=5000,区块最小的油量限制
    TargetGasLimit=4712,388,是可以更新的,这个值最开始是5000,等于创世纪块的gasLimit.

2)具体算法
    核心部分为蓝色框和红色框代码
    当gasLimit > TargetGasLimit时:
        蓝色框起作用。其逻辑是如果parentGasUsed > parentLimit*2/3,蓝色框为正,相当于要增加这一个块的gasLimit,否则是减少。增加的速度由GasLimitBoundDivisor值决定。
    当gasLimit < TargetGasLimit时:
        红色框起作用,目的是按照GasLimitBoundDivisor的速率尽快让gasLimit达到TargetGasLimit。这个主要是因为TargetGasLimit是可以更新的,当更新后,需要将区块gasLimit慢慢的向新TargetGasLimit接近,当到达这个值后,就由蓝色框部分动态调整gasLimit.并且以后永远不会出现gasLimit < TargetGasLimit,直到设置下一个更大的值。

gasLimit提速问题

     从上面我们看出, 如果网络中的交易数量一直是增长的,没有波动,则gasLimit会不断变大。但是如果系统不断波动,gasLimit就可能不怎么增长。在全网交易量大增,TPS确实是可以动态提高的,但是这个提升是慢慢的,对于“以太猫”这种剧增是没法应付的。理论上当出现“以太猫”这种剧增后,如果一直保持,整个系统的TPS会不断提高的,但是由于“以太猫”导致的网络拥堵使得大家苦不堪言,市场立马出现两种"应急"反馈。
    1)交易费疯长导致普通交易量减少
    2)媒体开始呼吁抵制以太猫,导致以太猫后期交易变少

    3) 低TPS预期导致开发人员没有开发高交易量智能合约的需求

    这些反馈使得网络的交易量剧增只保留了一段时间,从而没有足够时间让以太坊TPS提升到足够轻松应对以太猫正常要求的交易量。其实这个有点像我们跑步,如果“三天打鱼,两天晒网”,我们的耐力没法提升的,必须持续一段时间一直跑才有效果,并且是一级一级提升。

    

    总的来说,以太坊本身具备缓慢持续提升TPS的能力,但是波动性的峰值TPS需要TargetGasLimit来解决,它相当于设置了最低gasLimit,可以解决峰值问题。
/********************************
* 本文来自CSDN博主"爱踢门"
* 转载请标明出处:http://blog.csdn.net/itleaks
******************************************/

EOS技术交流群,EOS开发群,以太坊技术群:787804520

        

    公众号:

猜你喜欢

转载自blog.csdn.net/itleaks/article/details/80627603