自学区块链——原理、技术及应用(txt+pdf+epub+mobi电子书下载)


发布时间:2020-09-01 04:25:37

点击下载

作者:范凌杰,郑洁霁

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

自学区块链——原理、技术及应用

自学区块链——原理、技术及应用试读:

前言

区块链技术是近些年来最热门的前沿技术,被认为是未来十几年对金融、物联网、医疗等诸多领域产生最大影响的“黑科技”之一。“区块链”这个概念是由一个网名为中本聪的人在2008年发表的《比特币:一种点对点的电子现金系统》中提出的。随后他实现了一个比特币系统,并发布了加密数字货币——比特币,接下来出现了以太坊和超级账本这样的大型区块链项目。区块链技术在全球范围内引起了广泛关注,并势不可挡地影响着多个行业的发展趋势。

目前,区块链正处于迅猛发展阶段,急需区块链方面的技术人才。本人根据自己的实践经验,尝试写了这本易懂实用的区块链教程,希望能够帮助想学习区块链技术的朋友。

内容组织与阅读建议

本书主要分为两部分,第一部分是理论知识,介绍区块链技术的概念、原理、架构设计和发展历程;第二部分是应用开发,在掌握理论知识的基础上结合丰富的实践案例进行操作,在实践中深入理解区块链技术,通过学习和实践主流的区块链平台和框架,掌握区块链实际应用开发能力。

➢第1章:区块链概述:从区块链的概念和运行原理说起,继而介绍区块链的技术构成、逻辑架构和分类,然后介绍区块链的发展历程和典型应用。学完这一章可以对区块链有一个整体的认识,明白区块链是什么,能做什么。

➢第2章:区块链中的密码学:学习区块链中的密码学知识,掌握区块链技术原理,包括对称加密算法和非对称加密算法、椭圆曲线密码学、Merkle树、数字签名和数字证书等知识。

➢第3章:区块链的核心机制:这一章介绍了区块链核心技术,包括共识机制、账户交易和智能合约等。

➢第4章:打造自己的第一个区块链——基于Python:从本章开始进入动手实践区块链的阶段,本章基于Python实现一个功能完备的区块链系统。

➢第5章:以太坊之DApp开发实战:以太坊是专注于智能合约,开发并运行DApp的区块链平台,这一章介绍了以太坊中DApp(去中心化应用)的概念和开发,并实现了两个完整的DApp(猜拳游戏和宠物商店)。

➢第6章:超级账本开发实战:超级账本是一个开源项目,它提供了一个成熟的商用区块链框架。这一章介绍了它的概念、学习安装和使用,并通过超级账本中的几个实例学习掌握超级账本的开发过程。

➢第7章:EOS开发实战:EOS是一个区块链操作系统,这一章介绍了什么是EOS,以及它的框架和特点,并介绍了搭建一个EOS本地开发环境的过程,在此基础之上,通过实例(Hello World智能合约和许愿树DApp)介绍了EOS的开发流程。

➢第8章:区块链开发综合应用实践:通过讲解几个综合性的区块链开发实例,以太坊数据查询分析系统、ERC20代币、数字资产“加密猪”的开发,进一步介绍区块链技术的应用。

本书特色

本书一大特点是,结合区块链的开发实践,介绍了包括Python语言、Solidity语言、Go语言、Docker容器技术和前端开发技术在内的多种实际开发中经常用到的技术和工具。通过本书的学习,读者朋友不仅能快速上手开发区块链项目,更能初步了解、掌握多种实用的软件开发技术,非常有助于读者建立基本的开发能力,打下从事多种应用领域开发的基础。

需要说明的是,本书在介绍各类开发技术时重在实现功能,完成任务,并未花费大量篇幅介绍相关理论和知识体系,为零基础或者有一定基础的读者朋友,打开通往区块链开发乃至软件开发精彩世界的大门才是本书要达到的目标。

本书适用读者

本书可以作为零基础区块链爱好者自学用书,也可作为开设区块链开发相关课程的各类院校、培训机构的教材。

配套资源

本书配有所有案例的相关代码,读者都可以访问https://github.com/flingjie/learning-blockchain自行获取。

致谢

