BTC:科普:ETH 1.x与无状态节点介绍_ETH2

编者按:本文来自以太坊爱好者,作者:LaiJack賴彥廷,Odaily星球日报经授权转载。

本篇文章将剖析eth1.0存在的各项问题,并介绍EthereumFoundation提出的eth1.x升级相关改动能如何改善当前以太坊的困境。什么是eth1.x

以太坊2.0的研究行之有年,迄今距离全面启动仍需要2–3年的时间,并且eth2.0将被部署为由信标链与多条分片链构成的独立区块链,而eth1.0需要经过改动与升级方能成为eth2.0中的其中一条分片链。这意味着现在运行的以太坊1.0区块链需要进行改动,并且在未来的5~10年保持运作,持续发展。而eth1.x即为以太坊1.0升级版本的代称。eth1.x的首要目标旨在解决现在区块链日益增长的资料负担,在区块链大小持续增长的情况下保持eth1.0网络的弹性。以太坊1.0的弊端与问题

在开始介绍以太坊1.x之前,必须先认知到目前以太坊存在的问题,如此方能充分了解eth1.x被提出的背景与旨在解决的痛点。Problem(A):网络趋于中心化

自2020/05以来,GasPrice的节节攀升导致开发者与高频率使用者叫苦连天,其背后原因除了以太坊用户数量的增加,亦是由于耗费大量Gas的智能合约互动行为比例提升,使得以太坊网络持续壅塞。面对这样的情景,矿工社群于2020/6/19UTC投票通过,将每个区块的GasLimit从10,000,000提升到12,000,000。截至2020/06/30,尽管每个区块的GasLimit提升至12,000,000,合约交易占比的提升依旧让每个区块所能容纳的交易数十分有限,在Etherscan上可以查看到以太坊的TPS在GasLimit提升前平均落在12左右;在GasLimit扩增后,TPS亦没有出现明显的提升。

-etherscan.io-可能有些人会想说既然12,000,000GasLimit依旧壅塞,那怎么不再往上提升?原因是GasLimit的提升将导致每个区块的处理时间变长,进而造成UncleBlock的数量增加,使得网络的共识机制变不健康,矿工必须耗费大量额外运算来进行处理。此外,由于独立节点与小型矿池更容易挖到UncleBlock,长期下来出块奖励的期望值降低将导致部分节点入不敷出,进而离开网络。如此将让以太坊网络变得更加中心化,更向大型矿池集中,危害了网络的长期健康与安全性。Problem(B):状态爆炸

随着越来越多的智能合约被部署,以及大量的合约互动行为,导致以太坊网络需要储存的「状态」大小正以「等比级数」增长。状态的增长即反映在节点的储存空间大小上。

笔者于另一篇文章中摘要介绍了以太坊网络中的节点:全节点与轻节点:以太坊节点面面观文科生也该知道的区块链技术知识

在2019年年底,全节点的每月增长大小「小于20GB」;到了2020/06,随着GasLimit的提升,全节点的每月增长大小「逼近40GB」。状态不断加速增长的结果会对以太坊网络的性能带来衰退与网络健康的损害。未来全节点的运行将会变得更加艰难,可能导致网络变得越来越「中心化」。,即以30KB计算,单月的区块数据增长量为30×4×60×24×30=5,184,000KB,换算过来就是5GB。而状态数据的增长更不可能有几十GB之巨。)此外,区块验证的难度将随之提升,导致整体网络的延迟与TPS的进一步下降。尽管这个过程如同温水煮青蛙,在数年之后才会导致以太坊网络出现巨大的安全性问题,然而为了避免走到那步田地,早在数年前便开始以太坊2.0的相关研究与开发。

-RoadmapofEthereumtweetedbyVitalikon2020/3/19-以太坊的未来

Vitalik于2020/3/19在推特上分享了他对于以太坊未来5~10年发展观点的路线图,主要由以下四个部分构成:eth1.xothereth1.xstatelessnesseth2phase0prepeth2phase2andbeyond图中间的横轴代表时间线,沿着时间轴是一个从Phase0启动,到Phase1,再到「eth1?eth2合并」的「核心路径」。要完成合并有三个先备条件:eth2phase1eth1?eth2合并的规范与实现eth1.xstatelessness其中,「eth1.xstatelessness」可说是对于eth1?eth2合并最至关重要的一个条件,本文将以「无状态性」为主轴做相关的介绍。状态爆炸对以太坊网络的影响

