区块链原理分析——区块链体系架构

        区块链平台虽然各有不同,但是整体架构上存在着许多共性,整体上可以划分为5个层次——网络层、共识层、数据层、智能合约层和应用层五个层次。如下图所示:
 
         区块链原理分析——区块链体系架构_第1张图片
 

一、网络层

    早在2001年,就有提出将P2P技术与数据库系统进行联合研究的想法,但是不能适应网络变化而查询到完整的结果集,因而不能适用企业级应用。而基于P2P的区块链则可实现数字资产交易类的金融应用,区块链网络中没有中心节点,任一两个节点间可以进行直接通信,任何时刻任一节点也可以自由加入或退出网络,因此,区块链平台通常选择完全分布式且可容忍单点故障的P2P协议作为网络传输协议。
 
    区块链网络的P2P协议主要用于节点间传输交易数据和区块数据,比特币和以太坊的P2P协议基于TCP协议实现,Hyperledger Fabric的P2P协议则基于HTTP/2协议实现,在区块链网络中,节点时刻监听网络中广播的数据,当接收到邻居节点发来的新交易和新区块时,首先会进行验证,验证诸如数字签名和工作量证明是否有效,只有通过验证的交易和区块才会被处理和转发。
 

二、共识层

    分布式数据库主要采用Paxos和Raft算法解决分布式一致性问题,这些数据库由单一机构管理维护,所有节点均是可信的,算法只需支持崩溃容错。而去中心化的区块链由多方共同管理维护,其网络节点可由任何一方提供,因此部分节点可能不可信,因而需要支持更为复杂的 拜占庭容错。假设在总共n个节点的网络中至多包含f 个不可信节点,对于同步通讯且可靠的网络而言,拜占庭将军问题能够在n>=3f+1的条件下被解决。而如果是异步通讯,则被证明确定性的共识机制无法容忍任何节点失效。为了解决拜占庭容错问题,提出了诸如基于权重的解法。
    为了解决节点自由进出可能带来的女巫攻击问题,比特币应用了工作量证明(ProofofWork,PoW)机制。挖矿的过程就是工作量证明的一种形式,即花费一定时间解决一个数学问题,一次获得打包权。
 

三、数据层

    比特币、以太坊和Hyperledger Fabric在区块链数据结构、数据模型和数据存储方面各有特色。
    在数据结构设计上,现有区块链设计了基于文档时间戳的数字公证服务以证明各类电子文档的创建时间。时间戳服务器对新建文档、当前时间及指向之前文档签名进行签名,如此形成一个基于时间戳的证书链,该链反映了文件创建的先后顺序,且链中的时间戳无法篡改。
    区块链中 每个区块包含区块头和区块体两个部分,区块体存放批量交易数据,区块头存放Merkle根、前块hash、时间戳等数据。基于块内交易数据哈希生成的Merkle根实现了块内交易数据的不可篡改性与简单支付验证;基于前一区块内容生成哈希将孤立的区块链接在一起,形成区块链;时间戳表明了该区块的生成时间。比特币的区块头还包括难度目标、Nonce等数据,一直吃PoW共识机制中的挖矿运算。
    在数据模型设计上,比特币采用了基于交易的数据模型。每笔交易由表明交易来源的输入和表明交易去向的输出组成,所有交易通过输入与输出链接在一起,使得每一笔交易都可追溯;而以太坊和Hyperledger Fabric需要支持丰富的通用应用,因此采用了基于账户的模型,可基于账户快速查询到当前余额或状态。
    在数据存储设计上,因为区块链的数据类似于传统数据库的预写日志,因此通常按日志文件格式存储;由于系统需要大量基于哈希的键值检索,索引数据和状态数据通常存储在Key-Value数据库,比如比特币、以太坊和Hyperledger Fabric都以LevelDB数据库存储索引数据。
 

四、智能合约层

    智能合约是一种用算法和程序编制来编制合同条款,部署在区块链上且可按照规则自动执行的数字化协议。比特币脚本是嵌在比特币交易上的一组指令,实现功能有限,其只能作为智能合约的雏形。以太坊提供了图灵完备的脚本语言Solidarity、Serpent与沙盒环境EVM,以供用户编写和运行智能合约。而Hyperledger Fabric选用Docker作为沙盒环境,Docker容器中带有一组经过签名的基础磁盘映射即Go和Java语言运行时和SDK。
 

五、应用层

    目前主流的应用还是以数字货币交易为主,同时也存在去中心化应用。
 
 
 
 
 
 
 
参考文献:
1,区块链技术:架构及进展     ——《计算机学报》
 
 
 
 
 
 

你可能感兴趣的:(区块链)