以太坊的自我救赎

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Blockchain_lemon/article/details/86513960

640?wx_fmt=gif

640?wx_fmt=jpeg


近来区块链领域最火热的话题莫过于以太坊君士坦丁堡硬分叉了。它就像2002年的第一场雪,虽来的晚了些,但终究还是来了。


以太坊的目标是做世界计算机,但自诞生以来其交易性能就一直是整个系统的瓶颈。为使以太坊能在更多数据驱动的业务场景中得到应用,一些新的技术和架构就被设计出来以改善目前以太坊的效率、吞吐率和并发性等问题。


今天营长就向你们介绍3种代表性技术:分片(Sharding)、雷电网络(Raiden Network)和下一代以太坊共识协议(Casper)。借助它们,姗姗来迟的君士坦丁堡之后,以太坊 2.0 会如期到来吗?



扫描二维码关注公众号,回复: 4989644 查看本文章

一、分片技术(Sharding)


在以太坊的发展过程中,有两个至关重要的节点:一个是PoW(工作量证明)向PoS(股权证明)的转换,另一个则是分片。分片旨在解决所有区块链面临的扩展性问题,并将在以太坊2.0实现。


在现阶段的以太坊中,所有的共识节点都存储着一个完整的区块链,即存储所有的交易状态和处理所有的交易,但是分片之后,每个节点只需要存储、处理一部分交易,从而解决区块链面临的扩展性问题。


虽然存储完整的区块链极大地保证了以太坊的安全,但是也限制了区块链的可扩展性,而且其庞大的存储数据可能会让绝大多数的普通用户望而止步。总体来说,分片的作用是让以太坊从网络上的每个节点都要验证每一笔交易的模式,转型到只需要小部分的节点来验证每一笔交易的模式,只要验证每笔交易的节点足够多,那么整个系统仍是高度安全的。


在了解以太坊分片技术之前,我们先回顾一些概念性知识(如已了解,可选择性跳过)


  • 状态:系统当前状态的信息集合。在以太坊中,状态数据包括账户余额、随机数、合约代码、存储数据。

  • 历史:自创世区块发布以来,按顺序记录在区块链中的所有交易记录。

  • 交易:用户发起的合理交易请求(也可以理解为用户想要执行的操作),最终会记录到区块中。

  • 状态转换方程:获取状态和交易并输出一个新状态的方程。涉及的计算包括减少和增加相关转账用户的账户余额、验证发起人的数字签名以及运行智能合约代码。

  • 收据:是交易的产物,它不存储到状态里,而是存储在Merkle树中,最终被提交到区块,在分片模型中,收据用来实现分片之间的异步通信。

  • 轻型客户端:一种对算力资源要求低的、与区块链互动的方法,轻型客户端默认只跟踪区块链的区块头,只在需要的情况下获取有关交易、状态或者收据的相关信息,并通过Merkle树加以验证。

  • 状态根:代表状态的Merkle树的散列根。


一般来说,所谓的分片是把状态分成K份。例如,一种分片方式是将所有以0x00开头的地址分到同一分片,所有以0x01开头的地址分到另一个分片,以此类推。很多分片的提议尝试都是在不对另一边做出改动的情况下单独对交易过程进行分片,或者单独对状态进行分片。这些方式可以一定程度缓解扩展性的问题,但是它还是无法实现在不迫使每个节点变成超级计算机的情况下实现每秒一万次以上的交易处理。


在以太坊基金会给出的分片建议中,将所有的分片进行编号——0到NUM_SHARDS-1,其中分片0简单地作为常规股权证明区块链,但分片1到NUM_SHARDS-1的工作机制有所不同。每个分片并行执行,分片i上的客户端只需要验证分片i上的交易。在每个时期的开始,随机挑选m名验证者(共识节点),这些验证者将在下一时期为分片交易进行验证(例如,n+1时期的验证者在n时期被分配)。


验证者的典型工作流程是维持分片0的一个“全节点”,并且保持追踪被分配给他们的未来分片,如果验证者被分配给了一个分片,他们将利用Merkle树验证下载状态,并且确保,当他们开始验证时,他们已经下载了相应的状态。对于该时期,他们作为该分片的验证者并且创建区块,同时,他们通过观测每个分片上的最长链、其他验证者的下注情况和在片区内试图达到51%成功攻击的各种二次启动方法和机制(如欺诈证明)在所有分片上下注。需要注意的是,验证者被分配到任何给定分片的概率与其累计的以太币呈正比。


关于以太坊区块链分片的基础设计,以太坊基金会提出了一个简单的方法:定义一些称为整理器(collators)的节点,它们接收分片k上的交易(整理器根据协议选择哪个分片作为k或者随机指定一些k)并创建归类(collations)。一个归类由归类头和交易列表组成,其中归类头包含分片ID、该分片的上一个状态根、归类中交易的Merkle树根、处理这些交易后的状态根以及签名该归类的整理器列表等信息。


