性能是阻碍公链发展的瓶颈,提高性能是大多数希望超越以太坊公链的主要设计目标,但是当我们今天回顾时,我们会发现大多数这些公链选择方法通过设计用于增强分布式系统性能的机制,但是陷入了分布式系统CAP定理(不可能的三角形)中,提高性能是有代价的。当此分布式系统的目的是分类帐时,这些成本甚至可能是无法接受的。
以太坊也一直在尝试各种提高性能的方法。在2.0发布的前夕,它“测试”了加密技术。 以太坊 2.0将成为在“分布式系统+加密技术”的基础上运行的公链。该加密技术不是指用于签名和隐私的部分,而是指高性能系统的核心部分。
从这个角度来看,也许我们可以说,不是别人颠覆以太坊 ,而是它本身。它从分布式系统设计的单一思想中脱颖而出,走上了分布式系统+密码学设计相结合的道路。
本文将尝试介绍如何在以太坊 2.0 以太坊分布式系统设计与密码设计相集成,以实现公链性能的突破。
一 状态切片:从单个分类帐到多个分类帐
区块链是一个分布式账本,而生产区块的节点是保留账户的矿工。他们负责将交易记录到分类账中。除了争夺计费权之外,块节点的最重要工作或它自己的工作是检查自身打包的交易是否合法。完成这项工作并不难,因为产生区块的节点手里有一个分类帐,并且它检查交易的发送者是否有钱。
对于完整的公链,所有节点都拥有相同的分类帐; 以太坊提出状态分片,实际上是将一个分类帐分为多个分类帐。这样,一些节点将帐户保留在1号帐户中,而某些节点将帐户保留在2号帐户中…(相当于从收银机获得的7-11,该工作站增加到多个收银机),并且有多个节点同时保留帐户,质量将改善整个公链的绩效。
但是,例如,如果我们固定块节点与分类帐/分片之间的关系,则确定四个节点a,b,c和d负责帐号1,那么坏家伙只需要购买一部分a,b,c和d。可以破坏分类帐,而公链提高性能时,安全性却成比例下降。
因此,需要将区块产生节点随机动态地分配给不同的分类账,以保证分片后的公链和不分片的公链具有相同的安全性。但是动态分配带来了新的问题:节点应使用哪个帐簿?它可以被分配到64本书( 以太坊程序启动64片)在任何何一一去结算。
以太坊项目被赋予一个节点不采取任何块何一个书籍或节点无需阻断,这样还可以对计费书。
这将带来两个主要好处。首先,无论节点被分配到哪个分片,它都可以立即开始计算(阻塞)工作,并且几乎不需要时间来获取和同步该分片的分类帐,因此该节点可以轻松地在不同片之间跳转;第二个是不需要书籍的块存储节点,不需要高硬件配置,任何抵押的32位ETH都可以成为验证者,这对于以太坊 PoS成为中心以及整个公链的安全性非常有帮助。
但是,新的问题浮出水面:如果区块生产者手中没有分类帐,它如何知道交易的发送者是否足够?密码学在这个时候首次亮相。
二 向量承诺:从查询到证明
在没有分类账的情况下保留账户听起来并不令人难以置信,但是这个想法很简单:在节点拥有分类账之前,在交易进行之后,它查看分类账以检查交易是否合法。将来,该节点没有分类帐,交易发送方在提交交易时,需要提交加密证书(为区别起见,以下以加密证书为证明),并证明交易合法。
为什么可阻塞节点可以使用证明来确定交易是否合法?涉及到两个重要的密码学概念,第一个被称为“成员资格认证”它指的是一种证明个人是群体一部分的方法。如果有可能证明一个帐户状态是整个分类帐状态的一部分,则区块节点当然可以相信该帐户状态,并以此为基础来确定交易的合法性。
第二个称为“向量承诺”无论该组有多大,它都可以将其压缩为一个数字,然后提供成员证书。会员证书显示该号码后面有个人属于该协会。分组,并可以证明个人在分组中的位置,并更新证书。
Merkle树是可用于向量承诺的方法之一。让我们以它为例,看看如何实现成员证明。
下图是Merkle树。底层的叶节点存储应用程序数据,其他非叶节点存储其子节点的哈希值。如果知道绿色节点和所有黄色节点的值,则可以从下到上执行三个哈希运算,以获取Merkle树的根的值,即6c0a。
然后,如果验证者具有树的根的值(6c0a),则证明提供者将绿色节点的值和所有黄色节点的值用作验证者的证明。验证者是否能够计算三个哈希的值是否等于6c0a来判断绿色节点的值是否在此Merkle树中?答案是肯定的。这证明绿色节点属于Merkle树。它以矢量承诺的方式完成,这几乎就是比特币 SPV节点(简单付款验证)的工作方式。
如下图所示,SPV节点不存储完整的块/分类帐,而是在需要时将Merkle树的根存储在每个块中(此Merkle树的叶节点将所有事务存储在该块中)。查询当存在事务时,它将找到完整的节点来请求该事务的证明,这类似于上面的绿色节点和黄色节点值(Merkle路径)的包装,然后SPV节点将计算总计这些值的哈希值该值是否等于手中的Merkle树的根的值,如果相等,则表示该交易是Merkle树的成员,即该交易存在。
SPV节点仅存储块标题(绿色框),并且块标题包含Merkle树根(红色框)
SPV节点通过成员证明判断交易是否存在。证明系统由三部分组成:节点具有简短摘要(树的根);证明提供者提供证明;节点计算证明以查看其是否与自己手上的摘要相同。比赛。
至此,我们完成了“无分类账核对”,将查询思路改为证明思路。我们接下来要实现的是“没有分类账记录”
对于以太坊 2.0分片上的块节点,其证明系统还由三部分组成:摘要,证明和验证,但是它需要使用事务发送者提供的证明(不是完整节点)来确定是否新交易是合法的(而不是是否存在旧交易),并以此判断为基础进行记账。
三 无状态:从账簿证明到行为证明
想象一个很小的村庄。每天只有三笔乡村私人交易,由村长负责记账。 A将要向B转移5美元。传统想法很简单:村长看A的帐户中是否有5美元,如果有,记下新交易。
现在改变思维方式:假设A想要今天早上将5美元转入B,而村长知道A的账户昨天早晨有10美元,那么如果A可以证明昨天的3笔交易与他无关,对?这是否意味着他今天早上的帐户仍然有10美元?这样,村长可以在不检查账簿的情况下写下新交易吗?答案是肯定的。
如果A昨天有交易该怎么办?很简单,A并没有证明他目前没有任何交易,而是证明他昨天只有一笔交易,并且交易成本为3元。村长知道他还有7元钱,可以记下新交易。
这种思想上的改变非常重要。您必须了解它。这就是“无国籍”的秘密。不难发现,即使不使用分类账的SPV节点在查询事务时也确实使用分类账或状态,但它并不存储状态本身,而是由所有节点找到该状态的证明。但是在这种新思想下,状态的角色可以完全用“行为证明”代替,然后可以无状态地设计此链。 (注意:“行为”一词证明没有任何来源,为便于理解,作者对其进行了描述)
如何实现无国籍?如何使用行为证明来完成簿记?仍然是会员认证的方法。可以使用Merkle树来完成这种成员资格证明吗?从理论上讲,但是对于“无状态”应用程序场景,使用它的成本太大。在本文中,我们将介绍使用“可聚合子向量承诺”来证明成员资格以实现无簿记。
可聚合子向量承诺(aSVC)是最新研究,来自Alin Tomescu,Ittai Abraham,Vitalik Buterin( 以太坊 ),Justin Drake( 以太坊 ),Dankrad Feist( 以太坊 )发表的论文“无状态密码货币可聚合子向量承诺” 以太坊 ), 以太坊 (Dmitry Khoratoich)。工作过程如下:
1.初始化分片,即在建立分类帐时确定帐户的初始状况。假设建立分片时有100个帐户,并且这些帐户具有初始余额。我们需要使用(i)来表示第i个帐户,该帐户是一对值(地址i,余额i);使用V代表所有帐户,它是一组值,例如(地址1,余额1)(地址2,余额2)…(地址100,余额100)。
同时,需要生成两个值,第一个称为c,这是对V的承诺,V表示当前所有帐户以及分片帐户中的余额。块生成节点将c握在手中(可以将其与Merkle树的根进行比较以便于理解),这是将来进行验证的摘要。
第二个称为π(i),这证明(i)是V的成员,并表示第i个帐户和总帐V中该帐户的余额。每个帐户仅持有并持有其拥有自己的π(i),这是将来发送交易时提交给区块节点的证明。
在初始化阶段,承诺和证明的生成需要初始的“状态”
2.第一次交易。帐户i发起整个分片的第一笔交易。此时,它需要向块节点提交π(i)和事务。块节点计算π(i)来查看结果是否与自己手中的c同相。是的,如果它们是一致的,则您可以相信发件人的帐户实际上有多少余额,并以此来判断它提交的交易是否合法。
3.接下来是关键点:更新c和π(i)。
不再根据状态生成c(对整个分类帐的承诺),而是在第一次交易之前使用c以及由第一次交易引起的余额更改生成; π(i)(帐户本身的证明)它不是根据状态生成的,而是在第一次交易之前使用π(i)生成的,并且第一个交易更改为该帐户。
在完成对c和π(i)的更新后,块生成节点具有一个新承诺(新c),可以承诺所有用户的新余额,并且帐户具有一个新证明(新π(i),可以证明它的新余额))。
以此类推,每个事务将一次更改c,一次更改所有π(i),但是此更改不再取决于状态数据,而是取决于旧的c和π(i),以及最后一个事务。当需要验证新交易时,区块生成节点始终具有最新的c,它可以确定交易是否合法,并可以通过c和帐户提供的π(i)将其打包到区块中。
因此,在这一步,我们最终意识到“无需分类帐就可以记录该书”无论是块节点还是帐户,他们手中都持有某种加密证明,而不是分类账的状态。要提及的另一件事是,无状态和分片似乎是完美的匹配,但是无状态不是分片的设计,而是公链的设计。
aSVC的设计目标是成为一个有效的成员证明,在上述过程中减少通信开销和计算开销,从而使该方案可用于无状态区块链的实现。从本文来看,使用aSVC方案,c和π(i)的大小仅为几十个字节,π(i)的更新时间为O(1),验证时间也为O(1) 。它支持将多个证明聚合为一个O(1)大小的证明。这种低开销的实现正是aSVC的意思。但是就像Vitalik在以太坊讨论中展开的研究者论坛一样,aSVC需要做进一步的优化。
本文对全文进行了简要的总结:分布式系统的状态切片设计和密码学的成员证明设计相结合,以实现以太坊 2.0的性能上的突破。
1.为了安全起见, 以太坊 2.0的状态分片需要随机分配块节点。
2.如果块生成节点需要一个帐户簿,则帐户簿同步将成为新的性能瓶颈,并且帐户簿存储也将影响PoS的去中心化。
3.没有分类帐,有没有办法验证余额?
4.思维的第一个转变:将查找分类帐的方法更改为证明分类帐的方法。这需要借助加密来完成。
5,第二种思路的转变:将证明账本状态的方式改变为证明交易行为的方式,实现无状态,无账户记账。这需要借助加密来完成。
6.有许多用于加密的工具。有目标时,您需要选择并组合适当的工具以根据应用程序需求形成计划并优化计划。
复活节彩蛋
可凝集的子向量诺言
在本文中,我们以自然语言描述了aSVC的工作。如果您有兴趣,可以通过aSVC的API定义更清楚地了解它。如下图所示:第一个红色框用于在初始化期间生成承诺c,第二个红色框用于根据事务更新c。第一个绿色框用于在初始化期间生成证明π(i),第二个绿色框基于交易更新π(i);蓝色框是对生成块的节点的c和π(i)的验证。
在上述过程中,核心工作是根据事务引起的变化将旧c更改为新c,将旧π(i)更改为新π(i)。不仅能够完成更新,而且此更新的费用是可以接受的,这是aSVC要解决的关键问题。我们以c的更新为例,介绍如何完成aSVC。
如前所述,c承诺从c到新的c,实际上是从承诺承诺一个新的。对于,它由一系列点组成(地址1,余额1)是一个点,(地址2,余额2)是另一个点…(地址100,余额100)是第100个点。
借助拉格朗日插值,可以将这一系列点转换为多项式(由多项式表示的曲线穿过所有这些点),这意味着对一系列点的确定可以转换为对多项式的确定。从c到新的c,等效于提交一个多项式与提交另一个多项式。
多项式具有各种神奇的特性,对多项式和多项式变换的承诺可能很小而又很快。然后,通过从点到多项式的这种转换,可以使c的更新成本可接受。
但这只是对aSVC解决方案思想的简单而单一的介绍。该解决方案中还使用了许多其他工具和方法,并且仍在追求更好的设计。如果您想了解更多信息,可以阅读原始论文。 3.1和4.1节是理解整篇文章的最有用的部分。
论文下载地址为:https://eprint.iacr.org/2020/527.pdf。
文章标题:以太坊颠覆以太坊 :引入加密技术以实现2.0性能突破
文章链接:https://www.btchangqing.cn/39589.html
更新时间:2020年06月16日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。