从“状态”的角度理解以太坊可组合性源和可伸缩性解决方案之间的权衡

释放双眼,带上耳机,听听看~!

我们经常听说以太坊很特别,因为它“引入了图灵的完整编程语言并支持可编程性”等等。事实上,这种说法并不准确。因为允许更复杂的编程语言并不意味着什么,比特币也可以被编程;允许比特币使用实体编程语言不能得到以太坊。

原题:观点:从国家的角度理解以太坊及其未来

1、 导言

以太坊区块链自2015年创建以来,经历了五个冷热时期。五年的时间不仅使以太坊协议成为现实,使其更加成熟和具体,而且也暴露了这种设计的特点和利弊。这些权衡,作为设计挑战,自然会吸引并继续吸引无数的人才来尝试提高以太坊的可用性。其中,一系列提高“可伸缩性”的解决方案是最集中精力和想象力的。

本文要指出的是,正如以太坊范式面临设计权衡一样,所有这些可伸缩性解决方案也面临权衡。为了评估这些权衡是否值得,我们需要回到以太坊本身,以太坊节点和以太坊用户的真正问题和真正需求。“状态”视角作为理解以太坊本身的视角,可以帮助我们厘清这些方案的设计,揭示我们的得失。

本文将从解释“状态”的含义入手,揭示以太坊的终极长矛和致命弱点,进而探讨各种改进方向“富态”是以太坊智能合约“可组合性”的源头,也是以太坊网络最大的弱点。由此,我们可以看出哪些经常提到的解决方案会影响“可组合性”,哪些“可伸缩性”具有更明显的意义。

2、 以太坊作为范例

(1) 丰富的状态和可组合性

什么是“国家”?状态是一个系统在某一时刻的具体情况。以实现加密货币的区块链为例。区块链在某一时刻的状态是区块链上所有地址的资产分布(地址a有10个硬币,地址B有100个硬币等)(其实我们所拥有的只是一些状态,这是我们的思想和社会共识,这些状态被解释为“资产”)。

从这个角度来看,每一套区块链协议大致可以分为两部分,一部分是共识机制,另一部分是状态转移规则(有时称为“共识规则”)。前者定义了区块规则,当所有参与区块链的节点都需要在本地(例如作为用户)更新区块链数据库的状态时,以太坊区块链的节点只要收到一个具有满足难度的工作量证明的区块,就会更新本地区块链数据库的最新状态要求。状态转换规则定义了哪些交易是有效的(“账户的花费不能超过其自身余额”),还定义了节点在处理新状态的交易时应如何提高效率(“此交易意味着账户a已将5个硬币转移到账户B,然后账户a将从余额中减去5,账户B将在余额中增加5”)。

与tecoin相比,它的一致性机制是POW+Nakamoto一致性,状态转移规则是基于utxo的。以太坊的阻塞机制是“POW+ghost规则”,状态转换规则是基于帐户的。

那么,是什么让以太坊成为突破性的创新呢?

我们经常听说以太坊很特别,因为它“引入了图灵的完整编程语言并支持可编程性”等等。事实上,这种说法并不准确[2]。因为允许更复杂的编程语言并不意味着什么,比特币也可以被编程;允许比特币使用solidness编程语言不能得到以太坊。以太坊真正的特殊之处在于“富状态性”:它允许一个合约调用另一个合约,并且除了块容量本身之外,它对此类调用的级别数没有任何限制。

合同B可以调用合同a并根据合同a的打开代码更改合同a的状态。合同C调用合同B也可以间接调用合同a并更改合同a的状态。因此,虽然a的状态存储在合同中,但其控制逻辑可以如此重叠并不断累积;如果我们把国家理解为一种资产,就意味着可以对资产的使用权(使用条件)进行更严格、更复杂的持续控制;这就意味着,从理论上讲,一个国家的更新逻辑可以无限接近现实生活中的金融合同(因为所有的金融合同)关于一切都可以通过简单的逻辑叠加,组合。最重要的是允许任何多层控件的积累,但是如何编程这个控件是次要的。

此外,以太坊还允许用户向区块链写入状态,使这些状态成为全局状态的一部分,并要求节点根据合同中定义的逻辑更新状态。因此,合同可以向以太坊上的所有其他帐户披露其状态,并且可以真正使用上述丰富的状态。

