第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实战》之第二章区块链架构相关推荐

  1. 《区块链底层设计Java实战》之第三章密码学

    第3 章 密码学 九层之台,起于累土  千里之行,始于足下 第3 章 密码学 ............................................................. ...

  2. 《分布式服务架构:原理、设计与实战》第二章彻底解决分布式系统一致性的问题...

    2019独角兽企业重金招聘Python工程师标准>>> 1.什么是一致性 一致性指分布式服务化系统之间的弱一致性,包括应用系统的一致性和数据的一致性.无论是水平拆分还是垂直拆分,都解 ...

  3. BlockChain:《区块链技术在医疗领域应用分析》—中投顾问《2016-2020年区块链技术深度调研及投资前景预测报告》听课笔记

    BlockChain:<区块链技术在医疗领域应用分析>听课笔记 导读      医疗行业接纳区块链技术的时间相对来说比较晚,不过并没错过应用区块链的时机.区块链技术正在改变全球医疗行业,逐 ...

  4. 英国维珍集团采用区块链技术升级理财应用;美国庄臣公司在印尼开设区块链奖励回收中心

    编辑 | 熵链观察 今日要闻 英国维珍集团采用区块链技术升级理财应用: 工行已在贵州启动脱贫基金区块链管理平台: 四川省用区块链打造房屋租赁平台: 瑞典央行将于2019年试行国家加密货币: 京东冷链通 ...

  5. 区块链技术六大核心算法,读懂六大核心算法就变成区块链专家

    区块链技术六大核心算法,读懂六大核心算法就变成区块链专家 近日,在加密货币经历"混乱时期"后,区块链再次火爆起来,受到了各方的极大关注与重视,成为资本市场和各领域关注的焦点,就连朋 ...

  6. 基于区块链技术的超级账本(Hyperledger) - 从理论到实战

    什么是区块链?简单来说区块链就是一个分布式的记账本,或者分布式的数据库. 区块链的数据结构是一个链表,交易数据被存储到链表的区块中,区块链的第一个区块叫创世区块,除了创世块以外,每个区块还包含前一个区 ...

  7. 我国区块链技术发展仍处于早期发展阶段 要建设国产自主可控的联盟链

    浙江大学区块链研究中心常务副主任.浙江省区块链技术研究院院长蔡亮近日接受中国证券报记者专访时表示,当下区块链产业应用领域进一步扩展深化,行业应用价值开始凸显.随着区块链初步满足应用需求,软硬件一体化. ...

  8. 区块链技术解决投行电子底稿监管痛点 中国证券业协会在“中证链”发布首个应用

    区块链作为一项新兴技术,其价值正得到普遍认可.并且在诸多领域都有应用潜力,其中金融领域因具备参与者之间信任度低.交易记录安全性和完备性要求高的特点,与区块链天然契合.而证券行业作为金融体系的重要组成, ...

  9. 区块链技术下的反向保理业务模式设计

    一.前言 反向保理是指以买方(核心企业)作为申请人发起的保理模式,通过核心企业的信用,为中小企业提供更多的融资机会.金融(保理)机构在开展反向保理业务时遇到的问题主要是不清楚核心企业的目的,部分强势核 ...

最新文章

  1. 2022-2028年中国地沟油制生物柴油行业市场研究及前瞻分析报告
  2. php.ini mysql扩展_PHP安装mysql.so扩展及相关PHP.ini 配置参数说明
  3. plotplay恢复默认设置_PotPlayer如何调整常用设置?PotPlayer调整常用设置的方法步骤...
  4. Socket通信客户端设计(Java)
  5. 第1-2讲 初识SLAM
  6. eclipse导包导不进来
  7. Hadoop1.x HDFS系统架构
  8. python计算器gui设计_python 实现简单的计算器(gui界面)
  9. TSP_旅行商问题 - 遗传算法(四)
  10. MAC恢复出厂设置(官方教程)
  11. 白盒测试---讲解(1)
  12. Docker-Windows安装、升级、卸载
  13. c语言(http://c.biancheng.net/view/1714.html)
  14. 下血本买的!Android开发者出路在哪?先收藏了
  15. 离线三维地球安卓解决方案
  16. 浅谈oracle树状结构层级查询测试数据
  17. 三台linux虚拟机免密登录
  18. 计算机相关知识培训新闻稿,不忘初心 磨砺自我 ——计算机学院团委培训顺利进行...
  19. 系统提测测试阶段准入准出要求
  20. “乳”字的另一个含义

热门文章

  1. 禾川HCQ ModBUS+485主从站调试
  2. leetcode 219
  3. 【C++程序】[新手向]控制台打字机输出特效
  4. TSMaster诊断功能的典型应用
  5. mahout 推荐算法 java_Mahout之推荐算法基本实例
  6. 邱关源电路复习【part1】
  7. Php 线性 非线性,什么是线性函数与非线性函数?
  8. 计算机专业大学生该买什么配置的电脑,大学生适合买什么配置的电脑?
  9. 连接网络设备的交叉线和直通线的区别
  10. python水浒传名字次数_梁山上,小李广的“小”是什么意思?“病关索”是生病的关索?...