由于以太坊区块链的本质是一台依靠矿工维护的去中心化大型「状态机」,随着区块数量的增加更迭状态,不断向前移动。以太坊的完整「状态」包含所有个人帐户和余额的当前状态,以及在EVM中部署和运行的所有智能合约的整体记忆体。以太坊网络在每个区块高度都只有唯一一个获得全网所有节点共识的「状态」,这个「状态」在每一个新区块会产生变动并随着区块接至区块链上。矿工在执行交易运算时,必须依据交易内容至节点内以「Merkle-PatriciaTrie」资料结构组成的状态树中更改相关的状态值,再重新计算出每个树状节点的hash值,算出新的「MerkleRoot」,生成新的状态树。

-图片来源:https://blog.ethereum.org/-截至2020/06,当前的以太坊网络中约有5亿个状态值,总状态大小约为10GB,状态会随着网络上的帐户与智能合约数量增加而按比例增长。因此,如果以太坊继续获得主流采纳,状态可能会在未来数年持续爆发性增长。不断扩大的状态主要会对节点造成两大影响:节点读取状态耗时增加,交易处理速度变慢

目前每个新区块矿工大约需要添加或修改3000~6000个状态值。由于矿工处理每一笔交易时都必须要读取节点资料库中状态的相关资讯,当状态数量持续增长,在状态树中查询到指定状态值的耗费时间就越长。建构新的状态树耗时更长,区块验证速度减慢

当矿工将交易处理完时,必须建构一个由新的状态组成的Trie结构状态树,当中涉及大量的hash值运算。计算完RootHash方能建构出新的BlockHeader,打包出新区块。小结

综合来说,持续增大的「状态」与「节点大小」将导致新的全节点启动成本大幅提升:对于「储存空间」的需求与「同步时间」的增加可能会进一步导致网络中全节点数量的减少。此外,以太坊网络的整体性能下降也在所难免。以太坊随着状态树查询与运算耗时的增加以及越来越多的合约交易,TPS可能会进一步下降,导致网络变得更加壅塞,迎来更高的GasPrice竞逐。eth1.x的提出

对于以太坊1.0升级的相关研究最早可以溯及到2018/10在捷克布拉格召开的DevconIV,会议谈论到以太坊2.0无法在未来3~5年内完全取到以太坊1.0的所有功能,因此eth1.0仍必须保持安全稳定运行,于是乎无数的核心开发人员开始研究一系列延长eth1.0寿命以及与eth2.0介接的解决方案。既然状态的持续增大对于以太坊网络的健康带来重大影响,解决方案之一便是「消除以太坊网络对状态的需求」。细看Vitalik于2020/3/19发布的以太坊未来路线图中即可看到一系列的解决方案:

上述的路线图是较为精要的版本,以太坊研究员GriffinIchibaHotchkiss于2020/4/2在EthereumBlog分享了他对于目前eth1.x研究开发方向的理解,整理出下图的「技能树」:

-2020/4/2更新的eth1.x科技树-由于细节族繁不及备载,本文只会挑出其中几个核心来做说明。有兴趣的朋友可以参考并持续关注EthereumBlog中的相关文章:The1.xFiles:TheUpdatedStatelessTechTreeThe1.xFiles:APrimerfortheWitnessSpecificationThe1.xFiles:EIP1559andtheEthereumImprovementHorizoneth1.x的目的

简而言之,eth1.x的核心目的有两个:(A)延长eth1.0的寿命

在区块持续增长的情况下维持eth1.0区块链的安全、稳定与弹性,让人们可以选择仅下载部分的状态,在较便宜的硬件上运行节点。(B)与eth2.0介接

由于eth2.0中的分片将是无状态的,因此「无状态」将是参与eth2.0区块验证的先决条件。eth1.0要与eth2.0相容的话势必得支援无状态运作,方能顺利过度,与eth2.0介接。为了达成这两个目的,在技能树图最右侧的终点我们可以看到「无状态以太坊StatelessEthereum」。然而,「无状态」的以太坊这个词可能有些不够精确,因为整个以太坊网络就是基于状态而存在的。具体来说,是找到一种方式让以太坊网络中的部分节点可以将「保留整个以太坊状态的副本」这件事变为一个选项,而非必须。因此,要让现行的以太坊网络能够支援没有保存完整全网状态的轻量级节点:「无状态节点」参与到网络中的新区块验证。而为了让无状态节点能够进行验证,以太坊1.x提出了以下三项主要改动,我们将逐一来进行介绍:(1)区块见证机制(2)EVM改动(3)资料结构转换为二进位制(1)区块见证机制