这是正确的。现在我们已经收集了三个属性像龙珠

(1) 链上计算范式:契约可以要求节点根据自己定义的逻辑进行计算;

(2) 全局状态:合同的状态可以成为全局状态的一部分并向所有其他帐户披露;

(3) 富态:契约可以互相调用,栈层数没有限制,控制逻辑可以层层累加;

现在我们可以召唤以太坊最强大的矛:“可组合性”(货币乐高)!

链计算允许我们拥有各种契约;全局状态允许这些契约访问彼此的状态;富状态允许契约的组合具有无限多样性。因此,我们不仅可以有一个稳定的Dai,还可以有一个贷款市场,一个彩票申请,一个自动捐赠彩票收益的申请,一个自动平衡不同贷款市场之间储蓄比例的申请

(2) 状态数据爆炸

“冷静”是真的吗?是的,以上三个属性的三位一体实际上是一把双刃剑。

以太坊的状态转换过程可以抽象为:状态转换函数以旧状态和事务列表作为输入,输出新状态。这意味着以太坊的全验证节点必须在本地维护以太坊区块链的最新状态,以便执行状态函数,并用结果验证某个区块的有效性(同时与其他以太坊节点达成共识)。

矛盾在于:对于合同和开发者来说,合同状态作为以太坊全局状态的一部分存储在以太坊节点上,合同状态更新由以太坊节点计算(并由发起计算请求的用户付费)。这种“无服务器”的体系结构非常舒适;但是,只要支付一笔款项,这些状态就会更新,并永久存储在以太坊的完整验证节点中。虽然它需要为每次更新付费,但不能避免本地存储的状态数据将继续累积和扩展。

状态数据的扩展之所以成为一个问题,是因为它会给完全验证节点带来越来越多的硬盘(随机)读写负担。与块数据不同,块数据是静态的,在持久存储之后不需要频繁地读写。但是,每个额外的状态数据块都需要多次读写。随着状态数据量的增加,读写负担将越来越重。过去几年难以部署以太坊的原因是,我们经常听说很难在一年内部署所有节点。不久前,infra的免费以太坊节点服务崩溃[4],导致许多依赖infra的服务崩溃。这给大家敲响了警钟。最初的以太坊节点维护非常困难,人们更愿意信任他人。

这个问题不容易解决。在过去几年中,以太坊的几次硬分叉升级增加了访问状态操作码的耗电量,这恰恰是为了防止合同以经济成本创建一个新的状态。但这显然只是暂时的解决办法,因为逻辑没有根本改变。状态数据应该持续保存在以太坊节点,但是创建状态数据的用户只需要支付一次。也有人提出,为了改变这一点,我们需要引入某种“国租”机制,要求保留国的合同连续支付租金,否则合同的有效性将被终止。然而,这种机制具有难以想象的复杂性。一方面难以确定合理的收租方式,另一方面也难以确定合理的支付对象。因此,对地租形成机制的研究在2019年停滞不前[5]。一些项目(如nervos)试图通过持有货币的数量来定义可用状态空间的大小,因此状态数据的大小总是有一个上限,这避免了状态通货膨胀的问题,但它也改变了原始资产的经济属性。

到目前为止,除了“无国籍”问题,我还没有看到一个令人满意的办法从根本上解决这个问题,“无国籍”现实地说,也面临许多挑战。我们稍后再谈。

总而言之,全局状态、链上计算和状态性使以太坊的契约可组合,也使以太坊的网络面临着集中化的危险。就像小说《指环王》中的指环王一样,它不仅可以召唤强大的力量,还可以吞噬用户自己。我担心以太坊会长期承受如此沉重的负担。

接下来,我们使用“状态”视角来理解各种可伸缩性解决方案的设计和权衡。

3、 以太坊的发展方向

在本章中,我们将分析以太坊的四个发展方向:第二层方案、碎片化方案、无状态方案和汇总方案。这种分类是完全不合理的,因为rollup是layer-2方案的子集,而无状态是切片的前置技术。即使将它们并置也是不合理的,因为第二层方案几乎不需要改变以太坊的底层,而切片和无状态则有这样的要求。这只是为了便于叙述和理解。

