主页 > imtoken注册 > 从概念到底层技术,一篇文章理解区块链架构设计(附知识图谱)

从概念到底层技术,一篇文章理解区块链架构设计(附知识图谱)

imtoken注册 2023-01-29 07:01:22

前言

区块链作为架构设计的一种实现,与基础语言或平台有很大不同。区块链是加密货币背后的技术,是目前与 VR 和虚拟现实相提并论的流行技术之一。它本身并不是一项新技术。和Ajax类似,可以说是一种技术架构,所以我们从架构设计的角度来谈。区块链的技术实现。

无论你擅长什么编程语言区块链的三个基本特征,都可以参考这个设计来实现一个区块链产品。同时整理相关知识图谱和系统,帮助大家系统学习研究。

基本概念

区块链的概念最近很流行。它来自比特币等加密货币的变现,但目前,该技术已逐渐应用于各个领域。什么是区块链技术?为了从感知上理解这个问题,我们可以用谷歌地球的例子来做类比。 Ajax 不是一项新技术,但是当结合在一起时,产品 Google Earth 就实现了。同样,区块链不是一项新技术,但它类似于加密和解密。技术、P2P网络等的结合,催生了比特币。学习ajax技术的技术人员,尤其是web开发工程师,最先被Google Earth的炫酷效果所吸引。而现在,历史再次重演,很多人被比特币的疯狂发展所吸引,进而开始研究其背后的技术——区块链。

区块链最初是一种在比特币等加密货币中存储数据的独特方式。它是一种自引用数据结构,用于存储大量交易信息。每条记录都是从后到前排序的。联动,具有公开透明、不可篡改、易溯源的特点。事实上,这个特性也直接反映了整个比特币的特性,所以用区块链来总结加密货币背后的技术实现是非常直观和恰当的。区块链是一种技术,加密货币是由它开发和实现的一类产品(包括代币和没有代币的区块链产品),不能等同、不能混淆。与加密货币相比,区块链这个名称摒弃了代币的概念,更具视觉化、技术性和非政治化,更适合作为一种技术进行研究和推广。

因此,目前大家单谈区块链时,指的是区块链技术,是一种实现数据公开、透明、可追溯的产品架构设计方法。区块链。在具体产品中谈区块链时,可以指一种类似于比特币的数据存储方式,可能是数据库设计,也可能是文件形式的设计,属于狭义的区块链。广义的区块链技术必须包括四个方面:点对点的网络设计、加密技术的应用、分布式算法的实现、数据存储技术的使用。其他可能涉及分布式存储、机器学习、VR、物联网、大数据等。狭义的区块链仅涉及数据存储技术、数据库或文件操作等。本文中的区块链指的是广义的区块链。

架构图

在架构设计上,区块链可以简单分为三层,协议层、扩展层和应用层。其中,协议层又可分为存储层和网络层,二者相互独立又密不可分。如图:

blockchain_overview

协议层

所谓协议层是指最底层的技术。这一层通常是一个完整的区块链产品,类似于我们计算机的操作系统,维护网络节点,只提供API供调用。通常情况下,官方会提供一个简单的客户端(俗称钱包)。这个客户端钱包的功能也很简单。它只能创建地址、验证签名、转账支付、检查余额等。这个级别是一切的基础。搭建网络环境,搭建交易渠道,制定节点奖励规则。至于你想交易什么,你想做什么,它不问,也不问。典型的例子自然是比特币,还有各种二级代币,比如莱特币等,本书介绍的亿书币也是。这一层是开发者现阶段聚集的地方,说明加密货币还处于起步阶段。

从所使用的技术来看,协议层主要包括四个方面:网络编程、分布式算法、加密签名、数据存储技术等,其中网络编程能力是大家选择的主要考虑因素一门编程语言,因为分布式算法基本属于业务逻辑的实现,任何语言都可以,直接简单使用加密签名技术(请阅读书中的相关加解密文章,不推荐自由发挥,没有太多的编码逻辑),数据库技术也主要用在使用层面。只有实现点对点网络和并发处理才是开发的难点。因此,人们特别喜欢网络编程能力强、并发处理简单的语言。因此,Nodejs 逐渐成为开发区块链应用的热门,Go 语言也逐渐兴起。

在上面的架构设计图中,我将这一层进一步划分为存储层和网络层。数据存储可以相对独立,选择自由度更大,可以单独讨论。选择的原则无非就是性能和易用性。我们知道,系统的整体性能主要取决于网络或数据存储的 I/O 性能。网络I/O优化空间不大,但是本地数据存储的I/O可以优化。例如,比特币选择了谷歌的 LevelDB。据说这个数据库读写性能不错,但是很多功能需要开发者自己实现。目前困扰行业的一大难题是加密货币的交易处理量远不及目前的中心化支付系统(银行等),除了I/O,还需要全方位的突破。

