区块链的核心功能及全参与方(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-14 11:19:02

点击下载

作者:姜晖

出版社:电子工业出版社

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

区块链的核心功能及全参与方

区块链的核心功能及全参与方试读:

前言

“区块链到底有什么用?”这是周围的朋友和同事问的关于区块链最多的一个问题。很多人对区块链或多或少有一定的了解,面对主动或被动获得的一些答案,这些分布于各领域的业务或技术资深从业者,内心真正认同的,可能并不占多数。

我在从事区块链研究的过程中,对区块链的认知也是逐步深入的。很多之前认为是前提的认知、深信不疑的定义、看似不证自明的理论,随着理解的加深,也转换了观念。而且,在我的技术研究范围,从区块链扩展到了多个新兴信息技术领域以后,我对区块链的认知又加深了一层。以前作为行业内从业人员,会认为区块链无所不能;而站在泛IT的角度看,区块链和人工智能、大数据、物联网等这些新兴技术类似,都有自己特有的功能及擅长的领域,都有适合自己的业务场景,同时也都需要多项技术彼此支撑、相互融合,才能发挥出更大的作用。

区块链目前还处于探索阶段,很多新技术、新思路,从业人员和普通大众也都是同步认知的,还没有谁能对区块链的发展方向、未来能发挥多大的作用等这些问题,给出准确的判断。本书试图从多个维度,全方位地为读者解读区块链,介绍区块链当前的全貌,分享笔者对区块链的一些认知,谢谢!2019年11月于北京第一章 区块链综述

2019年10月24日,中共中央政治局就区块链技术的发展现状和趋势进行了第十八次集体学习。浙江大学教授、中国工程院院士陈纯做了关于区块链的报告,中共中央总书记习近平用“18个要”强调,“把区块链作为核心技术自主创新的重要突破口”“加快推动区块链技术和产业创新发展”等。

党中央的前瞻判断,让这几年已走入大众视野的“区块链”再次迅速火热起来,成为金融资本、实体经济和社会舆论共同关注的大热点。中央政治局这次集体学习,专门强调“区块链”,将其重要性提高到前所未有的高度,必将极大推动中国乃至全球区块链的发展及应用。

区块链“未来已来”。若想将区块链作为我国“换道超车”的突破口,首先需要了解区块链到底是什么。1.1 区块链是什么:去中心化的分布式账本

只有知道区块链的确切定义,才能识别出哪些是区块链系统,才能对区块链加以规范及监管。现有的区块链定义多是描述性定义,模糊不清,不易辨别。本章节首先探索了区块链系统的定义。1.1.1 初识“区块链”:朋友圈里的广而告之

身边有朋友问我什么是区块链,我尝试举个例子:你朋友向你借了100元钱,你在朋友圈里发布了这个信息,朋友圈里的人经过点对点的核实之后再把这个信息记在自己的账本上,这个按照时间顺序记下来的信息链条就是区块链。可回溯,不可篡改,可信。

区块链,顾名思义就是多个“区块”连接形成的“链”。在一定时间内的多条数据先组成了“区块”,不断产生的“区块”按照时间顺序连接形成的一条数据“链”,就是“区块链”。

区块链可以看成一个记录数据的分布式账本。这个账本拥有“块、链”结构,每个区块就相当于这个账本中的一页,随着数据量的增多,每隔一段时间就会新生成一个账本页,每页记载着这段时间间隔内发生的事件的数据。页和页之间按照先后顺序排列、连接,后一页接在前一页的后面,这就形成了一个“账本”。这个账本人手一本,即是分布式的账本。区块链就是一个可以“记账”的账本。图1-1 区块链的简单模型

以上就是区块链的简单直观描述。那么,看起来很简单的区块链,究竟有哪些神奇之处呢?我们从区块链的定义和特征入手,来更进一步地了解区块链。1.1.2 区块链的识别:一个定义与两个特征

很多书籍和文章介绍了区块链的定义,但多数是形象化的比喻或是描述性的定义,比如“账本”“数据库”“基础设施”等,通过这种定义很难准确识别出哪些IT系统是区块链系统,更无法实现对区块链的规范及监管等。本小节试图通过一个定义和两个特征揭示区块链的本质。

定义:区块链是一个去中心化的分布式账本。

特征一(关于增量):用共识算法来对新增哪些数据及次序达成共识。

特征二(关于存量):用密码学来保证已有数据不被篡改、不可抵赖。

可以说,一个去中心化的分布式系统,以密码学保证存量数据不被篡改,以共识算法对新增数据达成共识,就是一个区块链系统。

区块链最大的特点就是“去中心化”。依赖中心化的权威机构或中心化的服务中介,形成一个记录数据的账本很简单,但对于一个去中心化的账本,就涉及两个问题:一个是如何新增数据、新增数据如何确认、谁来确认、以什么标准确认;另一个是已有数据即存量数据的保管问题,谁来管,怎么管。

这个定义中的关键词是“去中心化”。20世纪70年代至90年代的二十多年中,欧美国家发生了多起控制思想、愚弄大众、压制新技术发展的丑闻,比如英国情报机构为军事目的而封存非对称加密算法;美国国家安全局在非对称加密算法RSA公开后,采用立法、威胁学术出版商、警告作者等手段限制RSA的传播;美国政府监听民众通话、邮件事件;美国联邦政府颁布托管加密标准(EES)的同时却留有窃听后门……这一系列事件,让民众对中心体失去了绝对信任,一批欧美的密码学家、数学家们开始积极研究“去中心”的技术。

中本聪在2008年发布的比特币白皮书《比特币:一种点对点的电子现金系统》中,通过“比特币协议”给出了去中心化系统的一种实现方案。一、引入共识算法解决新增数据问题,实现对新增区块数据的共识。首先,以“工作量证明”机制(PoW,Proof of Work)确定谁可以新增数据,包括新增哪些数据,以及这些数据的顺序等:只有第一个完成规定计算工作的节点,才能发出关于新增数据的提案,从而保证一段时间内只有一个提案。每个节点的计算能力决定了发布提案的权重,这样整个系统就是高度民主的,无须一个中心化组织来分配各个节点的权重,节点也可以自由加入或退出。其次,以“最长链原则”即少数服从多数原则,确定最终的一致性。以工作量证明机制选出的节点、发出的提案即数据块,不一定被所有人都认可。这主要包括外部和内部两类原因:因为网络的延迟,各个节点最先接收到的提案可能是不同的;各个节点自身对当前提案的认可程度不同,有的节点同意这个提案,有的节点不同意这个提案。这些分歧,造成了区块链有可能出现分叉,分叉意味着全网的账本不统一。为了解决这个问题,通过“最长链原则”确定以分叉中的哪条链为准,即少数服从多数原则,以达成最终的一致。最后,以“激励策略”来奖励正确的提案节点。为鼓励各节点竞争提案权、选择正确的分叉链,即鼓励节点记录新数据、保存已有数据,区块链系统会给出一定的奖励。弄虚作假或不遵守规则的节点没有奖励,相当于变相被惩罚。通过这种奖惩机制保障了区块链的正常运行。二、引入密码算法,保证已发出信息或已有数据不可抵赖、不可篡改。这里的密码算法主要包括哈希加密和非对称加密两类。首先,应用哈希函数检验数据是否被篡改。哈希函数,又称为哈希映射、哈希加密。简单来说,哈希映射可将任何的输入数据都映射成一个固定长度的字符串,这个映射输出可以称为哈希值或摘要。哈希函数Y=Hash(X),有以下几个主要性质:(1)单向性:由X可以很容易算出Y= H(X),但由Y很难得到X;(2)防碰撞性:很难找到不同的两个输入X1、X2,使得输出是相同的,即H(X1)= H(X2);(3)扰动性:X的任何微小的变化,都会引起Y的巨大变化,即只要输入的X发生改变,哪怕只是一个字节的改变,经过哈希映射后的Y会发生很大的改变。依照上面哈希函数的性质,我们可以在数据后面加上这些数据的哈希值。这样的话,当收到数据后收信人再计算一遍这些数据的哈希值,对比计算得来的哈希值和收到的哈希值两个哈希值是否相等,就可以知道这条信息是否被篡改过了。因为如果被篡改过,哪怕只有一个符号被更改,整个哈希值也会截然不同。而且根据哈希函数的性质,基本无法伪造出另一部分有同样哈希值的数据。其次,非对称加密可以加密信息及身份验证,保证各方对自己发出的信息不可抵赖。加密技术一般分为对称加密和非对称加密两类。对称加密只有一个密钥,可以理解成保险柜的钥匙。把消息加密变成密文,相当于把消息放在保险柜里;解密的时候需要用同样的密钥解密,相当于用这把保险柜的钥匙打开保险柜,才能看到里面的消息。非对称加密有两个密钥,公钥和私钥,公钥是公开的,私钥只有本人拥有。两个密钥其中一个用于加密另一个用于解密,反之亦然。非对称加密除了和对称加密一样,可用于信息加密之外,还有另一个用途,就是可以验证身份,以及消息是否被篡改。“数字签名”就是其中一个重要的应用:在某个消息后面,发信人对这个消息做哈希运算,生成这个消息的“摘要”,然后用私钥加密,就生成了“数字签名”。这个数字签名可以放在这个消息的下面,类似信件的签名,发信人将这个消息连同数字签名一同发出;收信人首先用对应的公钥解密,得到消息摘要。然后再对消息进行哈希映射,将得到的结果与刚才的消息摘要进行对比,如果相同,就代表这个消息是本人发出的,而且没有被篡改过。

具有以上两个特征的去中心化系统,就是区块链系统。下面我们将以比特币为例,来认识区块链系统特征的表现。但在这之前,我们先更再深一步了解哈希的概念。1.1.3 哈希映射:理解区块链的切入点

哈希映射是一个数学函数,又称为哈希函数、哈希算法或散列算法。简单来说,哈希映射可将任何的输入数据映射成一个固定长度的字符串,这个输出可以称为哈希值。

哈希映射是一种在任何数据中创建小的数字“指纹”的方法,也可以说是把数据压缩成数据“摘要”,使得数据量变小,这个摘要或指纹即哈希映射得出的哈希值,通常用一个短的字母和数字组成的字符串来表示。

哈希映射的数学形式可表示为:Y=Hash(X),无论输入“X”是一个字母、数字、生字、一句话或一本书,经过哈希映射后会输出有固定长度位的“Y”,哈希函数Hash把不同长度的数据X,映射成相同的长度的Y。

哈希映射有几个主要的特性:(1)单向性:Hash(X)=Y,即从X很容易计算出哈希值Y,但反过来,通过Y很难得到X。单向性又称为不可逆性。

这个特点很重要。在现实世界中的密码存储,就是哈希映射的应用之一。当我们在网络上的各种网站平台或App上注册时,经常需要注册账户并设置密码,这种密码可以通过哈希映射后再存储,即后台服务器存储这个密码信息的哈希摘要。当我们下一次重新登录的时候,输入账号和密码时,服务器就会通过相同的哈希函数处理你的密码,然后判断这个结果是否与之前存储的哈希摘要相匹配。这样的好处是,即使有黑客攻破了后台服务器,得到了你账户密码的哈希摘要,黑客也没有办法通过这个哈希摘要获得你的真实的密码,就是因为哈希函数的单向性(不可逆性)。(2)扰动性:Hash(X)=Y,即X的任何微小的变化,都会引起Y的巨大变化。

只要输入的X发生改变,哪怕只是一个字节的改变,经过哈希函数处理之后的Y会发生较大的改变。

在我们做大规模文本比对的时候,可以只比较两个大文本的哈希值,而不用直接比较这两个大文本了,这个性质可以直接减少计算的能耗及时长。比如,输入X是一篇文章,那么在文章中增加一个标点符号成为X,输出的Y值和原来Y值,会大不一样,看不出任何关联,11找出Y和Y的差异相对于X和X来说是更容易的。11(3)防碰撞性:Hash(X)=Y,很难找到不同的两个输入,使得输出是相同的。

哈希函数可以将任何值映射成固定长度的值,所以映射后能取到的值的范围是有限的,而X的取值却可以是无限的,因此一定会存在两个不同的输入X,哈希映射之后取到相同的Y,这就叫“冲突”或“碰撞”。

例如,要找到一个256位输出的哈希函数的碰撞,可以用以下这个简单的方法:选出2的256次方+1个不同X的值,计算出每个值的哈希值,然后检查是否有两个输出值是相同的。因为选择的输入值的数量超过了输出值全部可能的数量,所以哈希计算后至少会有一对数值冲突了。但这种遍历取值,2的256次方的数量,相当于目前可观测到的宇宙中全部原子的数量,计算量非常大,即使集合全世界全网算力来执行这么大的计算,也需要几十年的时间,而且费用高昂,所以至今为止,通过遍历计算找出碰撞的可能性,几乎为零。

为对Hash函数有个直观认识,举一个简易的Hash函数的例子,下述为其映射规则:

设Hash1(X)=#X×X#,这里的符号##,表示取X×X的中间三位。若为偶数个数位时,高位即左侧多留1位;若不足三个数位时在前面补0。

按前述定义的Hash映射,相比于输入,输出扩大了差别。平方运算后的中间位和这个数字中的每一数位都相关,经过这样的哈希映射规则,输出的哈希值扩大了差别。

实际中经常使用的哈希算法包括MD5、SHA-1、SHA-256、SHA-384及SHA-512等。比特币协议中的哈希算法是SHA-256。2008年中本聪发明比特币时,采用的SHA-256算法被公认为当时最安全最先进的算法之一。

SHA(Secure Hash Algorithm)安全散列算法,是至今国际上使用最为广泛、最为安全的压缩算法之一,由美国NIST(National Institute of Standards and Technology,美国国家标准与技术研究院)和NSA(National Security Agency,美国国家安全局)两个组织共同开发,此算法于1993年5月被美国NIST和NSA设定为加密标准。为了提高安全性能,美国陆续发布了改进的密码算法SHA-1、SHA-256、SHA-384及SHA-512等。但随着2004年中国密码专家王小云教授研究小组宣布对MD5、SHA-1等加密算法的破解,以及密码学研究的不断深入和计算机技术的快速发展,美国政府从2010年起不再使用SHA-1,全面推广SHA-256、SHA-384和SHA-512等加密算法,统称为SHA-2。

其中的哈希算法SHA-256,是密码学和信息安全领域一个非常重要的基本算法,同时也是比特币里面应用的哈希算法;对于任意长度的消息输入,SHA-256都会输出一个256位的二进制的哈希值,通常用一个长度为64位的十六进制字符串来表示。

例如,将“I am jianghui.”这句话作为输入,经过哈希函数SHA-256映射后输出的哈希值为:

d3ebcf9a53fc564b9b12e9c8be38fb337dae951ab4ef8079315600c681152569

区块链的很多重要特性,都可以从“哈希”的概念入手,通过理解“哈希链”,来深入理解区块链。

通过定义我们可知,哈希映射的输入值可以是任意长度的任何值,而输出是固定长度的值,所以哈希的输入值可以任意进行组合,哈希映射也可以多重运算。

对于有序产生的数据块K,K,K,计算Hash值:123

H=Hash(K)11

H=Hash(K||H)221

H=Hash(K||H)332

其中K||H,表示K这个数据块后面增加了数据H,即K和H连接212121在一起。

经过多次的数据连接、组合,我们可以将多个数据经过多次哈希运算,映射成一个哈希值。这种数据连接、组合的方案有很多种,其中哈希树是使用最广的一种方案。

哈希树又称为默克尔(Merkle)树,是一种用作快速归纳和校验大规模数据完整性的数据结构,是由计算机科学家Ralph Merkle在1979年提出的,由一个根节点(root)、一组中间节点和一组叶节点(leaf)组成。叶节点(leaf)存储数据或哈希值,中间节点是它的两个子节点内容的哈希值,根节点也是由它的两个子节点内容的哈希值组成的。

在最底层是每一条数据或小数据块,叶节点B0、B1、B2、B3是相对应数据的哈希值。往上是把相邻的两个哈希值合并成一个字符串,然后运算得出这个字符串的哈希值,这样每两个哈希值得出了一个新的哈希值,如B0和B3经过哈希运算得到B4。依次往上,可以得到数目更少的新一级哈希,最终形成了类似一棵倒挂的树的数据结构表,到了树根的这个位置就剩下一个根哈希了,我们称其为默克尔根(Merkle Root)。

默克尔树有以下三个作用。

第一,任意一个叶节点的细微变动,都会导致Root节点发生翻天覆地的变化。这可以用来判断两个加密后的数据是否完全一样。

第二,快速定位修改。如果Data1中数据被修改,会影响到B1、B4和Root,当发现根节点Root的哈希值发生变化,沿着Root→B4→B1就可快速定位到实际发生改变的数据块Data1。

第三,零知识证明。这指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。比如怎么证明某个人拥有Data0……Data3这些数据呢?创建一棵如图1-2所示的默克尔树,然后对外公布B1、B5、Root;这时Data0的拥有者通过Hash生成B0,然后根据公布的B1生成B4,再根据公布的B5生成Root,如果最后生成的Root哈希值能和公布的Root一样,则可以证明确实拥有这些数据,而且不需要公布Data1、Data2、Data3。

比特币区块链使用默克尔树作为数据基本组成部分。图1-2 默克尔树的简单模型图1-3 默克尔树的零知识证明1.1.4 区块链的特征:从比特币说起

区块链是伴随着比特币的出现而被提出的。2008年底,中本聪提出了比特币的概念,区块链作为比特币的底层支撑技术逐步呈现在世人面前。在前面几节的基础上,本节通过比特币的整体设计,来进一步了解区块链的概念和特征。

图1-1提到,区块链是按序排列的区块,彼此连接,形成一条链。其中每个“区块”可分为区块体和区块头两部分,区块体存放数据或交易的详细信息,区块头存放区块的基本信息,如图1-4所示。(1)区块体主要包含若干条的交易数据及这些交易的哈希值。

例如,交易1:张三给李四支付2个比特币;

   交易2:王五给赵六支付3个比特币;

   Hash1=Hash(张三给李四支付2个比特币)

   Hash2=Hash(王五给赵六支付3个比特币)

   Hash12=Hash(Hash1||Hash2)

   ……

最终形成一个哈希值Hash1-8。图1-4 区块链中每个“区块”的结构(2)区块头可以看成由三组数据组成。第一组数据是父区块(上一个区块)的哈希值,用于将该区块与区块链中前一区块相连接;第二组数据主要包括时间戳、难度和随机数Nonce;第三组是默克尔根,即区块体中所有交易数据经过哈希运算形成的默克尔根。下面详细解释每组数据的含义。

父区块哈希:即上一个区块的区块头的哈希值;

版本号:描述比特币网络区块链上区块的版本号;

时间戳:指的是从1970年1月1日0时起至现在的总秒数;

难度(目标值):是工作量证明的数学题的难度值,难度值根据之前全网解题的平均时间来调整,使得解题时间保持在10分钟左右;

随机数:即Nonce,是求解工作量证明的过程中,要求出的值的随机数,也就是这道题目的答案;

默克尔根:用来保存和验证交易的哈希树,就是区块体内交易数据哈希值的整体哈希值,称为这个区块数据的默克尔根;能够总结并快速归纳校验区块中所有交易数据;采用SHA256(SHA256())即两次哈希映射来计算。

上述“父区块哈希”的作用是:如果父区块的哈希值有变化,会使其下一个区块即其子区块中的“父区块哈希”这个字段也发生变化。如果父区块的数据被攻击,引起某一个字节发生变化被篡改,则整个区块哈希值就完全不同。所以要篡改区块链上某一个区块内的数据的话,只对一个区块攻击是没用的,需要对后续的所有区块重新计算Nonce值,这将耗费大量的能源及时间,几乎可以说是不可能的。所以,父区块哈希的作用是可以回溯,还可以防止被篡改。

从图1-5中可以看到连续三个区块的哈希值,里面包括本区块哈希值Hash、前一个区块哈希值Previous Block、后一个区块哈希值Next Block。从中间区块(区块高度590610)可以看出,其区块内数据Previous Blcok和Next Block,就是分别为区块高度590609、区块高度590611内的数据Hash值。通过这种区块之间的哈希数据映射连接,就构成了一个区块间的哈希链,当前区块把前一个区块的哈希值作为区块本身的一部分,如果更改前面区块的任何一项数据,对应的哈希值就会被改变。可以说,数学理论保证了区块链的数据是不可篡改或是很难篡改的。

比特币区块链的实现流程

区块链是比特币的底层技术,比特币是区块链的一个典型应用。我们可以通过了解比特币的整体流程,来更进一步地理解区块链的技术实现。

首先,每个用户控制一个钱包,这个钱包是节点(如电脑、手机)上的一个数据文件,也就是比特币客户端,里面包含了用户的余额等信息(这与传统的基于中心机构的货币系统不同,各个节点权力是对等的)。用户通过比特币客户端可以创建一笔交易,这笔交易随后会在比特币网络中全网发布,等待验证(比特币采用节点共同记账的方式,代替传统只信任中心机构的账本数据的模式)。

每个希望参与记账的节点理论上都可以参与记账,愿意记账的节点就称之为“矿工”。而具体由哪个矿工记账,理论上是随机的,比特币提出一种工作量证明称为PoW的机制,就是用自己的设备计算一道数学难题,这道题的难度被设定为:按照当前全网算力平均需要10分钟才能计算出结果,最先算出结果的矿工有记账的权利。图1-5 区块链中每个“区块”的结构

当一名矿工计算出这道数学难题的结果后,将这段时间内的交易记录在一个区块当中,并连同数学难题的结果一同发布在全网。其他矿工收到新的区块时,先验证难题结果是否正确,再验证区块是否合规。如果验证都通过,则认同这个区块是正确的,并开始下一个区块的记账权的竞争;而如果验证不通过,就丢弃这个区块并继续解题。记账正确即生成被认可的区块的矿工,会得到相应的奖励,以鼓励矿工积极参与记账权的竞争。这些被验证为正确的区块按照时间顺序形成一条数据链条,就这样形成了记录全网交易的数据账本。

根据上述流程具体的步骤为:(1)假设两个用户分别为Bob和Alice,他们需要通过比特币交易,首先双方都有比特币钱包。比特币钱包是一个数字文件,可以让用户访问多个比特币地址。每个地址是哈希函数的输出值,即一串固定位的字符串,每个地址都有各自的比特币余额。(2)Bob创建一个新地址,相当于生成一个新的密钥对,包含一个私钥和一个公钥。公钥就是Bob这个新地址,可以被全网所有人知道;私钥只有Bob自己知道,存放在钱包中,用来对每个交易进行签名,其他人可以用Bob的公钥验证被Bob私钥签名的有效性。(3)Alice的钱包中含有多个私钥,也就是每个比特币地址即公钥对应的私钥。Alice使用比特币客户端给Bob进行转账时,用私钥对这一交易申请进行了签名,然后全网广播这条交易,并标记为“未确认”。此时全网所有人都可以使用公钥验证这个交易。(4)比特币矿工将过去一段时间(约10分钟)内的未确认的交易都放在一个内存池中。由于网络通信等原因,各节点内存池不完全相同。(5)节点对“哪些未确认的交易应该被确认”发出提案,即把这些交易打包成一个新的区块,然后基于新区块、前一个区块、随机数等来计算新的哈希值,计算过程中需要不断改变其中的随机数直到新的哈希值小于目标值(即难度)。比特币系统要求新的哈希值必须小于以特定个数的0为开头的难度值。(6)矿工无法预测哪个随机数会产生以要求数量的0为开头的哈希值,所以相当于计算一道数学难题,哪个矿工先找到这个随机数谁就是获胜者,就在此轮中拥有记账权,可以将自己挖掘出的区块广播出去。(7)工作量证明的作用是限制一段时间内能够发出提案的节点数量,从而避免同一时间段节点发出不同的提案数目过多,影响最后节点决策的效率与最终一致性。(8)其他节点通过验证这个区块哈希值的正确性及区块内交易的合法性后,完成决策过程,停止正在进行的计算工作;将此轮记账节点生成的区块加入自己维护的区块链账本最后;区块内交易变为“已确认”并清理本地的内存池,删除已经被

确认的交易、与已经被打包的区块产生冲突的交易;下一个区块的开头引用这个区块的哈希值。(9)每个新打包的区块中包含一个名为“Coinbase”的初始交易,如果矿工记账的这个区块最终被全网认可,这个矿工就会得到这个初始交易中包含的新产生的固定数量的比特币,作为矿工奖励。(10)新区块产生后的一段时间(通常是后面连接6个区块,约1小时),这个新区块可认为是被最终认可的,新区块里面包含的交易可认为是不能被篡改的。因为要改这个新区块的数据,就要从新区块开始,包括之后每个区块的全部的共识过程形成一个支链,还要快速赶上之前的链,这是不可能的(除非可以控制全网51%以上的算力)。

中本聪在设计比特币的产量时,遵循了以下两个规则:

①最开始每10分钟生成50个比特币;

②每21万次后,比特币的单次产量减半,50、25、12.5……依此类推,直至总量达到2100万。

上述步骤(9)的矿工所获奖励,是比特币产生的唯一方式。根据以上中本聪的规则,我们只需列出算式,便能得出每次生成区块所产生的比特币或矿工获得的奖励减半(21万次)的调整周期为:210000÷(365×24×6)=3.995年

注:因为比特币每10分钟产出一个区块,所以每年的次数是365×24×6

也就是说,约4年时间,比特币奖励减半。由于算力一直在增大,实际上这个时间会略短一些。

比特币的创世区块于2009年1月3日被挖出,当时的奖励是50个比特币,而比特币的第一次减半则发生于2012年11月28日,奖励变为25个比特币,中间间隔共计1425天,约合3.9年。第二次区块奖励减半发生在2016年7月9日,约合3.6年,奖励变为12.5个比特币;下一次减半时间将发生在2020年5月左右,奖励将变为6.25个比特币。

根据减半规则,大约每4年,总产量也会减半,这一衰减非常快速。至2019年11月底,将产出第1800万个比特币,已达到比特币总量2100万的86%。

图1-6所示是一个比特币区块链上的一个区块内包含的部分交易,其中第一笔交易就是矿工获得的奖励,包括Coinbase初始交易,即挖矿奖励12.5个BTC,以及约0.37个比特币的交易费用。图1-6 比特币区块内的交易1.2 区块链的前世:思潮和技术的萌发

区块链技术不是突然出现的,中本聪将之前的诸多已有技术和思路,巧妙地融合为一体,加上独特的共识机制,形成了比特币区块链技术。1.2.1 时间戳的萌芽:中心化时间服务器

1991年—1992年间,时间戳的概念就曾出现在了密码学家哈勃(Haber)和斯托尔塔(Stornetta)等人发表的两篇论文之中。

第一篇论文How to Time-Stamp a Digital Document中,提出了一种对数字文件进行时间戳记录的方法,时间戳可以准确地反映文件创建的顺序,时间戳一旦在文件上生成,就无法更改,但这种功能需要依靠时间戳服务器执行,服务器根据接收文件的时间,以及指向前一文件的链接来对数字文件本身进行签名。图1-7 链接的时间戳

第二篇论文Improving the Efficiency and Reliability of Digital Time-Stamping提升了前述时间戳的效率,方法是不需要每次都单独对文件进行加盖时间戳的操作,而是先组合形成文件块,然后再把这些文件块组成“链”。这已经有了Merkel树及块、链结构的思想。图1-8 文件块形式的时间戳

上述设计与比特币区块链很类似,但此时的“时间戳”仍然要依赖于中心化服务器,比特币却与之思路不同,比特币进行了改进,通过“矿工”来记录事件,因此不再需要这个中心化服务器了,是去中心化的。1.2.2 工作量证明的源头:哈希现金

1992年,IBM的研究员、密码学家新提亚·沃克(Cynthia Dwok)和摩尼·纳欧尔(Moni Naor)提出了通过计算数学题,来解决垃圾邮件的思路。

为解决垃圾邮件泛滥的问题,两人提出,可以在每次发送邮件时这样设置:计算机需要用几秒钟计算一道数学题,如果没能附上正确答案,收件人的邮箱会自动忽略发来的邮件。对于普通用户,发送邮件频率不高,这种计算几乎没什么影响,但对于想同时发送数万甚至数百万条垃圾邮件的广告商、诈骗者和黑客来说,这种计算所需的时间和金钱的花费都是很大的,几乎是无利可图的。

1997年,亚当·贝克(Adam Back)发明了哈希现金(Hashcash),其中独立地提出了类似上述的想法:电子邮件的发送人需要在邮件中添加一个随机数“Nonce”,这个随机数必须使得邮件的哈希值以多个0开头。因此,发件人只能根据邮件内容尝试不同随机数,否则邮件就会被收件人的邮件客户端拒收。

亚当·贝克与新提亚·沃克的解决方案很相近,都需要花费一定的资源计算数学难题,即“工作量证明”,才能正常发送邮件。其中,亚当·贝克的方案更具有随机性,类似中彩票,哈希现金Hashcash方案中速度慢的电脑仍有可能更先找到这个随机数。因此,这一机制初步实现了防止双花(Double-spending)的功能。

哈希现金这种“工作量证明”的思路,被中本聪在比特币白皮书中所引用。哈希现金之后出现的几个著名的关于数字货币的提议,多数都是建立在哈希现金的基础上的。比特币利用了哈希现金这种工作量证明的思路,即通过稀缺性来避免双重支付问题,才得以形成数字货币。1.2.3 数字货币的先驱:B-money

在比特币白皮书中,第一个被引用的参考资料就是B-money,其原创者叫戴维,在以太坊中,以太币ETH的最小单位被命名为Wei,以示对戴维的敬意。

1998年11月,戴维提出:高效的合作需要有一个交换金钱的平台,以及确保合同执行的方法,他将他的提案称为“B-money”,并在密码朋克邮件列表中发布了B-money白皮书。这是一种匿名的、分布式的电子加密货币系统,强调点对点的交易和不可更改的交易记录。

B-money是第一种真正意义上的数字加密货币,比特币的去中心化的结算架构、匿名交易、点对点网络,在B-money中已经全部出现。B-money可以说是比特币的主要思路来源之一,不过它只是提出了一种理论框架,没有真正进入应用领域。

B-money的思路是:账本不再由一个中心机构管理,而是所有的参与者都拥有一份该账本的副本。每当有一笔新的交易产生,每个人都更新他们手里的账本。此外,这些账本还包含公钥,上面附着相应的金额,但是没有真名。这种去中心化的手段将使得没有任何人能够阻止交易,同时也保证了所有用户的隐私安全。

比如Alice和Bob两个用户,分别拥有公钥“A”和公钥“B”,以及相对应的私钥。在所有用户共同维护的账本中,他们的公钥上都有B-money货币,假设两人分别有1元钱。如果Alice需要向Bob支付1块钱,Bob把他的公钥B发送给Alice,于是Alice通过信息的形式创建一个交易:从A发送1块钱到B。然后Alice的公钥A相应的私钥在这条信息上签名,然后把这条信息及签名发送给所有B-money用户。这条签了名的信息向所有B-money用户证明,公钥A的主人想要将1块钱发送给公钥B。因此每个人都会更新他们的账本,于是A的余额为0,而B的余额为2,而大家都不会知道Alice和Bob的真实身份。

但这个B-money提案并不能解决双重花费的问题。Alice可以将1块钱发送给Bob,同时可能还会发送给别人,这就是所谓的双花问题。

于是戴维在同一篇提案中提出了第二个B-money解决方案。

戴维提出的新版本的方案是:不是每个人都拥有账本,系统中有两类用户——普通用户和验证用户,只有验证用户才能对B-money的账本进行管理。要验证交易是否真的执行了,普通用户需要通过随机选出的验证者进行验证。这和今天的权益证明系统很类似。

此外,戴维还在提案中添加了一个智能合约的早期版本。这种智能合约就像是权益证明系统和仲裁系统的混合,使用该智能合约及仲裁者的双方必须将资金转账至一个特别的账户中。

B-money的设计在很多方面都与比特币非常相似,但是B-money的有些设计不切实际,比如货币的创造环节,要求所有账号共同决定计算量的成本,并就此达成一致意见。每台计算机各自独立记录交易,这样达成一致很难;计算量的成本很多时候并不是很准确,也很难及

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

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载