(1) 二层方案

第二层方案背后的想法来自一个简单但非常准确的直觉:以太坊将面临吞吐量瓶颈的原因是构成以太坊网络的节点的带宽、计算能力和维护状态数据的能力有限,难以提高;仅仅要求整个网络的节点每单位时间处理更多的事务,就必须提高节点的操作要求,但是从使用的角度来看,不需要将所有的状态都放在以太坊上,也不需要将所有的状态计算都放在以太坊上。我们可以将合同的中间状态(或所有状态)保存在其他地方,用户交互(即状态更新)不在以太坊中,只有当用户认为有必要解决某个状态时,才会将该状态发送到以太坊进行确认。

一句话:如果不能使网络在单位时间内达成更多交易的共识,就应该提高单笔交易的内涵。

经典的第二层这一思想在“状态通道”方案中得到了最充分的体现:当两个参与通道的用户将其资金锁定到合同中时,他们之间的交易就不会被发送到链中。他们使用其他通信工具相互交换签名消息,以便就通道中的状态达成共识(因此,无论他们发送或接收多少消息以及形成多少消息),状态数据都不会成为以太坊的负担);直到两个人认为他们不再需要交互(或者是它)需要暂时结算一次),他们将双方认可的状态和签名发送给以太坊,以太坊将更新合同状态,并根据状态为两人结算资金。

如果将layer-2解决方案作为契约的设计模式,您将更清楚地看到layer-2解决方案选择不使用全局状态。另一个合同不能实时知道第二层合同的内部状态是什么(每个用户a/B/C有多少),因为这些状态不在链上。因此,第二层合同不能与其他合同合并。

尽管如此,layer-2方案也带来了一些重要的价值:更快的事务速度(尽管确认的中间状态不如主链状态安全)、更低的处理费用和主链节点更少的负担。

但为什么第二层在过去几年里没有成功呢?在汇总计划出现之前,其他计划,包括国家通道和等离子,无法证明锁定在自己合同中的资金与锁定在与国家合同中的资金一样安全(既没有冻结也没有被盗)。在状态通道方案中,如果你不总是监控区块链,你的交易对手可以通过向主链提交旧状态来“窃取”你的资金;在plasma方案中,你往往需要依赖运营商为你提供自己状态的证明,因此很难为运营商自己辩护。

这与以太坊主频段状态合约的使用体验完全不同。除了合同的代码风险外,除非有人发起51%的攻击来取消你的收入交易,否则你在合同中存入的钱不会被盗;除非有人一直通过51%的攻击来审核你的交易,你当然可以提取自己的资金。(稍后,我们将看到汇总解决方案如何解决此问题。)

(2) 切片

提高以太坊和提高以太坊吞吐量的另一个直觉是,以太坊的吞吐量是有限的,因为每个节点必须处理链上的所有事务;如果我们可以让每个节点只处理一部分事务,不同的节点组分别(并行)处理不同的事务,那么整个系统在单位时间内的吞吐量就等于这些节点组,也就是说,不增加单个节点的负担,而是提高了整个系统的吞吐量(包越小,吞吐量的乘数就越大)。这被称为“碎片化”。

关于碎片体系结构的一个有趣的问题是它的确切定义。在经典的非碎片区块链架构中,所有节点必须(1)重复所有计算;(2)维持所有状态;(3)传播所有块/事务。有人认为,如果只有一个被打破,那么它是支离破碎的;但是从更严格的角度来看,为了实现从理论中得出的吞吐量改进效果,必须将这三个都打破[6]。不同的定义带来不同的效果。在这里,我的定义是一个节点至少不需要维护整个系统的所有状态。

但另一个更有趣的问题是,如果可以实现分区体系结构所需的前端技术,那么该体系结构的重要性有多大。

Ethunm基金会研究小组构想的体系结构中,将整个系统的状态划分为多个部分,每个部分并行更新,也就是说,一个分区不能实时理解另一个分区的内部状态。当片段a上的契约a’尝试调用片段B上的契约B’时,不能假定处理器具有片段B的状态。因此,处理结果必须等待片段B完成状态更新后才能返回。因此,跨片段事务必须承受事务处理中最难以忍受的成本:延迟。关键是这种延迟不能用货币成本来抽象。因为片段B不知道片段a上有一个事务需要自己调用,所以它只能等待可信通信层为自己广播该事务。