分片模式下的区块链中,一个区块必须包含每一个分片的归类头,当具有如下情形时,该区块才有效:


  • 每个归类中给出的前一状态根必须与相关联分片的当前状态根匹配;

  • 归类中所有的交易都是有效的;

  • 归类中的后状态根与给定前一状态的归类中交易的执行结果相匹配;

  • 归类至少由在此分片中注册的整理器的2/3签名才有效。


分片的简单方案模型可以这样定义:共同网络中的,相互通信的,半独立的,可以并行处理的区块链组。在此情况下,每个用户维护一个拥有所有分片的轻型客户端,验证者完全下载并且追踪某个时间段分配给他们的几个分片。


在较简单的分片方式中,每个分片都包含它自己的交易历史,某个分片中的交易认证结果由该分片的状态决定。然而,一个交易的结果可能会受到发生在其他分片中的交易的影响,一个简单的例子是多资产区块链,其中有k个分片,每个分片存储余额并处理一个与特定资产相关联的交易,这样的话,交易结果不再受限于交易所在的分片,还与其他分片上的交易息息相关。


在更复杂的分片模型中,包括某种形式的跨片段通信能力,比如其中一个分片上的交易可以触发其他分片上的事件。最简单的例子是可以满足那些单独情况下没有特别多用户,但是偶尔会相互通信的应用。在这种情况下,应用可以在不同的分片中存在,通过跨分片收据进行分片间沟通。假如,分片M上的用户A向分片N上的用户B进行转账交易,转账金额为100以太币。具体过程如下图所示。


640?wx_fmt=png

跨分片通信过程


步骤如下:


  • 在分片M上发起一笔交易,从A的账户上扣除100以太币并且创建一个收据。

  • 等待第一个交易被打包(有时需要等待,这取决于网络的处理能力)。

  • 在分片N上发起一笔交易,交易包含从步骤1收到的Merkle树证明。该笔交易还检查分片N的状态,以确保此收据为未用,如果是,则将用户B的账户余额增加100以太币,并且保存在收据的消费状态中。

  • (可选)步骤3中的交易还保存着收据,该收据接下来可以用于执行分片M上的进一步动作,这些动作取决于随后的原始操作。


若不同类型的应用程序需要跨分片通信,可以用异步交互的方式来实现。比如,在分片A上的应用生成一个收据,分片B上的交易“使用”这个收据并执行一些相应的操作,也可能会向分片A返回一个“回调信息”。


比如飞机酒店问题的例子就可以用来描述跨分片交互。游客想订一张本周末飞往旅游景点的机票,并且希望在当天预定一间酒店,毫无疑问,预约要求要么同时成功要么同时失败,游客才会满意。可以把这两件事看成一个原子事务(不可分割)。


如果机票预订和酒店预订的应用程序在同一分片中,可以创建一个同时实现这两个预约的交易,并且设定除非两个预约同时成功,否则交易失败,返回到原来状态。


如果两个应用程序在不同的分片,通过异步通信机制,预约机票,然后预订酒店,等到两个预约都成功,再对两个预约进行确认。预定系统需要在一定的时间内防止其他任何人进行预订。然而,这意味着该模型依赖于额外的安全性假设:来自一个分片的跨分片通信信息能够被另一个分片在一定的时间内接收到。



二、雷电网络(Raiden Network)


雷电网络是一个基于以太坊的链下交易方案,用以解决以太坊中转账交易的速度、费用和隐私问题。雷电网络的设计源于比特币的闪电网络(Lightning Network),利用密码学方法实现可证明的安全链下支付网络。


不同于分片等致力于解决以太坊中所有交易的效率问题,雷电网络所解决的是用户账户之间的以太币的转账问题。下面我们介绍几个雷电网络的基本概念,来理解其工作原理。


1、通道


雷电网路中的通道是一个智能合约。对于经常需要相互转账的A和B来说,A可以在链上部署一个智能合约,然后A和B向合约中转入一定数额的以太币,相当于网络中有该数量的ETH锁定在该合约通道中,A和B也就可以在他们的通道中流通这些数量的以太币。


当A向B转账时,该交易无须全网广播,而是双方保留彼此签名的转账消息,无法伪造和抵赖。A和B可以通过此方法频繁交易。当交易结束后写入以太坊主链时,A或B只需把签名的转账消息提交到合约中,最终的以太币余额会按照线下转账记录来分配。


640?wx_fmt=png

通道


如上图,首先,A和B建立通道时在合约中锁定6个Token (A: 2个,B: 4个)。这样A和B之间就有6个Token可以互相转账。当B转账给A 3个Token的时候,B将这个新的对该通道中的资金的余额分配方案(A: 5个,B: 1个)用自己的私钥签名,并将签名后的消息发送给对方A。当A确认收到这条消息后,这笔转账就完成了。同理,当A需要向B转账时,只要把自己签名的余额证明发送给B就可以了。


