《迅雷链精品课》第二课:区块链核心技术框架

上一节课咱们明白了什么是区块链,了解了区块链的关键特性和技术等内容,这节课咱们将深刻了解区块链的技术架构,系统学习区块链平台的6个层次:数据层、网络层、共识层、合约层、应用层、接口层,另外一般还有客户端为用户提供访问界面。
在这里插入图片描述javascript

在学习课程的时候,你也能够免费领取BaaS平台为期一个月的试用机会,无偿使用高性能区块链服务(点击连接便可免费领取https://blockchain.xunlei.com/baas/try.html)。课程学习结合实践操做,让你迅速成为区块链大牛!html

*如下为第二课的内容~前端

第二课 区块链核心技术框架java

  1. 区块链做为一种架构

区块链技术是整合了P2P网络、共识算法、密码学、存储技术等一系列技术构造的一个分布式系统。其中所使用的每一项技术都并非新技术, 数字货币的概念在80年代就出现了,而第一代PoW(Proof of Work)算法是在90年代发明出来主要用于作反垃圾邮件的,甚至“带时间戳的区块构成的链条”这个核心数据结构,也并非原创的,而是基于Scott Stornetta和Stuart Haber在90年代提出的“加密数字时间戳”的发明。node

只是在比特币出现以前,没有人能提出一个软件架构,将全部这些技术元素整合起来,构造一个完整的去中心化的系统,而这才是比特币及其衍生的区块链技术能成功的缘由。如今人们所说的区块链,并非指某种数据结构或存储技术,而是指一种能提供机器信任的技术架构。python

  1. 区块链技术架构图

目前区块链技术架构均源自比特币的底层技术,从最先在区块链技术引入图灵完备的智能合约的以太坊,到普遍用于联盟链的Hyperledger Fabric,从多线程架构的EOS,再到同构多链架构的迅雷链,尽管它们在具体实现上各有不一样,但在总体架构上却存在不少共同的特色。以下图所示,区块链平台总体上可划分为6个层次:数据层、网络层、共识层、合约层、应用层、接口层,另外一般还有客户端为用户提供访问界面。
在这里插入图片描述
区块链架构图web

2.1. 数据层算法

常见的区块链存储方式有:文件存储、关系型数据库(如MySQL)和非关系型数据库(如LevelDB)。须要保存的数据包括公共数据(例如:交易数据、事务数据、状态数据等)和本地的私有数据等。docker

区块链的带时间戳的哈希链式结构借鉴了Scott Stornetta和Stuart Haber在90年代提出的“加密数字时间戳”的发明,他们设计了基于文档时间戳的数字公证服务以证实各种电子文档的建立时间,基本方案是使用时间戳服务对新建文档的时间及以前的文档的哈希指针进行签名,造成一个基于时间戳的签名链,链中的时间戳没法篡改;此外他们还提出用Merkle树组织文档等方案。他们最初的设计须要一个第三方信任机构的存在,要求信任一个外部渠道,但这样的第三方信任机构仍然能够篡改记录。他们没法解决这个问题,所以他们决定去证实人们没法解决这个问题。Stornetta在访谈中说到:“有趣的是,最终在证实咱们没法解决这个问题的过程当中,咱们找到了如何去解决问题的方法。最根本的解决办法是——既然咱们始终要去信任某我的或者机构来确保数字文档的准确性,那就去信任每个人,也就是说,让世界上的每个人都是数字文档记录的见证者。……咱们设想去构建一个网络,可以让全部的数字记录在被创造的时候就传输到每个用户那里,这样就没有人能够篡改这个记录。这就是最先区块链概念的诞生。”数据库

区块链中,每一个区块包含区块头和区块体两部分,区块体存放交易数据,区块头存放Merkle根、前块哈希、时间戳等数据。基于块内交易数据哈希生成的Merkle根实现了块内交易数据的不可篡改性与简单支付验证; 基于前一区块内容生成的前块哈希将孤立的区块连接在一块儿,造成了区块链;时间戳代表了该区块的生成时间。

2.2. 网络层

网络层负责节点间通讯,包括网络节点发现、数据收发等功能。区块链系统由众多节点经过网络链接构成, 特别是在公有链系统中,节点数量每每很大。所以,区块链平台一般选择彻底分布式且可容忍单点故障的P2P协议做为网络传输协议,任什么时候刻每一个节点也可自由加入或退出网络,每一个节点须要经过网络发现协议发现邻居节点,并与邻居节点创建链路,网络节点具备平等、自治、分布等特性,全部节点以扁平拓扑结构相互连通,不存在任何中心化的权威节点和层级结构,每一个节点均拥有路由发现、广播交易、广播区块、发现新节点等功能。

比特币的P2P网络基于TCP协议实现,节点发现使用DNS种子节点(DNS-seed),比特币社区维护着一些域名用于节点发现,此外还硬编码一些seed-node,当全部的种子节点全失效时,全节点会尝试链接这些种子节点。

以太坊的P2P网络采用了 Kademlia(简称 Kad) 算法实现,因此以太坊节点的节点发现是基于 UDP 的,找到节点之后会切换到 TCP 协议上进行数据传输。

Hyperledger Fabric是用gRPC来作P2P通讯的,而gRPC又基于HTTP/2,所以也能够说Hyperledger Fabric是基于HTTP/2协议的。

比特币和以太坊均使用了 UPnP (Universal Plug and Play)协议作NAT穿透,而Hyperledger Fabric是主要面向联盟链和私有链场景,不支持NAT穿透。

2.3. 共识层

共识层运行某种共识算法,负责协调保证全网节点数据记录的一致性。

在中心化的分布式系统中,全部节点都由单一机构管理维护,能够认为全部节点都是可信的,共识算法只需支持崩溃容错(Crash Fault-Tolerant, CFT)的状况。CFT已有一些经典的解决算法,包括Paxos、Raft及其变种等。

对于去中心化的区块链系统,其网络节点可由任何一方提供 ,部分节点多是恶意节点,所以须要支持拜占庭容错(Byzantine Fault Tolerance, BFT)。区块链经常使用的BFT容错的共识算法有工做量证实算法(Proof of Work, PoW)、权益证实算法(Proof of Stake, PoS)和委托权益证实算法(Delegated Proof of Stake, DPoS)、实用拜占庭容错(Practical Byzantine Fault Tolerance , PBFT)等。根据算法采起的策略,BFT类算法能够被分为两大类,即几率一致性算法和绝对一致性算法。其中PoW、PoS、DPoS是几率一致性算法,PBFT是绝对一致性算法。

比特币和以太坊采用PoW机制,Hyperledger Fabric采用PBFT算法。

2.4. 合约层

合约层负责智能合约的执行。智能合约(Smart Contract)是一段在区块链上存储、验证和执行的代码。

智能合约的概念早在1994由密码学家Nick Szabo年提出,但因为缺乏可信的执行环境,智能合约并无被应用到实际产业中。比特币诞生后,人们认识到比特币的底层技术区块链天生能够为智能合约提供可信的执行环境。

将合约以数字化的形式写入区块链中,因区块链的特性,数据将没法删除、修改,只能新增,整个过程透明可跟踪,保证了历史的可追溯性; 因行为将被永久记录,可极大程度避免恶意行为对合约正常执行的干扰;区块链的去中心化特性,避免了中心化因素的影响,提升智能合约在成本效率方面的优点;当知足合约内容时,将自动启动智能合约的代码,既避免了手动过程,同时又保障了发行者没法违约;由区块链自带的共识算法构建出一套状态机系统,使得智能合约可以安全、高效地运行,并保证结果可信任。

比特币脚本是非图灵完备的,指令类型简单、实现功能有限;以太坊首先提供了图灵完备的智能合约编程语言Solidity与执行环境EVM(Ethereum Virtual Machine);Hyperledger Fabric的智能合约称为chaincode,其运行在docker容器中,能够用go与java等通用编程语言编写智能合约。

2.5. 应用层

应用层负责适配区块链的各种应用场景,为用户提供各类服务和应用。

比特币平台上的应用主要是基于比特币的数据货币的发行和流通。以太坊以图灵完备的智能合约为基础,除了数字货币交易外,还支持去中心化应用(Decentralized Application, Dapp), Dapp是由javascript构建的Web前端应用,经过Json-RPC与运行在以太坊节点上的智能合约进行通讯。Hyperledger Fabric主要面向联盟链和私有链应用,并无提供数字货币,基于其docker的智能合约可实现包括数字货币在内的各类业务应用。

2.6. 接口层

接口层用于完成功能模块的封装,为客户端应用提供简洁的访问接口。

比特币节点提供了基于JSON RPC接口,可供应用开发者使用各类开发语言例如JavaScript、Java、Python等访问比特币系统,包括访问区块和交易信息、节点控制、网络相关、交易发起等功能。

以太坊为客户端提供JSON RPC接口,客户端可使用go、python、javascript等编程语言与区块链服务的RPC端口进行通讯。其中,go语言能够直接使用go-ethereum项目的rpc库与以太坊通讯、python语言有web3.py库、javascript语言下有web3.js库。web3库是以太坊提供的一个对JSON RPC接口的封装库,提供了一系列与区块链交互的对象和函数,包括查看网络状态,查看本地帐户、查看交易和区块、发送交易、编译/部署智能合约、调用智能合约等,其中最重要的就是与智能合约交互的API。

Hyperledger Fabric提供gRPC或REST接口,客户端可基于Go、Java、Python等语言构建,并与Hyperledger Fabric节点上的智能合约通讯

2.7. 客户端

客户端为用户提供友好易操做的访问界面。比特币和以太坊都存在多平台、多样化的客户端,第三方客户端的开发很是活跃。

  1. 3层划分模型

以太坊社区在可扩展性问题的讨论中,将扩展方案分类为“Layer 1层改进”和“Layer 2层改进”。Layer 1层改进是指经过对区块链自己的改进来提高它的可扩展性,即On-Chain链上改进,Layer 1层包括区块链的数据层、网络层、共识层和合约层;Layer 2层改进是指不影响区块链自己,经过其余方式来实现可扩展性的提高,即Off-Chain(链下)的改进, Layer 2层包括区块链的应用层、接口层等。为了架构的完整性,咱们将基础设施也归入考虑,添加一个Layer 0层,最后划分以下图所示:

在这里插入图片描述
区块链的3层模型图

进一步划分为3层模型的好处是可让咱们讨论方案时可使用Layer 1这样的术语来表示相互关联的那几个分层。

Layer 0层是基础设施层,包括网络基础设施、存储基础设施和计算基础设施,与IaaS(Infrastructure as a Service,基础设施即服务)的” 基础设施”的概念一致。在以太坊这样的公链社区一般对Layer 0层的改进不多讨论,由于公链的基础设施是去中心化的,没法控制的。而企业构建区块链平台时,则须要本身提供基础设施服务,是可控制的,讨论改进方案时也应该要考虑Layer 0层的改进,例如网络拓扑结构改进、网络节点选择、高速网络建设、存储硬件选型、分布式存储方案改进、计算节点的调度等等。

Layer 1层包括区块链的数据层、网络层、共识层和合约层,这层改进的出发点是帐本数据的存储、交易的广播和验证、共识算法的改进、合约性能的改进等。例如以太坊的sharding方案,Casper共识算法、EOS的DPoS+aBFT共识算法、迅雷链的同构多链架构和DPoA+PBFT共识算法等,都是Layer 1层的改进方案。

Layer 2层包括区块链的应用层、接口层等,这层的扩展性改进方案有闪电网络、侧链、状态通道、Plasma等,不影响区块链自己,在公链社区是比较容易实施的方案,但这些链下改进的方案须要引入为人所诟病的中心化的模块。

  1. 小结

区块链与其说是一种新技术,不如说是一种新的分布式系统架构,其整合了P2P网络、共识算法、密码学、存储技术等一系列已有技术,带来的是大量的新概念、新思惟。

以总体架构为脉络,咱们能够有针对性的掌握区块链技术的基本知识,也能够此为框架来分析新出现的区块链项目,对其加以研究,识别其关键技术点,考察其是否存在技术创新。

*恭喜完成第二课的学习,第三课咱们将分析一些具体的区块链项目的技术架构,从区块链1.0的比特币网络,到区块链2.0的以太坊、EOS,到区块链3.0的Hyperledger Fabric和迅雷链。

在这里插入图片描述