区块链科技最全面的分析总结(附知识图谱)

区块链科技最全面的分析总结(附知识图谱)

区块链是堪比VR虚拟现实的热门技术之一。区块链是加密货币背后的技术,与基础语言平台有很大不同。它本身并不是一项新技术,类似于Ajax。可以说是技术架构,那么就从架构设计的角度来说说区块链的技术实现吧。

无论你擅长什么编程语言,你都可以参考这个设计来实现一个区块链产品。同时整理相关的知识图谱和体系,帮助大家系统的学习和研究。最后,推荐一些精选的内容给你阅读。

00-1010区块链来自比特币等加密货币的变现。目前,这项技术已经逐渐应用于各个领域我们可以用Google Earth的例子来类比:ajax并不是什么新技术,而是Google Earth经过组合后做出来的产品。区块链与加解密技术、P2P网络等相结合。比特币就这样诞生了。

技术人员,尤其是Web开发工程师,在了解ajax技术时,首先被Google Earth的炫酷效果所吸引。现在,历史再次重演,很多人被比特币的疯狂发展所吸引,然后开始研究背后的技术,——区块链。

作为比特币背后的技术,区块链可以在没有中央服务器的情况下,使各种存储的数据公开、透明和可追溯。本来是比特币等加密货币存储数据的独特方式。它是一种自引数据结构,用于存储大量的交易信息。每条记录都是从后向前有序链接的。它具有公开、透明、不可篡改、易于追溯的特点。其实这个特点也直接反映了整个比特币的特点,所以用区块链来概括加密货币背后的技术实现是非常直观和恰当的。区块链是一种技术,加密货币是它开发实现的一种产品(也有没有代币的区块链产品),不能等同,也不能混淆。与加密货币相比,区块链这个名字摒弃了代币的概念,更具有视觉性和技术性,更适合作为一种技术来研究。

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

00-1010从架构设计的角度,区块链可以简单的分为三个层次:协议层、扩展层、应用层。其中,协议层可分为存储层和网络层,两者相互独立但又不可分割。如图所示:

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

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

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

分布式算法、加密签名等。应该是在实现点对点网络的过程中使用,所以自然是网络层的事情,也是编码的重点和难点。这部分基本就是《Nodejs开发加密货币》本书分享的内容。当然,对等网络的实现是分开的,节点搜索、数据传输和验证的逻辑是分开的,而共识算法、加密签名和数据存储的操作放在一起形成核心层。无论如何组合,这两部分都是核心和底层部分,是协议层的内容。

00-1010这个级别类似于电脑的驱动程序,让区块链的产品更加实用。目前有两种。一类是各类交易市场,是法币兑换加密货币的重要渠道。它们变现容易,来钱快,成本低,但也有风险。二是某个方向的扩展实现,尤其是大家听得最多的“智能合约这个概念,是典型的扩展应用开发。所谓“智能合约”,就是“可编程合约”或“智能合约”,其中的“智能”就是执行中的智能,也就是说,当满足一定条件时,合约就会自动执行,比如证券自动转账、自动支付等。目前还没有相对成型的产品,但不可否认这将是区块链技术的一个重要发展方向。

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

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

00-1010这个层次类似于电脑里的各种软件程序。是普通人真正可以直接使用的产品,也可以理解为B/S架构产品中的浏览器。这个级别的应用目前几乎是空白。市场急需这样的应用,引爆市场,形成真正的扩张趋势,让区块链科技早日服务大众。大家用的各种轻钱包(客户端)应该算是应用层最简单最典型的应用了。

限于目前区块链技术的发展,比如亦舒只能从协议层入手,针对应用层,同时为第三方开发者提供扩展层的有力支持。这样既能避免贪婪,又能避免落地失败。是一条真正理性的发展路线。因为单纯的开发协议层或扩展层无法真正理解和验证应用层,会脱离实际,让第三方开发者难以使用。如果只考虑应用层,市场上并没有真正坚固易用的协议层或者扩展层的产品。

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

(1)C/C

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

官方网站:https://bitcoin.org

来源图书馆:https://github.com/bitcoin

c语言知识库:http://lib.csdn.net/base/c

(2)Nodejs/Javascript

Nodejs平台强大的网络编程能力,以及js脚本语言的简单快捷,自然使其在区块链领域不可或缺。亿书就是这样一个区块链产品,亿书币就是它的协议层。它使用著名的express开发框架,基于http协议开发。同时采用授权股权认证机制(DPoS),算法有所改进,在处理交易时更加轻便,处理能力大幅提升。它提供了一个强大的协作机制,有利于数字出版和版权保护。扩展了侧链的功能,可以基于它开发任何去中心化的应用,为专业作者、博主、开发者提供了很多便利。

