白话区块链(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-15 16:58:47

点击下载

作者:蒋勇,文延,嘉文

出版社:机械工业出版社

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

白话区块链

白话区块链试读:

前言

为什么要写这本书

想要写一本综合介绍区块链的书,这个想法是从2016年年底开始有的。一直以来,关于这方面的资料比较少,能够找到的资料,或着眼于经济金融方面的发展远景,或着重介绍区块链的发展历史,或阐述纯技术化的内容,读来总是有一种意犹未尽的感觉。而身边的朋友或对区块链完全陌生,或是有很多误解,还有些朋友甚至简单地认为区块链就等于比特币。笔者也曾多次在一些类似读书会的场合对区块链进行较为通俗的介绍,然而很多感兴趣的朋友来自银行、投融资等行业,他们并非都有完备的计算机知识背景,当然也不乏一些希望从事区块链技术开发的程序员。然而即便是用了自认为很通俗的文字和语言来介绍,也难以在短短的一两个小时内讲清楚,对于各种名词术语、各种新鲜概念,每当他们希望我推荐一些资料的时候,我都很头疼。对于一个还没有广为人知的事物,大家的求知欲是很强烈的,并不满足于囫囵吞枣地了解概念,但也不喜欢去啃枯燥深入的技术文字,他们只是希望能有一个系统化的介绍,白话点的,通俗些的,能把每个点都讲到,把技术原理、应用场景、发展历史、当前现状等都贯穿起来。鉴于此,写这么一本书的想法就愈发强烈了。

我自2012年由比特币开始关注区块链技术,一直只在一个小范围的技术圈内进行讨论交流,每每为理解了一个技术概念而欣喜不已。区块链技术绝不仅仅代表一种数字货币,某种程度上,与其说是一门技术不如说是一类思想或者价值观。比特币把区块链技术带入了世人的眼中,以一种“货币”的身份降临,着实带来了不少的神秘感,其带来的理念为后来者所发扬光大,闪电网络、比特股、以太坊、超级账本等,不断冒出各种新的理念和产品,它们都是为了解决某一特定问题以及应用到更多领域而发展起来的。区块链技术的各种特点(分布式、可信任、不可篡改、智能合约等),在与传统技术领域结合的过程中,一定会显示出巨大的优势。事实上这两年区块链技术的发展可以说是势如破竹,相当迅猛,国内外都开始有大量的机构或者企业投入研究,力图能够抓住这未来的一缕阳光。

这一切,都要从全面了解区块链开始。

本书将呈现给读者一个全方位的视角,从技术到应用以及未来展望,以通俗的语言阐述区块链的各个技术点,力求给读者一个通透的讲解,并希望能抛砖引玉,引导读者拓展出新颖而有价值的思路。本书特色

从章节安排来说,本书从比特币开始,到区块链技术的骨骼(密码算法)和灵魂(共识算法),再到目前知名的系统,最后到从零开始构建一个微型区块链系统。读者的学习是一个由生到熟的渐进过程,对区块链完全陌生的读者,可以先从章节中的非专业技术部分读起,对于已经有一定基础的读者,可以从中挑选感兴趣的内容。

从内容安排来说,除了概念与原理的介绍之外,更多的是各种示例以及图表,以大量示例介绍比特币的源码编译、以太坊智能合约的开发部署、超级账本Fabric的配置使用、模拟比特币的微型区块链系统的设计实现等。阐述中会使用各种示意图,形象、直观地帮助读者理解各个概念和过程。

行文风格方面,力求白话通俗,避免枯燥感,使阅读体验更好。读者对象

·希望进行区块链开发的程序员。

·希望投资或参与区块链项目的人员。

·对区块链感兴趣的爱好者。如何阅读本书

第1章 介绍区块链的技术组成,并以比特币为例介绍各种基础技术原理。

第2章 综合介绍目前的各种区块链应用,为后面的技术介绍铺垫场景。

第3章 介绍现代密码算法在区块链中的作用。

第4章 介绍各种网络共识算法。

第5章 介绍区块链的链内外互联扩展技术。

第6章 详细介绍以太坊的技术结构以及智能合约开发。

第7章 详细介绍超级账本项目以及Fabric的配置使用。

第8章 详细介绍如何从零开始设计一个微型区块链系统(简称微链)。

第9章 介绍目前出现的各种区块链技术问题。勘误和支持

由于笔者水平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果你有更多的宝贵意见,欢迎通过微信或邮件进行讨论。你可以通过微信Cshen003、微博@行者C神,或者发送邮件到邮箱tnix_blockchain@outlook.com联系到我,我会尽量给出满意的解答,期待能够得到你们的真挚反馈,在技术之路上互勉共进。致谢

感谢我的作者伙伴——文延和嘉文,他们在工作之余,挤出宝贵的时间为本书贡献了他们对区块链技术的深入理解以及应用的展望分析,他们的专业和敬业令我感到钦佩。

感谢韩璐女士为本书做的审核工作,为书稿的内容质量付出了辛勤的劳动。

感谢比特币社区、以太坊社区、超级账本社区以及巴比特论坛各位技术专家,每次阅读他们的技术文章都让我有所收获,本书也多处引用了他们的观点和思想。

感谢中本聪,是他带来了区块链!特别致谢

最后,感谢父母从小对我的培养,他们为我创造了良好的学习环境并培养了我爱好读书的习惯,这个习惯将伴随我终生并使我受益匪浅。因为工作和写书,牺牲了很多陪伴家人的时间,所以我更要感谢太太王晓英长期以来对我的默默支持,以及女儿Cindy对我工作的理解。

谨以此书献给我最亲爱的家人,多年以来帮助、支持我的朋友们,以及众多热爱区块链技术的朋友们!蒋勇第1章初识区块链

本章我们将从区块链的原理及分类、技术组成、技术特点等出发来初步介绍区块链的概念,并通过分析比特币的结构让大家对区块链有一个感性的认识。比特币作为区块链技术的第一个应用,它的原理设计影响深远。1.1 例说区块链1.1.1 从一本账本说起

早些时候,农村一般都会有个账房先生,村里人出个工或者买卖些种子肥料等,都会依靠这个账房先生来记账,大部分情况下其他人也没有查账的习惯,那个账本基本就是这个账房先生保管着,到了年底,村长会根据账本余额购置些琐碎物件给村里人发发,一直以来也都是相安无事,谁也没有怀疑账本会有什么问题。账房先生因为承担着替大家记账的任务,因此不用出去干活出工,额外会有些补贴,仅此一点,倒也是让一些人羡慕不已。下图便是当时账本的记账权图示:

终于有一天,有个人无意中发现了账房先生的那本账。看了下账面,发现数字不对,最关键的是支出、收入、余额居然不能平衡。对不上,这可不行,立即报告给其他人,结果大家都不干了,这还得了。经过一番讨论,大家决定,轮流来记账,这个月张三,下个月李四,大家轮着来,防止账本被一个人拿在手里。于是,账本的记账权发生了如下图所示的变化:

通过上图我们可以看到,村里的账本由大家轮流来保管记账了,一切又相安无事了,直到某一天,李四想要挪用村里的公款,可是他又怕这个事情被后来记账的人发现,怎么办呢?李四决定烧掉账本的一部分内容,这样别人就查不出来了,回头只要告诉大家这是不小心碰到蜡烛,别人也没什么办法。

果然,出了这个事情以后,大家也无可奈何。可是紧接着,赵六也说不小心碰到蜡烛了;王五说不小心掉水里;张三说被狗啃了……终于大家决定坐下来重新讨论这个问题。经过一番争论,大家决定启用一种新的记账方法:每个人都拥有一本自己的账本,任何一个人改动了账本都必须要告知所有其他人,其他人会在自己的账本上同样地记上一笔,如果有人发现新改动的账目不对,可以拒绝接受,到了最后,以大多数人都一致的账目表示为准。

果然,使用了这个办法后,很长一段时间内都没有发生过账本问题,即便是有人真的不小心损坏了一部分账本的内容,只要找到其他的人去重新复制一份来就行了。

然而,这种做法还是有问题,时间长了,有人就偷懒了,不愿意这么麻烦地记账,就希望别人记好账后,自己拿过来核对一下,没问题就直接抄一遍。这下记账记得最勤的人就有意见了。最终大家开会决定,每天早上掷骰子,根据点数决定谁来记当天的账,其他人只要核对一下,没问题就复制过来。

我们可以看到,在这个时候,账本的记账权变成了这样:

通过上图,我们可以看到,经历了几次风雨之后,大家终于还是决定共同来记账,这样是比较安全的做法,也不怕账本损坏丢失了。后来大家还决定,每天被掷到要记账的人,能获得一些奖励,从当天的记账总额中划出一定奖励的比例。

实际上,最后大家决定的做法,就是区块链中记账方法的雏形了,接下来我们就来了解一下区块链的技术理念。1.1.2 区块链技术理念

区块链在本质上就是一种记账方法,当然了,并不是通过人来记账的,而是通过一种软件,我们暂且简称为区块链客户端。以上面的例子来说,张三、李四、王五、赵六等人,就相当于一个个的区块链客户端软件,它们运行在不同的设备上,彼此之间独立工作。通常我们把运行中的客户端软件称为“节点”。这些节点运行后,彼此之间会认识一下。它们彼此之间是这样认识的:张三认识李四也认识王五,赵六联系到了张三,让张三把他认识的人的联系方式发给自己,这样赵六也认识了李四和王五,通过这样的方式,大家就形成了一张网,有什么事只要招呼一声,立马消息就会传遍整个网络节点。这种方式跟新闻转发差不多,不需要依靠某一个人,大家就能互通消息了,在区块链软件的结构中,这种互相通信的功能称为“网络路由”。

在这个网络中,每个节点都维护着自己的一个账本,账本中记录着网络中发生的一笔笔账务。具体是什么样的账务呢?这得看具体是什么样的功能网络。区块链技术属于一种技术方法,可以用来实现各种不同的业务功能,小到如上例中的日常记账,大到各种复杂的商业合约,等等,记录的数据也就不同了。网络中的节点是独立记账的,可是记账的内容要保持彼此一致。所用的方法就是设定一个游戏规则,通过这个规则选出一个记账的节点,就如上例中的掷骰子。在区块链系统中,这个所谓的“掷骰子”称为“共识算法”,就是一种大家都遵守的筛选方案,我们可以先这么简单地理解。选出一个节点后,则一段时间内的账务数据都以这个节点记录的为准,这个节点记录后会把数据广播出去,告诉其他的节点,其他节点只需要通过网络来接收新的数据,接收后各自根据自己现有的账本验证一下能不能接得上,有没有不匹配和不规范的,如果都符合要求,就存储到自己的账本中。

在有些系统中,会考虑到被骰子投中的节点的劳动付出,毕竟它要负责整理数据,验证数据,打包数据,还要再广而告之,这个活还是挺辛苦的。于是会设计一种激励机制,负责打包数据的那个节点可以获得系统的奖励,这个奖励类似于论坛积分,站在软件技术的角度,就是一个数据。这个数据可以视为奖金,有时候大家会很积极地去争取那个奖金,于是就希望骰子能投中自己,有些区块链系统在这个环节会设计出一种带有竞争的机制,让各个节点去抢,谁能抢到这个机会谁就能获得打包数据的权力并且同时获得这笔奖励,在这种情况下,我们会形象地将这个竞争的过程称为“挖矿”。

那么,话又说回来了,我们将一个个运行客户端称为节点,那到底怎么标记不同的使用者呢?也是通过用户名注册吗?实则不然。在区块链系统中,这个地方的设计很有意思,是通过一种密码算法来实现的,具体来说是通过一种叫公开密钥算法的机制来实现的。我们知道,对于一种密码算法来说,无论算法过程是什么样的,都会有一个密钥。而公开密钥算法拥有一对(也就是两个)密钥,跟虎符一样,是彼此配合使用的,可以互相用来加解密。其中一个叫私钥,另外一个叫公钥,公钥可以公开给别人,私钥要自己保管好。在区块链系统中,公钥就是用来用户身份识别的,一般不会直接使用公钥,因为不容易让人记住。公钥往往都比较长,实际处理的时候都会进行转换,比如取得公钥的最后20个字节或者经过一系列更复杂的转换,最后得到一个称为“地址”的转换结果,这个“地址”就能代表一个用户。

为什么在区块链系统中要用这么一个奇怪的用户身份表示方法呢?似乎看起来除了有些创意外,也没特别的用处。这里我们就得再介绍下这个公开密钥算法的特别能力。之前提到说这种算法有两个密钥,那么这两个密钥是怎么配合工作的呢?我们来简单说明一下:用公钥加密的数据必须用对应的私钥来解密,而用私钥加密(通常称为“签名”)的数据必须用对应的公钥来解密。这个特点可是能发挥很大用处的,就如上述的例子中,如果张三要发送给李四一张支票,那怎么传送呢?就这么发过去,会被那个记账的人拿到,风险可就大了。于是张三想了一个办法,他在支票上用李四的公钥加了个密,然后再签上自己的名字(使用自己的私钥签名),这个时候其他人就算拿到支票也没用,因为只有李四才有自己的私钥,也只有李四才能解开这张支票来使用。这种功能设计在区块链系统中称为“脚本系统”。

现在我们知道了,区块链的技术理念,其实就是大家共同来参与记账,通过一种规则不断地选出账务打包者,其他节点接收验证,并且每个用户都有一对密钥表示自己,通过脚本系统的功能实现在公共网络中定向发送有价值的数据。1.1.3 一般工作流程

通过上面的例子,相信读者朋友对区块链已经有了基本认识。区块链系统有很多种,第一个应用区块链技术的软件就是比特币,事实上区块链的概念就是比特币带出来的。到现在为止,已经出现了相当多的基于区块链技术的衍生系统,比如闪电网络、公证通、以太坊、超级账本项目等。每一类系统都有自己的特点,例如汽车设计,有的设计成跑车,有的设计成运输车,有的设计成商务车,但是有一点,无论是什么类型的车,它的工作方式或者说工作流程都是类似的,在本质上它们都是同一类技术结构的产物。在这一小节,我们从一般性的角度阐述一下区块链系统的工作流程,为了便于说明,我们会选取一些场景例子。

我们先来看一个转账交易的流程。转账交易本质上就是发送一笔数据,这个数据可以表示为资产,也可以表示为订单或者其他各种形式的数据,我们看一下下面的图示。

从图中我们可以看到,整个数据的发送过程其实还是很简单的,数据发送出去后,会被打包进区块,然后广播出去给所有的节点确认,确认没有问题后就写入到各自的本地区块链账本中,当网络中的大多数节点都确认写入后,这个转账过程就算是完成了。有朋友可能会问,在这种分布式的网络中,怎么能知道是被大多数节点确认写入了呢?这里并没有什么服务器登记呀?这个问题我们先留着,在下面讲到区块链分类的时候会有详细的解释,大家可以先思考一下。

这个工作流程图是有代表性的,其他各种系统都是在这个基础上进行衍生和扩展。比如有些会增加身份认证功能,以确保只有符合身份验证的用户才能发送数据;有些则扩展交易数据的表达能力,不但能用来表示一般的交易转账,还能表示更复杂的商业逻辑。各种应用很多,但是万变不离其宗。

实际上,说一千道一万,整个区块链网络,就是大家共同来维护一份公共账本。注意了,这个公共账本是一个逻辑上的概念,每个节点各自都是独立维护自己账本数据的,而所谓的公共账本,是说各自的账本要保持一致,保持一致的部分就是公共账本,我们看下图示:

如图所示,有些节点在广播新的数据,有些节点在接收数据,大家共同维护一个账本,确保达成一致。区块链技术其实就是围绕如何保持数据的一致、如何让这个公共账本的数据不被篡改来展开的。为了解决这些问题,区块链技术拥有一套技术栈,我们通过以下章节来阐述。1.2 区块链技术栈

区块链本身只是一种数据的记录格式,就像我们平常使用的Excel表格、Word文档一样,按照一定的格式将我们的数据存储在电脑上。与传统的记录格式不同的是,区块链是将产生的数据按照一定的时间间隔,分成一个个的数据块记录,然后再根据数据块的先后关系串联起来,也就是所谓的区块链了。按照这种规则,沿着时间线不断增加新的区块,就好像是时光记录仪一样,记录下发生的每一笔操作。

这种数据记录的方式很新颖,在这种记录方式下,数据很难被篡改或者删除。有朋友可能会有说,这有什么不好修改、删除的!比如我在自己电脑上保存了一份Excel数据,再怎么复杂的格式,我也能随便改呀!如果区块链的数据格式只是应用在单机环境或者一个中心化的服务器上,那确实是的,毕竟自己对自己的数据拥有完全的支配权力。然而,一切才刚刚开始,我们接着看。

如果说区块链代表的仅仅只是一个记录格式的话,那么也实在算不上是伟大的发明,也看不出有什么特别的能力,比如难以篡改之类。事实上,区块链是一整套技术组合的代表,在这一组技术的配合下,才能焕发出惊人的能力和耀眼的光芒。区块链系统有很多种,就像聊天软件有很多种,电子邮箱有很多种一样,而无论是什么样的区块链系统,其技术部件的组合都是类似的。就像汽车基本都是由发动机、底盘、车身、电器四大部件组成的,计算机都是由CPU、存储器、输入/输出设备组成的,不管是比特币、莱特币、以太坊还是其他,核心结构和工作原理都是共同的。我们就来看看最基本的技术组合都有哪些:

如图所示,这是区块链系统结构的基本组成,各种系统本质上都是在这个经典结构之上直接实现或者扩展实现。这些零部件装配在一起,组成了一个区块链软件,运行起来后就称之为一个节点,多个这样的节点在不同的计算机设备上运行起来,就组成了一个网络。在这个网络中每个节点都是平等的,大家互相为对方提供服务,这种网络被称为点对点的“对等网络”。为了让大家对这些组成模块的名词有更具体的感受和理解,我们一一来解释一下。

1.区块链账本

如上所述,它表示一种特有的数据记录格式。区块链,就是“区块+链”,所谓的区块就是指数据块的意思,每一个数据块之间通过某个标志连接起来,从而形成一条链,我们看下示意图:

如图所示,一个区块一个区块地衔接。大家可以发现在生活中有很多相似的记录方式,比如企业的会计账簿,每个月会计将记账凭证汇总为账簿并且月结,这样一段时间下来,就按月形成了一个连续账簿,每个月的数据就相当于区块,区块与区块之间通过年月串联起来。以比特币来说,大约是每10分钟产生一个区块,区块中主要包含了交易事务数据以及区块的摘要信息。我们看下比特币中区块链数据的组成示意图:

通过上图我们可以看到比特币中区块链账本的数据组成以及关系,并且可以看到区块数据在逻辑上分成了区块头和区块体,每个区[1]块头中通过梅克尔根关联了区块中众多的交易事务,而每个区块之间通过区块头哈希值(区块头哈希值就是一个区块的身份证号)串联起来。这是一个很有趣的数据格式,它将连续不断发生的数据分成了一个一个的数据块。在下载同步这些数据的时候,可以并行地从各个节点来获得,无论数据先后,到达本地后再根据身份证号组装起来就行。另外,这是一种链条格式,链条最大的特点就是一环扣一环,很难从中间去破坏。比如,有人篡改了中间的2号区块,那么就得同时把2号区块后续的所有区块都更改掉,这个难度就大了。在区块链系统中,一个节点产生的数据或者更改的数据要发送到网络中的其他节点接受验证,而其他节点是不会验证通过一个被篡改的数据的,因为跟自己的本地区块链账本数据匹配不起来,这也是区块链数据不可篡改的一个很重要的技术设计。

这种格式还有个巧妙的地方,如果这个数据总是由一个人来记录的,那自然也没什么,但是如果放到网络中,大家共同来记录这个数据,那就有点意思了,每个区块数据由谁来记录或者说打包,可以有一个规则。比如掷骰子,大家约定谁能连续3次掷出6,那就让他来记录下一个区块的数据,为了补偿他的劳动投入,奖励给他一些收益。比特币正是使用了这样的原理来不断发行新的比特币出来,奖励给打包记录区块数据的那个人的比特币就是新发行的比特币。

2.共识机制

所谓共识,就是指大家都达成一致的意思。在生活中也有很多需要达成共识的场景,比如开会讨论,双方或多方签订一份合作协议等。在区块链系统中,每个节点必须要做的事情就是让自己的账本跟其他节点的账本保持一致。如果是在传统的软件结构中,这几乎就不是问题,因为有一个中心服务器存在,也就是所谓的主库,其他的从库向主库看齐就行了。在实际生活中,很多事情人们也都是按照这种思路来的,比如企业老板发布了一个通知,员工照着做。但是区块链是一个分布式的对等网络结构,在这个结构中没有哪个节点是“老大”,一切都要商量着来。在区块链系统中,如何让每个节点通过一个规则将各自的数据保持一致是一个很核心的问题,这个问题的解决方案就是制定一套共识算法。

共识算法其实就是一个规则,每个节点都按照这个规则去确认各自的数据。我们暂且抛开算法的原理,先来想一想在生活中我们会如何解决这样一个问题:假设一群人开会,这群人中并没有一个领导或者说老大,大家各抒己见,那么最后如何统一出一个决定出来呢?实际处理的时候,我们一般会在某一个时间段中选出一个人来发表意见,那个人负责汇总大家的内容,然后发布完整的意见,其他人投票表决,每个人都有机会来做汇总发表,最后谁的支持者多就以谁的最终意见为准。这种思路其实就算是一种共识算法了。然而在实际过程中,如果人数不多并且数量是确定的,那还好处理些,如果人数很多而且数量也不固定,那我们就很难让每个人都去发表意见然后再来投票决定了,这样效率就太低了。我们需要通过一种机制筛选出最有代表性的人,在共识算法中就是筛选出具有代表性的节点。

如何筛选呢?其实就是设置一组条件,就像我们筛选运动员,筛选尖子生一样,给一组指标让大家来完成,谁能更好地完成指标,谁就能有机会被选上。在区块链系统中,存在着多种这样的筛选方案,比如PoW(Proof of Work,工作量证明)、PoS(Proof of Stake,权益证明)、DPoS(Delegate Proof of Stake,委托权益证明)、PBFT(Practical Byzantine Fault Tolerance,实用拜占庭容错算法)等,各种不同的算法,其实就是不同的游戏玩法,限于篇幅,这里暂不进行算法过程的详述,大家只要知道这些都是一种筛选算法就行了。区块链系统就是通过这种筛选算法或者说共识算法来使得网络中各个节点的账本数据达成一致的。

3.密码算法

密码算法的应用在区块链系统中是很巧妙的,应用的点也很多,我们在这里不详细介绍密码算法的原理,就从几个很关键的应用来介绍一下。

首先我们回顾下区块链账本格式。通过上述讲解我们已经知道,区块链账本就是连接起来的一个个区块。那么到底是通过什么来连接的呢?学过数据结构的朋友都知道,在数据结构中,有一种变量叫指针,它是可以用来指向某个数据的地址的。那么区块的连接是不是通过这样的数据地址呢?生活中的地址连接例子很多,比如路牌、门牌等。然而,区块之间的连接,往往都不是靠数据地址来关联的,而是靠一种叫作哈希值的数据来关联的。什么叫哈希值?这是通过密码算法中的哈希算法计算得出的。哈希算法可以通过对一段数据计算后得出一段摘要字符串,这种摘要字符串与原始数据是唯一对应的。什么意思呢?如果对原始数据进行修改,哪怕只是一点点修改,那么计算出来的哈希值都会发生完全的变化。区块链账本对每个区块都会计算出一个哈希值,称为区块哈希,通过区块哈希来串联区块。这有一个很好的作用就是,如果有人篡改了中间的某一个区块数据,那么后面的区块就都要进行修改,这个时候并不是简单地修改一下后面区块的地址指向就能结束的,由于后面的区块是通过区块哈希来指向的,只要前面的区块发生变动,这个区块哈希就无效了,就指不到正确的区块了。

另外一个对密码算法的应用就是梅克尔树结构,梅克尔树结构在3.1.3节中有详细介绍,我们这里先初步认识下。通过上述解释我们知道,每个区块会被计算出一个哈希值。实际上,除了整个区块会被计算哈希值外,区块中包含的每一笔事务数据也会被计算出一个哈希值,称为“事务哈希”,每一个事务哈希都可以唯一地表示一个事务。对一个区块中所有的事务进行哈希计算后,可以得出一组事务哈希,再通过对这些事务哈希进行加工处理,最终会得出一棵哈希树的数据结构。哈希树的顶部就是树根,称为“梅克尔根”。通过这个梅克尔根就可以将整个区块中的事务约束起来,只要区块中的事务有任何改变,梅克尔根就会发生变化,利用这一点,可以确保区块数据的完整性。

当然,密码算法在区块链系统中的应用还远不止这些,比如通过密码算法来创建账户地址、签名交易事务等,这些应用在后续章节中会逐步介绍。

4.脚本系统

脚本系统在区块链中是一个相对抽象的概念,也是极其重要的一个功能,可以说区块链系统之所以能形成一个有价值的网络,依靠的就是脚本系统,它就像是发动机一样,驱动着区块链系统不断进行着各种数据的收发。所谓脚本,就是指一组程序规则。在区块链系统中,有些系统中的程序规则是固定的,比如在比特币系统中,只能进行比特币的发送与接收,这个发送与接收的过程就是通过实现在比特币中的一组脚本程序来完成的;而有些系统是允许用户自行编写一组程序规则的,编写好后可以部署到区块链账本中,这样就可以扩展区块链系统的功能,比如以太坊就是通过实现一套可以自定义功能的脚本系统,进而实现了智能合约的功能。

脚本系统使得在区块链中可以实现各种各样的业务功能。本来大家只是通过区块链来记财务账的,通过脚本系统,大家可以使用区块链来记录各种各样的数据,比如订单、众筹账户、物流信息、供应链信息等,这些数据一旦可以记录到区块链上,那么区块链的优点就能够被充分地发挥出来。有关脚本系统的具体使用和开发,大家可以通过后续的第6~8章来理解。

5.网络路由

这个功能模块比较简单。区块链系统是一个分布式的网络,这些网络中的节点如何来彼此进行连接通信呢?依靠的就是网络路由功能。前面我们说到,张三、李四、王五、赵六是通过彼此介绍来认识的,这个其实就是网络路由的雏形了。在分布式的网络结构中,不存在一个指定的服务器,大家没法通过一个服务器来直接交换彼此的身份信息,就只能依靠彼此联系并传播信息。在区块链系统中,这个功能一般会定义成一种协议,称为“节点发现协议”。

除了要发现节点外,更重要的一个功能就是同步数据。节点要保持自己的账本数据是最新的,就必须要时时更新自己的数据。从哪更新呢?既然没有服务器来下载,那就是通过邻近的节点了。通过向邻近节点发送数据请求来获得最新的数据,节点彼此都充当服务者和被服务者,通过这种方式,网络中的每一个节点都会在某一个时刻达成数据上的一致。

网络路由可以说是区块链系统中的触角,通过大量的触角将每个节点连入网络,从而形成一个功能强大的区块链共识网络。[1] 梅克尔根也称为“梅克尔根哈希值”,具体概念后续有详细介绍,暂且可以认为就是一个区块中所有交易事务的集体身份证号。1.3 区块链分类与架构

通过上述了解,我们知道区块链系统实际上就是一个维护公共数据账本的系统,一切技术单元的设计都是为了更好地维护好这个公共数据账本。通过共识算法达成节点的账本数据一致;通过密码算法确保账本数据的不可篡改性以及数据发送的安全性;通过脚本系统扩展账本数据的表达范畴。我们甚至可以认为,区块链系统实际上就是一种特别设计的数据库系统或者说分布式数据库系统,在这个数据库中可以存储数字货币,也可以存储逻辑更复杂的智能合约,以及范围更加广阔的各种业务数据。在区块链系统的发展过程中,也经历了这样一个阶段,从比特币开始,早期的区块链系统都是面向数字货币的,如比特币、莱特币等,这个阶段我们可以认为区块链系统是一个支持数字货币合约的系统;之后便出现了更加灵活的,能够支持自定义智能合约的系统,其代表作是以太坊,可以认为以太坊就是对比特币这样的数字货币系统的扩展,不过以太坊仍然内置了对数字货币的支持,延续了比特币系统的金融特征,也使得以太坊的应用更多面向金融范畴;再之后的代表就是超级账本项目,尤其是其中的Fabric子项目,在这个系统中,超越了对金融范畴的应用,支持各个领域的数据定义,我们分别将这三个阶段称为区块链系统的1.0、2.0、3.0架构时期。为了让大家对发展过程中的区块链系统有一个整体的概念,在本节中,我们来描述一下通常的区块链系统的架构,并站在不同的角度对区块链系统进行分类。1.3.1 区块链架构

1.区块链1.0架构

如上所述,这个阶段区块链系统主要是用来实现数字货币的,我们看一下示意图。

如图所示,在整个架构中,分为核心节点和前端工具,这里提一下核心节点中“矿工”功能。矿工在1.0架构的系统中,主要是承担两个任务:

第一个是通过竞争获得区块数据的打包权后将内存池(发送在网络中但是还没有确认进区块的交易数据,属于待确认交易数据)中的交易数据打包进区块,并且广播给其他节点;

第二个是接受系统对打包行为的数字货币奖励,从而系统通过这种奖励方式完成新增货币的发行。

在前端工具中,最明显的就是钱包工具,钱包工具是提供给用户管理自己账户地址以及余额的;浏览器则用来查看当前区块链网络中发生的数据情况,比如最新的区块高度、内存池的交易数、单位时间的网络处理能力等;RPC客户端和命令行接口都是用来访问核心节点的功能的,在这个时候,核心节点就相当于一个服务器,通过RPC服务提供功能调用接口。

2.区块链2.0架构

区块链2.0架构的代表产品是以太坊,因此我们可以套用以太坊的架构来说明,先看下示意图:

如图所示,与1.0架构相比,最大的特点就是支持智能合约,在以太坊中,我们使用智能合约开发工具开发合约程序,并且编译为字节码,最终部署到以太坊的区块链账本中。部署后的智能合约是运行在虚拟机上的,称为“以太坊虚拟机”。正是通过这样的智能合约的实现,扩展了区块链系统的功能,同时我们也能看到,在以太坊中还是支持数字货币的,因此在应用工具中也是有钱包工具的。

3.区块链3.0架构

在3.0的架构中,超越了对数字货币或者金融的应用范畴,而将区块链技术作为一种泛解决方案,可以在其他领域应用,比如行政管理、文化艺术、企业供应链、医疗健康、物联网、产权登记等,可以认为是面向行业应用。

行业应用一般是需要具备企业级的属性的,比如身份认证、许可授权、加密传输等,并且对数据的处理性能也会有要求,因此企业级场景下的应用,往往都是联盟链或者私有链。我们来看一下示意图:

如图所示,首先在3.0架构中,数字货币不再是一个必选组件了,当然如果需要,我们也是可以通过智能合约的方式来实现数字货币的。与之前的架构相比,最大的特点就是增加了一个网关控制,实际上就是增加了对安全保密的需求支持,并且通过数据审计加强对数据的可靠性管理。

在3.0架构中,实际上可以看成是一套框架,通过对框架的配置和二次开发可以适应各行各业的需求,比如图中的“可插拔共识”,意思就是共识机制不是固定的,而是可以通过用户自己去选用配置。1.3.2 区块链分类

1.根据网络范围

根据网络范围,可以划分为公有链、私有链、联盟链。(1)公有链

所谓公有就是完全对外开放,任何人都可以任意使用,没有权限的设定,也没有身份认证之类,不但可以任意参与使用,而且发生的所有数据都可以任意查看,完全公开透明。比特币就是一个公有链网络系统,大家在使用比特币系统的时候,只需要下载相应的软件客户端,创建钱包地址、转账交易、挖矿等操作,这些功能都可以自由使用。公有链系统由于完全没有第三方管理,因此依靠的就是一组事先约定的规则,这个规则要确保每个参与者在不信任的网络环境中能够发起可靠的交易事务。通常来说,凡是需要公众参与,需要最大限度保证数据公开透明的系统,都适用于公有链,比如数字货币系统、众筹系统、金融交易系统等。

这里要注意,在公有链的环境中,节点数量是不固定的,节点的在线与否也是无法控制的,甚至节点是不是一个恶意节点也不能保证。我们在讲解区块链的一般工作流程的时候,提到过一个问题,在这种情况下,如何知道数据是被大多数的节点写入确认的呢?实际在公有链环境下,这个问题没有很好的解决方案,目前最合适的做法就是通过不断地去互相同步,最终网络中大多数节点都同步一致的区块数据所形成的链就是被承认的主链,这也被称为最终一致性。(2)私有链

私有链是与公有链相对的一个概念,所谓私有就是指不对外开放,仅仅在组织内部使用的系统,比如企业的票据管理、账务审计、供应链管理等,或者一些政务管理系统。私有链在使用过程中,通常是有注册要求的,即需要提交身份认证,而且具备一套权限管理体系。有朋友可能会有疑问,比特币、以太坊等系统虽然都是公链系统,但如果将这些系统搭建在一个不与外网连接的局域网中,这个不就成了私有链了吗?从网络传播范围来看,可以算,因为只要这个网络一直与外网隔离着,就只能是一直自己在使用,只不过由于使用的系统本身并没有任何的身份认证以及权限设置,因此从技术角度来说,这种情况只能算是使用公链系统的客户端搭建的私有测试网络,比如以太坊就可以用来搭建私有链环境,通常这种情况可以用来测试公有链系统,当然也可以适用于企业应用。

在私有链环境中,节点数量和节点的状态通常是可控的,因此在私有链环境中一般不需要通过竞争的方式来筛选区块数据的打包者,可以采用更加节能环保的方式,比如在上述共识机制的介绍中提到的PoS(Proof of Stake,权益证明)、DPoS(Delegate Proof of Stake,委托权益证明)、PBFT(Practical Byzantine Fault Tolerance,实用拜占庭容错算法)等。(3)联盟链

联盟链的网络范围介于公有链和私有链之间,通常是使用在多个成员角色的环境中,比如银行之间的支付结算、企业之间的物流等,这些场景下往往都是由不同权限的成员参与的,与私有链一样,联盟链系统一般也是具有身份认证和权限设置的,而且节点的数量往往也是确定的,对于企业或者机构之间的事务处理很合适。联盟链并不一定要完全管控,比如政务系统,有些数据可以对外公开的,就可以部分开放出来。

由于联盟链一般用在明确的机构之间,因此与私有链一样,节点的数量和状态也是可控的,并且通常也是采用更加节能环保的共识机制。

2.根据部署环境(1)主链

所谓主链,也就是部署在生产环境的真正的区块链系统,软件在正式发布前会经过很多内部的测试版本,用于发现一些可能存在的Bug,并且用来内部演示以便于查看效果,直到最后才会发布正式版。主链,也可以说是由正式版客户端组成的区块链网络,只有主链才是会被真正推广使用的,各项功能的设计也都是相对最完善的。另外,有些时候,区块链系统会由于种种原因导致分叉,比如挖矿的时候临时产生的小分叉等,此时将最长的那条原始的链条称为主链。(2)测试链

这个很好理解,就是开发者为了方便大家学习使用而提供的测试用途的区块链网络,比如比特币测试链、以太坊测试链等。当然,倒也不是说非得是区块链开发者才能提供测试链,用户也可以自行搭建测试网络。测试链中的功能设计与生产环境中的主链是可以有一些差别的,比如主链中使用工作量证明算法进行挖矿,在测试链中可以更换算法以便更方便地进行测试使用。

3.根据对接类型(1)单链

能够单独运行的区块链系统都可以称为“单链”,例如比特币主链、测试链;以太坊主链、测试链;莱特币的主链、测试链;超级账本项目中的Fabric搭建的联盟链等,这些区块链系统拥有完备的组件模块,自成一个体系。大家要注意了,对于有些软件系统,比如基于以太坊的众筹系统或者金融担保系统等,这些只能算是智能合约应用,不能算是一个独立的区块链系统,应用程序的运行需要独立的区块链系统的支撑。(2)侧链

侧链属于一种区块链系统的跨链技术,这个概念主要是由比特币侧链发起的。随着技术发展,除了比特币,出现了越来越多的区块链系统,每一种系统都有自己的优势特点,如何将不同的链结合起来,打通信息孤岛,彼此互补呢?侧链就是其中的一项技术。

以比特币来说,比特币系统主要是设计用来实现数字加密货币的,且业务逻辑也都固化了,因此并不适用于实现其他的功能,例如金融智能合约、小额快速支付等。然而比特币是目前使用规模最大的一个公有区块链系统,在可靠性、去中心化保证等方面具有相当的优势,那么如何利用比特币网络的优势来运行其他的区块链系统呢?可以考虑在现有的比特币区块链之上,建立一个新的区块链系统,新的系统可以具备很多比特币没有的功能,比如私密交易、快速支付、智能合约、签名覆盖金额等,并且能够与比特币的主区块链进行互通,简单来说,侧链是以锚定比特币为基础的新型区块链。锚定比特币的侧链,目前有ConsenSys的BTCRelay、Rootstock和BlockStream的元素链等。大家要注意,侧链本身就是一个区块链系统,并且侧链并不是一定要以比特币为参照链,这是一个通用的技术概念,比如以太坊可以作为其他链的参照链,也可以本身作为侧链与其他的链去锚定。实际上,抛开链、网络这些概念,就是不同的软件之间互相提供接口,增强软件之间的功能互补,我们看下侧链的示意图:

通过这个简单的示意图,我们可以看到,区块链系统与侧链系统本身都是一个独立的链系统,两者之间可以按照一定的协议进行数据互动,通过这种方式,侧链能起到一个对主链功能扩展的作用,很多在主链中不方便实现的功能可以实现在侧链中,而侧链再通过与主链的数据交互增强自己的可靠性。(3)互联链

如今我们的生活可以说几乎已经离不开互联网了,仅仅互通互联,带来的能量已经如此巨大。

区块链也是这样,目前各种区块链系统不断涌现,有的只是实现了数字货币,有的实现了智能合约,有的实现了金融交易平台,有些是公有链,有些是联盟链,等等。这么多的链,五彩缤纷,功能各异,脑洞大开,不断刷新着更新颖的应用玩法。那么,这些链系统如果能够彼此之间互联会发生些什么样的化学反应呢?与传统软件不同的是,区块链应用拥有独特的性质,比如数据不可篡改性、完整性证明、自动网络共识、智能合约等,从最初的数字货币到未来可能的区块链可编程社会,这些不单单会改变生活服务方式,还会促进社会治理结构的变革,如果说每一条链都是一条神经的话,一旦互联起来,就像是神经系统一般,将会给我们的社会发展带来更新层次的智能化。

另外,从技术角度来讲,区块链系统之间的互联,可以彼此互补,每一类系统都会有长处和不足之处,彼此进行功能上的互补,甚至可以彼此进行互相的验证,可以大大加强系统的可靠性以及性能。

当我们坐在飞机上,开启一段美妙的旅程时,可否会想起当初的莱特兄弟;当我们坐在高铁上,享受着高效的城市穿梭时,可否会想起当初的蒸汽机;当我们住在舒适的房屋里,享受着安心的睡眠时,可否会想起当初的茅草房。是的,这个世界给了我们很多原材料,我们使用原材料,制造出了一个又一个工具,并以此改造这个世界,改善我们的生活。区块链,便是这样的一个改造世界的原材料,而有人用它制造出了第一个工具,它的名字叫比特币。1.4 一切源自比特币1.4.1 比特币技术论文介绍

通常,在介绍一个比较重量级的人物的时候,我们常常会在他的名字前面加上很多定语,比如某著名歌唱家、慈善大使、两届××奖获得者等,然后最后才报出名字,为的就是让大家竖起耳朵听明白,这个牛人都能干些什么。而在介绍一个物件的时候,比如一辆汽车,我们就不会这么说了,因为能把人说睡着了,一个东西嘛,写个说明不就完了,一目了然。

那么,比特币技术论文就是这么一个说明书,当然了,人家这份说明书可是有正式名字的,人家的大名叫《Bitcoin:A Peer-to-Peer Electronic Cash System》,翻译过来叫《比特币:一种点对点的电子现金系统》。这篇技术论文通常称为比特币白皮书,因为它基本就是宣告了比特币的诞生。严格地说,是理论上宣告了比特币的诞生。这份文件是在2008年11月由一个叫Satoshi Nakamoto(中本聪)的人发布的。当然了,并不是发布在什么知名论坛或者学术期刊上,而是发布在一个小众的密码学讨论小组。在这份白皮书发布后的第二年,也就是2009年1月3日,比特币软件就正式启动运行了,也就是在这个时候,世界上第一个区块链数据诞生了,而这个由中本聪构造出来的第一个区块,也称为创世区块或者上帝区块,代表神话中创世元灵的意思。从此以后,比特币以及由比特币技术衍生出来的各种应用就一发不可收拾,开启了互联网应用的一个新纪元。

回到这个白皮书上来,注意看它的标题,有两个关键字:“点对点”和“电子现金”。有朋友说了,这俩词压根就没提什么区块链!别着急,看人看眼睛,读文读标题,咱们先来解释一下。“点对点”,就是指这个软件不需要一个特定的服务器,比如我们登录QQ就需要连接腾讯的QQ服务器,登录支付宝就需要连接阿里巴巴的支付宝服务器,倘若这些服务器关闭或者出个问题什么的,那就没法正常使用这些软件了。2015年5月,杭州电信光缆被施工队不慎挖断,直接导致通过这些光缆联网的支付宝服务器断网,影响了正常的运行。而点对点的网络结构,并不依赖于某一个或者某一群特定的服务器,相当于人人都是服务器,人人也都是使用者。再来看“电子现金”,顾名思义,现金嘛,就是钱或者货币的意思,也就是说这份白皮书,介绍的是一种数字货币系统,这个系统的运行不依赖于某些特定服务器,而是通过点对点网络(P2P)结构来运行的。相信有些读者朋友看到这里还是会有些懵,不要紧,毕竟咱们才刚看到标题嘛,有个概念就行了。

翻开白皮书正文可以发现,整个篇幅主要介绍了几个关键点。(1)简介

提出了一个场景设想:如何不通过一个所谓的权威第三方结构(比如银行),来构建一个可信的交易网络呢?中本聪的语文还是不错的,先抛出个问题给你玩玩,然后吸引你继续看下去。(2)交易

描述了一种通过密钥签名进行交易验证的方式,实际上就是计算机密码学在比特币中的应用。我们在银行转账交易用什么来证明自己呢?是通过账户和密码,必要的时候还可以通过身份证确认。而在比特币系统中没有银行这样一个角色,那靠什么来确定身份呢?只有靠现代计算机密码学技术。当然,密码学技术在比特币中的应用并不只是用来证明身份,是贯穿在各个环节的,可以说,密码学技术就是比特币系统的骨骼。(3)时间戳服务器

这部分提到了区块以及通过时间戳运算连接成一条链的概念,这也是区块链概念的来源,同时在这里也说明了比特币数据的存储方式。(4)工作量证明

这部分介绍了一种点对点网络中如何对各自的数据进行一致性确认的算法。为什么叫工作量证明呢?因为这种算法很消耗CPU的算力,等于人们干活一样,是要付出工作劳动的。(5)网络

比特币软件是一种网络软件,而且是一个不依靠某个服务器来交换数据的网络软件。那么一个个节点之间,如何确认一笔笔交易数据呢?这部分介绍了交易确认的过程,这个实际上就是比特币网络的应用协议,跟日常使用的邮件收发协议、文件传输协议、超文本传输协议等,是一个层面上的。(6)激励

激励就是奖励的意思,你干了活,得到一笔奖金,哇,好开心!就会继续努力干活,这就是激励。比特币软件的数据一致性确认是需要耗费CPU算力的,那凭什么有人愿意来耗费这些个算力,白干活吗?当然不是,系统会奖励给你比特币,还有别人交易的手续费。(有人会问,那我为什么没被奖励过啊?别急,在1.4.3节中会有详述。)(7)回收硬盘空间

比特币系统从创世区块开始,大约每10分钟产生一个区块,也意味着区块链账本的“体积”会一直增长。事实上写作本书的时候,已经超过了120GB,只要比特币网络一直存在,数据就会一直增长。实际上,只有运行全功能节点的客户端才会一直保持完整的区块链数据,这些在1.4.2中会有详述。这里提出了一个思路,删除过老的一些交易数据,同时不破坏区块的随机哈希值,通过这种方法压缩区块数据。(8)简化的支付确认

上述提到了,比特币客户端的数据量很大,这么一来,等于不管是用比特币系统干什么都要带上大量的数据,这岂不是很不方便,而且也会限制在其他一些终端(比如手机)上的使用。这部分提出了一个模型,这个模型主要是为比特币的支付服务的。在这个模型下实现的比特币支付功能并不需要携带那么庞大的数据,而只需要保留体积相对很小的区块头,具体细节可以查看3.1.3节。(9)价值的组合与分割

这部分介绍的是比特币中的交易事务组成方式。①什么叫价值?在比特币系统中,价值就是比特币。②什么叫组合?比如我口袋里有5枚1元硬币,1张2元纸币,1张10元纸币,我要给你5块钱,怎么给呢?我可以给你5枚1元硬币,也可以给你3枚1元硬币加上1张2元纸币,这就是不同的组合。③什么叫分割?分割其实就是转出的意思,我通过不同的组合,构成了总计5元的金额,然后转出给你,这个过程就是价值的组合和重新分割。在这个例子中,还有一张10元的,假如我直接转了你10元,那会怎样?这就需要找零5元了,找零其实也是一种重新价值分割。(10)隐私

作为一个货币系统,保密性也就是隐私毫无疑问是人人都会关心的。传统的体系,完全是依赖比如银行这个第三方的保护,大家相信银行,银行也设立了各种管理制度和方法来防止账户和交易信息的泄密。比特币系统则不同,它不依赖谁,每个人在比特币系统中也不用登记什么身份证、名称、性别等,就是一个地址,谁也不知道地址后面代表的是谁,而且,只要你需要,可以自己创建任意多个地址(你到银行去开任意多个户试试!),这使得比特币系统中的交易带有很大的匿名性和隐秘性。(11)计算

这部分主要是站在概率统计的角度计算了一下攻击者成功的概率,以及经过多少个区块后还能攻击成功的概率,计算过程这里不赘述。

白皮书的内容就介绍到这里了。刚刚接触比特币、区块链这些概念的朋友,或许还是一头雾水吧!没关系,我们在下面的章节会有详细的解释。毕竟,能够只通过一份白皮书就完全明白比特币设计的人,或许只有中本聪这个“大神”了。小提示

白皮书的原文可以在https://bitcoin.org/bitcoin.pdf查看,感兴趣的朋友可以阅读一下,英文不那么擅长的朋友,可以到巴比特网站(著名的区块链资讯与技术服务网站)上查看中文版,地址是http://www.8btc.com/wiki/bitcoin-a-peer-to-peer-electronic-cash-system。读明白了这份说明书,基本也就理解了比特币的原理,也就入了区块链这个“坑”(或者说这个“门”)了。1.4.2 比特币核心程序:中本聪客户端

1.客户端程序介绍

我们知道,比特币其实就是一个软件,既然是软件,那还是百闻不如一见,看看到底长什么样。大家可以到https://bitcoin.org/en/download这个地址去下载客户端程序,可以看到,网站提供了多种操作系统的运行版本,选择自己需要的版本下载安装即可运行了,就能看到庐山真面目啦。

在具体介绍之前,咱们先说明一下,为什么这个程序叫比特币核心程序,难道还有非核心程序?我们在上述提供的下载页面上,可以看到比特币程序的名字叫Bitcoin core,这个翻译过来就是比特币核心的意思,这是最经典,也是中本聪一开始发布的那一支程序版本,这个版本也是使用人数最多的。可问题是,比特币程序是开源的,任何一个人或者组织都可以根据需要去修改源码发布出一个新的版本,事实上经过多年的发展,比特币程序已经出现了多个版本,比如Bitcoin Classic、Bitcoin XT以及Bitcoin Unlimited,这些不同的版本实际上都是比特币核心程序的分叉版本,本节使用的是比特币核心程序的客户端。

现在先安装一个比特币核心客户端,按照下载地址进入页面后,在这个页面可以看到针对不同操作系统的下载版本,读者朋友可以自行选择,无论哪个系统环境下,其功能都是一样的,见下图:

我们以Windows版本为例来说明,我们下载图中所示的0.14.1版。大家注意到没有,比特币发展了这么多年,到现在程序都还没进化到1.0版(通常一个软件的1.0版是首个正式版本),某种程度上也是因为比特币是一种实验性的软件吧,因此大家研究学习比特币可以带着一种玩的姿态,不要那么严肃,任何可能性都是有的,我们学习了解比特币是为了更好地应用它的设计思想,而不是去迷信它的神秘和权威。下载完成后,打开软件目录,可以看到有一个bin文件夹,其中有5个文件,如下图所示。

我们一一来说明一下:(1)bitcoin-qt.exe

包含了比特币的核心节点以及一个钱包的前端功能,这是一个带有图形界面的客户端程序,运行后可以看到有如下提示:

按图中所示,需要选择一个比特币的区块链副本数据存储目录,目前整个区块链账本数据已经很大了,选择一个空间足够大的目录,然后点击OK按钮即可进入主界面了,我们看下主界面的样子:

如图所示,这便是比特币核心客户端了。等等,标题不是钱包吗,怎么又是核心客户端,到底运行的这个程序是什么?是的,这个客户端也叫“中本聪客户端”(satoshi client),它实现了比特币系统的所有方面,包括钱包功能,对整个交易数据也就是区块链账本完整副本的交易确认功能,以及点对点比特币对等网络中的一个完整网络节点。换句话说,这个客户端软件包含除了挖矿以外的其他所有比特币的功能模块,我们当然也可以分别去自己实现一个个的独立功能客户端,比如仅仅实现一个钱包功能,仅仅实现一个核心节点功能,只不过这个官方的客户端都集成在一起了。

通过这个界面,我们也能看到在底部显示有“正在连接到节点”以及“落后8年和16周”的字样,这是指运行中的核心客户端通过发现与连接网络中其他节点进行区块链账本数据的一致同步。如果是首次开始同步,需要花费不少时间,一百几十GB的数据下载真够喝一壶的。需要注意的是,所有的操作都要等到同步完成后才能进行。点击那个“落后8年和16周”的区域可以看到具体的同步进度信息:

图中可以看到有剩余的区块数、进度以及剩余时间等信息,耐心等待就是了。如果想查看一下当前客户端的版本以及网络连接等信息,可以点击“帮助”→“调试窗口”调出如下界面。

在“信息”标签页下可以看到软件版本、当前的网络连接数、数据目录等摘要信息。注意这里的“客户端版本”,比特币是一个分布式的点对点系统,不存在中心服务器来统一管理软件的版本升级,因此不同的节点有可能运行着不同版本的客户端,不同版本的客户端在

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

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载