在实现点对点网络的过程中必须用到分布式算法、加密签名等,所以自然是网络层的事情,也是编码的重点和难点。这基本上就是这部分的内容。当然,点对点网络也有单独的实现,将节点搜索、数据传输和验证的逻辑分开,将共识算法、加密签名、数据存储等操作放在一起,形成核心层无论怎么组合,这两部分都是最核心、最底层的部分,是协议层的内容。

扩展层

这一层类似于计算机的驱动程序,使区块链产品更加实用。目前有两种类型。一是各种交易市场,是法币兑换加密货币的重要渠道。实施简单,钱快,成本低,但风险也高。二是针对某个方向的扩展实现,比如易书侧链,可以为第三方出版机构、论坛网站等内容生产者提供定制化服务。尤其值得一提的是“智能合约”的概念大家听得最多的,就是典型的扩展层面的应用开发。所谓“智能合约”就是“可编程合约”,或者“智能合约”,其中“智能”就是执行中的智能,也就是说,当达到某个条件时,合约就会自动执行,比如作为证券的自动转移和自动支付。等等,目前还没有相对成型的产品,但不可否认这将是区块链技术的一个重要发展方向。

扩展层使用的技术没有限制,可以包括很多。上面提到的分布式存储、机器学习、VR、物联网、大数据等,都可以使用。编程语言的选择可以更加自由,因为它可以完全脱离协议层,编程语言也可以和协议层使用的开发语言不同。在开发方面,除了在交易时与协议层进行交互外,其他时间尽量不要与协议层的开发混在一起。这一层更接近于应用层,也可以理解为B/S架构产品中的服务器。这不仅使架构设计更科学,使区块链数据更小,网络更独立,而且保证扩展层的开发不受限制。

从这个角度来看,区块链可用于开发任何类型的产品,而不仅仅是金融行业。未来,随着底层协议的完善,任何需要第三方支付的产品都可以轻松使用区块链技术;任何需要确认、记入和追溯的信息都可以借助区块链实现。我个人觉得这个目标应该很快就能实现了。

应用层

这一层类似于计算机中的各种软件程序。是普通人真正可以直接使用的产品,也可以理解为B/S架构的产品。浏览器端(Browser)。该级别的应用目前几乎是空白。市场迫切需要这样的应用来引爆市场,形成真正的扩张趋势,让区块链技术能够快速走入寻常百姓家,服务大众。你使用的各种轻钱包(客户端)应该算是应用层中最简单、最典型的应用。很快,易数将推出基于易数网络的文档协作工具,这是典型的应用层产品。

受限于目前区块链技术的发展,易数只能从协议层入手,以应用层为目标,为第三方开发者提供强大的扩展层支持。这样做既可以避免贪婪,又可以避免落地失败,才是真正理性的发展路线。因为单纯的开发协议层或扩展层无法真正理解和验证应用层,会脱离现实,给第三方开发者使用带来困难。如果只考虑应用层,市面上还没有真正扎实好用的协议层或扩展层产品。所以,我们要全力以赴,采取完全开源、开放的态度,利用社区的力量,共同做一件有意义的事情,也可以算是技术积累和对发展的微薄贡献。中国的区块链技术。

编程实现

很多小伙伴习惯于根据自己的技术背景来了解以上架构设计。这里结合具体的编程语言,简单介绍几款产品,仅供参考。

(1)C/C++

这两种语言是不可逾越的,任何开发遇到瓶颈,基本都会找到,自然应该排在第一位同时区块链技术鼻祖比特币(协议层)是用C++开发的语言,到目前为止,没有比比特币更成功的区块链产品。所以,无论你用什么语言开发,在正式进入这个行业的过程中,都应该先学习比特币。比特币官方客户端钱包使用Qt,第三方钱包使用Python开发,特别是第三方组织的开发库(Api包)。其中许多是由 Nodejs 设计的。比特币的架构与上述架构设计基本相同。此外,由于共识算法采用了工作量证明机制(PoW:Proof of work),因此也存在一些特殊的挖矿过程。其他的山寨币都是直接从比特币分支出来的,所以编程语言是一样的,具体的技术选择和技术实现可能会有所改进。例如,莱特币使用其他加密算法。

官网:

源代码库:

(2)Nodejs/Javascript

Nodejs平台强大的网络编程能力和js脚本语言的简洁和速度,在区块链领域自然是不可或缺的。 Yishu就是这样一个区块链产品,Yishucoin就是它的协议层。它采用著名的express开发框架,基于http协议开发。同时,它采用了授权的权益证明机制(DPoS),算法的改进使得处理交易时变得更轻,处理能力大大提升。提供强大的协作机制,有利于数字出版和版权保护;侧链功能可以用来开发任何基于它的去中心化应用,为专业作者、博主和开发者提供了很多便利。 《Developing Cryptocurrency with Nodejs》一书完整分享了它的源码,从区块链的基本概念到代码实现,从基本原理到开发设计思路,都进行了详细的探讨。到目前为止,很少有书籍从协议层面解释区块链技术的实现。这被算作一本书。