103010本书完整分享了其源代码,从区块链的基本概念到代码实现,从基本原理到开发设计思路都做了详细的探索。到目前为止,从协议层面解释区块链技术实现的书籍很少,算一本。

官方网站:http://ebookchain.org

来源图书馆:https://github.com/Ebookcoin

Node.js知识库:http://lib.csdn.net/base/nodejs

(3)Python

如果你是Python爱好者,我建议你学习以太坊的Python实现。虽然道事件闹得沸沸扬扬,但从技术实现的角度来看,还是很值得借鉴的。以太坊官方定位为开发和管理分布式应用的平台,专注于“智能合约”,并为其定制了一种编程语言Solidity。以太坊的核心是以太坊虚拟机(EVM),允许用户根据自己的意愿创建操作。以太坊给出了Go,Java,Python等语言的实现。基于python的实现主要包括三个部分:Pyethapp是客户端部分;以太坊是核心库,实现了区块链、以太坊模拟器挖矿等功能。Pydevp2p是一个对等网络库,实现了节点发现、契约代码传输、加密和签名等功能。这三者的结合是一个完整的区块链实现,后两个核心库一起构成了协议层。另外,go-ethereum是go语言的完整实现;Ethereum(J)是一个纯Java实现,作为一个库提供,可以嵌入到任何Java/Scala项目中。在客户端,有Rust、Ruby、Javascript等语言的实现。

官方网站:https://ethereum.org

来源图书馆:https://github.com/ethereum/pyethapp

Python知识库:http://lib.csdn.net/base/python

(4)走

多核时代,Go语言非常流行。它可以让你以同步的方式轻松实现高并发,尤其是在分布式系统、网络编程等领域。它被广泛使用。在区块链开发领域,也有很多项目使用Go语言。

其中以linux基金会为主的HyperLeger和名为Fabric的版本库就是其中之一。这个项目试图为新一代交易应用创建一个开放的分布式账本标准,并支持授权区块链(这种方法可能无法重现比特币强大的网络效应)。Fabric的开发环境建立在VirtualBox虚拟机上。部署环境可以自建网络,也可以直接部署在BlueMix上。部署方式可以是docker,支持用Go和JavaScript开发智能合约。它采用PBFT分布式算法,在网络编程中使用gRPC进行P2P通信,并使用协议缓冲区对要传输的数据结构进行序列化。在架构设计方面,Fabric可能与比特币等区块链产品有所不同,但上述基本组件仍然不可或缺。

官方网站:https://www.hyperledger.org

来源图书馆:https://github.com/hyperledger

Go知识库:http://lib.csdn.net/base/go

其他编程语言,比如C#,也有具体的例子,这里就不一一列举了。根据不同的编程语言,具体的编码或者架构设计可能会有很大的差异,但是协议层使用的技术并没有太大的变化。网络编程是重点和难点。大部分都没有现成的框架可用,都是利用编程语言本身提供的库来设计开发的。所以比较低级,很考验开发者的编码技巧

区块链是什么

我把与区块链相关的知识分为以下几个方面:

(1)基础知识

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

(2)技术实现

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

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

(4)开发环境

区块链是多种技术的结合,有其自身的复杂性。单个应用程序严重依赖于开发环境。搭建开发工具和环境是开发者快速入门的重要内容。

(5)项目实践

短短几年间,全球已有数千种区块链产品,其中许多都有创新应用。一些优秀开源产品和项目实践是最好的学习和研究资料。

(6)开发文档。

有兴趣的开发者整理的一些资源可以帮助我们节省大量的查询时间。

上面,我们已经描述了区块链技术基础设施。需要再次强调的是这只是一种实现方式,并不是所有的区块链产品都是如此。我们也期待更多的创新。

00-1010编程实现列举了几种编程语言及其典型产品。因为协议层技术比较低,所以没有太多现成的框架可以介绍或者讨论。这些产品都是开源产品,你可以根据自己的技术背景进一步查看相应产品的源代码,很快就能明白其中的玄机。

在考虑这个知识体系的过程中,我考虑过用比特币、竞技币、智能合约、数字资产、智能资产等特定领域作为分类方法,但又怕会限制自己的思维。随着区块链的发展这张地图会不断修订。

在此,呼吁看了这篇文章朋友们提供你们的宝贵意见。让我们把这张关于区块链的知识分类图做得更加科学合理,使用起来更加方便。

版权声明:区块链游戏平台 发表于 2022-04-24 0:03:07。
转载请注明:区块链科技最全面的分析总结(附知识图谱) | 零零洞洞

暂无评论

暂无评论...