以太坊拥堵是一个老生常谈的问题了。为什么会堵?原因很简单,道窄车多。道窄的问题,是区块链公链系统的共性问题。技术上,作为一个分布式共识系统,区块链系统不可能实现公平性、效率和安全性的同时最优。随着计算节点越来越多,采用比拼算力的POW算法,为了保证全网共识的公平性,计算效率肯定很难提上来。车多的问题,是以太坊自身的优势形成的。除了比特币系统,在所有公链系统中,以太坊拥有多项第一,节点数最多、dapp应用最多、支持token最多、交易所上市交易的token最多、开发人员最多等等。这种优势,体现为token项目推出的高效率、低成本和更快的ICO速度,短时间内没有任何一个公链能够超越这种优势。所有ICO项目都争先恐后的在以太坊上发行基于ERC20的token,以太坊上跑的合约越来越多,能不堵吗?
以太坊上一次大规模的拥堵是在2017年12月份,因为加密猫火热,导致以太坊网络拥堵。
Unknown column 'ethereum' in 'where clause'
SELECT id,chbjc,bjc,brank,gainian,bbcid,btotal,bprice,titlepic,title,app_cid FROM ***_ecms_coin where app_cid =ethereum
想必大家都知道2018年热度非常高的新兴交易所Fcoin,它用“挖矿即交易”的玩法,强行上位,一度成为交易量最大的交易所,成为币圈焦点。Fcoin火起来之后,推出了自己独特的上币机制,不需要上币费,但是需要各项目方社区成员去注册Fcoin交易所,然后充值相关代币,哪个代币充值的账户多,就可以获得上币机会。就是因为这个举措,导致以太坊网络的拥堵:由于Fcoin火爆,项目方都想上币,那么就要鼓动社区成员去存币,所有人都这么玩,以太坊因此就堵了。
以太坊的共识算法是工作量证明,然而这种算法最大的弊端就是网络中的所有节点需要去逐步验证每一笔交易。
假设现在以太坊网络有100笔交易,那么所有节点去验证这100笔交易信息;如果交易笔数越多,那么就需要更多的时间去验证这些交易。
更关键得是,以太坊中的每个区块能承载的转账信息是有限的,突然增加这么多转账的时候,很多转账都上不了这个区块的车,那么就只能继续等下个区块,甚至是下N个区块。于是网络就拥堵了。最后,矿工都是逐利的,谁给的手续费多,矿工就选择让谁上“区块之车”,为啥你的转账总是失败呢,是因为其他人给的矿工费高,矿工费给低了的你到当然“上不了车”。
综上,以太坊拥堵的根本原因是其底层的架构有问题,如果有大量转账涌入,就会导致有大量转账处于等待状态,网络就会拥堵,矿工费也会随之上涨。
Vitalik和以太坊社区开发者已经在想各种扩容的办法,POW向POS共识算法升级、跨链、雷电网络、分片等等。
共识算法转变到POS是V神和社区一直想做的事情。毕竟基于POW算力的共识,所有的节点同时只能做一件事,整个网络能够处理的任务量是非常有限的,严重受制于网络中单个节点所能处理任务的上限。即使对区块大小进行扩容,由于存在全网共识,效率提升的作用也是有限的。POS看起来是正确选择。但是,把POW换成POS,也会产生新的问题,比如所谓“无利害关系”问题,即在POS机制下,恶意的节点验证者可以在没有任何损失的情况下去把自己的币押在分叉链上推动硬分叉,这是一个重大缺陷。为此,以太坊开发者们提出了Casper协议(以太坊的POS协议),在这个协议下,验证节点需要在网络上押一定比例的以太币作为保证金,如果出现验证节点的“无利害关系”作恶行为,系统将扣除保证金作为惩罚。分片技术被Vitalik和很多以太坊开发者认为是解决以太坊性能的主要解决方案,分片技术是将以太坊网络划分成若干能够处理交易的较小的分片网络,不同的验证节点会因为不在同一分片而分别执行不同的任务,因此如果整个网络拥有了100个分片,那么整体的处理性能将会是原来的100倍。
但是,在POW的机制下,如果网络被分成了100个分片,分片很容易被恶意矿工掌控,因为攻击者只需要1%的hash算力就可以完全控制一个分片。因此,分片技术应用的前提也是从POW向POS算法的转变。但在这么大的生态体系上做POS算法的切换,是一个很难达成共识的事情,Casper协议的转换也是一拖再拖。以太坊拥堵的事情,正好能够加速这一进程。
2018年5月,以太坊社区已经正式发布了Casper的第一个版本Casper FFG。在Casper FFG一旦被实施后,以太坊将会先进入一个POW+POS混合挖矿的阶段,这个阶段大多数的区块仍然是通过POW来产出,有1%的区块会开始交给POS节点,让整个网络以较为平缓的方式向POS来进行过渡。总之,Vitalik和以太坊开发者在以太坊性能问题上的努力还要加油!
以太坊网络的每步操作都需要消费Gas,这些Gas是用ETH来支付的;那么Gas的价格应该怎么算呢?
Gas由两个部分组成:Gas Limit(限制)* Gas Price(价格)。简单地说,Gas Limit 相当于汽车需要加多少汽油, 而Gas Price相当于每升汽油的价格。
Gas Price的单位是Gwei,而且1ETH=1e9Gwei(10的9次方)。Gas Limit的含义是用户愿意为执行某个操作或确认交易支付的最大Gas量。以太坊为防止某些错误或者恶意的智能合约消耗掉用户大量手续费,所以对默认Gas上限做了限制。但是有些合约的确会消耗大量的Gas,所以需要手动设置上限。
在以太坊网络遇到拥堵的时候,看到转账一直处于待打包的状态,那么如何才能知道网络状况呢?通过Ethereum Pending Transactions Queue这个网站,就可以看到当前整个网络中转账打包的情况。而且在网络拥堵的时候,除非确认了该笔转账交易失败,否则不要重复发送交易。
以太坊网络拥堵,什么币交易转账受影响?
TH转账交易肯定会受到影响。除此之外,所有基于一塌方ERC20标准的Token,都会受到同样的影响。
除了设置旷工费还有哪些方法?
虽然我们可以通过调整矿工费,来完成转账,但这都是治标不治本的方法。
如果网络真的拥堵了,必须提高矿工费,你的交易才可能被及时打包。关键问题在于,以太坊的这种拥堵方式,很难被用于主流场景。于是,从本质来看,我们需要解决的是以太坊的扩容问题。说到扩容,现在的解决方案主要有以下三种。
首先是分片技术:如果说以太坊堵是因为“路不够宽”,那么多修几条路,同时给车走,是不是就能缓解拥堵问题?就像上文所说,以太坊上节点的验证是线性的,而分片可以让节点同时运行,因此提高了整体区块链可以处理的每秒交易。有了分片,以太坊网络可以分成很多组节点。每组都是一个分片,并且每个分片都会处理组内的交易。这就可以让分片同时地处理不同的交易。现在以太坊是想用分片来作为扩容方案,而最近非常火的项目Zilliqa也是分片界的高手。
其次是Plasma:分片可以认为是直接在链上进行扩容,那么Plasma可以算是链下的扩容。交易并不是在以太坊主网上进行。Plasma可以让很多区块链子链从原来的区块链上分离出来。因此,每个子链都能处理和维护它自己的转账记录,当然这是基于根链的底层安全性。这种方案可以使所有子链分配区块链上的所有转账信息,从而使得速度和效率可以最优化。想象有一根大树,树干上有很多分支,这些分支都可以独立地进行运算,最终只需要将结果保留到主要的树干上就行,而不是将任何事情都丢给树干,如此当然可以大幅度地提高计算速度。
再就是雷电网络:雷电网络是另一种链下扩容的解决方案,它可以让两个节点之间开通一个“状态通道”,这是用户间的双向通道。交易信息会在两个节点之间进行,同时会由各方签名来保证交易的不可篡改性。雷电网络是专门为经常性支付使用的,对于日常支付而言,是非常有好处的,而且可以大幅度地降低每笔交易的燃料费用。
除了在以太坊上进行修改,当然也有另起炉灶的解决方法。最典型的例子,就是EOS。既然问题在于底层算法,那我们就改了呗。于是EOS提出了DPOS算法,通过将网络中的节点缩小到21个,来大幅提高每秒转账数量,现在EOS的TPS峰值可以达到1000以上,远超以太坊每秒20笔的确认速度。除了EOS,现在很多公链项目会提出各种创新的共识算法,来解决此问题,以太坊自己也提出了改进的权益证明算法Casper,希望使用完全的权益证明,来彻底解决以太坊拥堵问题。
虽说现在以太坊拥堵的情况还不能完全改变,但是大家都在朝这个方向努力,相信在不远的将来,区块链的拥堵定会解决,从而为大规模应用打下坚实的基础,让我们拭目以待吧!