你知道比特币、以太坊、联盟链等区块链系统架构形式吗?
imToken 是一款全球领先的区块链数字资产管理工具[ZB],帮助你安全管理BTC, ETH, ATOM, EOS, TRX, CKB, BCH, LTC, DOT, KSM, FIL, XTZ 资产,同时支持去中心化币币兑换功能 ...
有些人想进入区块链底层开发,但是不知道区块链底层的一般架构是怎样设计的,今天我们就通过这篇文章来了解一下区块链底层的一般架构形式是什么样的。
在介绍区块链底层总体架构之前,我们不妨先对比特币、以太坊等区块链的架构进行解读。
比特币架构
根据中本聪论文《点对点现金》中对比特币系统的描述,我们可以梳理出比特币的系统架构如下图所示。
比特币系统架构
如图所示,比特币系统分为6层,从下到上分别为:存储层、数据层、网络层、共识层、RPC层、应用层。
其中,存储层主要用于存储比特币系统运行中的日志数据和区块链元数据,存储技术主要采用文件系统和。
数据层主要用于处理比特币交易中的各类数据,如将数据打包成区块、将区块维护成链式结构、对区块中的内容进行加密和哈希处理、对区块内容进行数字签名并添加时间戳、将交易数据构建成树并计算树根节点的哈希值等。
由区块组成的链可能会出现分叉,在比特币系统中,节点始终将最长的链视为正确的链,并不断向其添加新的区块。
网络层用于构建比特币底层P2P网络,支持多节点动态加入和离开,有效管理网络连接,为比特币数据传输和共识提供基础网络支撑服务。
共识层主要采用 PoW(Proof Of Work)共识算法。在比特币系统中,每个节点不断计算随机数(Nonce),直到找到一个符合要求的随机数。在一定时间内,第一个满足条件的随机数将获得打包区块的权利,这就构建了一个工作量证明机制。从 PoW 的角度来看,你是否发现 PoW 和分布式锁有异曲同工之妙?
RPC层实现RPC服务,并提供JSON API供客户端访问底层区块链服务。
应用层主要承载各种比特币应用,比如比特币开源代码中提供的应用。该层主要作为RPC客户端,通过JSON API与底层交互。另外,比特币钱包以及衍生应用等都构建在应用层之上。
以太坊架构
根据以太坊白皮书《A Next-Smart and 》中的描述,以太坊架构如下图所示。
以太坊架构
如图所示,以太坊架构分为7层,从下到上分别为:存储层、数据层、网络层、协议层、共识层、合约层、应用层。
存储层主要用于存储以太坊系统运行中的日志数据和区块链元数据,存储技术主要采用文件系统和。
数据层主要用于处理以太坊交易中的各类数据,如将数据打包成区块、将区块维护成链式结构、对区块中的内容进行加密和哈希处理、对区块内容进行数字签名并添加时间戳、将交易数据构建成树并计算树根节点的哈希值等。
与比特币不同的是,以太坊引入了交易和交易池的概念。交易是指一个账户向另一个账户发送签名数据包的过程。交易池中存储的是已经被节点验证过的交易,这些交易会被放入矿工挖出的新区块中。
以太坊事件( Event)是指以太坊虚拟机提供的日志接口,当有事件被调用时,会将相应的日志信息保存在日志文件中。
与比特币一样,以太坊系统也是基于P2P网络,其中每个节点既具有客户端角色,又具有服务器角色。
协议层是以太坊为系统各个模块互相调用提供的协议支持,主要包括HTTP、RPC协议、LES、ETH协议、协议等。
以太坊在HTTP基础上实现了对HTTP的支持,实现了GET、POST等HTTP方法,外部程序通过JSON RPC调用以太坊的API时,必须经过RPC( Call,远程过程调用)协议。
该协议用于DApp之间的通信。
LES的全称是轻量级以太坊子协议( Sub-),该协议允许以太坊节点在同步获取区块时只下载区块头,在需要的时候再获取区块的其他部分。
以太坊系统中的共识层有两种共识算法:PoW(Proof of Work,工作量证明)和PoS(Proof of Stake,权益证明)。
合约层分为两层,底层为EVM(以太坊虚拟机),上层智能合约运行在EVM中。智能合约是运行在以太坊上的代码的统称。智能合约往往包含数据和代码两部分。智能合约系统将协议或合约进行编码,通过特定事件触发执行。因此,原则上适用于对安全性、信任性、长期性有要求的协议或合约场景。在以太坊系统中,智能合约默认的编程语言为,对于一般学过该语言的读者来说,很容易上手。
应用层包括DApp(分布式应用程序)、以太坊钱包以及其他衍生应用,目前是开发者最活跃的层。
建筑学
()是Linux基金会于2015年发起的一个开源项目,旨在推动区块链数字技术和交易验证。该项目的目标是促进区块链和分布式记账系统的跨行业发展与协作。
该项目最著名的子项目是,由IBM开发。根据官方网站介绍,它是一个分布式会计解决方案平台,基于模块化架构,提供高弹性、灵活性和可扩展性。它旨在支持不同组件的可插拔实现,适应整个经济生态系统中存在的复杂性。
它提供了独特的弹性和可扩展架构,使其有别于其他区块链解决方案。我们必须在备受好评的开源架构上规划区块链企业的未来。 是快速构建企业级应用的起点。
目前经历了两次大的版本架构迭代,分别是0.6版本、1.0版本。其中0.6版本架构比较简单,Peer节点集多种功能于一身,模块化、扩展性较差。1.0版本将0.6版本的Peer节点功能进行了模块化。最新的1.1版本目前处于Alpha阶段。
在1.0版本中,Peer节点又可以分为peer节点和node节点,Peer节点用于维护状态和账本,node节点负责对账本中每一笔交易达成共识。
系统还引入了认证节点(Peers),它是一种特殊类型的对等节点,负责执行链码()和交易认证()。
分层架构设计如下图所示。
分层架构设计
其可分为7层,分别为存储层、数据层、通道层、网络层、共识层、合约层、应用层。
存储层主要存储账本和交易状态。账本状态存储在数据库中,存储的内容是所有交易过程中出现的键值对信息。例如在交易处理过程中,调用链码执行交易可以改变状态数据。状态存储的数据库可以使用或。是系统默认的内置数据库,也是可选的第三方数据库。区块链账本保存在文件系统中。
数据层主要由三部分组成:交易()、状态(State)和账本()。
交易类型有两种:
状态对应于交易数据的变化。在区块链中,状态是有版本的,由键/值存储 (KVS) 表示。键是名称,值是任何文本内容,版本号标识记录的版本。这些数据内容由链码通过 PUT 和 GET 操作进行管理。如存储层所述,状态持久存储在数据库中,状态的更新由文件系统记录。分类账提供了所有成功的状态数据更改和不成功的更改尝试的历史记录。
分类账本是由一组完全有序的交易区块组成的区块哈希链。
账本可以存储在所有对等节点或少数节点上。此外,账本允许重做所有交易的历史记录并重建状态数据。
通道层指的是通道(),是一种数据隔离机制,用于保证交易信息只有交易参与方可见。每个通道都是一个独立的区块链,因此多个用户可以共享同一条区块链系统,而不用担心信息泄露。
网络层用于为区块链网络各通讯节点提供P2P网络支持,是保证区块链账本一致性的基础服务之一。
在区块链中,Node是区块链的通讯实体。Node只是一种逻辑功能,在同一个物理服务器中可以运行多个不同类型的Node。Node有三种类型,分别是客户端、对等节点和。
其中,客户端用于将用户的交易请求发送到区块链网络。
Peer 负责维护区块链账本。Peer 又可以分为 Peer 和 Peer 两类。Peer 负责对交易进行认证,认证逻辑包括验证交易的有效性和对交易进行签名。Peer 接收打包好的区块,并写入区块链。与 Node 类似,Peer 也是逻辑上的概念。Peer 和 Peer 可以同时部署在同一台物理机器上。
它接收交易信息,对其进行分类并打包成块,然后写入区块链并将结果返回给同行。
共识层基于 Kafka、SBTF 等共识算法实现。Kafka 用于对交易信息进行排序,提供高吞吐低延迟的处理能力,并且支持集群内节点容错。相比 Kafka以太坊和比特币区块链钱包,SBFT(简单拜占庭算法)可以提供更可靠的排序算法,包括对节点故障和一定数量作恶节点的容忍度。
合约层是 的智能合约层,默认使用 Go 语言实现。运行的程序称为 ,它保存状态和账本数据,并负责执行交易。在 中,只有批准的交易才能提交。交易是对 上操作的调用,因此 是核心内容。还有一种特殊的 称为系统 ,用于管理函数和参数。
应用层是单独的应用程序。
另外,既然是联盟链,那么联盟内部还有一个专门管理成员的模块,即(MSP),MSP用于管理成员认证信息,为和peer节点提供成员授权服务。
区块链的总体架构
至此,我们了解了比特币、以太坊、以太坊的架构设计,三者根据不同的使用场景,有着不同的设计,但是我们还是可以抽象出一些共通点,我们可以基于这些共通点来设计企业级联盟链的底层架构。
本文提供的联盟链底层架构如下图所示。
联盟链底层架构
我们将区块链底层分为6层,从下到上分别为:存储层、数据层、网络层、共识层、激励层、应用层。
存储层主要存储交易日志以及交易相关内容,其中交易日志根据实现方式不同,交易内容通过内置数据库存储,读写数据库可基于JPA实现;交易链元数据信息通过or存储。
数据层由区块和区块“链”(区块的链式结构)组成。区块还涉及交易列表在树中的存储以及根节点哈希值的计算。交易的内容也需要加密。由于联盟链中有多个节点,为了有效管理节点数据,保证数据安全,建议为不同的节点分配不同的公钥和私钥进行加密。
网络层主要为共识和数据通讯提供底层支持。在区块链中,每个节点既是数据的发送方,也是数据的接收方,可以说每个节点既是客户端,又是服务端,所以需要基于长连接来实现。我们可以通过原生的方式建立长连接,也可以基于长连接第三方工具包来实现。
共识层采用PBFT(Fault)共识算法,区别于公有链的挖矿机制,联盟链更注重各个节点信息的统一,因此可以省去挖矿环节imToken官网下载,直接达到达成共识的目的。
激励层主要是币和代币的发行和流通,在公链中,激励是公链的灵魂;在联盟链中,激励并不是必须的。
应用层主要是联盟链中各类产品的实现,一般联盟链的应用层是面向行业的,解决行业内部的问题。
Java版本联盟链的部署架构如下图所示。
Java版联盟链部署架构
联盟链由1个超级节点和若干个普通节点组成,超级节点除了具备普通节点的功能外,还具备实现联盟内成员管理、权限管理、数据监控等功能。因此,相对于完全去中心化的公有链,联盟链是部分去中心化的,或者说联盟的“链”是去中心化的,但联盟链的管理是中心化的。
整个开发环境建议基于Boot 2.0实现,基于Boot进行开发可以省去大量的XML配置文件,大大简化项目中POM文件中配置的复杂依赖关系,Boot也提供了各种功能实现自动化配置,提高开发效率。