单位时间内可以创建的值越高,延迟就越难以忍受。这意味着,如果某一组WiFi应用中存在补丁,这些应用根本不会通过跨片事务来调度其他补丁的处理能力,因为这毫无意义,无法满足WiFi应用的延迟要求。类似地,这也意味着defi应用的集中片段的单个片段的处理能力是其处理能力的上限(与单个区块链没有区别)。在深山老林中修建房屋和道路,并不能解决大都市居民的居住空间问题。

(有些人认为这些“空闲”分区吞吐量可以被较少的应用程序使用。在我看来,第二层和第二层的安全性可以达到相同的效果。)

(3) 无国籍状态

无状态是唯一直接面对状态数据扩展问题的升级方向[7]。

在当前的以太坊协议中,事务本身并不携带它所访问的状态的信息。因此,处理事务的节点必须维护状态数据,作为执行状态转移函数的前提。因此,状态数据的扩展是一个问题。

无状态的关键是使事务/块本身附加访问状态的信息。因此,一个块只能由它自己验证,而不需要处理事务的节点具有状态。

实际上,无状态就是改变以太坊块的结构和以太坊块的验证方法。无需维护状态数据,无需读写硬盘,块验证速度更快。在每个节点上维护自己的数据状态时,也可以根据自己的需要而不是所有的数据状态。

然而,老实说,无状态仍然面临许多设计挑战。具体来说:(1)无状态要求块/事务附加访问状态的见证。这部分数据的大小可能非常大。以太坊目前的块数据大小约为20-40kb,但见证数据大小可能以MB为单位(2)只有维护所有状态的节点才能组装见证,那么谁能为普通用户提供状态呢?(事实上,这可以看作是以太坊运营假设的转变:所有节点都可以参与挖掘,但无状态实现后就不能参与);(3)如何对交易的用气量进行定价?特别是由于witness具有实时性,无法根据操作码确定组装witness所需的计算量。

由于这些困难,以太坊的整个节点可能必须在这种模式下运行,以保持所有状态很长时间。然而,无状态无疑是以太坊协议改进中最令人兴奋的方向。因为它直接面对以太坊的核心问题,并试图以激烈的方式解决它。此外,对以太坊协议中状态数据使用的研究也滋养了其他研究方向,如同步方法[8]。

我倾向于相信以太坊的未来,如果不是无国籍的话,就是一个受无国籍启发的解决方案。

(4) 汇总方案

汇总方案是第二层方案。它的特点是,它将在以太坊区块链上发布每个状态更新中使用的事务。

与其他第二层方案一样,Rollup方案还存储链下的状态,并且不需要以太坊的节点计算契约的新状态。但是,将改变合同状态的事务将作为数据发布,这意味着任何第三方都可以根据这些公共数据和公共规则(尽管以太坊上的合同不能利用这些条件)计算合同状态。

如前所述,当lyaer-2合约选择将状态计算移出以太坊链并掩盖其自身的合约状态时,它会给用户带来风险:用户不知道,第二层合约的运营商是否会向以太坊链发送无效状态,并让区块链决定。如果运营商能做到这一点,就等于直接窃取了用户的资金。此外,用户不知道第二层合同的运营商是否会审查自己的交易并冻结自己的资金。

解决资金被盗问题有两种方法。一是确保每个状态转换都是有效的,即每次更新契约的状态根时,允许以太坊执行计算完整性验证过程。只有在验证通过后,合同才允许更新状态根,这是ZK rollup另一个想法是要求人们在请求更新合同的状态根时附上押金。如果提交的状态根无效,则报告状态根的人可以获得原始作者的存款,这称为最优汇总。但后一种理念有一个前提:检察官在国家过渡前必须有一个获得国家的途径,否则就没有过渡的错误证明。

解决资金锁定问题的方法只有一个:尽量弱化“运营商”的概念,让任何人都可以向以太坊提交交易,更新二层合约的状态。但这又引出了一个问题:如果提交人不具备合同的身份,他如何证明自己的状态访问的有效性并让合同通过?

