区块链技术架构与技术路径解读
⽂章⽬录
区块链技术架构图
总体来看,区块链的基础架构可以分为五层,包括⽹络层、共识层、数据层、 智能合约层和应⽤层,如下图所⽰。每⼀层分别完成⼀项核⼼的功能,各层之间 互相配合,从⽽实现了去中⼼化的信任机制
⽹络层
⽹络层的主要⽬的是实现区块链⽹络节点之间的信息交互。区块链的本质是⼀ 个点对点(P2P)⽹络,每⼀个节点既能够接收信息,也能够⽣产信息,节点之间 通过维护⼀个共同的区块链来保持通信。在区块链的⽹络中,每⼀个节点都可以创造出新的区块,新区块被创造出以后, 会通过⼴播的形式通知其他的节点,⽽其他节点反过来会对这个节点进⾏验证。当 区块链⽹络中超过 51% 的⽤户对其验证通过以后,这个新的区块就会被添加到主链上
共识层
共识层能够让⾼度分散的节点在去中⼼化的系统中针对区块数据的有效性达成 共识。区块链中⽐较常⽤的共识机制包括⼯作量证明、权益证明和股份授权证明等 多种,这部分内容笔者在前⾯的章节已经做了详细解读。共识机制的作⽤主要有两个,⼀个是奖励,另⼀个是惩罚。⽐特币和以太坊⽤ 的是 PoW ⼯作量证明机制。此机制根据算⼒进⾏奖励和惩罚,如有节点作弊,算 ⼒会受到损失。
Bitshares、Steemit、EOS 采⽤ DPoS 股份授权证明机制,拥有的⼈可以参与 节点的投票,被⼤家选出来的节点参与记账,⼀旦作弊就会被系统投出。
其中的激励功能主要是指给予奖励,⿎励节点参与区块链的安全验证。例 如,在⽐特币总量达到 2100 万枚之前,⽐特币的奖励机制有两种 :新区快产⽣后 系统奖励的⽐特币 ;每笔交易扣除的⽐特币(⼿续费)。⽽当⽐特币的总量达到 2100 万枚时,新产⽣的区块将不再⽣产⽐特币,此时的奖励主要是每笔交易所扣除 的⼿续费。
数据层
数据层是最底层的技术,主要的功能为数据存储、账户和交易的实现与安全。数据存储主要基于 Merkle 树,通过区块的⽅式和链式结构实现,⼤多以 KV 数据库 的⽅式实现持久化,如⽐特币和以太坊采⽤的 LevelDB。基于数字签名、散列函数、⾮对称加密技术等多种密码学算法和技术,以及账 户和交易的实现与安全功能,保证了交易能够在去中⼼化的情况下安全进⾏。
设计区块链系统的技术⼈员们⾸先建⽴的起始节点,被称作是“创世区块”, 之后在同样的规则之下,创建规格相同的区块,通过⼀个链式结构依次相连组成⼀ 条主链。随着运⾏时间的增加,新的区块通过验证后,被不断添加到主链上,主链 会不断延长。
每⼀个区块中同时也包含了许多技术,如时间戳技术,它的作⽤在于确保每⼀ 个区块都可以按时间的顺序相连接,⽐如散列函数,它是⼀种将任意长度的消息通 过散列算法压缩到某⼀固定长度的消息摘要的函数,它主要⽤于信息安全领域中加 密算法、⽂件检验、数字签名和鉴权协议等。
合约层
所谓合约层主要是指各种脚本代码、算法机制及智能合约等。智能合约是运⾏ 在区块链上的⼀段⽆须⼲预即可⾃动执⾏的代码,EVM 是智能合约运⾏的虚拟机, ⼈类通过智能合约,⽆须任何中介⼲预即可实现资产的转移,同时也可以开发出⼀ 些有价值的去中⼼化应⽤。以⽐特币为例,它是⼀种可编程的,合约层封装的脚本中规定了⽐特 币的交易⽅式和交易过程中所涉及的各种细节。
基于智能合约还可以构建区块链应⽤,不需要从零学习区块链技术就可以⽅便 地开发⾃⼰的区块链应⽤(DAPP)。如基于以太坊公链,开发者可以使⽤ Solidity 语⾔开发智能合约,构建去中⼼化应⽤ ;基于 EOS,开发者可以使⽤ C++ 语⾔, 编写⾃⼰的智能合约。
应⽤层
应⽤层封装了区块链的各种应⽤场景和案例,如基于区块链的跨境⽀付平台等, 它也是去中⼼化应⽤ DAPP。⼀个完整的 DAPP 包含智能合约和 Web 系统,Web 系 统通过接⼝调⽤智能合约。本层类似于计算机中的各种软件程序,是普通⼈可以真正直接使⽤的产品,也 可以理解为 B/S 架构的产品中的浏览器端(Browser)。
从⽬前的情况看,对于众多⽤户来讲,除外,还不到现成的区块链 应⽤。如果想让区块链技术快速⾛进寻常百姓,服务于⼤众,必须出现⼤量跟⼈们 ⽣活、娱乐⼯具相结合的应⽤。
知识图谱
循着上⾯的分析,我们已经可以了解区块链是什么,并知道怎么实现了,顺便梳理⼀下其中的编程技术知识,⾃然也就清晰多了。
基础知识
区块链是新技术,与之相关的是其背后⼤量的新概念、新理论。这些知识,虽然不直接体现在编码⾥,但却是理解区块链,掌握区块链技术的基本知识。所以,理当成为区块链技术不可或缺的⼀部分。这部分从基本概念⼊⼿,到⼯作原理的描述,就能够把区块链基础知识全部覆盖。
技术实现
区块链是⼀项技术,但从上⾯的分析可以看出,它应该是⼀种架构应⽤,架构的实现理当是我们知识库的核⼼。正如⼤家看到的,任何⼀款区块链产品,协议层必须包括点对点⽹络、加密签名、数据存储、分布式算法等4个部分,应⽤层也必然要提供钱包、客户端浏览器等基础应⽤。所以,把这部分独⽴出来,也是合情合理。
在扩展层的部分,区块链技术可以对接各种应⽤,⽐如:⾦融、物联⽹、⽹络安全、版权保护、电⼦商务等等,现有的很多技术都可以⽤在这⾥。只不过,如何与区块链结合,如何实现跨⾏业使⽤,⾃然是这部分内容研究的课题。所以,这⾥所罗列或涉及到的技术,理应归为技术实现的⼀个重要部分。
开发环境
区块链是多项技术的组合,有其⾃⾝的复杂性,个别应⽤对开发环境依赖较⼤,开发⼯具与环境搭建,是让开发者快速上⼿的重要内容,据说,短短数年,全球区块链产品已经有⼏千个,其中不乏创新应⽤。有些优秀的开源产品和项⽬实践,是最好的学习研究资料。
编程实现
C/C++实现go语言开发环境搭建
这两个语⾔是⽆法逾越的,任何开发遇到瓶颈,基本上都会到它们,⾃然应该排在第⼀位要介绍的。同时,区块链技术的⿐祖,⽐特币(协议层) 就是⽤C++语⾔开发的,⽽且⽬前为⽌,没有⽐⽐特币更加成功的区块链产品。所以,⽆论你使⽤什么语⾔开发,在正式进⼊这个⾏业的过程中,都应该先研究研究⽐特币。
⽐特币官⽅客户端钱包⽤的Qt,第三⽅钱包有Python语⾔开发的,特别是第三⽅整理的开发库(Api包)很多是Nodejs设计的。⽐特币的架构,与上⾯的架构设计基本相同,另外,因为共识算法采⽤的是⼯作量证明机制(PoW:Proof of work),还有⼀些特殊的挖矿的过程。其他竞争币都是直接来⾃⽐特
币的分⽀,所以编程语⾔相同,具体的技术选型和技术实现上可能有所改进,⽐如:莱特币,使⽤了其他的加密算法。
Nodejs/Javascript
Nodejs平台强⼤的⽹络编程能⼒,以及js脚本语⾔的简单快捷,在区块链领域⾃然少不了它的⾝影。亿书便是这样⼀个区块链产品,亿书币是它的协议层,使⽤了著名的express开发框架,基于http协议开发⽽成。同时,它采⽤了授权股权证明机制(DPoS),算法上的改进,让它在处理交易时更加轻量,处理能⼒⼤⼤提升。
它提供了强⼤的协作机制,为数字出版、版权保护提供了便利;扩展了侧链功能,可以基于它开发任何去中⼼化的应⽤,从⽽为专业作者、博客爱好者和开发者提供很多⽅便。《Nodejs开发加密货币》这本书完整分享了它的源码,从区块链基础概念到代码实现,从基本原理到开发设计思路,都做了⽐较详细的探索,⽬前为⽌,从协议层⾯深⼊代码讲解区块链技术实现的书籍极少,这算作⼀本。
Python
如果是Python语⾔爱好者,我建议研究研究以太坊(Ethereum)的Python实现。尽管因为The Dao事
件闹得沸沸扬扬,但从技术实现的⾓度来说,仍然值得参考学习。以太坊官⽅定位为⼀种开发管理分布式应⽤的平台,主攻⽅向就是“智能合约”,并为其定制了⼀种编程语⾔Solidity。以太坊的核⼼是以太坊虚拟机(EVM),允许⽤户按照⾃⼰的意愿创建操作。以太坊给出了Go、Java、Python等多语⾔的实现。
其中以python为基础的实现主要包括三个部分:Pyethapp是客户端部分;pyethereum是核⼼库,实现了区块链、以太坊模拟机和挖矿等功能;pydevp2p是点对点⽹络库,实现了节点发现、合约代码传输、加密签名等功能,这三者组合在⼀起就是完整的区块链实现,后⾯两个核⼼库共同组成了协议层。另外,go-ethereum是go语⾔的完整实现;Ethereum(J) 是纯Java实现,它作为可以嵌⼊任何Java/Scala 项⽬的库提供。客户端⽅⾯,还有Rust、Ruby、Javascript等语⾔的实现
Go
在多核时代,Go语⾔备受喜爱,它可以让你⽤同步⽅式轻松实现⾼并发,特别是在分布式系统、⽹络编程等领域,应⽤⾮常⼴。所以,在区块链开发领域,也有很多使⽤Go语⾔的项⽬。其中,由linux基⾦会主导的超级账本(HyperLeger),版本库的名字叫Fabric,就是其中⼀个。该项⽬试图为新⼀代的事务应⽤创建⼀种开放的分布式账本标准,⽀持许可式区块链(这种⽅式可能⽆法再现⽐特币那种
强⼤的⽹络效应)。
Fabric的开发环境建⽴在VirtualBox虚拟机上,部署环境可以⾃建⽹络,也可以直接部署在BlueMix上,部署⽅式可docker化,⽀持⽤Go 和JavaScript开发智能合约。它采⽤PBFT分布式算法,⽹络编程⽅⾯⽤gRPC来做P2P通讯,使⽤ Protocol Buffer来序列化要传递的数据结构。在架构设计上,Fabric可能与⽐特币等区块链产品有所不同,但是上述基本组成部分还是不可或缺的

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。