感谢每一位在茫茫书海中选择了本书的读者朋友,衷心祝愿您能够从本书中受益,学到真正需要的知识。同时也期待每一位读者的热心反馈,随时欢迎您指出书中的不足,并通过电子邮箱fanlingjie.cn@gmail.com与作者沟通和交流。范凌杰 于上海2018年11月

第1章 区块链概述

区块链(Blockchain)是近些年来极为热门的前沿技术名词,区块链技术被认为是未来十几年对金融、物联网、医疗等诸多领域产生影响最大的“黑科技”之一。

本章将介绍区块链的基本概念、技术构成与逻辑架构、区块链的分类、特点、发展历程、典型应用,区块链技术的现状及展望。通过学习本章的内容,读者可以对区块链有一个整体的认知,理解什么是区块链,了解区块链的原理架构和典型应用,以及区块链能用来做什么。

本章学习目标

●了解区块链的基本概念和几个重要的发展阶段。

●理解区块链的原理和架构设计。

●熟悉区块链的典型应用。

●掌握区块链的现状和发展方向。

1.1 什么是区块链

区块链是近年来社会上的一个热门词汇,经常在各种新闻媒体上可以看到区块链的相关报道。但在区块链被广泛谈论的过程中,人们对区块链这个新鲜事物在认知上还存在不少的误区的。这里将常见的认知误区整理如下。

●区块链是比特币,比特币也就是区块链。

●区块链很值钱。

●区块链可以运用在任何领域。

●区块链是免费的。

●区块链是非常安全的。

下面,分别对以上的误区进行分析和澄清。

比特币和区块链是有很深的渊源(在区块链发展历程中会有详细介绍),但比特币和区块链两者不能等同。实际上,区块链是比特币的底层技术,好比用面粉可以做包子,但不能说面粉等于包子,包子等于面粉。这里的区块链相当于面粉,而比特币相当于包子。除了比特币外,还有很多其他的基于区块链技术的应用。

区块链的确是一种很神奇的技术,很有可能就像当初互联网技术改变世界一样再次重构整个世界,但区块链本身只是一种技术,真正产生价值的是应用区块链技术产生的落地服务。

区块链不是万能的,当前区块链只会对某些领域,如金融、供应链等区块链适用的行业产生重大影响,区块链在其他行业的使用场景还有待研究。

区块链是有成本的,区块链中的每一个“区块”通常都需要用大量的运算来解决,为支持区块链服务的所有设备的耗电量成本相当不菲。

和传统的互联网相比,区块链在安全性方面有着天然的优势。非对称加密保证了交易数据的安全性;分布式存储和记账显著降低了数据被篡改、网络受攻击以及网络瘫痪的可能性。但区块链现在还处在初步发展阶段,其技术本身可能还存在一些漏洞,这些漏洞会被那些恶意的黑客利用去实施一些破坏行为,所以说区块链的安全是相对的,并不是绝对安全。

实际上应该还会有一些其他的思维误区,这里就不再一一讨论了。澄清了这么多误区,那么,回过头来看,究竟什么是区块链呢?

1.1.1 区块链的概念

“区块链”这个概念是一个网名为中本聪的人在2008年发表的《比特币:一种点对点的电子现金系统》中提出的。其描述如下。

时间戳服务器对以区块(Block)形式存在的一组数据实施随机散列并加上时间戳,然后将该随机散列进行广播,就像在新闻或世界性新闻组网络(Usenet)的发帖一样。显然,该时间戳能够证实特定数据于某特定时间是的确存在的,因为只有在该时刻存在了才能获取相应的随机散列值。每个时间戳应当将前一个时间戳纳入其随机散列值中,每一个随后的时间戳都对之前的一个时间戳进行增强(Reinforcing),这样就形成了一个链条(Chain),即区块链,如图1-1所示。图1-1 区块链的链条结构

构成区块链的区块是基于密码学生成的,每一个区块包含了前一个区块的哈希值(由加密算法生成的)、对应的时间戳记录以及交易数据等信息(对区块结构的详细介绍参见下一节相应内容)。本质上,区块链是包含这些交易记录的分布式系统,类似于一个账本。所以,区块链也被称为分布式账本系统。