最后,rollup解决方案通过“在每个状态转换时发布匹配的事务数据”来解决这个问题。因此,尽管汇总契约不公开链上的状态,但是任何人(包括汇总契约的用户)都可以基于这些公共事务包重构汇总契约的内部状态。这意味着,如果设计得当,汇总合同中的资金可以像以太坊区块链上的合同(即我们现在使用的合同)一样安全!

以ZK rollup为例,链上的验证程序确保了rollup契约不能更新错误的状态根,就像maker Dao不能在没有您的许可的情况下没收您的Dai一样。同时,假设它还公开了计算完整性的构造方法,您可以随时直接启动链上契约的状态转换来取款。这与状态为的普通合约完全相同:如果没有51%的攻击,则无法回滚汇总合约的状态;如果没有持续的51%攻击,则无法阻止您取回资金。

最优汇总依赖于一些加密经济假设,因此它稍微弱一些:除了51%攻击回滚状态外,攻击者还可以通过持续一段时间的51%复查攻击将错误状态的根源注入到契约中;或者他可以打赌所有计算过契约最新状态的人不会观察到错误(概率很小)。但最优的汇总也可以提供一个强大的免费托管,你可以在任何时候拿回你的钱。

换句话说,如果用户愿意将钱存入有状态契约(例如compound、makerdao、uniswap),那么他们没有理由不愿意存入汇总契约(如果不需要添加限定符,那么这就是ZK汇总契约)。通过ZK rollup,layer-2解决方案能够为用户提供以太坊区块链上的合同所能提供的最大程度的财务安全。显然,只有这样才能大规模采用。

所有的二层方案都可以看作是对无状态的妥协:二层方案本身是无状态的(对于其他合同,二层合同的内部状态是不可访问的),无论其内部状态有多复杂,都不会增加以太坊节点的负担;同时,在合同的情况下更新二层,以太坊扮演着更重要的验证角色,即验证状态根更新是否有效,而不是计算状态根本身。然而,在rollup时代,layer-2方案证明了它可以像状态契约一样安全,并且它的承诺可以实现。

4、 结论

总之,在本文中,我解释了以太坊的可组合性的来源,以及各种流行的可伸缩性解决方案是否牺牲了这种可组合性以及它们所得到的回报。读者可能会注意到,在我的推理和评价中,我非常重视“我们取得了什么/获得了什么”和“人们的行为表明他们需要什么”。是的,正是从这个角度我解释了rollup的魅力(事实上,这可能是我写这篇文章的核心动机之一)。在我看来,这样的思维倾向可以使我们的思维起点更加可靠,不必猜测用户的需求,不必空中楼阁。

在历史的进程中,我看到人们选择了一些他们可以选择的东西,这让我觉得这些东西很重要。如果有些技术没有增加他们可以选择的东西,而是牺牲了他们实际选择的东西,那么就没有理由对这些技术有信心。

(结束)

笔记

注1:以太坊白皮书,https://ethfans.org/posts/ethereum-白皮书

注2:vitaik的Twitter,https://twitter.com/vitalikbuterin/status/854271590804140033?语言=英语

注3:vitalik:基层和功能的逃逸速度,https://ethfans.org/posts/vitalik-base-layers-and-funatiality-escape-velocity

注4:如何查看基础设施服务细分,https://ethfans.org/posts/38028

注5:关于国家租金和无国籍以太坊,https://ethfans.org/posts/on-the-state-rent-and-pivot-to-stateless-ethereum

在基于区块6的安全链委员会中,https://ethfans.org/posts/security-and-scalability-in-committee-based-blockchain-sharding

注7:以太坊无状态客户端,https://ethfans.org/posts/data-from-the-ethereum-stateless-prototype

注8:波束同步:一种同步以太网节点的新方法,https://ethfans.org/posts/intro-to-beam-sync简介

人已赞赏
头条资讯

2000万元数字人民币红包来了 在深圳个人均可参与预约抽签

2021-1-1 18:56:42

头条资讯

2021的币圈密码

2021-1-1 20:54:35

4 条回复 A文章作者 M管理员
  1. 比特币头条哥

    比特币真是令人钦佩

  2. 6116

    OKEX一直优秀

  3. Z-hui

    后续市场不好说啊,有资金可以拉到你升天

  4. 6116

    tm牛逼啊~~

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索