无状态节点如何参与验证

简单来说,作法是:拥有全网状态资讯的「完整状态节点FullStateNode」在打包新区块时会一并产生「区块见证BlockWitness」,让没有保存全网状态的「无状态节点」能藉由区块见证提供的资讯对新区块进行验证。什么是「区块见证BlockWitness」

前面提到,以太坊的资料结构是由约5亿个状态值所构成的Merkle-PatriciaTrie。然而,其中大约只有0.1%状态值会随着区块高度产生变化,如:个人帐户的ETH余额、合约底下记载的每个地址持有Token数量。99.9%的状态值如:智能合约的程式码、Uniswap手续费0.3%的参数等资讯一但智能合约部署完成便不会再进行更动。由于一个新的区块至多只能容纳571笔交易,其涉及的状态值更改是十分有限的。那么一个没有储存所有状态值的无状态节点只要向拥有完整状态的节点请求涉及交易的相关状态值与未涉及到的hash值其实即可算出MerkleRoot进行验证。如下图所示,假设底层的14个菱形代表以太坊网络中所有的状态值,而新区块中仅有一笔交易,针对绿色的状态值进行更改,那么无状态节点其实只需要1个绿色的原状态值以及紫色的Hash值与其它未变动的6个Hash值资讯即能透过4次Hash值计算,算出新的RootHash,而不需要拥有所有的14个状态值来进行9次Hash值计算。

-图片来源:https://blog.ethereum.org/-这些为了完成RootHash计算所需要向拥有全网状态资讯的「完整状态节点」请求的「最小资讯量」即为「区块见证BlockWitness」,包含了状态Trie中「不涉及变动的部分Hash值」与「涉及变动的原状态值」。如此一来,没有保存完整全网状态的「无状态节点StatelessClient」将可以藉由请求而来的「区块见证」资讯计算出新的RootHash。为了便于让无状态节点参与验证,目前的最新研究方向是「区块见证」将可能成为「区块标头BlockHeader」的一部分,随着新挖出的区块一并广播给全网节点,让无状态节点不用再发起额外的「区块见证请求」即能进行验证区块的动作。透过这样的方式,无状态节点即能参与以太坊网络中新区块的验证。碍于篇幅,我们在这篇文章只会做概念性的阐述,具体的实作细节先不展开细说,想更进一步了解的朋友可以参考我上方附上的链接以及以太坊博客中的其它相关文章。(2)EVM改动

状态值的更改和运算都是在EVM中进行,同理,区块见证也必须经由全节点的EVM透过运算来生成。EVM的改动目标与成本和激励机制息息相关,主要包含耗费Gas的估算以及如何降低对节点间广播延迟的影响。区块见证Gas计算

由于区块见证必须由全节点花费额外的计算资源来运算生成,因此会产生相应的Gas成本,而这个成本目前比较可行的方式是由交易的发起者来进行负担。至于如何让交易发起者在发送交易时即能准确估算额外的Gas,以设定精确的GasLimit,目前仍在研究中,尚未产生明确的定案。另外,考虑到在同个区块中可能有一个状态值被不止一笔交易进行更改,因而产生重复支付Gas的情形,这部分可能会成为矿工额外的奖励费用。智能合约程式码分块

区块见证的目的是为了让无状态节点能够进行新区块的验证,其中必定包含了智能合约相关的运算。然而,无状态节点没有储存包含智能合约程式码在内的状态,所以当无状态节点要进行一笔智能合约交易的状态运算时,便需要一并拥有包含智能合约程式码的在内区块见证。这时会有另外一个问题,智能合约洋洋洒洒的程式码中可能只有其中的一小片段是与该交易运算相关联的,因此「程式码分块」的概念被提出。「程式码分块」是一种拆分智能合约位元组码的方式,将智能合约中与涉及交易相关的程式码拆出,作为区块见证中的一部分,一并提供给无状态节点让其做运算验证之用。其目的便是避免调用到不必要的程式码,免于生成庞大的区块链见证导致运算时间的增加及节点间传递沟通的延迟。(3)资料结构转换为二进位制