这个分布式账本系统是由分布式系统中的诸多结点共同创建和维护的一个链表。链表由基于密码学原理生成的一个个区块组成。其中每个区块包含了交易者的公钥、金额、时间等交易信息,区块链的链表结构如图1-2所示。图1-2 区块链的链表结构

不过,分布式账本系统是区块链狭义上的含义。广义上来说,区块链是一个统称,除了基于区块链结构的分布式账本系统,它还包括共识机制、智能合约、点对点网络、自治社区等一系列和分布式账本相关的功能。可以将区块链看作是很多个技术的组合。

了解了区块链的概念后,接下来认识一下构成区块链的区块到底是什么。

1.1.2 区块的概念

区块是区块链的组成单元,就像金字塔是由一块块石头组成的一样,区块链就是由一个个区块组成的。

1.区块

从本质上说,区块链中的区块是由一系列特征值和一段时间内的交易记录组成的一个数据结构。这里以比特币区块为例进行说明。

登录比特币区块查询网站:https://webbtc.com/可以看到最新生成的比特币区块信息。本节截取了2016年12月17日生成的十几个区块的列表信息,如图1-3所示。

图中的3列信息依次为区块的高度(Height)、区块的哈希值(Hash)和区块的生成时间(Time)。单击第一个区块可以查看这个区块的详情,如图1-4所示。详情信息包括区块的哈希值(Block)、高度(Height)、父区块哈希值(Prev Block)和一系列交易信息(Transactions)。详情信息中,前一个Transactions后面跟的数字是这个区块包含的交易总量,下面的Transactions则显示了一个个具体的交易数据)。图1-3 比特币区块信息图1-4 比特币区块详情

单击Formats中的“json”项可以以Json格式显示这个区块的信息,如图1-5所示。图1-5比特币区块的详情以Json格式显示

这个区块的数据结构看上去有点复杂,但没关系,通过接下来的详细解释后就很容易理解了。

2.区块的结构

区块的数据结构由区块头和区块体组成。区块头包含了当前区块的特征值,区块体中包含的是实际的交易记录数据。(1)区块头

区块头由80个字节组成,主要由版本号、前一个区块的哈希值、Merkle根、时间戳、bits、Nonce这几项区块的特征值组成,如图1-6所示。图1-6 区块头

其中ver(版本号)表示本区块遵守的验证规则;prev_block(父区块哈希值)就是这个区块连接的上一个区块的哈希值,mrkl_root根是该区块链交易的Merkle树根的哈希值(Merkle是一种哈希树的数据结构,在第2章中会详细讲解),时间戳是区块生成的时间,bits是区块的难度值Nonce是一个随机数,其中各个字段的长度和详细说明如图1-7所示。图1-7 区块头组成(2)区块体

区块头下面的部分是区块体,如图1-8所示。图1-8 区块体

区块体主要包括交易数量(n_tx)、区块大小(size)和长度不定的交易记录(tx字段包含的交易列表)等信息。但这只是比特币中的区块体结构,实际上区块体中可以包括任何内容,比如以太坊中的区块体中除了交易数据还包含智能合约。

了解了区块结构,再来看看区块的特点。

3.区块的特点

区块的一个特点是,它是由计算机通过加密算法生成的。如果成功地生成一个有效的区块,该计算机(或者说结点)就能获得一定的奖励,这个奖励就是加密数字货币。这一过程就像是在开采有价值的矿产,故而被形象地称为“挖矿”,执行操作的计算机被称为“矿机”,用矿机挖矿的人也就被称之为“矿工”了。

除此之外,区块还有一个特点,若区块是有效的,则该区块的哈希值必须满足一定的条件。这个条件就是能够使得区块头中特征值相加生成的哈希值符合一定格式,比如以000开始。由于哈希值随着输入的不同而不同,故计算机要不断尝试改变区块头的Nonce值直至最终生成的哈希值满足条件才算生成了一个有效的区块,如图1-9所示。图1-9 生成有效区块

寻找特定Nonce值生成有效区块的机制叫作工作量证明。工作量证明是常见的共识机制之一,关于共识机制的内容将在第3章中详细讲解。

在区块结构中各个字段也有其各自的特点和作用,如图1-10所示。图1-10 区块中的字段

区块结构中字段的说明如下。