不难发现,在任意时刻,A和B都会持有一份由对方签名的,对方最后一次转账后的余额分配情况。假设B想要关闭这个通道时,他需要在以太坊网络中调用智能合约并附上自己所持有的最后一份余额证明以关闭通道。在之后的一定时间内,A也可以在以太坊网络中调用智能合约并上传自己所持有的最后一份余额证明来更新余额分配状态。当关闭通道的请求被触发一定时间后,以太坊网络中的任何人都可以最终触发一个交易,将通道中的余额发还给A和B。


雷电网络的安全性保障在于通道中的任意一方所持有的余额证明都是由对方签名的,在假定密码学加密方法不能在合理的时间内被破解的前提下(这是所有区块链系统的基本假设),任何一方都无法伪造出一份对自己更有利的余额证明。


由于雷电网络通道中的转账全部发生在链下,在整个通道的生命周期中,只有常数次交易被广播到以太坊网络中,因此雷电网络通道中的转账无需等待以太坊的区块确认延迟也不会给以太坊网络造成任何的负担,转账时不需要支付以太坊网络中的Gas,网络上的其他用户也无法看到每次转账的细节而只能看到通道撤销时最后的资金分配情况,从而解决了双方转账的场景中的大部分速度、费用和隐私的问题。


2、网络


在更多的场景下,一笔转账交易的双方不一定经常进行交易往来。在这种情况下,每两人之间建立一个雷电网络通道肯定是不合适的。雷电网络通过散列锁的机制使得两个用户之间可以通过中间节点进行转账。


640?wx_fmt=png

网络


如上图,当A需要向D(和自己没有直接的雷电通道连接)转账时,D需要生成一个密钥,并且将这个密钥的散列值发送给A。之后,A和D之间找到一条雷电通道的连接路径A→B→C→D。路径中的每一级节点通过雷电通道向下一级节点发送一个带有散列锁的转账。


这种转账的含义是,当且仅当在一定时间内从下一级节点收到了散列值正确的密钥,这笔转账才会生效。当D收到C发来的带有散列锁的转账时,将自己的密钥发送给C以获得这一笔转账资金。同理,C将这个密钥发送给B以获得B的转账资金,B接着把密钥发送给A以获得A的转账资金。当A收到从B处发来的密钥时,这一笔转账就在雷电网络中完成了。


未来的雷电网络会有两种可能的形态:由熟人之间建立的通道连接的网络或是由一级或多级专门的中间节点连接的网络。后一种情况下的中间节点在资金流动中具有接近银行或交易所的职能。和现有的中心化的线下银行和交易所或是数字货币交易所不同的是,尽管雷电网络中的交易不具有区块链上交易可追溯历史的特性,但雷电网络中的交易是不可伪造的,因此雷电网络的使用者不需要信任任何一个中间节点就可以通过安全的链下交易机制进行低成本的转账。



三、下一代以太坊共识协议:Casper


由于消耗大量算力和电力已广为诟病。因此以太坊基金会一直在积极地推进使用PoS替代PoW作为共识协议。以太坊官方将它的PoS共识协议称为Casper,这个名称取自一部电影《Casper》 (鬼马小精灵)。


传统的PoW共识协议,本质是以算力作为“记账权”的背书,所以各个矿工节点都想尽办法增强自己的算力,以此增加自己获得记账权的概率。这样的目的一方面在于使得攻击者要付出巨大的算力才能造成51%攻击,二是能保证“记账权”能够公平、公正地分配。


但大量的算力消耗在计算没有实际意义的散列上,也对提高系统本身的性能没有帮助,既不环保,也不高效。Casper作为一种PoS共识协议,希望能摒弃PoW以算力做背书的弊端,采用“权益”(Stake,即以太币)为记账权背书。


以太坊的Casper最初的设想作为《以太坊紫皮书》的一部分,发布在2016年的Devcon 2大会。这份设想大致的思路是,将Casper的应用逻辑通过智能合约来实现,在这个合约中,记账权归属于“验证者”。任何拥有以太币的账户都可以在Casper合约中成为验证者,前提是必须要在Casper智能合约中抵押一定的以太币。


之后Casper合约通过一种随机方式,选出一个验证者集合。被选中的验证者集合按照一定顺序依次验证区块(当然也可以选择放弃),如果区块没有问题,就将其添加到区块链中,同时相应的验证者将会获得一笔与他们的抵押成比例的奖励。如果验证者不遵守合约规定的规则,合约就会没收他抵押的以太币作为惩罚。