根据以太坊研究员IgorMandrigen进行的实验,若将以太坊资料结构从目前的十六进位制更改为二进位制,每个区块的区块见证大小将能从800~3,400kB缩小至300~1,400kB,如此将大幅减低区块见证在网络中传播的延迟时间,让区块见证机制能够运行得更加理想。然而从Hex转换为Binary具体的实作方式以及过度策略目前仍未有完全的定论,有兴趣的朋友可以持续关注EthereumFoundation释出的相关消息。无状态以太坊StatelessEthereum

介绍至此,透过引入「区块见证机制」、对「EVM」进行必要的改动,以及将资料结构转换为「二进位制」,已能勾勒出eth1.x的大致样貌。支援无状态节点的1.x网络,将能够对以太坊1.0的区块链网络产生下方几点关键影响:i.对新加入节点更加友善

随着全网状态的膨胀与区块高度的提升,启动一个新节点的同步时间会变得越来越长,超长耗时的原因是因为全节点的同步必须从创世区块开始对每一个区块进行验证与同步的动作,而验证区块必须要拥有该区块高度的全网状态,因此在每一个区块同步状态是目前同步节点的极大瓶颈。无状态节点时代的到来将能够大幅改善同步区块的痛苦过程,未来仅需凭借「区块标头」与「区块见证」即能完成区块的验证,同步节点体验的改善将能让更多人有意愿且能够负担运行节点的成本。ii.轻节点得以自力更生

在现行的以太坊网络中,轻节点不具备独立验证新区块与验证交易的能力,因为轻节点没有保存验证交易需要的merkleproof资讯,因而必须向邻近全节点发出p2prequest进行请求,但轻节点现在愿意提供支援的佛心全节点变得越来越少。无状态机制将能帮助轻节点依靠自己维护的部分状态,以区块标头和区块见证独立进行验证,不求于人。iii.节点网络安全性提升

由于区块链网络的安全性取决于能参与新区块验证的节点总数量,对网络的攻击成本将随着节点总数量的增加而提高,能有效地低系统被击溃的风险。随着新节点启动成本的降低以及大量的轻节点投入到新区块的验证中,将让网络的整体安全性大幅提升。iv.介接eth2.0

最后一点也是最核心的一点,前面提到eth2.0将会是由核心的信标链与多条分片链构成,全网的状态将被多个分片分开储存。由于每条分片各自拥有不同的状态,并且没有保存其它分片的状态资讯。因此对每条分片来说,其它条分片都像是「无状态节点」。为了能够在多条分片链间有效验证与同步,必须依靠「无状态的验证机制」。因此现在的eth1.0未来要能顺利成为eth2.0的其中一条分片链,升级为无状态的eth1.x是至关重要的一个步骤。结论

透过以上介绍,相信读者们应该对于现行的eth1.0升级到eth1.x需要进行的改动,以及改动完成后的未来有更清晰的认识。在eth1.x升级完成后,人们将能用便宜的硬件运行自己的无状态节点,更多能够参与验证的轻节点可以进一步维护全网的安全性。拥有无状态验证机制的eth1.x方能顺利和eth2.0的信标链与其它分片链介接,正式让以太坊网络进入由无状态验证机制与分片技术构筑成的轻量化eth2.0未来。以上,若有任何A.我写得不够清楚的地方B.撰写上改进的建议C.希望我能够撰写分享的区块链技术知识内容都非常欢迎在底下留言回复。希望我的文章能帮助到更多像我一样想学习区块链技术与知识的朋友。如果您觉得读完有所收获,也希望能给我50claps分享给您的朋友们谢谢大家!也欢迎大家阅读区块链技术知识系列的其它篇文章:https://medium.com/

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

区块博客

屎币ETH:Deribit期权市场播报:0708 - 宽跨式组合_ETHPLO

比特币经过了两个多月的横盘,振幅越来越小。从期权市场数据看,越来越多大宗交易以宽跨式组合的形式成交,交易员可以通过这种形式来押注大波动的来临。因为跨式组合过于昂贵,要承担高额的时间价值损失.

[0:31ms0-12:158ms