●索引标示了区块在区块链中的位置,其中第1个区块——创世区块的索引为0,第2个区块的索引为1,第3个区块的索引为2,依次累加。

●时间戳表示的是该区块生成的时间,根据时间戳可以判断区块链中各个区块生成的先后顺序。

●哈希值是每个区块的唯一标示,也可称为区块的“数字指纹”。哈希值的长度是固定的,而且和区块内容紧密关联,一旦区块内容发生改变,该区块的哈希值也会发生改变。而且,区块中的哈希值还有有效和无效之分,满足特定条件的哈希值是有效的,否则就是无效,这个特定条件一般称之为困难度(Difficulty)。父区块哈希值就是区块链中特定区块前一个区块的哈希值。

●区块中的数据可以是任何内容,比特币区块链的区块中的数据为一串串交易记录。

●Nonce是一个随机数,用来生成一个有效的哈希值。Nonce会根据区块数据的不同而不同,每个区块都需要经过大量计算才能找到对应的Nonce值。关于Nonce值的概念会在下一节详细介绍。

●创世区块。区块链中的第1个区块叫作创世区块,它没有父区块,故创世区块的父区块哈希值为空或者为0。

以上就是区块的特点,区块链的很多特性都是基于区块的这些特点。接下来介绍区块链的运行原理。

1.1.3 区块链的运行原理

如1.1.1节所述,区块链是一个链表,这个链表由一个个区块组成,这些区块依次连接,形成一个不可篡改的链条。每个区块包含了索引、时间戳、父区块哈希值、交易数据、Nonce值、本区块的哈希值等信息。那么这个链表具体是怎么生成和维护的?

首先是构成区块链的去中心化网络中的第1个结点初始化,并生成区块链中的创世区块;然后通过“挖矿”生成的新区块被添加到区块链中;新的结点加入到去中心化网络后会先同步一份最新的区块链数据;随后每个结点生成的区块都会向网络中的其他结点进行广播;其他结点接收到这个结点的广播后会判断自己是否已经收到过这个区块,若已收到就忽略,若未收到过则先验证这个区块的有效性,有效的区块会被收到广播的结点添加到自身结点的区块链中。

对于区块链的运行原理通过文字的描述有点过于抽象,下面读者结合一个区块链的演示网站自己动手模拟生成一个区块链,这样可以对区块链有一个更加直观的认识。

1.1.4 模拟生成一个区块链

这个区块链演示网站的网址是https://blockchaindemo.io/,下面介绍生成一个模拟区块链的具体操作。

1)在浏览器中输入网址https://blockchaindemo.io/,打开该网站,可以看到其页面包括4个区域,左上角是区块链中的所有结点信息,右上角有一个“Add Peer”按钮可以往区块链中添加结点,中间部分是区块链中的区块信息,最下面的“ADD NEW BLOCK”按钮可以添加一个新区块。默认区块链中有一个结点“Satoshi”(中本聪的英文名)和一个创世结点,如图1-11所示。图1-11 区块链演示网站的操作界面

这个模拟区块链的区块中,包括数据、父区块哈希值、当前区块哈希值、索引、时间戳、Nonce这6个字段,如图1-12所示。图1-12 模拟区块的结构

其中创世区块的索引是0,这里没有显示索引值而是显示了“GENESIS BLOCK”;判定哈希值有效的标志是以000开头。下面再添加几个区块。

2)创建两个新的区块。两个区块中填写的数据分别是“The Second Block”和“The Third Block”,输入数据后单击数据下面的“ADD NEW BLOCK”按钮,该网站会为这两个新区块自动生成有效的哈希值并与之前的区块连接起来,如图1-13所示。图1-13 新增两个区块

图中可以看到本区块的父区块哈希值(PREVIOUS HASH)即为上一个区块的哈希值,索引值依次增加。

3)修改区块信息使其无效。由于区块的哈希值由区块的数据、父区块哈希值、区块索引、时间戳、Nonce一起生成的,其中任何一个数据的改变都会导致哈希值改变,而哈希值改变会导致区块的无效,即哈希值不以000开头。比如将创世区块的内容后面加上“It changed.”,那么哈希值会变成无效的,区块的颜色也由绿色变成红色(绿色代表有效,红色代表无效),如图1-14所示。

