第2 章 区块链架构
会当凌绝顶 一览众山小
正如开篇所言:会当凌绝顶,一览众山小。进入区块链底层开发前,我们需要
了解区块链底层的通用架构是如何设计的,从上而下地审视区块链底层的结构,做
到了然于胸,才能胸有成竹。
他山之石,可以攻玉。在介绍区块链底层通用架构之前,我们不妨先从比特币、
以太坊、Hyperledger 的架构解读开始。
2.1 比特币架构
根据中本聪的论文“Bitcoin: A Peer-to-Peer Electronic Cash System”中对比特币
系统的描述,我们可以整理出如图2-1 所示的比特币系统架构。
图2-1 比特币系统架构
如图2-1 所示,比特币系统分为6 层,由下至上依次是存储层、数据层、网络层、
共识层、RPC 层、应用层。
其中,存储层主要用于存储比特币系统运行中的日志数据及区块链元数据,存
储技术主要使用文件系统和LevelDB。
数据层主要用于处理比特币交易中的各类数据,如将数据打包成区块,将区块
维护成链式结构,区块中内容的加密与哈希计算,区块内容的数字签名及增加时间
戳印记,将交易数据构建成Merkle 树,并计算Merkle 树根节点的哈希值等。
区块构成的链有可能分叉,在比特币系统中,节点始终都将最长的链条视为正
确的链条,并持续在其后增加新的区块。
网络层用于构建比特币底层的P2P 网络,支持多节点动态加入和离开,对网络
连接进行有效管理,为比特币数据传输和共识达成提供基础网络支持服务。
共识层主要采用了PoW(Proof Of Work)共识算法。在比特币系统中,每个节
点都不断地计算一个随机数(Nonce),直到找到符合要求的随机数为止。在一定
的时间段内,第一个找到符合条件的随机数将得到打包区块的权利,这构建了一
个工作量证明机制。从PoW 的角度,是不是发现PoW 和分布式锁有异曲同工之
妙呢?
RPC 层实现了RPC 服务,并提供JSON API 供客户端访问区块链底层服务。
应用层主要承载各种比特币的应用,如比特币开源代码中提供了bitcoin client。
该层主要是作为RPC 客户端,通过JSON API 与bitcoin 底层交互。除此之外,比特
币钱包及衍生应用都架设在应用层上。
2.2 以太坊架构
根据以太坊白皮书A Next-Generation Smart Contract and Decentralized
Application Platform 的描述,以太坊架构如图2-2 所示。
如图2-2 所示,以太坊架构分为7 层,由下至上依次是存储层、数据层、网络层、
协议层、共识层、合约层、应用层。
其中存储层主要用于存储以太坊系统运行中的日志数据及区块链元数据,存储
技术主要使用文件系统和LevelDB。
数据层主要用于处理以太坊交易中的各类数据,如将数据打包成区块,将区块
维护成链式结构,区块中内容的加密与哈希计算,区块内容的数字签名及增加时间
戳印记,将交易数据构建成Merkle 树,并计算Merkle 树根节点的hash 值等。
与比特币的不同之处在于以太坊引入了交易和交易池的概念。交易指的是一个
账户向另一个账户发送被签名的数据包的过程。而交易池则存放通过节点验证的交
易,这些交易会放在矿工挖出的新区块里。
以太坊的Event(事件)指的是和以太坊虚拟机提供的日志接口,当事件被调用
时,对应的日志信息被保存在日志文件中。
与比特币一样,以太坊的系统也是基于P2P 网络的,在网络中每个节点既有客
户端角色,又有服务端角色。
协议层是以太坊提供的供系统各模块相互调用的协议支持,主要有HTTP、RPC
协议、LES、ETH 协议、Whipser 协议等。
以太坊基于HTTP Client 实现了对HTTP 的支持,实现了GET、POST 等HTTP
方法。外部程序通过JSON RPC 调用以太坊的API 时需通过RPC(远程过程调用)
协议。
Whisper 协议用于DApp 间通信。
LES 的全称是轻量级以太坊子协议(Light Ethereum Sub-protocol),允许以太坊
节点同步获取区块时仅下载区块的头部,在需要时再获取区块的其他部分。
共识层在以太坊系统中有PoW(Proof of Work)和PoS(Proof of Stake)两种共
识算法。
合约层分为两层,底层是EVM(Ethereum Virtual Machine,即以太坊虚拟机),
上层的智能合约运行在EVM 中。智能合约是运行在以太坊上的代码的统称,一个智
能合约往往包含数据和代码两部分。智能合约系统将约定或合同代码化,由特定事
件驱动触发执行。因此,在原理上适用于对安全性、信任性、长期性的约定或合同
场景。在以太坊系统中,智能合约的默认编程语言是Solidity,一般学过 JavaScript
语言的读者很容易上手Solidity。
应用层有DApp(Decentralized Application,分布式应用)、以太坊钱包等多种衍
生应用,是目前开发者最活跃的一层。
2.3 Hyperledger 架构
超级账本(Hyperledger)是Linux 基金会于2015 年发起的推进区块链数字技术
和交易验证的开源项目,该项目的目标是推进区块链及分布式记账系统的跨行业发
展与协作。
目前该项目最著名的子项目是Fabric,由IBM 主导开发。按官方网站描述,
Hyperledger Fabric 是分布式记账解决方案的平台,以模块化体系结构为基础,提供
高度的弹性、灵活性和可扩展性。它旨在支持不同组件的可插拔实现,并适应整个
经济生态系统中存在的复杂性。
Hyperledger Fabric 提供了一种独特的弹性和可扩展的体系结构,使其不同于其
他区块链解决方案。我们必须在经过充分审查的开源架构之上对区块链企业的未来
进行规划。超级账本是企业级应用快速构建的起点。
目前,Hyperledger Fabric 经历了两大版本架构的迭代,分别是0.6 版和1.0 版。
其中,0.6 版的架构相对简单,Peer 节点集众多功能于一身,模块化和可拓展性较差。
1.0 版对0.6 版的Peer 节点功能进行了模块化分解。目前最新的1.1 版本处于Alpha
阶段。
在1.0 版中,Peer 节点可分为peers 节点和orderers 节点。peers 节点用于维护状
态(State)和账本(Ledger),orderers 节点负责对账本中的各条交易达成共识。
系统中还引入了认证节点(Endorsing Peers),认证节点是一类特殊的peers 节点,
负责同时执行链码(Chaincode)和交易的认证(Endorsing Transactions)。
Hyperledger Fabric 的分层架构设计如图2-3 所示。
Hyperledger Fabric 可以分为7 层,分别是存储层、数据层、通道层、网络层、
共识层、合约层、应用层。
其中存储层主要对账本和交易状态进行存储。账本状态存储在数据库中,存储
的内容是所有交易过程中出现的键值对信息。比如,在交易处理过程中,调用链码
执行交易可以改变状态数据。状态存储的数据库可以使用 LevelDB 或者 CouchDB。
LevelDB 是系统默认的内置的数据库,CouchDB 是可选的第三方数据库。区块链的
账本则在文件系统中保存。
数据层主要由交易(Transaction)、状态(State)和账本(Ledger)三部分组成。
其中,交易有两种类型:
部署交易:以程序作为参数来创建新的交易。部署交易成功执行后, 链码就
被安装到区块链上。
调用交易:在上一步部署好的链码上执行操作。链码执行特定的函数,这
个函数可能会修改状态数据,并返回结果。
状态对应了交易数据的变化。在Hyperledger Fabric 中,区块链的状态是版本化
的,用 key/value store(KVS)表示。其中key 是名字,value 是任意的文本内容,版
本号标识这条记录的版本。这些数据内容由链码通过PUT 和GET 操作来管理。如存
储层的描述,状态是持久化存储到数据库的,对状态的更新是被文件系统记录的。
账本提供了所有成功状态数据的改变及不成功的尝试改变的历史。
账本是由Ordering Service 构建的一个完全有序的交易块组成的区块哈希链
(Hash Chain)。
账本既可以存储在所有的peers 节点上,又可以选择存储在几个orderers 节点上。
此外,账本允许重做所有交易的历史记录,并且重建状态数据。
通道层指的是通道(Channel),通道是一种Hyperledger Fabric 数据隔离机制,
用于保证交易信息只有交易参与方可见。每个通道都是一个独立的区块链,因此多
个用户可以共用同一个区块链系统,而不用担心信息泄漏问题。
网络层用于给区块链网络中各个通信节点提供P2P 网络支持,是保障区块链账
本一致性的基础服务之一。
在Hyperledger Fabric 中,Node 是区块链的通信实体。Node 仅仅是一个逻辑上
的功能,多个不同类型的Node 可以运行在同一个物理服务器中。Node 有三种类型,
分别是客户端、peers 节点和Ordering Service。
其中,客户端用于把用户的交易请求发送到区块链网络中。
peers 节点负责维护区块链账本,peers 节点可以分为endoring peers 和committing
peers 两种。endoring peers 为交易作认证,认证的逻辑包含验证交易的有效性,并对
交易进行签名;committing peers 接收打包好的区块,并写入区块链中。与Node 类似,
peers 节点也是逻辑概念,endoring peers 和committing peers 可以同时部署在一台物
理机上。
Ordering Service 会接收交易信息,并将其排序后打包成区块,然后,写入区块
链中,最后将结果返回给committing peers。
共识层基于Kafka、SBTF 等共识算法实现。Hyperledger Fabric 利用Kafka 对交
易信息进行排序处理,提供高吞吐、低延时的处理能力,并且在集群内部支持节点
故障容错。相比于Kafka,SBFT(简单拜占庭算法)能提供更加可靠的排序算法,
包括容忍节点故障以及一定数量的恶意节点。
合约层是Hyperledger Fabric 的智能合约层Blockchain,Blockchain 默认由Go 语
言实现。Blockchain 运行的程序叫作链码,持有状态和账本数据,并负责执行交易。
在Hyperledger Fabric 中,只有被认可的交易才能被提交。而交易是对链码上的操作
的调用,因此链码是核心内容。同时还有一类称之为系统链码的特殊链码,用于管
理函数和参数。
应用层是Hyperledger Fabric 的各个应用程序。
此外,既然是联盟链,在Hyperledger Fabric 中还有一个模块专门用于对联盟内
的成员进行管理,即Membership Service Provider(MSP),MSP 用于管理成员认证
信息,为客户端和peers 节点提供成员授权服务。
相关推荐
JAVA区块链项目实战视频课程分享下载,完整版,提供源码! 全国首套,基于java的区块链实战教程。目的是让更多的java编程者了解区块链,掌握区块链开发。
2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。...
区块链底层平台测评方案,内容经典,分享学习,请需要的同学下载,谢谢。
国内第一套以java语言讲解区块链原理的教程,包含实际项目和代码。让java从业人员,快速了解区块链和区块链原理。
用Java编写第一个区块链,带你认识区块链的技术原理与关键技术点。
Java开发本科毕业设计基于区块链技术开发考勤系统源代码Java开发本科毕业设计基于区块链技术开发考勤系统源代码Java开发本科毕业设计基于区块链技术开发考勤系统源代码Java开发本科毕业设计基于区块链技术开发考勤...
区块链应用架构思考 区块链应用架构思考 区块链应用架构思考 区块链应用架构思考 区块链应用架构思考 区块链应用架构思考
课程分享——JAVA区块链项目实战视频教程,非常不错的一套课程,欢迎大家下载学习。
【作品名称】:基于java实现的简单区块链(JAVA实现) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:基于java实现的...
XuperCore项目是一个以C++为主要编程语言的模块化设计高性能区块链底层框架源码,集成了Go、C、Shell、Java、JavaScript、Python等语言编写组件,共计1707个文件,其中Go语言文件占比最高,达到1184个。该框架旨在...
详细讲解区块链架构所有环节内容,LookBC.com 区块链技术社区 发布
一种基于区块链的物联网架构设计.docx
第二章 引导未来:区块链经济七大设计原则 第二篇 转型 第三章 重塑金融服务形象:从赚钱机器变成致富平台 第四章 重新设计公司的架构: 核心与边缘 第五章 新商业模式:在区块链上寻找新机会 第六章 万物账本:物理...
通过对Bitcoin,Ethereum,Fabric的技术原理分析,自底而上的介绍区块链底层技术原理。
区块链架构与应用
区块链 参考架构2017 33概述 431本标准的约定 432参考架构的作川 44今考架构概览 5:ll!K块链参考架构的架构视图 542区块链用户视图 613区块链功能视图 844川户视图和功能视图之间关系 45川户视图与)L同关注点以及...
Java 实现区块链,通过一个详细的例子,一步步说明区块链的概念和java 实现的方法。
2018年秋季学期全国率先开课:《区块链应用技术》,目前已完成第一学期的课程,课程分为12章。