社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  区块链

HyperLedger的共识之区块链数据结构

Unitimes • 7 年前 • 269 次点击  

unitimes.media

全球视角,独到见解


“本文将详细阐述区块链数据结构,希望对大家有所帮助。”



区块链包含3种数据结构:a) 原始总账(raw ledger),b) 区块链状态(blockchain state),c) 已验证总账(validated ledger)。区块链状态和已验证总账是为了效率维护的,它们都可以从原始总账导出来。


· 原始总账(Raw ledger (RL))。原始总账包含了Peer节点的共识服务输出的所有数据。它是deliver(seqno, prevhash, blob)事件的序列,计算prevhash后组成了一个哈希链,前面已经介绍过。原始总账包含了有效的和无效的交易,能够提供系统操作过程中出现过的所有成功和不成功的状态更新、改变状态的尝试等可验证的历史记录。


原始总账允许重放Peer节点所有交易的历史并重建区块链状态(见下文)。它还给请求节点提供了的无效的(未提交的)交易的信息,基于这个信息请求节点的操作已经在第2.5部分描述过了。


· 区块链状态((Blockchain) state)。状态是Peer节点维护的(KVS的形式),它是可以从原始总账中通过过滤掉无效交易导出来,然后更新有效交易到状态上(对stateUpdate里的每个(k,v),都执行一下put(k,v),或者执行相对上一个状态的增量)。


就是说,有了共识保证,所有的正常Peer节点都能收到相同顺序的deliver(seqno, prevhash, blob)事件。因为对背书策略和状态更新版本依赖的计算方法都是确定的,所有的正常Peer节点都能确定blob里面的交易是否是有效的。因而,所有Peer节点都是以相同的方式提交、采用同样的交易序列并更新它们的状态。


· 已验证总账(Validated ledger (VL))。为了维护只包含有效的和提交的交易(比如,比特币里面有),除了状态和原始总账,Peer节点还维护了已验证总账。这是从原始总账中过滤掉无效交易后形成的哈希链。

批量处理和块信息


共识服务应该批量输出blobs,而不是输出单个的交易(blobs)。这种情况下,共识服务必须要利用并告知每个批块里确定性的交易顺序。每个批块(batch)里交易的数量是共识实现动态选择的。


共识的批量处理不会影响原始总账的构建,原始总账仍然是交易的哈希链。和输出单个交易不同的是,原始总账变成了批块的哈希链而不是单个交易的哈希链。


批量处理时,已验证总账(可选的)区块的构建过程是这样的:因为原始总账里可能包含无效的交易(即,无效背书的交易或者无效版本依赖的交易),Peer节点会先过滤掉这些交易再交付给区块。每个Peer节点都是自己独自完成这个过程的。一个区块就是过滤掉无效交易后的共识批块。这些块的大小是可以动态调整的,也可能是空的。图2是区块构建的图解。


图 2. 从原始总账批量到已验证总账图解

区块形成链


跟第1.3.3部分描述的一样,共识服务输出原始总账的批块后组成了一个哈希链。


每个Peer节点都会把已验证区块链成一个哈希链。一个批处理有效的和提交的交易形成一个区块,所有的区块链在一起形成一个哈希链。


具体来说,每个已验证总账包含:


· 前面一个区块的哈希


· 区块号


· 从上一个区块形成之后Peer节点提交的所有有效交易的有序列表(即,相应批块的有效交易列表)


· 产生当前区块的相应批块的哈希


Peer节点会把所有的信息连接在一起并计算哈希,得出已验证总账里区块的哈希。

 

作者:Elli Androulaki, Christian Cachin, Angelo De Caro, Konstantinos Christidis, Chet Murthy, Binh Nguyen, Alessandro Sorniotti, and Marko Vukolić


翻译:梧桐树


原文:

https://github.com/hyperledger/fabric/blob/master/proposals/r1/Next-Consensus-Architecture-Proposal.md


著权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


【本文版权属于unitimes,转载请保留版权信息。未经授权,不得以任何方式加以使用,包括转载、摘编、复制或建立镜像。Unitimes将追究侵权者的法律责任。合作或授权请联系contact@unitimes.media或添加微信unitimes2017】

国际金融科技新媒体和社区平台

UNITIMES

网址 : unitimes.media

新浪微博:@Unitimes



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/WCtYzQqjir
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/11258
 
269 次点击