因为后面的区块用到了前面区块的哈希值,故一个无效区块也会导致连接在该区块后面的区块无效。若要修复这些区块,则需要单击每个区块右下角的修复按钮对每个区块再重新进行一遍计算,或者说“挖矿”,如图1-15所示。图1-14 修改区块值导致区块无效图1-15 修复区块链

修复后的区块又会变成绿色,恢复有效状态。这是添加和修复区块的方法。但当前区块链中只有一个结点,下面演示多个结点的情况。

4)增加新结点。单击右上角的“Add Peer”按钮生成一个新的结点,这样区块链中就有了两个结点,如图1-16所示。图1-16 创建新结点

想要切换结点只要单击相应的结点就可以了。结点有3种颜色显示,蓝色表示当前结点,绿色表示和当前结点相连,红色表示未和当前结点相连。红色的结点下面有一个按钮,用来进行连接,鼠标悬浮到这个按钮上显示绿色,单击此按钮进行连接。

5)连接结点。单击结点“Rita”下的连接按钮进行连接后,可以看到“Rita”结点颜色变成了绿色,表示已连接,并且结点下面多了一个按钮,即消息列表按钮,结点右上角的数字表示消息的个数,如图1-17所示。图1-17 连接结点

单击消息列表按钮可以显示消息记录,如图1-18所示。消息列表中会显示每个连接、区块请求、区块发送等信息。图1-18 消息列表

6)同步区块信息。结点之间会互相同步区块信息。单击“Rita”结点,可以看到“Rita”结点下也包含了“Satoshi”结点中的3个区块,如图1-19所示。

通过上述模拟生成区块链的过程,可以让读者对区块链的运行原理和区块同步过程有很直观的认识。区块链中的结点始终都将最长的链条作为正确的链,并持续延长和维护这条链。当结点发现有更长的链条并且本身的链条不是最新时,就会使用最长的链条替换当前结点的链条。若一个结点判断出本身的区块链是最新的,再收到新的区块信息时,结点就会把新的区块添加到自身链条的最后。

值得注意的是,当一个区块链的结点掌握了整个区块链中51%以上的计算能力时,它就可以重写整个区块链。基于这个原因,区块链中的计算能力过度集中会很危险。只有一个庞大且均匀分布的区块链才比较安全。图1-19 同步区块信息

通过模拟生成一个区块链真实感受了区块链的特性之后,接下来介绍区块链的技术构成和逻辑架构。

1.2 区块链的技术构成与逻辑架构

1.2.1 区块链的技术构成

广义上说,区块链由分布式账本、共识机制、智能合约、去中心化网络等技术构成。分布式账本前面已经讲解过了,下面依次讲解其余的区块链的技术构成。

1.共识机制

共识机制是区块链中的重要机制,不同的区块链项目可能使用不同的共识机制。网络中各个结点根据共识机制达成共识,共同维护整个区块链网络。如果把一个区块链网络比作一个公司,那么共识机制就好比这个公司的关键绩效指标(Key Performance Indicator,KPI)。公司根据KPI对员工进行奖惩,完成KPI的员工会获得奖励,没完成的就没有奖励。同样,区块链网络根据共识机制对链上的各个结点进行奖惩(关于共识机制的概念和种类将在第3章详细介绍)。

2.智能合约

智能合约不是区块链的必要组成,它是区块链2.0之后出现的技术。还是把区块链比作一个公司,智能合约相当于公司中的规章制度,员工工作的时候会依据规章制度行事,而在有智能合约的区块链中,链上的结点会依据智能合约进行工作。

3.去中心化网络

去中心化网络不同于中心式网络。在中心式网络中,需要中心服务器,好比一般公司都有CEO的角色,公司的发展和运作都要根据CEO这个中心制定的策略进行,如图1-20所示。而在去中心化网络中,每个结点的地位和权益都是平等的,结点之间可以相互连接,如图1-21所示。图1-20 中心式网络示意图图1-21 去中心化网络示意图

在去中心化网络中,各个结点之间可以发生交易,结点可以自由地加入和退出网络,如图1-22所示。图1-22区块链中的结点

1.2.2 区块链的逻辑架构

从架构上说,区块链大致可以分为4层,从下到上依次为数据层、网络层、合约层和应用层,如图1-23所示。图1-23 区块链的逻辑架构