官网:

源代码库:

(3)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等语言的实现。

官网:

源代码库:

(4)去

在多核时代,Go语言非常流行,它可以让你以同步的方式轻松实现高并发,特别是在分布式系统、网络编程等领域,应用范围非常广泛。因此,在区块链开发领域,也有很多项目使用Go语言。其中,linux Foundation 主导的 HyperLeger,存储库名称为 Fabric,就是其中之一。该项目试图为新一代的交易应用创建一个开放的分布式账本标准,支持许可的区块链(这样可能无法再现比特币的强大网络效应。)Fabric 的开发环境是建立在 VirtualBox 虚拟机上的。部署环境可以自己搭建网络,也可以直接部署在BlueMix上。部署方式可以docker化,支持Go和JavaScript。开发智能合约。它采用PBFT分布式算法,在网络编程中使用gRPC进行P2P通信,并使用Protocol Buffer对要传输的数据结构进行序列化。在架构设计上,Fabric 可能与比特币等区块链产品有所不同。不同区块链的三个基本特征,但以上基础组件还是缺一不可的。

官网:

源代码库:

其他编程语言,如:C#等,也有具体例子,这里就不一一列举了。总之,对于不同的编程语言,在具体的编码或者架构设计上可能会有差异,甚至很大,但是协议层使用的技术并没有太大的变化。其中,网络编程是重点和难点。他们中的大多数没有现成的框架。它们是使用编程语言本身提供的库设计和开发的。所以比较低级,比较考验开发者的编码能力。

知识图

p>

通过上面的分析,我们已经可以了解区块链是什么以及如何实现它了。对了,把编程技术知识整理一下,自然会清晰很多。

blockchain-lib

根据我个人的理解,我将区块链相关的知识分为以下五个方面:

(1)基础知识

p>

区块链是一项新技术,其背后涉及大量新概念、新理论。虽然这些知识并没有直接体现在代码中,但它是了解和掌握区块链技术的基础知识。因此,它应该是区块链技术不可或缺的一部分。这部分从基本概念入手,描述工作原理,可以涵盖区块链的所有基础知识。

(2)技术实现

区块链是一种技术,但是从上面的分析可以看出,它应该是一个架构应用,而架构的实现应该是我们知识库的核心。可以看到,任为任何区块链产品,协议层必须包括四个部分,包括对等网络、加密签名、数据存储和分布式算法。应用层还必须提供基本的应用,例如钱包和客户端浏览器。因此,将这部分分开是合理的。

在扩展层,区块链技术可以连接到各种应用,例如:金融、物联网、网络安全、版权保护、电子商务等。很多现有的技术都可以在这里使用。但是,如何与区块链结合,如何实现跨行业使用,自然是这部分研究的主题。因此,此处列出或涉及的技术应归为技术实施的重要组成部分。

(3)开发环境

区块链是多种技术的组合,具有自身的复杂性。个别应用严重依赖开发环境,开发工具与环境一起构建是开发者快速上手的重要一环。

(4)项目实践

据说在短短几年内,全球区块链产品就有上千种,其中不乏创新应用。一些优秀的开源产品和项目实践是最好的学习和研究资料。

(5)开发文档

这个自然不用多说,每个产品也会有自己的开发文档。还有一点就是开发者整理总结的一些资源可以帮助我们节省很多查询时间。

我在思考这个知识体系的过程中,主要考虑的是读者能不能按照这些标签来阅读文章,能不能快速掌握区块链技术,最后开始开发和实现一个区块链产品此外,它还刻意避免使用特定的编程语言。 ,以及与特定领域相关的词,唯一能区分的就是这些节点下对应的文章标签。因此,这些类别是非常中性的。也考虑过使用比特币、山寨币、智能合约、数字资产、智能资产的具体实现作为分类方法,但恐怕会限制读者的思维。同时,随着区块链的发展,这张地图也会不断的修改。在这里,我想呼吁希望阅读这篇文章的朋友。提出您的宝贵意见,让我们让这个区块链知识分类图更科学合理,使用更方便。

总结

在本文中,我们对区块链技术基础设施进行了描述。需要再次强调的是,这只是一种实现方式,并不是所有的区块链产品都是这样的。我们也期待更多的创新出现,并且相信会有。 Programming Implementation 列出了几种编程语言以及它们实现的典型产品。由于协议层技术比较底层,所以需要介绍或讨论的现成框架并不多。同时,具体的技术细节也不能几行就说清楚。好在,这些产品都是开源产品,大家可以根据自己的技术背景进一步查看对应的产品源码,很快就能明白其中的奥妙。