因此,Casper作为PoS协议的一种实现方式,具有去中心化、高能效、经济安全等PoS协议的优点,除此之外,它还增强了以太坊的可扩展性,是从PoW到PoS的可靠过渡。接下来详细介绍一下Casper的这些特性。


  • 去中心化:相比于PoW机制下可能因为矿池集中所形成的算力集中,从而导致“富者愈富”的情况。在 Casper协议下,任何人的一美元的价值都是相同的,这样的好处是,你不能通过将资金汇集在一起,使得一美元值更多。

  • 高性能:Casper协议通过让挖矿完全虚拟化的方式解决了Ethash PoW协议下电力挖矿的资源消耗问题,极大地节省了电力资源。

  • 经济安全:“验证者不会自己杀死自己的钱”,正如以太坊创始人Vitalik Buterin所说的那样:“在PoS协议中,每个人都是矿工。因此,除非他们选择通过放弃使用以太币(Ether)来违反规则,否则他们每个人都必须承担确认和验证交易的责任”。假设你是一个验证者,并且你将你自己的钱作为保证金存入网络,以最大化网络利益的方式行事也就是在保护自己的利益,在这种约束下,以太坊的网络经济安全性被极大地保证。

  • 扩展性好:Casper协议可以提高以太坊扩展性的最显而易见的方式是允许分片,通过分片,以太坊的扩展性相比于PoW机制得到了很大的提高。


在以太坊的升级计划中,为完成从PoW协议到PoS协议的过渡,以太坊团队正在研究两种不同的方式,它们都能实现Casper协议:


  • Casper FFG(Casper the Friendly FinalityGadget),也叫Vitaliks Casper;

  • Casper CBC(Casper Construction by Correction),也叫Vlads Casper。


尽管是两种不同且独立的实现方式,但是它们的目的是一样的:将以太坊的共识机制转换成PoS协议。下面将分别来介绍这两种不同的Casper协议。


1、Casper FFG


Casper FFG是一种PoW/PoS混合的共识机制。简单来说,使用Casper FFG共识机制的同时,区块的产生依然依靠Ethash PoW算法,但是每隔50个区块就会有一个“检查点”(checkpoint)。这个检查点是基于PoS产生的,以太坊中的验证者会通过投票来评估“检查点”的最终确定性。


每50个块片段就称之为周期(epoch),一周期结尾的检查点,需要在下个周期才能完成“敲定”(finalized),也就是需要两轮投票。例如,当大多数的验证者(超过2/3)投票给了检查点a,那么就说这个检查点已经被“审判”了。在下一个周期内,给检查点b投票,而且检查点b是接在检查点a之后的,那么对检查点b的投票,就意味着对检查点a的确定。如果检查点b收到了大多数验证者的投票,检查点a就被“敲定”了。

640?wx_fmt=png

Casper FFG对检查点的敲定

对于投票的验证者,如果他所投的检查点被敲定,那么就可以获得奖励。FFG的混合设计让原本基于PoW的以太坊的更新变得相对容易,毕竟相对于直接用PoS取代PoW的做法,它是一种更保守的方法,更易于被接受。


2、Casper CBC


Casper CBC协议设计方法是:在开始时部分地指定协议:协议的剩余部分由能满足所需或必需属性的创建方式导出。简而言之,CBC是动态地推导出来的。


在这种情况下,能够导出完整协议的一种方法是去实现一个可能安全的数据库,这种方法要么能指出一个合理估计的漏洞,要么能列举未来可能出现的错误估计。更具体来说,CBC的工作侧重于协议设计,它能够更全面地完成对某个节点的安全性估计,以此来保证共识机制的安全性。CBC着重于通过构造的方式,导出来自第一原则的安全性证明的方法。


两种方式谁优谁劣,短期内不好评价,但是可以看到的是,以太坊开发者团队一直在努力地开发这两个Casper项目。很明显,这不会是最终版本,但不管最终版本是什么,它肯定会受到FFG和CBC的影响。


以太坊的救赎之路还要走多久?君士坦丁堡之后会有怎样的表现?以太坊2.0何时才来?我们一起期待!


 640?wx_fmt=gif


本文节选自《以太坊技术详解与实战》,在不改变愿意的情况下,营长做了简单的修改。


本期话题:如何看待即将到来的君士坦丁堡硬分叉?它会如何影响以太坊?请在文末积极留言,请说出你的理由(不少于50字)。


留言点赞数前3名的读者免费获得纸质书籍一本。截止时间1月18日(本周五)下午2点。或点击“阅读原文”,进行在线购买,价格也很划算哟!


蚂蚁金服区块链总监闫莺主笔,以太坊创始人V神倾力推荐

这本技术丛书不容错过哟!

640?wx_fmt=jpeg

感谢机械工业出版社华章公司大力赞助


— END —


推荐阅读:



点击“阅读原文”,了解更多图书详情!


好文!必须点好看

猜你喜欢

转载自blog.csdn.net/Blockchain_lemon/article/details/86513960