1.数据层

数据层是区块链的逻辑架构中最基础的一层,功能主要包括区块数据的存储、哈希值和Merkle树的计算以及链式结构的生成,其中进行数据的存储时需要重点考虑数据存储的性能和稳定性。在比特币和以太坊中的存储功能选择的是LevelDB数据库。LevelDB是谷歌实现的一个非常高效的键值(Key-Value)数据库,目前最新的版本1.2能够支持万亿级别的数据量。基于良好的结构设计,LevelDB数据在万亿数量级别下的数据存储应用场景中有着非常高的性能表现。

数据层的功能是把交易数据存储到区块中并将区块加入到区块链中。当结点之间发生交易后会将交易数据广播到区块链的去中心化网络上,网络中其他结点负责校验这些交易。交易被确认有效后会存储到区块中,并加入到区块链。比如,张三转账给李四0.2比特币,王五转账给赵六0.5比特币,孙七转账给周八0.1比特币。这些转账信息被广播到区块链的去中心化网络中后由结点A最先确认,然后结点A通过共识算法(或者说“挖矿”)生成一个新的区块,新的区块被加到区块链上生成一个更长的区块链,如图1-24所示。图1-24 数据层

2.网络层

网络层主要包括P2P网络和共识算法两个组成部分。P2P(Peer to Peer)网络也称为点对点网络或对等网络,根据去中心化程度的不同可以将其分为纯P2P网络、杂P2P网络和混合P2P网络,下面比较一下这几种网络的特点。

1)纯P2P网络的特点如下。

●结点同时作为客户端和服务器端。

●没有中心服务器。

●没有中心路由器。

2)杂对等网络的特点如下。

●有一个中心服务器保存结点的信息并对请求这些信息的客户端做出响应。

●结点负责发布信息(因为中心服务器并不保存文件),让中心服务器知道哪些文件被共享,让需要的结点下载其可共享的资源。

●路由终端使用地址,通过被一组索引引用来获取绝对地址。

3)混合P2P同时含有纯P2P和杂P2P的特点。

流行的下载工具BT、迅雷等都是基于P2P网络的,这些下载工具的主要功能是进行文件资源分享,可能会选择杂P2P网络或混合P2P网络。而在区块链技术中P2P网络的作用是让网络中的所有结点一起平等地参与维护这个区块链的分布式账本,使用的是纯P2P网络。

但P2P网络中,各个结点需要对区块链中的各个区块达成共识才能共同维护同一分布式账本。这个共识的机制就是共识算法,比较最为常用的共识算法有工作量证明机制(Proof of Work,PoW)、权益证明机制(Proof of Stake,PoS)、股份授权证明机制(Delegated Proof of Stake,DPoS)等,这些共识算法会在第3章中详细讲解。

3.合约层

合约层的功能使得区块链中的区块具有可编程的特性,比如比特币网络中可以通过编写简单的脚本实现这个功能。加入了智能合约的区块链(区块链2.0),具备了更加强大的编程功能,使得区块链可以在满足特定条件后自动触发相应的操作。

合约层赋予了区块链智能的特性,在区块链中智能合约的作用如同一个智能助理,对区块链中的数据和事件按照预先设定的逻辑进行处理,比如可以通过专门编写的智能合约执行查询余额和存钱的操作,如图1-25所示。图1-25 合约层通过智能合约实现功能

4.应用层

应用层泛指基于区块链技术并结合具体业务场景开发的应用,包括加密数字货币钱包、交易所、去中心化应用等。常见的区块链应用有加密数字货币钱包比特派(如图1-26所示)、类似于微信的去中心化聊天工具BeeChat(如图1-27所示)以及基于以太坊的去中心化应用加密猫(如图1-28所示)等。图1-26 加密数字货币钱包比特派图1-27 聊天工具Beechat图1-28 基于以太坊的去中心化应用加密猫

以上就是区块链的4层模型,下面介绍区块链的分类。

1.3 区块链的分类

随着区块链的快速发展,区块链的应用范围越来越广,不同的区块链应用之间也有了比较大的差异,这里对不同的区块链做一下简单的分类。

1.3.1 公有链、联盟链和私有链

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载