区块链技术指南.-阿里云开发者社区

开发者社区> 华章出版社> 正文

区块链技术指南.

简介:

e1807866a12e3ce8343410448b6d4fe994f6b8ae


区块链技术指南


邹均 张海宁 唐屹 李磊 等著





图书在版编目(CIP)数据

区块链技术指南 / 邹均等著. —北京:机械工业出版社,2016.11

ISBN 978-7-111-55356-4

I. 区… II. 邹… III. 电子商务-支付方式-指南 IV. F713.361.3-62

中国版本图书馆CIP数据核字(2016)第268750号












区块链技术指南

出版发行:机械工业出版社(北京市西城区百万庄大街22号 邮政编码:100037)

责任编辑:高婧雅 责任校对:殷 虹

印  刷: 版  次:2016年11月第1版第1次印刷

开  本:186mm×240mm 1/16 印  张:17.75

书  号:ISBN 978-7-111-55356-4 定  价:69.00元

凡购本书,如有缺页、倒页、脱页,由本社发行部调换

客服热线:(010)88379426 88361066 投稿热线:(010)88379604

购书热线:(010)68326294 88379649 68995259 读者信箱:hzit@hzbook.com

版权所有 ? 侵权必究

封底无防伪标均为盗版

本书法律顾问:北京大成律师事务所 韩光/邹晓东





本书作者

邹均:中关村区块链产业联盟专家、服务合约(Service Contract)方向博士,关注与实践区块链技术与应用。擅长云计算、大数据、软件定义存储。现为海纳云CTO,曾任IBM澳洲金融行业首席软件架构师、多个云计算公司高管,是融智北京高端外国专家。在国际会议期刊发表论文20余篇,获2015年澳中校友会ICT和媒体类别杰出校友奖,区块链相关论文获2016年IEEE ICWS最佳博士论文奖。

张海宁:VMware中国研发中心云原生应用首席架构师,西蒙弗雷泽大学计算机科学硕士,多年软件全栈开发经验,Harbor企业级容器Registry开源项目负责人,Cloud Foundry中国社区最早的技术布道师之一,国内最早的iOS开发者。在VMware公司先后负责开源PaaS平台Cloud Foundry、大数据虚拟化、软件定义存储VSAN等领域的技术布道和解决方案推广。目前着重关注区块链、容器和云计算等领域的研究和开发工作。之前曾担任IBM资深软件工程师、Sun公司资深解决方案架构师等职务。

唐屹:广州大学教授、理学博士,专注于区块链安全与应用、网络信息安全、分布式计算等,为国外知名安全公司开发过椭圆曲线密码软件,获密码科技进步二等奖(省部级)。主持或参与完成多项国家级或省部级自然科学基金与人才计划等重点项目。

李磊:合肥工业大学副教授,Macquarie大学博士。擅长数据挖掘、社会计算、智能计算。获2011年澳洲最优博士论文提名,并多次担任IEEE国际会议的程序委员会委员及组织者。在社会计算和区块链等领域发表论文40余篇,被引用350余次。

刘天喜:深圳拓邦股份有限公司总经理助理,高级工程师、北京大学博士。在移动通信、集成电路、移动互联网、物联网等领域深耕多年,擅长技术产业研究、行业分析和战略规划,主导或参与中国工程院、中央网信办、工信部、国资委等十余项产业研究课题。发表学术论文10余篇。

陈晖:区块链PPk开源项目发起人和主要开发者、巴比特网站专栏作者与区块链技术版版主。对网络与通信技术有深入实践与研究,十余年的软件研发和项目管理经验。通过深度实践以比特币为代表的数字加密货币领域,率先提出“区块链+网络通信”将最大化发挥区块链革命性价值的观点,并着力以开放开源项目的形式推动区块链与网络通信领域融合的技术创新和应用发展。

曲烈:Macquarie大学博士,曾任Macquarie大学研究员、助教。从事信息安全、密码学、区块链、服务计算以及信息系统等领域的研究。多次在国际知名会议和期刊发表论文,并受邀宣讲。

郑晓明:中国电信云计算分公司工程师、Macquarie大学博士,专注于云计算、云存储、监控系统、推荐系统、模式识别等,近期研究区块链相关技术。





序一:什么是区块链

2015年是国外区块链的元年,世界许多重大组织,包括高盛、花旗银行、英国央行、美国央行等机构纷纷在区块链上面投资。大量的投资从2015年10月开始便进入了区块链,原因是在《华尔街日报》刊登一篇的文章,里面报道区块链经过了多次的实验和验证,许多金融机构证实了区块链是一个颠覆性的技术。之前华尔街日报甚至宣称,区块链是最近500年以来在金融领域最重要的突破。而这500年来有多少科技上的突破,但华尔街日报却说区块链是人类历史上在金融领域最大的突破。这可能是因为出现了一个新的货币媒介,而每一次新货币媒介出现,都会引发社会和经济上的重大改革。

2016年1月,英国首席科学家建议英国政府把区块链技术列为英国国家战略,这是区块链历史上一个重大突破,原因是基于华尔街以及金融机构对区块链的评价。但自从2016年1月以后,区块链的评价是基于科学历史悠久的英国官方的评价。从各样指标来看,英国在科学上的建树经常是排名第二,仅次于美国。而世界科学排名第二的英国甚至把区块链列为国家战略,表示区块链的重要性毋庸置疑,而且有深远的影响。能够成为国家战略必须在科学上被验证过,另外还必须带来巨大的商业价值,两者都不可缺少才能成为国家战略。笔者曾在2016年3月拜访英国首席科学家,他们认为,区块链可以在各行各业使用,带来行业公平,例如:诚实报税、政府监管、反洗钱、国家安全等。

2016年可以说是中国区块链元年,因为在2016年区块链在中国受到极大的重视。首先是1月的时候,人民银行宣布要使用数字货币。然后在30日以后,许多中国的组织单位就开始投资区块链。中国许多大学也开始研究区块链技术,大型金融机构都纷纷表态成立区块链团队来研究区块链,区块链的讨论班以及研讨会如雨后春笋一般大量涌现。

但到底什么是区块链?笔者在2015年开始研究区块链,就发现了一件事情:学生们在实验,提出来的区块链模型、算法,或者架构都是有偏差的,而且有时候偏差甚大,例如,在设计私有区块链的时候把公有区块链的全部思想搬过来。结果不像私有区块链,但也不像原来的公有区块链。另外发觉很多人对相关的算法不熟悉,所以有的时候会有一些错误的看法,例如拜占庭将军的问题是一门专门的学问,而区块链只是用了一个近似的算法,若是把两者混为一谈,就会让人感到迷惑。

再加上在讨论区块链时,有时候会有情绪化、宗教化或者政治化的言语出现,原来在数字货币领域,数字货币的先锋常带有一些政治思想,如无政府主义。再加上原来的数字货币过去有洗钱、犯罪的记录,所以在讨论时,有时候会失去焦点。这一点在英国首席科学家的报告里也有提出来,他们认为应该重视区块链,把区块链当做一门科学技术来看,而且是一门有助于经济的科学技术,而不是吹捧任何政治思想,或传递宗教概念。

笔者从今年初开始多次提出应该以系统工程角度来发展区块链技术,例如基于云计算、软件工程、数据库等系统工程技术来开发区块链,区块链不只是一个加密技术或是数字货币,而是一门系统工程。区块链不是某些特殊政治思想的乌托邦,或洗钱的工具,而是一门科学家和工程师可以研究的系统工程,而且这项技术可以成为国家战略,改变各行各业的流程以及基础设施。英国首席科学家已经做出这样的判断,英国央行也做出了类似的决定,英国政府已经派了两位部长来领导这项计划,这就是我们所期

待的。

所以我非常高兴像邹均、张海宁、唐屹、李磊、刘天喜、陈晖、曲烈、郑晓明这些年轻的学者们开始书写区块链技术,因为现在市面上有关区块链的书都是在讲解区块链的概念及应用场景,但是今天描述区块链技术的书却很少。我们希望读者能多了解区块链技术,多发展区块链技术,并且加以应用。只有我们了解区块链技术之后,才能真正理解区块链的意义,而不会随波逐流,人云亦云,并且有自己的判断,希望读者们能够认真读这本书,了解区块链技术,相信必定会大有收获。


蔡维德

美国亚利桑那州立大学荣誉教授,北航区块链实验室主任





序二:区块链——未来已来,

只是尚未流行

比特币诞生于2008年美国次贷危机的末期。在比特币白皮书,即中本聪的论文《比特币:一种点对点的电子现金系统》中,还没有“区块链”这个词,只有“区块”(Block)和“链”(Chain)。一些人为这种超越主权、不会滥发的虚拟数字货币而欢欣鼓舞,开始积极投入到挖矿、炒币中,甚至发行自己的数字货币进行筹资(ICO),俗称“币圈”。而另一些人,包括很多专家和学者,则专注于比特币底层技术,对区块链(Blockchain)技术和应用进行深入地研究,考虑能否将这个技术加以改进,运用到更多的领域中去,俗称“链圈”。

七年之后,以2015年10月美国《经济学人》杂志发表的《信任的机器》(The Trust Machine)的封面文章为标志,大家意识到,作为比特币底层技术的“链”,其价值远大于比特币本身。区块链可以让人们在没有中央权威机构监督的情况下,对彼此的互相协作建立起信心。简单来说,它是一台创造信任的机器。华尔街开始热捧区块链。Gartner发布的2016年技术炒作曲线图表明,当前区块链正处于期望的最高点,即“过度期望期”,这也意味着在未来不久的一段时间,区块链将坠入“期望幻灭期”。人们对区块链的过度期望,实际暗示着对其存在很多误解,其中最典型的有三个,因为其关键词的首字母都是D,所以笔者将其归纳为“3D误区”。

误区一——区块链是一种颠覆性(Disruptive)的新技术

首先,区块链不是一项新技术,而是一个新的技术组合。其关键技术,包括P2P动态组网、基于密码学的共享账本、共识机制(拜占庭将军问题,即一种分布式场景下的一致性问题)、智能合约等技术,都是已经有十年以上的老技术了。但是,中本聪将这些技术很巧妙地组合在一起,并在此基础上引入了完善的激励机制,用经济学原理来解决传统技术无法解决的问题。

其次,这个技术组合虽然有其独到的创新之处,但并非是颠覆性技术,是现有技术的有力补充。目前大部分人已经认同,区块链是“价值互联网”的基础协议,从这个角度看,其地位与当前“信息互联网”的HTTP协议相当,两者都是建立在TCP/IP协议之上的应用层协议,同是互联网的两大基础协议。因而,两者是互补而非颠覆的关系。

最后,这个技术组合,并未颠覆现有业务,而是引入了新的思想,去改善和改造现有业务模式,从而为大众提供更好的、普惠的服务。《华尔街日报》在2015年1月曾发表题为《比特币与数字货币的颠覆性革命》的文章,认为比特币的数字货币发行机制可能“颠覆”目前各国央行的法定货币发行模式,这算是最接近“颠覆”性的区块链案例。而实际上,比特币在经过8年多的发展后,虽然总市值发展到了100亿美元,但在全球经济活动中的比重还是微不足道。与此同时,也确实有一些国家的央行,如英国和中国,在考虑摈弃比特币的挖矿机制后,通过借鉴数字货币的一些机制,在一定范围内实现可跟踪、可追溯、数字化的法定货币。

误区二——区块链就是去中心化(Decentralized)的

首先,很多人认为Decentralized是区块链的核心特征,并将其翻译为“去中心化”。然而这个最早由国内“币圈”所做出的翻译,多少有一点主观和政治化的色彩。作为软件系统的网络架构一般有三种模式:单中心、多中心、分布式。单词Decentralized只是表明不是单中心模式,可能为多中心或弱中心,也可能是分布式的。所以在中国台湾地区,大多将Decentralized翻译为“分散式的”而不是“去中心化的”。

其次,在中本聪的整篇论文中并没有提到过Decentralized,而只有Peer-to-Peer(P2P)。在2016年6月召开的W3C区块链标准会议上,以太坊的核心开发团队EthCore就明确表示,不再使用Decentralized这个词,而是用P2P、Secure、Serverless这类纯技术性词语。

最后,The DAO事件表明,完全去中心化是不可行的。The DAO是一个基于以太坊公有链的众筹项目,它在短时间内就募集了价值1.6亿美元的数字货币,成为史上最大的众筹项目。然而由于其智能合约的漏洞,导致The DAO被黑客攻击并转移走价值6000万美元的数字货币,最后不得不黯然落幕。在挽回这个损失的过程中,原有的去中心化机制未能解决问题,最后还是通过“集中式”的方式,强制以太坊进行“硬分叉”完成交易回滚。但这也导致了以太坊社区的分裂,产生了ETH和ETC这两种同源却又不同价格的数字货币,给以太坊生态系统带来了很多负面影响。此次事件之后,很多人对区块链的“去中心化”进行了反思。前上交所总工、ChinaLedger联盟技术委员会主任白硕则认为“去中心化不是区块链的本质特征”。万向控股副董事长兼执行董事肖风则进一步阐述“区块链的核心是分布式而不是去中心”。

误区三——区块链交易存在很大的延迟(Delay)

在使用比特币进行支付时,一般需要10分钟才能完成一次支付确认。如果要保证支付交易的不可逆转,通常需要等待连续的6个数据块完全确认,这至少需要1个小时的确认时间。而我们通常使用的银行网银支付和第三方支付,通常都是秒级完成的。与之相比,使用区块链的比特币支付实在太慢。

然而,我们再考虑一下跨境支付的场景,当我们使用Swift完成一次跨境汇款时,通常需要3~5个工作日,对方才能收到相应的款项。而使用比特币进行跨境汇款,仅仅需要一个小时就能收到汇款。如此比较起来,比特币支付已经是非常快了。

为什么有两个完全不同的结论?因为,对于比特币支付来说,支付确认过程即是清算和结算的过程。如果把支付过程和清结算过程作为一个整体,来比较两类支付的延迟时间,使用区块链进行交易还是很快的。区块链交易的本质,是大幅减少了交易后的处理工作,消除了大量的人工干预过程,从而提高了交易效率。

通常我们把区块链分为公有链、私有链、联盟链三种,比特币和以太坊都属于公有链范畴。在数字货币之外的场景中,尤其是在金融领域中引入区块链技术,将面临很多问题。如何引入以及引入哪种区块链,还存在许多权衡决策方面的障碍。

第一,主流金融机构难以接纳公有链。R3发布最新研究报告,证明公有区块链不可作为金融机构解决方案。2016年Swift发布白皮书指出,当前世界主流金融机构无法接纳公有区块链。对于这些金融机构而言,需要的是一个自主可控的系统,而公有链显然做不到这点。

第二,私有链与公有链架构差异大。笔者曾仔细分析了以太坊和超级账本这两个典型区块链的模块结构,发现两者差异巨大。很多公有链的核心模块,如挖矿、PoW共识、原生货币等,在私有链环境中是完全不必要的,甚至是有害的。与此同时,公有链系统中还缺失一些诸如身份认证、权限管理等在私有链中必要的模块。以太坊创始人Vitalik也曾坦言,只有5%的以太坊程序可被金融领域使用。

第三,私有链和联盟链还很不成熟。目前,以比特币和以太坊为代表的公有链相对比较成熟,而私有链和联盟链则远远不够成熟。开源而且好用的联盟链,更是不存在。目前全球影响力最大的开源联盟链,是Linux基金会下面的超级账本(Hyperledger)项目,目前已有95个成员单位。旗下的Fabric子项目是以IBM捐献出的OpenBlockchain为主体搭建而成的,目前还处在0.6版的快速迭代过程中,到0.8将是Alpha版,而0.9则是Beta版,再经过3个RC版本之后,才会进入相对成熟的1.0版。

想要找到或研发出一个成熟稳定的、适合金融领域的联盟链底层系统,还任重道远,需要很多仁人志士的共同努力,踏踏实实地投入到区块链的基础研究中去。

在目前已出版的区块链书籍中,有很多都冠以“革命”、“重塑”、“重新定义世界”等煽动性词语作为书名,这更像是一种口号,而非切合实际的研究。我很高兴地看到,还有像邹均、张海宁、唐屹、李磊、刘天喜、陈晖、曲烈、郑晓明等这些研究者们,在踏踏实实地研究区块链底层技术,用普实的话语来介绍和普及区块链技术,让更多的人了解和接受区块链技术,实实在在地让人们了解区块链技术特征和特点,以及在现阶段环境下的不足,如何去改善这些不足等。知己知彼,方能百战不殆。世上没有“银弹”,没有哪一种技术能解决所有的问题。

希望读者们能够通过本书,深入地了解区块链技术。也只有深入了解其底层运作机制和原理,才能更好地灵活运用该技术,取得理想的效果。

未来已来,只是尚未流行,我辈仍需多努力。


张斌,联动优势科技有限公司CEO






序三:区块链——连接虚拟与现实

我们对于一种新兴的技术,往往会在短期内对它有过高的不切实际的期望;泡沫破灭后,在长期的时间轴线上,又往往会忽视它的深刻影响,这一句话,用在区块链上,再合适不过。

区块链的发明,是建立在互联网之上。其所使用的技术,像P2P、分布式存储、分布式密钥的思想,十几年前就已经存在,但是如果没有中本聪那一篇开创性的关于比特币的白皮书,所有这些强大的工具,都还只是埋藏在学术论文堆里。因为这些工具单独使用,并不能解决问题,只有中本聪,出人意料地提出了一个系统性的、可供实践的解决方案。如果他能提前十年提出这篇论文,那么比特币就可以提前十年发明出来。所以,单个技术点,并非是区块链的魅力所在,运用这些技术的全新思想,才是区块链的本质和核心。

单纯把区块链等同于一种分布式数据存储技术,就像将浏览器说成是一个网页解释器,将手机说成是一台手持电话,将云计算说成是一个服务器的集群一样,说了等于没有说,甚至比没说更糟糕,更容易造成误解。当全球的用户都打开浏览器访问网页,当街上每一个人都携带着一台能拍照、能上网、带GPS,运算性能可以发射登月火箭的智能手机,当我们所有的工作和生活数据都发生与存储在云上的时候,我们看到在浏览器、移动互联网和云计算上所承载的产业生态,跟最初的技术描述相比不知道差了多少万里。所以有人让我用一句话解释什么是区块链的时候,我往往会争取机会多说几句,争取让人更多了解一点。

从功能上说,互联网实现了信息的传播,而区块链实现了价值的转移。互联网在最开始的时候,就是以信息传输管道的模式进行的设计,TCP?/?IP协议底层并不关心上面传输的数据有什么差别——对于底层的交换机和路由器来说,一切都是0和1而已。无差别的信息传输,创造了信息复制的便捷通道,也造就了今天信息爆炸的信息社会。但是互联网虽然解决了信息传播的问题,却带来了信息权属的新问题,我们可以将一首歌曲或者电影,在几个小时内传遍全球,我们却不能知道,究竟是谁拥有这部电影的权利,是通过什么样的路径进行的传播。而区块链则可以做到,我将一个数据,发送给另外一个人之后,我自己就不再拥有这个数据的所有权,从而实现了可以利用一个虚拟的系统,来传输实际的价值。

从机制上说,如果说TCP?/?IP是机器与机器之间的通信协议,而区块链就是机器与机器之间的信任机制和合作协议。对于不需要验证真假的信息传输来说,TCP?/?IP已经足够可用,但是一旦属于不同实体的计算机,需要彼此之间进行自动化的沟通和合作的时候,问题就会变得相当复杂。现实世界公司与公司之间的合作,有律师和合同来进行条款约定,有执法机关来保障合同的实行,而在虚拟世界,计算机没有办法开设银行账户,属于不同实体的计算机,也没有办法去法院起诉对方,因此在沟通和合作的时候,一定要有一种有效的机制,来快速实现共同协作。区块链就可以起到这样一个作用,所以在区块链行业中有一句话:代码即法律(Code is the Law)。未来不管我们的生活还是工作,都会有越来越多地需要计算机参与,人类将整体进入后人工智能时代,区块链就是在为这个时代的到来进行前期的铺垫和准备。未来我们将会看到无人驾驶汽车,通过区块链协议自动缴纳过路费用;智能投资顾问自动为我们计算各种投资组合;未来最先进的金融公司,也会像现在的无人工厂一样,看不到太多工作人员,只有无数的计算机,在快速地缔结无数的智能合约,进行精确到小数点后的资产配置。

因为区块链的以上属性,区块链将会是连接虚拟世界与现实世界的最佳桥梁。在未来,区块链所连接的,不会像比特币一样是无法辨别的匿名账户和价值不定的虚拟资产,而将会是千千万万真实存在的个体和公司实体。上面所承载的资产,都将具有现实的价值和对应物,而这个虚拟的网络上发生的一切,也都会直接作用于现实世界。这一过程,需要的不仅仅是单纯的技术,还需要金融、商贸、法律、政府等各方面专家和人才凝聚在一起,来保证这一映射的有效性,也是我们一直在努力推进区块链生态系统和可信区块链概念的原因。区块链有巨大的潜力和未来,而这些潜力和未来,需要社会的共识与力量来共同推进和实现。


邓迪

太一云科技有限公司董事长兼CEO





序四:区块链——转型之擎

邹均先生在国内外企业的IT架构、云计算、大数据、IT产品创新方面有很多年的经验,邹均本人也是我多年的好朋友和同亊。这次邹均先生主写的这本区块链的书,相信一定会在IT业内,特别是在企业IT架构圈内产生巨大的反响,一定会深受广大区块链爱好者、参与者、实践者的热烈欢迎。

我和邹均先生工作背景相似,曾经从事过多年企业IT工作,从2009年开始,做云计算的创新,近年来也做金融科技的创新。从我这一年多时间的区块链的实践中,我个人看到区块链目前虽然还在发展初期,而每天区块链技术都有新的变化和突破,每天都是“山雨欲来风满楼”。但是区块链这样一个意义重大的技术,对整个IT的架构、基础协议、标准、运营、环境具有颠覆性的意义。因此我们应当充满紧迫感,应当预先了解区块链技术、商业模式和发展趋势,加强与国内外各界的合作,特别是在区块链的底层领域、区块链的平台领域和区块链的应用领域的合作,我们应当在区块链的全球协议和标准方面要占据主动。

区块链技术具有全新的理念和逻辑结构,并且它每天还处在发展变化过程中,因此区块链技术与应用在企业内不可能单打独斗,区块链的应用必须在企业架构中上着天、下着地,和企业现有的应用系统相互关联。我们不应该简单地把区块链理解为一项技术,而应当考虑它在更高的企业IT架构转型层面的作用。区块链的应用不是简单地提供一个只能追加、不能更改的分布式数据库解决方案,而是要把区块链与云计算、大数据和传统企业的系统相互关联,使得企业系统由原来的传统系统和云计算这种“双核驱动”转变为传统系统、云计算与区块链的“三核驱动”,让企业的异构系统更好地发挥协同效应,一起解决原来传统IT系统难以解决的问题,这样才能更好地发挥区块链的独特性,才能够使传统企业IT架构更好地转型。

本质上,因为区块链链与链之间具有隐私、安全、共识、自治、价值共享的特性,所以在技术层面解决了互联网上的价值传递问题。同时,区块链又具有底层开源和改变业务规则、创新业务多方共识等逻辑,因此区块链是未来整个IT架构和互联网转型的重要支撑。而企业与互联网IT架构的转型也为未来经济的转型、服务模式、信用交换和商业规则的转型提供了关键支持,因此研究和应用区块链不仅要研究技术,更要注意在互联网时代赢者通吃的规则,重要的是要研究和应用区块链带来的商业规则的改变。

以前我们的信息化,不管是企业信息化、政府信息化,还是个人信息化,实际上都侧重在机构内部的信息化。这几年随着互联网、云计算、大数据、平台经济的蓬勃兴起,现在IT正在促使企业由内部信息化转型为外部信息化,最终通过平台转型为信息化的企业,由政府信息化转型为信息化政府,由个人信息化转型为信息化个人,这些词虽然相似,但性质具有很大的不同。它们在逻辑关系、业务处理方式、信息的确权、信息的使用、组织流程的改变、企业治理结构方面有很大不同,信息化已经不再是工具、手段和渠道。这样一个信息化平台的升级,未来会使得实体经济更好虚拟化,使得虚拟经济更好地结合实体化。

实施区块链既需要具有传统IT系统的经验,也需要有互联网、云计算、大数据的实施经验,需要对整个IT系统变迁具有很强的洞察力,需要把整个IT系统协同起来,让整个IT系统互联互助,相互合作。因此,区块链系统在企业的应用,必然需要结合本地的实践,发挥原创的精神,必然还要有互联网时代产品开发的能力。而做一个好的区块链应用更需要研究共享经济理论、价值互联网和金融科技的创新与发展。这一切都需要在区块链理论与研究方面走到前列。

因此,我希望邹均先生等人写的这本区块链的书籍,会连接IT架构的过去、现在与未来,开启大家创新的热情,会对行业产生影响,同时为大家开启一扇协同企业传统系统、云计算、大数据和区块链新的大门。


黎江

北京世纪互联创新研究院院长






前言

为什么要写这本书

1900年9月8日,一场4级强度的飓风横扫德克萨斯州的加尔维斯顿。这个位于墨西哥湾的岛城,靠近德克萨斯海岸,在灾难来临前拥有37?000人口和光明的经济前景。飓风猛烈攻击了这个毫无防备的低海拔城市,给该市带来了巨大的毁坏。飓风风速为每小时225千米,毁掉了3600座建筑,使占整个城市3/4的12个街区彻底消失,死亡人数为8000~10?000人。是迄今为止,美国历史上死亡人数最多的自然灾害。

而2016年8月2日在中国华南沿海登录的“妮妲”台风,风力14级,最高风速每小时151.2千米,台风过境的广东、广西、湖南、贵州、云南5省(自治区),虽然也造成了重大经济损失,但在人员伤亡统计报告中,只有1人失踪。

这两次自然灾害的结果如此不同,归功于人类掌握了计算这个神奇工具。在妮妲形成过程中,美国、日本、中国气象监控部门就不断跟踪,通过监控数据,气象数学模型和强大的计算能力,对台风进行了准确的预报和预警。在台风到来前,有关部门做了积极准备,7.6万人得以紧急转移安置,使得损失得以降到最低。

今天,IT已经渗透到各行各业,人们已经能近距离接触无人驾驶、机器人、虚拟现实(Virtual Reality)、增强现实(Augmented Reality)等先进技术,当人们在享受IT给人们生活带来的各种便利和好处的时候,也日益感受到来自不当使用科技所带来的挑战。例如,国内日益猖獗的电信诈骗,全球范围内黑客的攻击和安全勒索,以及未来基因技术和AI(人工智能)技术给人类所带来的伦理、生活和工作方面的全方位冲击,都使得有识之士开始思考如何应对科技发展所带来的风险。

一直以来,笔者对计算技术有一种既感恩又敬畏的情结。首先感恩我们的时代,计算技术的发展使我们避过很多前人无法避过的灾难;但高速发展的计算技术必然导致机器的智能超过人类自身,因此而产生的未来不确定性也使笔者的敬畏之心油然而生。

笔者也一直有一个预感,未来可能需要针对IT,特别是与业务结合紧密的云计算和智能设备建立监管、问责的机制。笔者的意思不完全是对从事IT或智能设备的人进行监管问责,甚至要考虑对智能设备进行自动问责。这个看似荒谬的想法促使笔者选择了云计算的问责机制(Accountability in Cloud Services)作为博士研究方向。

所谓云计算的问责机制(Accountability),指的是在云计算架构中,能建立一个自动化的问责机制。该机制包括形式化的标准服务合同定义,服务合同的发布,服务合同执行的监控,合同违约方的自动发现,违约方的罚则和执行,以及合同双方争议的仲裁。举个例子来说,今天公有云的提供商,都没有提供能让电脑理解的云服务合同。合同双方的责任、义务和权利没有精确的界定;云服务提供商的服务好坏,是否遵从合同,都没有自动化的方法去检测;服务故障责任也没有办法界定;出现争议也只能靠人工去解决。而云计算的问责机制,旨在建立一个自动化的体系来让电脑自动规范电脑的行为。

可想而知,这个研究课题非常有挑战。在博士研究的过程中,笔者也走了很多弯路,一直没有找到好的解决方法,直到三年前接触到比特币,突然意识到区块链技术是提供问责机制的最理想平台。这是因为区块链技术中的防伪、防篡改、交易可追溯、数字签名和智能合约技术提供了一个公正、可问责(Accountable)、自动执行的技术平台基础。

但是区块链目前还停留在概念炒作阶段,很多关注点还停留在金融应用,特别是虚拟货币方面的应用。笔者认为,区块链未来可能最适合作智能设备的“警察”,为物联网和智能设备的自治管理提供一个基础平台。区块链技术应该推广应用到除金融外的行业,因此萌生了写这本书的念头,作为博士研究工作的一个延续。

而写这本书的另一个原因,也是深感在学习区块链技术过程中碰到的参考资料不足的痛苦,希望能整理过去的学习所得,对区块链初学者有所帮助。

从2008年中本聪发表比特币白皮书算起,区块链技术才走过短短8年的时间。虽然区块链1.0、2.0和3.0的架构理念已经提出并得到一定程度上的认可,但区块链的技术发展仍然处于初级阶段,区块链的应用还刚起步,成熟的区块链应用除了比特币系统,还寥寥无几。在这种情况下写关于区块链的书籍,其实面临一个两难境况。一是区块链的技术变化快,像个移动的靶子;可供参考的资料又少,要准确把握一个快速变化的技术非常困难,而且受限于写笔者的水平,实践经验,写出来的书难免有很多错误,弄不好会贻笑大方。而另一方面,正因为变化快,资料少,广大区块链技术爱好者又渴望能找到一本对他们学习、理解、掌握区块链架构和技术有所帮助的书。

目前在市场上的区块链书籍大致分为两类:一类是以梅兰妮·斯万(Melanie Swan)的《区块链:新经济蓝图及导读》为代表的,谈区块链对整个宏观层面所带来的革命性影响的战略性书籍;一类是以安德鲁·安东普洛斯(Andreas M. Antonpulos)的《精通比特币》,以及普林斯顿大学以阿文·拿瑞延南(Arvind?Narayanan)为首编著的《比特币和密码学技术》为代表的专注于比特币的技术性书籍。这些书籍满足了目前市场上一部分对区块链在行业中的应用有兴趣的偏业务的人士,以及对比特币技术有兴趣的偏技术的人士的需求。

在这两类书籍所覆盖的市场中,其实还有一个很大的空白。我们发现,在对整个区块链架构(包括区块链1.0、2.0和3.0)进行系统性剖析,包括对其中关键技术(密码学、共识算法)等进行系统性论述,对不同的区块链架构形式(联盟链、公共链、私有链、侧链、多链、互联链等)进行系统性介绍的书好像还没有。而这样的书对理解、普及区块链技术,推动区块链应用落地可能会有所帮助。因此,与其等待这样的书籍出现,不如自己行动,为区块链技术的推广尽绵薄之力。笔者也就自不量力,把可能被同行笑话的风险置之脑后,鼓起勇气集合几个对区块链着迷、志同道合的朋友,在条件不成熟,时间比较仓促的情况下,经过不少不眠之夜的努力,克服重重困难,特别是在机械工业出版社华章分社编辑高婧雅的大力协助下,完成了该书。

本书的缺点是显而易见的。

一是因资料匮乏、技术变化快而难免出现技术错误。因此,本书的目的,主要是抛砖引玉,欢迎读者多提宝贵意见,争取在下一版本能纠正大部分的错误,不断完善、提升本书的质量。

二是缺少应用案例。其实目前网上的应用案例也有不少,但是我们认为,如果只是拿别人在网上的案例加工修改,从深度、广度方面都经不起推敲,起不了真正案例的作用。除非由真正落地该应用案例的主要负责人来写,才能使读者有真正的收获。受限于我们的人脉圈子和条件,目前只能请到PPKpub.org开源社区组织者陈晖先生来写一个区块链在标识注册方面的应用案例。在此鸣谢陈晖先生的大力支持,将来也欢迎有更多的区块链应用的领军团队提供应用案例,在未来更新的版本中补上在应用案例方面的短板。

本书特色

1)和目前市场上主流的区块链书籍强调区块链去中心化的概念,以及对业界带来的革命性影响不同,本书主要是从技术的角度,介绍区块链的基础概念,特别是对区块链的架构进行了详细的剖析。

2)对区块链的关键技术,包括区块链架构(1.0、2.0、3.0)、密码学和共识算法等做了一个详尽的介绍。

3)提供了比特币开发指南,通过以太坊智能合约开发来帮助初学者入门。本书也用专门一章来讨论区块链的常见问题,包括对近期发生的DAO攻击事件,都有详细的分析。

4)在区块链技术落地方面,本书也提供比较典型的区块链解决方案,包括支付和标识登记方面的解决方案。

5)以独特的架构演进对IT发展的影响为切入点,给读者展示一个全新观察整个IT历史的视角,并在这个视角下探讨区块链技术在未来IT发展中的影响和地位。

本书中一些实操的例子和章节,比较适合区块链初学者和程序员,可以成为区块链入门的书;架构剖析和深入分析方面的章节,比较适合IT架构师,以及区块链技术爱好者来深入了解区块链架构特点和技术细节,对设计区块链的解决方案有所帮助;解决方案和常见问题章节有助于区块链从业人员全面了解区块链应用落地方面的情况。最后一章是从架构视角对IT发展的一些观察,仅供喜爱思考的IT从业者参考。

读者对象

区块链从业者

IT架构师

区块链应用开发人员

对区块链技术感兴趣的人员

如何阅读本书

本书分为三大部分,共11章。

第一部分介绍基础和入门,包括以下2章内容。

第1章 本书的开篇,首先介绍区块链的定义和特点,并简单介绍了区块链的主要类型,然后通过介绍购买、存储和交易比特币等实际使用场景来让读者对区块链有所体验,然后再探讨一些关于区块链的常见问题。

第2章 介绍区块链的基础概念,为后面深入介绍区块链技术做铺垫。

第二部分介绍架构和核心技术,包括以下8章内容:

第3章 详细介绍区块链1.0、2.0、3.0典型架构,同时介绍了互联链的概念和架构。

第4章 详细介绍了区块链涉及的密码学原理和典型的算法。

第5章 介绍了在区块链架构中常用的共识算法。

第6章 提供比特币开发指南,通过实际案例来帮助初学者入门。

第7章 提供以太坊上的智能合约开发指南,帮助初学者掌握智能合约的开发要领。

第8章 详细介绍HyperLedger开源项目及其架构。

第9章 讨论区块链上常见的问题,包括最近出现的The DAO攻击的源码级分析。

第10章 讨论区块链上的典型解决方案,一个是以闪电网络为主的支付方案,另一个是以标识登记为主的开源ODIN解决方案。

第三部分为回顾和展望,即第11章,主要回顾IT架构演进历史并展望未来区块链对IT发展的影响。

勘误和支持

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

致谢

首先感谢我的作者伙伴——张海宁先生、唐屹教授、李磊教授、刘天喜博士、陈晖先生、曲烈博士和郑晓明博士。他们在工作之余,挤出宝贵时间为本书贡献了他们对区块链技术的理解和洞察。特别感谢我的大学同门师弟Henry张海宁先生在关键时刻的出手相助,为本书贡献了很多精力,他不单在内容上积极供稿,也在本书的审定、修改和校正方面下了很多工夫。唐屹教授和李磊教授也在繁忙的教学和学术研究中抽出时间来对一些区块链的基本概念和关键技术(包括密码学和共识算法)做了详尽的阐述。刘天喜博士在本书的框架规划和开篇设计上做了很大贡献。而陈晖先生的比特币开发指南对很多初学者入门有很大的帮助,他的ODIN开源项目也是区块链登记方面的一个典型解决方案。曲烈博士的智能合约开发章节给众多以太坊开发初学者提供一个易懂、易上手的应用指引。郑晓明博士也对主流代币做了比较全面的介绍。

本书作者也得到中关村区块链联盟的大力支持,在此也特别鸣谢中关村区块链产业联盟秘书长王安平先生、副秘书长范金刚先生和林大鹏先生以及联盟发展部张培部长。同时也感谢江源老师、江苑绛博士,他们的鼓励成为我坚持下来的动力。另外在写书过程中也得到澳洲富士通区块链技术架构师董仲利先生、信达证劵区块链首席专家曹寅先生、亚投行企业IT项目管理专家Allen邵以及合肥工业大学刘古刘和方辉先生的帮助,在此对他们表示感谢。

另外感谢比特币开源社区、以太坊开源社区,以及巴比特社区的各位技术专家们的博客文章,每次阅读必有所获,本书也多处引用了他们的观点和思想。

非常感谢机械工业出版社华章公司的编辑高婧雅,她的敬业精神和编辑效率令我由衷敬佩,她的反馈、建议、鼓励和帮助引导我们克服诸多困难完成全部书稿。

特别致谢

最后,因为工作和写书,牺牲了很多本该陪伴家人的时间。我要特别感谢我的母亲从小对我的培养,也要感谢我的哥哥姐姐们在儿时营造的和睦互助、求知好学的家庭环境,这对我长大以后形成对新兴技术浓厚的求知欲性格有很大影响,一直以来在我的职业生涯中都受益匪浅。更要感谢我太太Annie长期以来对我的默默支持,以及女儿Beverley,儿子Skyler对我工作的理解。

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

我想和作者聊聊

如果你想和本书作者沟通,可以通过以下方式。

1)微信群“区块链技术交流群”,添加群助理微信号xiaodanmyd入群。

2)QQ群“区块链技术交流群”,群号375936045。

3)关注微信公众号“链信Chain2Trust”。

4)邹均微信号:JoeZou3986,添加请注明沟通事项。


邹均





目录

本书作者

序一:什么是区块链

序二:区块链——未来已来,只是尚未流行

序三:区块链——连接虚拟与现实

序四:区块链——转型之擎

前言

第1章 区块链和比特币初体验  / 1

1.1 区块链简介  / 1

1.1.1 区块链起源——比特币  / 1

1.1.2 区块链和区块链技术的涵义  / 2

1.1.3 区块链分类  / 2

1.1.4 区块链价值与应用  / 7

1.2 区块链体验  / 10

1.2.1 获取比特币的3种途径  / 11

1.2.2 通过交易所购买比特币  / 13

1.2.3 比特币钱包和地址  / 17

1.2.4 从交易平台提取比特币到钱包  / 20

1.2.5 比特币交易查询  / 22

1.3 本章小结  / 22

第2章 区块链基础  / 24

2.1 区块链技术  / 24

2.1.1 基本概念  / 25

2.1.2 框架与特点  / 32

2.1.3 区块链运作的核心技术   / 35

2.1.4 区块链交易流程  / 41

2.2 以太坊  / 42

2.2.1 什么是以太坊  / 42

2.2.2 以太坊技术  / 43

2.2.3 以太坊智能合约  / 48

2.2.4 以太坊的去中心化应用  / 50

2.3 基于区块链的电子货币  / 51

2.3.1 元币平台  / 51

2.3.2 代币  / 52

2.3.3 货币的未来  / 58

2.4 本章小结  / 58

第3章 区块链架构剖析  / 59

3.1 基本定义  / 59

3.2 区块链1.0架构:比特币区块链  / 61

3.2.1 比特币前端  / 63

3.2.2 比特币节点后端  / 66

3.3 区块链2.0架构:以太坊区块链  / 79

3.4 区块链3.0架构:超越货币、金融范围的区块链应用  / 87

3.5 互联链架构剖析  / 90

3.5.1 互联链背景  / 90

3.5.2 互联账本  / 91

3.5.3 互联账本协议组  / 92

3.5.4 互联账本各层协议关系  / 95

3.6 本章小结  / 96

第4章 区块链中的密码学技术  / 97

4.1 哈希算法  / 97

4.1.1 哈希函数的性质与应用  / 99

4.1.2 哈希指针链  / 101

4.2 Merkle树  / 102

4.3 公钥密码算法  / 103

4.3.1 椭圆曲线密码算法  / 104

4.3.2 secp256k1椭圆曲线  / 105

4.3.3 椭圆曲线签名与验证签名   / 106

4.4 本章小结  / 107

第5章 共识算法详解  / 109

5.1 拜占庭容错技术  / 109

5.1.1 拜占庭将军问题  / 110

5.1.2 拜占庭容错系统  / 112

5.1.3 实用的拜占庭容错系统  / 112

5.1.4 Raft协议  / 114

5.2 PoW机制  / 116

5.3 PoS机制  / 122

5.4 DPoS机制  / 123

5.5 Ripple共识算法  / 124

5.6 小蚁共识机制  / 126

5.7 本章小结  / 127

第6章 比特币应用开发指南  / 129

6.1 以虚拟机方式搭建应用开发环境  / 129

6.1.1 下载和安装Oracle VM VirtualBox  / 129

6.1.2 以虚拟机方式安装Ubuntu14.04  / 133

6.1.3 安装Node.js开发环境  / 138

6.1.4 安装Docker运行环境  / 138

6.1.5 安装和运行比特币测试网络  / 139

6.1.6 运行第一个示例程序  / 141

6.2 把握比特币“交易”数据结构  / 145

6.2.1 了解比特币的“交易”数据结构  / 145

6.2.2 交易记录的实例解析  / 146

6.2.3 运行示例程序  / 148

6.3 实战:多重签名交易  / 153

6.3.1 将ODIN标识注册到区块链上的实例解析  / 153

6.3.2 运行示例程序  / 156

6.4 本章小结  / 157

第7章 智能合约  / 158

7.1 智能合约简介  / 158

7.1.1 什么是智能合约  / 158

7.1.2 智能合约的历史  / 159

7.1.3 智能合约的优点和面临的风险  / 160

7.2 以太坊智能合约详解  / 161

7.2.1 以太坊上的账户  / 161

7.2.2 以太币和Gas  / 166

7.2.3 合约和交易  / 167

7.3 以太坊虚拟机  / 170

7.4 实例:在以太坊上开发实施智能合约  / 173

7.4.1 通过以太坊钱包部署智能合约  / 173

7.4.2 通过控制台部署智能合约  / 179

7.5 本章小结  / 183

第8章 超级账本项目  / 184

8.1 超级账本项目简介  / 184

8.1.1 项目背景  / 184

8.1.2 项目管理形式  / 185

8.1.3 项目的生命周期管理  / 186

8.1.4 项目发展状况  / 187

8.2 Fabric项目  / 187

8.2.1 项目概述  / 187

8.2.2 应用场景  / 188

8.2.3 项目架构  / 189

8.2.4 部署方式  / 191

8.2.5 交易的执行  / 192

8.3 Sawtooth Lake项目  / 193

8.3.1 项目概述  / 194

8.3.2 项目架构  / 194

8.4 本章小结  / 196

第9章 区块链常见问题  / 197

9.1 钱包的安全性问题  / 197

9.2 加密货币的交易方式  / 199

9.3 匿名性和隐私性  / 201

9.4 矿池算力集中的问题  / 203

9.5 51%攻击问题  / 205

9.6 去中心化的自治组织  / 207

9.6.1 去中心化的自治组织简介  / 207

9.6.2 The DAO项目  / 208

9.6.3 代码漏洞分析  / 210

9.6.4 解决方案  / 213

9.6.5 软分叉和硬分叉的影响  / 215

9.6.6 重放攻击   / 216

9.7 本章小结  / 219

第10章 区块链应用案例分析  / 220

10.1 闪电网络  / 220

10.1.1 闪电网络简介  / 220

10.1.2 支付通道的创建  / 221

10.1.3 支付通道的更新  / 223

10.1.4 支付网络的构建  / 223

10.1.5 支付通道的关闭  / 225

10.1.6 小结  / 226

10.2 ODIN:用区块链来替代DNS  / 226

10.2.1 ODIN简介  / 227

10.2.2 实现功能  / 228

10.2.3 主要特点  / 229

10.2.4 ODIN标识编码格式  / 229

10.2.5 ODIN标识技术规范  / 232

10.2.6 使用示例  / 233

10.2.7 开放资源  / 234

10.2.8 问题与思考  / 234

10.3 本章小结  / 236

第11章 从架构变革看IT时代的演进  / 237

11.1 架构心得  / 237

11.1.1 架构和技术的关系  / 237

11.1.2 关于计算的观察  / 238

11.1.3 架构创新的神奇力量  / 238

11.1.4 冯·诺依曼架构  / 239

11.1.5 哈佛体系架构  / 240

11.1.6 有影响力架构的特点  / 240

11.1.7 从非生物计算到非生物智能  / 241

11.2 架构创新——IT发展源源不断的动力  / 242

11.2.1 大中型机时代  / 243

11.2.2 开放时代的到来  / 243

11.2.3 客户端/服务端(CS)分布式时代  / 243

11.2.4 互联网时代  / 244

11.2.5 云计算、大数据时代  / 246

11.2.6 互联网+时代  / 250

11.2.7 区块链+时代  / 252

11.3 未来展望  / 254


第1章

区块链和比特币初体验

区块链(Blockchain)是近年来最具革命性的新兴技术之一。区块链技术发源于比特币(Bitcoin),其以去中心化方式建立信任等突出特点,对金融等诸多行业来说极具颠覆性,具有非常广阔的应用前景,受到各国政府、金融机构、科技企业、爱好者和媒体的高度关注。

在本章中,我们首先介绍区块链的定义和特点,然后通过介绍购买、存储和交易比特币等实际使用场景来体验区块链,最后再探讨一些关于区块链的常见问题。

1.1 区块链简介

2016年1月20日,中国人民银行官方网站上发表了一条题为《中国人民银行数字货币研讨会在京召开》的新闻[1],这一消息迅速在各大主流新闻媒体和比特币、区块链爱好者社区中传播,成为推动区块链技术在国内迅速升温的“导火线”。这是自从2013年12月5日中国人民银行、工信部、银监会、证监会和保监会五部委联合发布《关于防范比特币风险的通知》[2]以来,相关首次公开对比特币底层技术——区块链技术给予了高度评价。

在我们开始区块链体验之旅之前,让我们简要介绍区块链的定义和其发展历程。

1.1.1 区块链起源——比特币

区块链的英文是Blockchain,字面意思就是(交易数据)块(Block)的链(Chain)。区块链技术首先被应用于比特币,如图1-1所示。比特币本身就是第一个,也是规模最大、应用范围最广的区块链。


图1-1 简化的比特币区块链示意图

1.1.2 区块链和区块链技术的涵义

目前,关于区块链没有统一的定义,综合来看,区块链就是基于区块链技术形成的公共数据库(或称公共账本)。其中区块链技术是指多个参与方之间基于现代密码学、分布式一致性协议、点对点网络通信技术和智能合约编程语言等形成的数据交换、处理和存储的技术组合。同时,区块链技术本身仍在不断发展和演化中。

1.1.3 区块链分类

以参与方分类,区块链可以分为:公开链(Public Blockchain)、联盟链(Consortium Blockchain)和私有链(Private Blockchain)。从链与链的关系来分,可以分为主链和侧链。而且,不同区块链还可以形成网络,网络中链与链的互联互通,产生互联链(Interchain)的概念。

1.?公共链

公共链对外公开,用户不用注册就能匿名参与,无需授权即可访问网络和区块链。节点可选择自由出入网络。公共链上的区块可以被任何人查看,任何人也可以在公共链上发送交易,还可以随时参与网络上形成共识的过程,即决定哪个区块可以加入区块链并记录当前的网络状态。公共链是真正意义上的完全去中心化的区块链,它通过密码学保证交易不可篡改,同时也利用密码学验证以及经济上的激励,在互为陌生的网络环境中建立共识,从而形成去中心化的信用机制。在公共链中的共识机制一般是工作量证明(PoW)或权益证明(PoS),用户对共识形成的影响力直接取决于他们在网络中拥有资源的占比。

公共链通常也称为非许可链(Permissionless Blockchain)。如比特币和以太坊等都是公共链。公共链一般适合于虚拟货币、面向大众的电子商务、互联网金融等B2C、C2C或C2B等应用场景。

2.?联盟链

联盟链(Consortium Blockchain)仅限于联盟成员参与,区块链上的读写权限、参与记账权限按联盟规则来制定。由40多家银行参与的区块链联盟R3[3]和Linux基金会支持的超级账本(Hyperleder)[4]项目都属于联盟链架构。联盟链是一种需要注册许可的区块链,这种区块链也称为许可链(Permissioned Blockchain)。

联盟链的共识过程由预先选好的节点控制。一般来说,它适合于机构间的交易、结算或清算等B2B场景。例如在银行间进行支付、结算、清算的系统就可以采用联盟链的形式,将各家银行的网关节点作为记账节点,当网络上有超过2/3的节点确认一个区块,该区块记录的交易将得到全网确认。联盟链可以根据应用场景来决定对公众的开放程度。由于参与共识的节点比较少,联盟链一般不采用工作量证明的挖矿机制,而是多采用权益证明或PBFT(Practical Byzantine Fault Tolerant)、RAFT等共识算法。联盟链对交易的确认时间、每秒交易数都与公共链有较大的区别,对安全和性能的要求也比公共链高。

联盟链网络由成员机构共同维护,网络接入一般通过成员机构的网关节点接入。联盟链平台应提供成员管理、认证、授权、监控、审计等安全管理功能。

2015年成立的R3联盟,旨在建立银行同业的一个联盟链,目前已经吸引了40多个成员,包括世界著名的银行(如摩根大通、高盛、瑞信、伯克莱、汇丰银行等),IT巨头(如IBM、微软)。

银行间结算是非常碎片化的流程,每个银行各自有一套账本,对账困难,有些交易有时要花几天才能校验和确认。同时,其流动性风险很高,在监管报送方面非常繁琐,也容易出现人为错误,结算成本很高。

针对这种情况,R3联盟构建了一个银行同业的联盟链以解决这些问题。利用区块链技术,银行同业间可以共享一个统一的账本,省掉对账的繁琐工作,交易可以做到接近实时的校验和确认、自动结算,同时监管者可以利用密码学的安全保证来审计不可篡改的日志记录。

R3联盟将开发Corda分布式账本来实现未来愿景。Corda的名字来源有两个,该名字前半部分听起来像accord(协议),后半部分来自于chord(弦,即圆上两点间最短的直线)的定义。这个圆就代表R3联盟中的银行机构。从目前公开的资料来看,Corda具有以下特点:

数据不一定要全局共享,只有满足合法需求的一方才能在一个协议里访问数据;

Corda不用一个中心化的控制就可以编排联盟成员的工作流;

Corda对联盟成员之间的每笔交易形成共识,而不是在联盟机构的系统层面形成共识;

Corda的设计直接支持监管者监督和合规性监控;

交易由参与交易的机构进行验证,而不会报告与交易无关的机构;

支持不同的共识机制;

明确记录智能合约与用书面语言撰写的法律文件之间的关联;

采用工业标准的工具来构建Corda平台;

不设虚拟货币。

Corda平台注重互操作性和渐进部署,不会将保密信息发布给第三方。一个机构可以和对手机构看到一组协议,并可以保证对手机构看到的是同样内容,同时报送给监管机构。Corda包括共识、校验、独一性、永恒性和认证等功能。

3.?私有链

私有链则仅在私有组织使用,区块链上的读写权限、参与记账权限按私有组织规则来制定。私有链的应用场景一般是企业内部的应用,如数据库管理、审计等。也有一些比较特殊的组织情况,比如在政府行业的一些应用:政府的预算和执行,或者政府的行业统计数据,这个一般来说由政府登记,但公众有权力监督。私有链的价值主要是提供安全、可追溯、不可篡改、自动执行的运算平台,可以同时防范来自内部和外部对数据的安全攻击,这个在传统的系统是很难做到的。根据资料[1]的解读,央行发行数字货币可能就是一种私有链。和联盟链类似,私有链也是一种许可链。

币科学(Coin Science)公司推出供企业建立私链的多链(Multichain)平台。它提供保护隐私和权限控制的区块链平台,来克服在金融行业里碰到的推广区块链技术的障碍。多链的目标有以下3个:

1)保证区块链上的活动只能由选择的参与者看到;

2)引入机制来控制哪些交易是被允许的交易;

3)提供安全的挖矿机制,同时不需要工作量证明以及与其相关的成本。

多链把挖矿权限制在一组实名的矿工范围,解决了一直困扰私有链解决方案中的一方垄断挖矿过程的问题。它的解决办法是限制在同一个时间窗口同一矿工能产生的区块链数。不像比特币那样只支持一条区块链,多链可以方便地配置多条区块链,并让用户同时用多条链。这样的话,机构用户可以让管理员配置区块链而不需要由区块链专业开发者来做。

多链让用户在一个配置文件中配置区块链的所有参数,这些参数包括:

区块链的协议,例如是私有链还是像比特币那样的公共链;

目标区块产生时间,例如1分钟;

权限,例如所有人能连接,只有一些人能发送或接收交易;

挖矿的不同形式(只适合于私有链);

建立、移除管理员和矿工所需要的共识的程度,以及在建立期不需要强制执行的期限(只适合于私有链);

矿工的报酬,例如每区块50个币,然后每210?000个区块减半付酬;

邻节点连接和JSON RPC API的IP端口,例如8571、8570;

允许的交易类型,例如paytoaddress、paytomultisig、paytoscripthash等;

最大的区块大小,例如1MB;

每个交易的最大元数据(OP_RETURN),例如4KB。

多链在节点的“握手”连接过程如下:

1)每个节点提供它的公共地址,使其他节点能将它的地址包括在允许连接的清

单中;

2)每个节点验证邻节点的地址是在它的授权连接的节点清单里;

3)每个节点发一个盘问(Challenge)消息给其他节点;

4)每个节点发回一个回复盘问信息的签名,证明拥有他们的对应公共地址的私钥;

5)如果双方对对方回复不满意,可随时中断连接。

在多链里,所有的权限的授予和回收都是通过包含特殊元数据的网络交易来实现的。找到创世区块的矿工被自动授予所有的权限,包括管理其他用户的管理员权限。管理员通过发交易给其他用户,并在交易的输出中包含授权用户的地址以及授权信息的元数据来给其他用户授予相应的权限。当要改变其他用户的管理和挖矿权限的时候,一个额外的限制条件是要由现有的管理员投票来决定。这些管理员的投票需要登记在不同的交易中,只有当足够的共识形成之后才能通过改变。

多链在很多方面的设计是为了使得用户在私链和比特币区块链能够进行双向迁移。多链是基于比特币核心的一个分叉。所有的对比特币的代码改变都是本地化的改变。未来比特币的升级功能可以并入多链的本地代码。它基于比特币的协议、交易和区块链架构,只是在握手协议上有所改变。其他的功能是通过元数据,同时改变交易和区块的验证规则来实现的。在接口方面与比特币完全兼容,所有的新功能通过新的命令来提供。它可以做成普通比特币网络的一个节点。

多链提供一个在企业内快速部署私链的解决方案。可以用于如去中心化交易所、数据库同步、货币结算、债券发行和P2P交易、消费行业积分奖励机制等场景。

4.?侧链

比特币主要是按其设计者中本聪的思想设计的一个虚拟货币系统,虽然很成功,但是其规则已经相对固定,很难在比特币上做大的修改,因为这些修改会引起分叉,影响现有的比特币用户。因此,要在比特币平台上做创新或扩展是比较困难的。一般来说,大部分代币系统是通过用比特币平台做基础,重构一条区块链,然后在上面使用新的规则发新的虚拟货币。这就是目前大部分代币的做法。然而这些代币系统要从无到有得到人们的价值认可是非常困难的,通常的办法是与比特币挂钩,相当于用比特币作为储备来发行代币,这样就可以完成代币的货币价值认可的过程。但随之而来的问题是,如何自动保障代币和比特币的挂钩呢?因为虚拟货币的一个特点就是价格波动非常大,一般人都不愿意持有波动大、流动性差的代币。一个直接的想法就是通过比特币平台和代币平台的整合来做到实时的挂钩。

2014年,亚当·贝克(Adam Back)等作者发表了一篇论文,题目是《Enabling Blockchain Innovations with Pegged Sidechains》,中文意思是“用与比特币挂钩的侧链来提供区块链创新”。其核心观点是“比特币”的区块链在概念上独立于作为资产的比特币。他希望通过技术能支持在不同的区块链上转移资产,这样新的系统可以重用原先的比特币。他提出一个侧链(Side Chains)的概念。所谓侧链,就是能和比特币区块链交互,并与比特币挂钩的区块链。贝克列出了侧链的一些属性:

一个用户在一条链上的资产被转移到另一条链上后,还应该可以转移回到原先链上的同一用户名下。

资产转移应该没有对手卷款逃跑的风险,也就是不诚实的用户没能力阻碍资产转移的发生。

资产的转移必须是原子操作,也就是要么全发生,要么不发生。不应该出现丢失资产或欺诈性增加资产的情况。

侧链间应该有防火墙。一条侧链上的软件错误造成链上资产的丢失或增加不会影响另一条链上的资产的丢失或增加。

即使在资产的转移过程中发生区块链的重组,也不应出现问题。任何因区块链重组造成的中断,应该局限在本条侧链上而不应影响其他区块链。通常侧链之间最好能相互独立,用户可以从其他链条提供数据。只有当存在明确的侧链的共识规则时才需要去检查另一条侧链来对其验证。

用户不应需要跟踪不经常使用的侧链。

比特币是大家公认的公共链,是很多代币的基础。但比特币的设计规则决定了比特币有一定的局限,例如平均每10分钟出一个区块,每个区块1MB大小限制,这使得大概每秒才能确认7笔交易,这种交易速度而在很多场景下不能满足业务需求。因此,通过侧链来提升效率,扩展比特币功能是一个非常有效的做法。比如,闪电网络把很多交易放在侧链,只有在做清算时才用上主链,这样一来可以极大地提升交易速率,又不会增加主链的存储负担。

5.?互联链

如图1-2所示,针对特定领域的应用可能会形成各自垂直领域的区块链,这些区块链会有互联互通的需求,这样这些区块链也会通过某种互联互通协议连接起来。与互联网一样,这种区块链上的互联互通就构成互联链,形成区块链全球网络。


图1-2 区块链网络示意图

1.1.4 区块链价值与应用

根据各个区块链采取的技术组合不同,形成的区块链特点也大不相同。但是需要指出的是,区块链技术是一揽子技术,可以根据业务的需要进行有针对性的组合和创新。

总体来说,去中心化信用机制是区块链技术的核心价值之一,因此区块链本身又被称为“分布式账本技术”“去中心化价值网络”等。自古以来,信用和信任机制就是金融和大部分经济活动的基础,随着移动互联网、大数据、物联网等信息技术的广泛应用,以及工业4.0等新一代工业革命的开启,网络空间的信用作为数字化社会的基石的作用显得更加重要。传统上,信用机制是中心化的,而中心化的信任和信用机制必然导致中心化机构成为价值链的核心,也容易引发问题。而区块链技术则首先在人类历史上实现了去中心化的大规模信用机制,在消除中心机构“超级信用”的同时,保证信用机制安全、高效地运行。

具体来看,区块链的颠覆性价值至少包括以下5个方面。

1)简化流程,提升效率。由于区块链技术是参与方之间通过共享共识的方式建立的公共账本,形成对网络状态的共识,因此区块链中的信息天然就是参与方认可的、唯一的、可溯源、不可篡改的信息源,因此原来许多重复验证的流程和操作就可以简化,甚至消除,例如银行间的对账、结算、清算等,从而大幅提升操作效率。

2)降低交易对手的信用风险。与传统交易需要信任交易对手不同,区块链技术可以使用智能合约等方式,保证交易多方自动完成相应义务,确保交易安全,从而降低对手的信用风险。

3)减少结算或清算时间。由于参与方的去中心化信任机制,区块链技术可以实现实时的交易结算和清算,实现金融“脱媒”,从而大幅降低结算和清算成本,减少结算和清算时间,提高效率。

4)增加资金流动性,提升资产利用效率。区块链的高效性,以及更短的交易结算和清算时间,使交易中的资金和资产需要锁定的时间减少,从而可以加速资金和资产的流动,提升价值的流动性。

5)提升透明度和监管效率,避免欺诈行为。由于区块链技术可以更好地将所有交易和智能合约进行实时监控,并且以不可撤销、不可抵赖、不可篡改方式留存,方便监管机构实现实时监控和监管,也方便参与方实现自动化合规处理,从而提升透明度,避免欺诈行为,更高效地实现监管。

区块链的创新性最大的特点不在于单点技术,而在于一揽子技术的组合,在于系统化的创新,在于思维的创新。而正是由于区块链是非常底层的、系统性的创新,区块链技术和云计算、大数据、人工智能、量子计算等新兴技术一起,被认为是最具变革性的新兴技术之一。其中,金融服务领域是即将被颠覆的关键领域之一,除此之外,区块链还可以被广泛应用于物联网、移动边缘计算等去中心化控制领域,以及智能化资产和共享经济(如自动驾驶汽车、智能门锁+租赁)等一系列潜在可应用的领域。下面我们重点介绍几类区块链变革金融服务的场景。

(1)金融领域的结算和清算

以金融领域的结算和清算为例,全球每年涉及各种类型的金融交易高达18万亿美元。如图1-3所示,由于交易双方互不信任,因此金融机构需要通过处于中心位置的清算结构来完成资产清算和账本的确认。这类涉及多个交易主体且互不信任的应用场景就非常适合使用区块链技术。原则上,可以直接在金融之间构建联盟链,那么机构之间只需要共同维护同一个联盟区块链,即可实现资产的转移和交易。


图1-3 区块链去中心化金融服务示意图

(2)数字货币

货币是一种价值存储和交换的载体,过去都是由中央法定机构集中发行的。以比特币为例,正是由于其非中心化的信任机制,虽然先后经历多次交易所倒闭、“虚拟货币”非法使用被查抄、多个政府禁止使用等危机,但比特币经受住了所有这些考验,目前仍能稳定运行。比特币的出现和稳定运行,可以说完全颠覆了人们对于货币的认识。相信区块链技术或者说分布式账本技术会在数字货币技术体系中占据重要地位。

(3)跨境支付

另一个区块链可颠覆的金融服务就是跨境支付。通常跨境支付到账时间长达几天甚至一个星期。除此之外,跨境支付需要双边的用户都向当地银行提供大量开户资料和证明,以配合银行的合规性要求,参与交易的银行和中间金融机构还需要定期报告,以实现反洗钱等其他合规性要求。这是一个典型的涉及多方主题的交易场景,区块链技术可以应用在多个环节。区块链技术,一方面可以减少用户重复提交证明材料,提升效率,另一方面可以更好地实现合规、实时性等,大幅提升金融机构的运行效率,提升监管效率。此外,由于区块链技术可以在银行等金融机构之间直接通过区块链实现资金和资产的转移,因此可以去掉高昂的中间费用。此外,还可以结合智能合约等技术,在合约中规定好实施支付的条件,在支付的同时保证义务的实施,提升交易的安

全性。

(4)财产保险

财险是除寿险之外最大的保险。传统上,财险理赔是用户的痛点和成本瓶颈,估计理赔成本的占比至少高达保险公司收入的11%。而且由于理赔过程中用户需要提供大量的资料,客户体验往往非常不友好。由于每个理赔可能会涉及大量的手工操作,因此需要占用大量的人力、物力来进行理赔处理。此外,由于保险公司各自为政,财险理赔还需要对抗保险欺诈。而区块链技术则可以很好地缓解财险理赔的用户痛点,降低理赔成本。首先区块链可以减少客户提供理赔资料和证明的负担,如果资产可以智能化地嵌入智能合约,则资产可具备自动启动理赔流程的能力,甚至可以实现自动化理赔,大幅加速理赔过程,改善客户体验,甚至可以在联盟成员之间进行合理的数据共享,有效地发现和排除保险欺诈。此外,区块链技术的应用可以大幅度减少保险公司对中介代理服务人员的需求,从而大幅度降低运营成本。

此外,区块链还可以广泛应用在物联网、边缘计算、存在性证明等许多领域,读者可以参考《Blockchain:Blueprint for a new economy》一书。此处,特别强调的是关于区块链的应用可能层出不穷,关键还是要理解区块链技术的内涵和变革原理,深刻体会区块链去中心化的系统化思维,从而可以结合自身对相关行业的理解和需求,创造出新的解决方案、新的价值。

1.2 区块链体验

区块链仍然是一个抽象概念,为了更好地理解区块链,为本书后续章节提供一个直观的理解基础,本节中我们将首先通过交易所购买少量比特币,然后转移到比特币钱包中,最后通过钱包实现比特币转账。

1.2.1 获取比特币的3种途径

获取比特币有3种途径:一是作为“矿工”挖矿获得,二是线上“交易所”购买或者线下通过中间人购买,三是作为商家收取比特币。

1.?挖矿

由于比特币的独特设计,参与者可以通过计算能力竞争的方式获取系统奖励和支付小费,同时也维护着比特币这个区块链的稳定运转,我们把这种算力竞争行为称为“挖矿”。比特币价格的一路攀升。挖矿的设备和算力也一路升级,如图1-4所示,从最初的CPU挖矿,到第二代的显卡挖矿,经历过短暂的FPGA挖矿时代后,迅速进入专用芯片(ASIC)挖矿时代。


图1-4 比特币算力增长图

而进入ASIC矿机时代之后,矿机芯片的工艺升级速度远超摩尔定律的演进速度,差不多3个月时间就会进化一代,蚂蚁矿机S9是目前新出产的主流挖矿设备已经采用了16nm工艺制造的专用芯片。

“挖矿”今天已经成为高度专业化的细分产业。为保证收益,挖矿不仅要求有较高的初始投入,以及更低廉获取“矿机”和电力的渠道,还要求有专业的管理能力。如图1-5所示,这是一座位于我国西南某处的比特币矿场。

随着挖矿专业化程度的提高,矿工往往都是通过联合挖矿组成矿池的形式来挖矿的,矿池用来协调和分布挖矿的收益,比特币的算力分布目前前几大矿池都位于中国。


图1-5 比特币矿场

2.?线上交易所或者线下撮合获取比特币

其中线上交易所方面,我国的okcoin、火币占据了交易量的绝大多数,两家交易量占线上交易量的93%以上。线下交易具有更好的匿名性。图1-6展示的是比特币历史交易价格,可以看到从最初的不到0.1美元到历史最高点接近1200美元,再到当前日期(2016年7月25日)的约660美元。中间经历多次大的价格波动。


图1-6 比特币历史价格(对数坐标,美元计价)

3.?比特币作为一种支付的手段

其优势在于跨境支付等场景下具备非常低的收费,并且非常快捷。在日常小额支付方面,目前在全球也有一定的市场。目前比特币作为一种支付手段,主要在欧美等发达国家和地区有比较广泛的分布。当然,由于比特币价格的波动性,一般商家都会实时将比特币转换为当地货币。比特币在我国不能作为货币支付手段,不能很方便地在银行

汇兑。

1.2.2 通过交易所购买比特币

在本节中,我们将通过OKCoin这个比特币交易平台购买少量比特币。读者可以选择火币、BTCC等其他平台购买获取比特币,基本过程是相似的。大部分主流交易平台也提供移动端App,读者可以根据情况选用。

首先,我们需要注册OKCoin的账号,在OKCoin中国站(https://www.okcoin.cn/user/register.do)通过邮箱(或手机号)注册即可。如图1-7所示,填写邮箱、密码,并勾选同意服务条款后,单击“注册”按钮即可完成注册。

注册成功后可看到注册成功的页面,如图1-8所示。然后开始身份认证。根据相关条例要求,目前几乎所有比特币交易平台都会要求真实身份认证。

  

   ?? 图1-7 网站注册页面   ?         图1-8 注册成功页面

单击图1-8中的“开始身份认证”按钮,将会进入如图1-9所示的提示页面,可以选择“个人用户”或者“企业用户”进行认证。这里选择“个人用户”这个类型进行

认证。


图1-9 身份认证提示页面

如图1-10所示,正确填写身份信息并提交就能看到如图1-11所示的认证成功提示。注意,请使用真实身份信息,如遇到忘记密码等情形,可能会需要配合平台方提供相关证明才能进行处理。


图1-10 个人身份认证页面

单击“设置资金密码”按钮,就会进入如图1-12所示的页面。根据提示,我们可以选择手机认证或者Google验证的方式来设置二次验证的方式。

我们选择Google验证的方式,安装iOS或者Android版Google Authenticator之后,单击图1-13中的“设置”按钮,打开App,扫描左边的条形码后就能看到OKCoin.cn的动态密码了。将App中的动态密码输入弹出页面中,就能看到成功提示页面,同时也可看到资金密码的“设置”按钮变为可用。单击该按钮将进入如图1-13所示的资金密码设置页面。


图1-11 个人身份认证成功页面


图1-12 二次验证设置页面

设置密码并填写Google验证的二次验证密码(如果前面是手机验证,则是手机验证码),就会看到如图1-14所示的提示页面。

单击“前往充值”按钮进入充值页面,如图1-15所示。我们选择“快捷充值”方式,也可以选择“支付宝充值”或者“网银汇款充值”的方式。


图1-13 资金密码设置页面

图1-14 资金密码设置成功提示页面 图1-15 充值选择页面

选择“快捷充值”后进入如图1-16所示的银行选择页面,根据个人情况选择网银进行充值。我们在这里选择充值100元用于购买小额的比特币,未来仍然可以通过交易所换回现金(当然可能会有少量的转账费用和价格波动)。


图1-16 快捷充值页面

充值成功之后就可以购买比特币了。我们可以通过“市价单”快速购买比特币,如图1-17所示。


图1-17 购买比特币页面

委托完成后,可以在页面下方的委托成交记录中看到交易记录,如图1-18所示。可以看到,我们以4389.76元/BTC的价格成功地通过交易所购买到了0.02个比特币。


图1-18 委托成交记录

1.2.3 比特币钱包和地址

在上节中,我们通过比特币交易平台购买了少量比特币。需要指出的是,交易平台仍然不属于中心化的服务机构,在交易平台的交易不属于区块链(比特币)之上的交易,其交易和资金的可靠性需要交易平台的背书。虽然,目前国内运营的几大交易平台没有发生大的诚信危机,但从比特币诞生至今也发生过多次交易所欺诈、倒闭和“跑路”事件,让不少比特币拥有者蒙受了巨额经济损失。为了进一步体验比特币和区块链的真实性,我们的体验之旅继续。在本节中,我们将在交易平台购买的比特币转入我们的比特币“钱包”,并可以在区块链上查询到这笔交易。

比特币钱包是一个形象的概念,比特币本身由一对数字密钥来决定归属,因为拥有私钥就能拥有对应地址比特币的处置权,可以说这些私钥就等于比特币,我们通常将管理这些数字密钥的软件称为“钱包”。比特币钱包,根据终端类型可以分为桌面钱包、手机钱包、网页钱包和硬件钱包。其中硬件钱包(见图1-19)成本最高,也相对更安全。对于小量比特币来说,我们可以选用网页钱包这种轻量级的钱包来存储,而对于较大额度的比特币,则建议使用更高级的钱包存储方式。


图1-19 比特币硬件钱包case(来源:choosecase.com)

我们接下来将选择开源钱包MultiBit HD桌面版,当然读者也可以选择其他优秀的钱包。在https://multibit.org/下载对应版本的文件后,单击安装,并选择中文作为界面语言。单击“下一步”按钮之后,可以进入如到图1-20所示的页面。


图1-20 创建钱包准备页面

特别需要强调的是,比特币不同于银行账户的概念,钱包是帮助我们管理这些私钥的,同时也要妥善保管好钱包的恢复密语和备份数据。MulitBit HD钱包使用一种新的密钥技术,即12个单词的密语可以恢复这个钱包,如图1-21所示。所以建议妥善保存这些单词,而且要离线保存。


图1-21 MultiBit钱包密语

继续按照提示完成后续操作,包括设置钱包密码等。完成之后可以看到如图1-22所示的创建钱包报告页面。


图1-22 创建钱包报告页面

创建完成后打开MultiBit,在发送/接受页面选择接收,可以看到钱包的比特币地址:1FA97cbn8EbFFRKnVkfFPQ4Z5C8WnFhtpP,如图1-23所示。或者单击地址栏后面第二个图标,可以显示二维码形式的比特币地址,这将是我们从交易平台购买的比特币提现地址。


图1-23 钱包比特币地址

1.2.4 从交易平台提取比特币到钱包

首先,我们需要在交易平台添加提现地址。登录OKCoin后,选择“资金管理”栏目,然后选择添加地址,正确填写钱包中的比特币地址,二次验证码,如果需要认证,则勾选“认证地址”复选框,并填写资金密码,如图1-24所示。单击“确定”后,平台会向用户发送确认邮件,确认后即可完成提现地址添加。


图1-24 添加比特币提现地址

最后一步,在“资金管理”栏目中选择“BTC提现”选项卡,如图1-25所示。提现地址可以选择上面认证过的提现地址,数量为我们能提现的数量,如0.02BTC(20mBTC)。注意,“网络手续费”为网络“矿工”维持比特币区块链网络运转的交易费奖励。当然,为了防止垃圾交易攻击和提高矿工处理交易的积极性,一般都会选择0.1~0.5mBT不等的小费(小费多少一般根据交易占用的容量大小而定)。


图1-25 比特币提现页面

目前国内的平台为了防止被盗,在提现要求提交后,一般都会由人工处理提现申请,包括电话确认提现是本人所操作、确认提现的数量等,确认完成后才会正式处理。等平台将交易发送到比特币网络,我们就可以在区块链上公开看到这笔交易了。我们可以在MultiBit上看到,刚开始的时候,MultiBit上会显示已收到付款,但是是“未确认”的,如图1-26所示。原则上,未确认的交易可能存在风险,比如发送者重复花费这部分比特币,在小额支付的场景下,零确认可能也是可以接受的,但是在较大金额的交易中,通常会选择等待至少6个以上的确认。


图1-26 未确认收款

1.2.5 比特币交易查询

经过比较长的时间后,我们可以使用blockchain.info和qukuai.com查询交易的结果。如图1-27所示,这笔交易是从一个有92.22788075的BTC,地址为1EDpd8oYNmKzHJvTrjQnWmkexENB7MXjxK中转出的,剩余的92.20788075BTC转到一个新地址1KqrkJvjqUmrzzq274wSkMRwbWbXprkNPF。交易在第421416个区块被锁定,截至写作时已经经历了1063个确认。图1-28中的“转入脚本”(也称为解锁脚本)和“转出脚本”(也称为锁定脚本)就是比特币的合约脚本,后续我们将会在2.1.3节详细介绍。


图1-27 BTC提现交易结果

到这里,我们的区块链(比特币)初次体验之旅就告一段落了。我们存储到MultiBit钱包的比特币可以直接用于支付、捐赠、打赏,也可以通过交易平台的比特币充值回流到平台,再换成人民币等。

1.3 本章小结

本章中,我们首先简单介绍了区块链的起源和定义,以及区块链的分类、价值和应用。然后我们通过图示的方式,以比特币这个目前最大的公链为例,带领大家体验比特币,包括如何获取比特币,如何通过交易平台购买比特币,以及如何通过钱包存储比特币,最后将交易平台的比特币提取到钱包中,并在区块链上公开查询到这笔交易。

毋庸置疑,区块链的发展已经远远超出了比特币和数字货币的范畴,可以说,区块链去中心化的信任机制和价值传递机制的变革将极具颠覆性,当前区块链领域的创新才刚刚开始。后续章节让我们一起继续关于区块链更深入的探索。

参考资料

[1] 中国人民银行.中国人民银行数字货币研讨会在京召开[J/OL]. 2016, http://www.pbc.gov.cn/goutongjiaoliu/113456/113469/3008070/index.html.

[2] 中国人民银行.中国人民银行等五部委发布《关于防范比特币风险的通知》[J/OL].2013, http://www.pbc.gov.cn/goutongjiaoliu/113456/113469/999049/index.html.

[3] R3. 2016, http://r3cev.com/.

[4] HYPERLEDGER. 2016, https://www.hyperledger.org/.BLOCKSTREAM. 2016, http://www.blockstream.com/.

[5] SWAN M. Blockchain: Blueprint for a new economy [M]. O'Reilly Media, Inc., 2015.







第2章

区块链基础

区块链是随着比特币等数字加密货币的日益普及而逐渐兴起的一种全新技术,它提供了一种去中心化的、无需信任积累的信用建立范式,目前已经引起金融行业、科研机构、政府部门和投资公司的高度重视与广泛关注。区块链技术通过建立一个共同维护且不可被篡改的数据库来记录过去的所有交易记录和历史数据,所有的数据都是分布式存储且公开透明的。在这种技术下,任何互不相识的网络用户都可以通过合约、点对点记账、数字加密等方式达成信用共识,而不需要任何的中央信任机构。在这种技术下,我们可以建立数字货币、数字资产、智能财产以及智能合约等。

通过上一章的介绍,相信大家已经对区块链和比特币有了初步的认识,在本章中,我们将继续探讨区块链的技术细节。

本章将首先介绍区块链的相关基本概念及其运作原理,然后介绍区块链上可以进行的操作和相关细节,最后再讨论区块链上的交易流程和它的验证过程。

2.1 区块链技术

区块链本质上是一个对等网络(peer-to-peer)的分布式账本数据库。比特币的底层就采用了区块链的技术架构。区块链本身其实是一串链接的数据区块,其链接指针是采用密码学哈希算法对区块头进行处理所产生的区块头哈希值。每一个数据块中记录了一组采用哈希算法组成的树状交易状态信息,这样保证了每个区块内的交易数据不可篡改,区块链里链接的区块也不可篡改。

2.1.1 基本概念

一个完整的区块链系统包含了很多技术,其中有存储数据的数据区块及其之上的数字签名、时间戳等技术,有作为支撑的P2P网络和维护系统的共识算法,有挖矿和工作量证明机制,有匿名交易机制和比特币钱包,还有链龄、UTXO、Merkle树、双花等相关技术概念。正是这些技术,使得区块链在无中心的网络上形成了运转不息的引擎,为区块链的交易、验证、链接等功能提供了源源不断的动力。

1.?数据区块

比特币的交易记录会保存在数据区块之中,比特币系统中大约每10分钟会产生一个区块,每个数据区块一般包含区块头(Header)和区块体(Body)两部分,如图2-1所示。


图2-1 区块结构

区块头封装了当前的版本号(Version)、前一区块地址(Prev-block)、时间戳(Timestamp)、随机数(Nonce)、当前区块的目标哈希值(Bits)、Merkle树的根值(Merkle-root)等信息。

区块体中则主要包含交易计数和交易详情。交易详情就是比特币系统中的记账本,每一笔交易都会被永久地记入数据区块中,而且任何人都可以查询。区块体中的Merkle树将会对每一笔交易进行数字签名,如此可以确保每一笔交易都不可伪造且没有重复交易。所有的交易将通过Merkle树的Hash过程产生一个唯一Merkle根值记入区块头。关于Merkle树本章后面将详细介绍。

如果你使用的是比特币核心钱包(Bitcoin core),那么每当你打开客户端时,区块数据文件都会被同步到电脑硬盘中,可以在blocks文件夹下找到它们。如图2-2所示的.dat文件就是我们要找的数据区块文件。

我们还可以使用hexdump指令在终端上将数据区块以十六进制的方式显示出来。我们可以通过解析这些数据得出交易记录、区块大小等基本信息,因此我们说区块链中的数据是完全公开透明的。如图2-3所示,我们使用指令hexdump -n 10000 -C blk00000.dat打开了编号为00000的创世区块(比特币中的第一块区块链)。


图2-3 用hexdump指令打开的创世区块

2.?挖矿与分叉问题

区块在挖矿过程中产生。所谓挖矿,实际上是穷举随机数算法,把上个区块的哈希值加上10分钟内的全部交易单打包,再加上一个随机数,算出一个256位的字符串哈希值,输入的随机数Nonce使哈希值满足一定条件就获得这个区块的交易记账权。新产生的区块需要快速广播出去,以便其他节点进行对其验证,以防造假。每个区块存着上一个区块的哈希值,可以溯源到源头,只有经过验证后才最终获得区块的交易记账权。比特币系统会让挖矿的矿工竞争记账权(在主链上链接区块的权利),这个竞争机制就是工作量证明机制。挖矿需要付出大量的能源和时间,谁付出的工作量多就能以更大的概率获得一个区块的记账权。获取记账权的矿工会将当前区块链接到前一区块,形成最新的区块主链,该矿工也会得到系统奖励的一定数量(2009~2013年每10钟产生50个比特币,2014年至今每10分钟产生的比特币将减半成25个)的比特币。所有的区块链接在一起形成了区块链的主链,从创世区块到当前区块,在区块链之上的所有数据历史都可以被追溯和查询。

需要说明的是,可能会出现不同地区的两个矿工同时“挖出”两个新区块加以链接的情况,这时主链上就会出现“分叉”。系统并不会马上确认哪个区块不合理,而是约定后续矿工总是选择累计工作量证明最大的区块链。因此,当主链分叉以后,后续区块的矿工将通过计算和比较,将其区块链接到当前累计工作量证明最大化的备选链上,形成更长的新主链,并自动抛弃分叉处的短链,从而解决分叉问题。

3.?时间戳和不可篡改性

时间戳是指从格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数,通常是一个字符序列,唯一地标识某一刻的时间。在比特币系统中,获得记账权的节点在链接区块时需要在区块头中加盖时间戳,用于记录当前区块数据的写入时间。每一个随后区块中的时间戳都会对前一个时间戳进行增强,形成一个时间递增的链条。时间戳技术本身并没有多复杂,但在区块链技术中应用时间戳却是一个重大创新,时间戳为未来基于区块链的互联网和大数据增加了一个时间维度,使得数据更容易追溯,重现历史也成为可能。同时,时间戳可以作为存在性证明(Proof of Existence)的重要参数,它能够证实特定数据必然在某特定时刻是的确存在的,这保证了区块链数据库是不可篡改和不可伪造的,这也为区块链技术应用于公证、知识产权注册等时间敏感领域提供了可能。

4.?分布式数据库

比特币系统中的区块就像一个记账本一样,记录了所有比特币的交易信息,每一个比特币用户的比特币收支情况都被永久地嵌入了数据区块中以供别人查询。这些数据区块中的交易数据存放在每一个比特币用户的客户端节点中,所有的这些节点则组成了比特币及其坚韧的分布式数据库系统。任何一个节点的数据被破坏都不会影响整个数据库的正常运转,因为其他的健康节点中都保存了完整的数据库。

5.?UTXO交易模式

UTXO(Unspent Transaction Outputs)是未花费的交易输出,它是比特币交易过程中的基本单位。除创世区块以外,所有区块中的交易(Tx)会存在若干个输入(Tx_in,也称资金来源)和若干个输出(Tx_out,也称资金去向),创世区块和后来挖矿产生的区块中给矿工奖励的交易没有输入,除此之外,在比特币系统中,某笔交易的输入必须是另一笔交易未被使用的输出,同时这笔输入也需要上一笔输出地址所对应的私钥进行签名。当前整个区块链网络中的UTXO会被储存在每个节点中,只有满足了来源于UTXO和数字签名条件的交易才是合法的。所以区块链系统中的新交易并不需要追溯整个交易历史,就可以确认当前交易是否合法。

6.?哈希函数

哈希函数在比特币系统中也有着重要的应用,区块链中的数据并不只是原始数据或者交易记录,还包括它们的哈希函数值,即将原始数据编码为特定长度的、由数字和字母组成的字符串后,记入区块链。哈希函数有着很多适合存储区块链数据的

优点:

1)哈希函数处理过的数据是单向性的,通过处理过的输出值几乎不可能计算出原始的输入值;

2)哈希函数处理不同长度的数据所耗费的时间是一致的,输出值也是定长的;

3)哈希函数的输入值即使只相差一个字节,输出值的结果也会迥然不同。比特币系统中最常采用的哈希函数是双SHA256哈希函数,通俗来说就是将不同长度的原始数据用两次SHA256哈希函数进行处理,再输出长度为256的二进制数字来进行统一的识别和存储。

总之,哈希函数是比特币系统中的关键技术,为比特币系统提供了很多便利。本书后面的章节将会对哈希函数做详细介绍,此处不赘述。

7.?Merkle树

Merkle树是数据结构中的一种树,可以是二叉树,也可以是多叉树,它具有树结构的所有特点。如图2-4所示,比特币区块链系统中的采用的是Merkle二叉树,它的作用主要是快速归纳和校验区块数据的完整性,它会将区块链中的数据分组进行哈希运算,向上不断递归运算产生新的哈希节点,最终只剩下一个Merkle根存入区块头中,每个哈希节点总是包含两个相邻的数据块或其哈希值。在比特币系统中使用Merkle树有诸多优点:首先是极大地提高了区块链的运行效率和可扩展性,使得区块头只需包含根哈希值而不必封装所有底层数据,这使得哈希运算可以高效地运行在智能手机甚至物联网设备上;其次是Merkle树可支持“简化支付验证协议”(SPV),即在不运行完整区块链网络节点的情况下,也能够对交易数据进行检验。所以,在区块链中使用Merkle树这种数据结构是非常具有意义的。本书后面的章节将会对Merkle树做详细介绍。

8.?双重支付

双重支付问题又称为“双花”问题,即利用货币的数字特性用“同一笔钱”完成两次或者多次支付。在传统的金融和货币体系中,由于金钱货币是物理实体,具有客观唯一存在的属性,所以可以避免双重支付的情况。但在其他的电子货币系统中,则需要可信的第三方管理机构提供保证。区块链技术则在去中心化的系统中不借助任何第三方机构而只通过分布式节点之间的相互验证和共识机制,有效地解决了双重支付问题,在信息传输的同时完成了价值转移。区块链技术通过区块链接形成的时间戳技术加上验证比特币是否满足UTXO(未花费交易)和数字签名,有效避免了双重支付的问题。如果有人用同一笔UTXO构造了两笔付给不同交易方的交易,则比特币客户端只会转发最先被侦听到的那个。矿工会选择将那笔交易包入未来区块,当其中一笔交易所在的区块后有5个链接的区块,这笔交易已经得到了6次确认。在比特币区块链上,6次确认后可以基本上保证比特币不被双花。

9.?P2P网络

P2P网络(peer-to-peer network,对等网络)是一种在对等者(peer)之间分配任务和工作负载的分布式应用架构,是对等计算模型在应用层形成的一种组网或网络形式。因此,从字面上,P2P可以理解为对等计算或对等网络,P2P网络示意图如图2-5所示。国内的迅雷软件采用的就是P2P技术。区块链系统是建立在IP通信协议和分布式网络的基础上的,它不依靠传统的电路交换,而是建立于网络通信之上,完全通过互联网去交换信息。网络中所有的节点具有同等的地位,不存在任何特殊化的中心节点和层级结构,每个节点均会承担网络路由、验证数据区块等功能。网络的节点根据存储数据量的不同可以分为全节点和轻量级节点,全节点存储了从创世区块以来的所有区块链数据(比特币网络现在大约有几十GB,且还在不断增长中)。全节点的优点是进行数据校验时不需要依靠别的节点,仅依靠自身就可以完成校验更新等操作,缺点是硬件成本较高。轻量级节点只需要存储部分数据信息,当需要别的数据时可以通过简易支付验证方式(Simplif?ied Payment Verif?ication,SPV)向邻近节点请求所需数据来完成验证更新。


图2-5 P2P网络

10.?加密算法

除了哈希算法以外,比特币中还存在一种为交易加密的非对称加密算法(椭圆曲线加密算法)。非对称加密算法指的就是存在一对数学相关的密钥,使用其中一个密钥进行加密的数据信息,只有使用另一个密钥才能对该信息进行解密。这对密钥中,对外公开的密钥叫作公钥,不公开的密钥就叫作私钥。打个比方来说,公钥就像银行的账户,私钥就像是该账户的密码或者账户所有者的签名。区块链之上的有效交易有一个用于交易发起方私钥签名有效的数字签名,而该交易的签名可以通过使用交易发起方的公钥进行验证。公钥可以通过算法从私钥中计算得出,但私钥却不能从公钥中推出。比特币系统中使用的就是一种非常典型的非对称加密算法——椭圆曲线加密算法(ECC)。

如图2-6所示,比特币系统一般从操作系统底层的一个密码学安全的随机源中取出一个256位随机数作为私钥,私钥总数为2256个,所以很难通过遍历所有可能的私钥得出与公钥的对应的私钥。用户使用的私钥还会通过SHA256和Base58转换成易书写和识别的50位长度的私钥,公钥则首先由私钥和Secp256k1椭圆曲线算法生成65字节长度的随机数。一般情况下,比特币钱包的地址也由公钥所生成,其生成过程为首先将公钥进行SHA256和RIPEMD160双哈希运算,并生成20字节长度的摘要结果(即Hash160结果),这个将作为比特币地址的主体(body)信息,再在前面加上版本前缀0x00,在后面添加4个字节的地址校验码。地址校验码通过对摘要结果进行两次SHA256运算,取哈希值的前4位产生。最后通过Base58处理把连在一起的版本前缀、主体信息和校验码转换成可以容易让人识别的比特币字符地址。


图2-6 比特币非对称加密机制

11.?数字签名

数字签名就是在信息后面加上另一段内容,作为发送者的证明并且证明信息没有被篡改。一般是发送者将信息用哈希算法处理得出一个哈希值,然后用私钥对该哈希值进行加密,得出一个签名。然后发送者再将信息和签名一起发送给接收者。接收者使用发送者的公钥对签名进行解密,还原出哈希值,再通过哈希算法来验证信息的哈希值和解密签名还原出来的哈希值是否一致,从而可以鉴定信息是否来自发送者或验证信息是否被篡改。

12.?比特币的隐私模型

传统隐私模型(见图2-7)为交易的参与者提供了一定程度的隐私保护,第三方不会交出交易者的个人身份信息,公众所得知的只是某个人将一定数量的货币发给了另外一个人,但是难以将该交易与某个特定身份的人联系起来,公众无法知道这人到底是谁。这同股票交易所发布的信息是类似的,每一手股票买卖发生的时间、交易量是记录在案且可供查询的,但是交易双方的身份信息却不予透露。但实际上,交易双方的个人信息是存放在第三方机构,所以一定程度上交易参与者的隐私信息还是会有泄露的风险。


图2-7 传统隐私模型

在比特币的隐私模型(见图2-8)中,所有的交易不需要第三方的操控,也不需要提供任何身份信息,只需要提供比特币的地址就可以跟任何人完成一次准匿名的交易。在一定程度上,交易不可追溯到交易者本身,因此比特币上的交易可以在一定程度上摆脱监管。但通过对区块链上交易的地址以及交易额做关联分析,也可以获得有关交易者的蛛丝马迹。因此,比特币的交易还不是纯粹的匿名交易机制,而是准匿名(pseudo-anonymous)交易机制。


图2-8 比特币的隐私模型

2.1.2 框架与特点

1.?框架简介

目前大多数区块链技术的应用与比特币类似,大部分是在比特币架构基础上的扩展。目前,区块链技术在金融行业得到广泛关注,被认为可以用来从最底层重构传统金融业现有的IT基础架构。我们将区块链的基础架构分为三层来进行讲解,如图2-9所示。


图2-9 区块链基础架构

首先,在网络层之上,区块链是建立在IP通信协议和对等网络的基础上的一个分布式系统,和传统带中心的分布式系统不一样,它不依靠中心化的服务器节点来转发消息,而是每一个节点都参与消息的转发。因此P2P网络比传统网络具有更高的安全性,任何一个节点被攻击都不会影响整个网络,所有的节点都保存着整个系统的状态信息。

其次,在数据层面上,区块链就是一个只可追加、不可更改的分布式数据库系统,是一个分布式账本。如果是公开的区块链,也就是公有链,那么这个账本可以被任何人在任何地方进行查询,完全公开透明。在区块链网络中,节点通过使用共识算法来维持网络中账本数据库的一致性。同时采用密码学的签名和哈希算法来确保这个数据库不可篡改,不能作伪,并且可追溯。例如,在比特币系统中,只有在控制了51%的网络算力时才有可能对区块链进行重组以修改账本信息。由于比特币系统的设计者中本聪在系统设计中巧妙地加入了带有经济激励的挖矿工作量证明(PoW)机制,使得即使拥有网络51%以上算力的人也不会损害其自身利益而发起对网络的攻击。因此,比特币系统自上线7年多来一直持续不断地正常运行,没有出现过因为比特币系统本身缺陷而造成的安全故障。

再次,在应用层面,我们可以用区块链代替传统的登记、清算系统。2016年6月22日,波士顿咨询公司指出,到2030年,全球支付业务收入预计将会达到8070亿美元。基于区块链技术的汇兑和支付属于区块链的1.0应用版,其安全性、交易时间、成本都会对传统支付业务进行颠覆式改进。花旗银行也明确指出,到2020年,如果各大金融机构都使用区块链技术,每年能够节省超过200亿美元的成本。国信证券分析报告指出,通过区块链的点对点分布式的时间戳服务器来生成依照时间前后排列并加以记录的电子交易证明,可以解决双重支付问题,从而带来结算成本趋零的可能性。根据德国银行的一份引用波士顿咨询的研究报告,欧洲银行的IT成本支出平均占据银行整体运行成本的16%[5]。一个重要原因就是传统银行在账本的维护、支付交易的结算和清算方面的架构过于复杂,维护成本过高。

在应用方面,区块链平台能够提供编程环境让用户编写智能合约。通过智能合约,可以把业务规则转化成在区块链平台自动执行的合约,该合约的执行不依赖可信任的第三方,也不受人为的干预。理论上只要一旦部署,一旦符合合约执行的条件就会自动执行。执行结果也可以在区块链上供公开检查,提供了合约的公正性和透明性。因此,智能合约可以降低合约建立、执行和仲裁中所涉及的中间机构成本。区块链的智能合约奠定了未来建立可编程货币、可编程金融,甚至是可编程社会的基础。

2.?架构特点

区块链具有去中心化、可靠数据库、开源可编程、集体维护、安全可信、交易准匿名性等特点。如果一个系统不具有以上特征,将不能被视为基于区块链技术的应用。

(1)去中心化

区块链数据的存储、传输、验证等过程均基于分布式的系统结构,整个网络中不依赖一个没有中心化的硬件或管理机构。作为区块链一种部署模式,公共链网络中所有参与的节点都可以具有同等的权利和义务。

(2)可靠数据库

区块链系统的数据库采用分布式存储,任一参与节点都可以拥有一份完整的数据库拷贝。除非能控制系统中超过一半以上的算力,否则在节点上对数据库的修改都将是无效的。参与系统的节点越多,数据库的安全性就越高。并且区块链数据的存储还带有时间戳,从而为数据添加了时间维度,具有极高的可追溯性。

(3)开源可编程

区块链系统通常是开源的,代码高度透明公共链的数据和程序对所有人公开,任何人都可以通过接口查询系统中的数据。并且区块链平台还提供灵活的脚本代码系统,支持用户创建高级的智能合约、货币和去中心化应用。例如,以太坊(Ethereum)平台即提供了图灵完备的脚本语言,供用户来构建任何可以精确定义的智能合约或交易类型。关于以太坊的更多内容请参考2.2节。

(4)集体维护

系统中的数据块由整个系统中所有具有记账功能的节点来共同维护,任一节点的损坏或失去都不会影响整个系统的运作。

(5)安全可信

区块链技术采用非对称密码学原理对交易进行签名,使得交易不能被伪造;同时利用哈希算法保证交易数据不能被轻易篡改,最后借助分布式系统各节点的工作量证明等共识算法形成强大的算力来抵御破坏者的攻击,保证区块链中的区块以及区块内的交易数据不可篡改和不可伪造,因此具有极高的安全性。

(6)准匿名性

区块链系统采用与用户公钥挂钩的地址来做用户标识,不需要传统的基于PKI(Public Key Infrastructure)的第三方认证中心(Certif?icate Authority,CA)颁发数字证书来确认身份。通过在全网节点运行共识算法,建立网络中诚实节点对全网状态的共识,间接地建立了节点间的信任。用户只需要公开地址,不需要公开真实身份,而且同一个用户可以不断变换地址。因此,在区块链上的交易不和用户真实身份挂钩,只是和用户的地址挂钩,具有交易的准匿名性。。

区块链技术的核心优势是去中心化,能够通过运用哈希算法、数字签名、时间戳、分布式共识和经济激励等手段,在节点无需互相信任的分布式系统中建立信用,实现点对点交易和协作,从而为中心化机构普遍存在的高成本、低效率和数据存储不安全等问题提供了解决方案。近年来,伴随着国内外研究机构对区块链技术的研究与应用,区块链的应用前景受到各行各业的高度重视,被认为是继大型机、个人电脑、互联网、移动/社交网络之后计算范式的第5次颠覆式创新,是人类信用进化史上继血亲信用、贵金属信用、央行纸币信用之后的第4个里程碑。它被视为下一代云计算的雏形,有望彻底重塑人类社会活动形态,并实现从现在的信息互联网到价值互联网的转变。

2.1.3 区块链运作的核心技术 

1.?区块链的链接

顾名思义,区块链即由一个个区块组成的链。每个区块分为区块头和区块体(含交易数据)两个部分。区块头包括用来实现区块链接的前一区块的哈希(PrevHash)值(又称散列值)和用于计算挖矿难度的随机数(nonce)。前一区块的哈希值实际是上一个区块头部的哈希值,而计算随机数规则决定了哪个矿工可以获得记录区块的权力。区块链的链接模型如图2-10所示。


图2-10 区块链的链接模型

2.?共识机制

区块链是伴随比特币诞生的,是比特币的基础技术架构。可以将区块链理解为一个基于互联网的去中心化记账系统。类似比特币这样的去中心化数字货币系统,要求在没有中心节点的情况下保证各个诚实节点记账的一致性,就需要区块链来完成。所以区块链技术的核心是在没有中心控制的情况下,在互相没有信任基础的个体之间就交易的合法性等达成共识的共识机制。

区块链的共识机制目前主要有4类:PoW、PoS、DPoS、分布式一致性算法。

(1)PoW

PoW(工作量证明),也就是像比特币的挖矿机制,矿工通过把网络尚未记录的现有交易打包到一个区块,然后不断遍历尝试来寻找一个随机数,使得新区块加上随机数的哈希值满足一定的难度条件,例如前面10位是零。找到满足条件的随机数,就相当于确定了区块链最新的一个区块,也相当于获得了区块链的本轮记账权。矿工把满足挖矿难度条件的区块在网络中广播出去,全网其他节点在验证该区块满足挖矿难度条件,同时区块里的交易数据符合协议规范后,将各自把该区块链接到自己版本的区块链上,从而在全网形成对当前网络状态的共识。

优点:完全去中心化,节点自由进出,避免了建立和维护中心化信用机构的成本。只要网络破坏者的算力不超过网络总算力的50%,网络的交易状态就能达成一致。

缺点:目前比特币挖矿造成大量的资源浪费;另外挖矿的激励机制也造成矿池算力的高度集中,背离了当初去中心化设计的初衷。更大的问题是PoW机制的共识达成的周期较长,每秒只能最多做7笔交易,不适合商业应用。

(2)PoS

PoS权益证明,要求节点提供拥有一定数量的代币证明来获取竞争区块链记账权的一种分布式共识机制。如果单纯依靠代币余额来决定记账者必然使得富有者胜出,导致记账权的中心化,降低共识的公正性,因此不同的PoS机制在权益证明的基础上,采用不同方式来增加记账权的随机性来避免中心化。例如点点币(PeerCoin)PoS机制中,拥有最多链龄长的比特币获得记账权的几率就越大。NXT和Blackcoin则采用一个公式来预测下一个记账的节点。拥有多的代币被选为记账节点的概率就会大。未来以太坊也会从目前的PoW机制转换到PoS机制,从目前看到的资料看,以太坊的PoS机制将采用节点下赌注来赌下一个区块,赌中者有额外以太币奖,赌不中者会被扣以太币的方式来达成下一区块的共识。

优点:在一定程度上缩短了共识达成的时间,降低了PoW机制的资源浪费。

缺点:破坏者对网络攻击的成本低,网络的安全性有待验证。另外拥有代币数量大的节点获得记账权的几率更大,会使得网络的共识受少数富裕账户支配,从而失去公正性。

(3)DPoS

DPoS(股份授权证明)机制,类似于董事会投票。比特股(bitshares)采用的PoS机制是持股者投票选出一定数量的见证人,每个见证人按序有两秒的权限时间生成区块,若见证人在给定的时间片不能生成区块,区块生成权限交给下一个时间片对应的见证人。持股人可以随时通过投票更换这些见证人。DPoS的这种设计使得区块的生成更为快速,也更加节能。

优点:大幅缩小参与验证和记账节点的数量,可以达到秒级的共识验证。

缺点:选举固定数量的见证人作为记账候选人有可能不适合于完全去中心化的场景。另外在网络节点数少的场景,选举的见证人的代表性也不强。

(4)分布式一致性算法

分布式一致性算法是基于传统的分布式一致性技术。其中有分为解决拜占庭将军问题的拜占庭容错算法,如PBFT。另外解决非拜占庭问题的分布式一致性算法(Pasox、Raft),详细见本书第5章的共识算法。该类算法目前是联盟链和私有链链场景中常用的共识机制。

优点:实现秒级的快速共识机制,保证一致性。

缺点:去中心化程度不如公有链上的共识机制;更适合多方参与的多中心商业模式。

3.?解锁脚本

脚本是区块链上实现自动验证、自动执行合约的重要技术。每一笔交易的每一项输出严格意义上并不是指向一个地址,而是指向一个脚本。脚本类似一套规则,它约束着接收方怎样才能花掉这个输出上锁定的资产。

交易的合法性验证也依赖于脚本。目前它依赖于两类脚本:锁定脚本与解锁脚本。锁定脚本是在输出交易上加上的条件,通过一段脚本语言来实现,位于交易的输出。解锁脚本与锁定脚本相对应,只有满足锁定脚本要求的条件,才能花掉这个脚本上对应的资产,位于交易的输入。通过脚本语言可以表达很多灵活的条件。解释脚本是通过类似我们编程领域里的“虚拟机”,它分布式运行在区块链网络里的每一个节点。

比特币的脚本目前常用的主要分为两种,一种是普通的P2PKH(Pay-to-Public-Key-Hash),即支付给公钥的哈希地址,接收方只需要使用地址对应的私钥对该输出进行签名,即可花掉该输出。另一种是P2SH(Pay-to-Script-Hash),即支付脚本的哈希。以多重签名来举例,它要求该输出要有N把私钥中的M把私钥(M≤N)同时签名才能花掉该资产,它类似于现实生活中需要多把钥匙才能同时打开的保险柜,或是多人签名才能使条约生效一样,只是它是自动执行。

比如在比特币中,P2PKH的脚本规则如下:

Pubkey script: OP_DUP OP_HASH160 <PubKeyHash> OP_EQUALVERIFY OP_CHECKSIG

Signature script: <sig> <pubkey>

P2SH的脚本规则如下:

Pubkey script: OP_HASH160 <Hash160(redeemScript)> OP_EQUAL

Signature script: <sig> [sig] [sig...] <redeemScript>

在上述的两种脚本规则里,Pubkey script代表锁定脚本,Signature script代表解锁脚本。OP_开头的单词是相关的脚本命令,也是“虚拟机”所能解析的指令。这些命令规则根据Pubkey script的不同来进行划分,它也决定解锁脚本的规则。

比特币中的脚本机制相对简单,只是一个基于堆栈式的、解释相关OP指令的引擎,能够解析的脚本规则并不是太多,不能实现很复杂的逻辑。但它为区块链可编程提供了一个原型,后续一些可编程区块链项目其实是基于脚本的原理发展起来的,比如以太坊就是深入增强了脚本机制,脚本机制里不再单单是简单的OP指令,而是支持脚本的一套图灵完备语言,该脚本语言可以通过“虚拟机”去执行。以太坊实现了一个支持图灵完备脚本语言的区块链平台。

脚本的机制对于区块链来说非常重要,它类似于区块链技术提供的一个扩展接口,任何人都可以基于这个接口开发基于区块链技术的应用,比如智能合约的功能。脚本机制也让区块链技术作为一项底层协议成为可能。未来很多基于区块链的颠覆性应用,都有可能通过区块链的脚本语言来完成。

4.?交易规则

区块链的交易就是构成区块的基本单位,也是区块链负责记录的实际有效内容。一个区块链交易可以是一次转账,也可以是智能合约的部署等其他事务。

就比特币而言,交易即指一次支付转账。其交易规则如下:

1)交易的输入和输出不能为空。

2)对交易的每个输入,如果其对应的UTXO输出能在当前交易池中找到,则拒绝该交易。因为当前交易池是未被记录在区块链中的交易,而交易的每个输入,应该来自确认的UTXO。如果在当前交易池中找到,那就是双花交易。

3)交易中的每个输入,其对应的输出必须是UTXO。

4)每个输入的解锁脚本(unlocking script)必须和相应输出的锁定脚本(locking script)共同验证交易的合规性。

对于以太坊来说,交易还可能是智能合约的部署。交易规则就确定了符合一定语法规则的合约才能被部署在区块链上。

5.?交易优先级

区块链交易的优先级由区块链协议规则决定。对于比特币而言,交易被区块包含的优先次序由交易广播到网络上的时间和交易额的大小决定。随着交易广播到网络上的时间的增长,交易的链龄增加,交易的优先级就被提高,最终会被区块包含。对于以太坊而言,交易的优先级还与交易的发布者愿意支付的交易费用有关,发布者愿意支付的交易费用越高,交易被包含进区块的优先级就越高。

6.?Merkle证明

Merkle证明的原始应用是比特币系统(Bitcoin),它是由中本聪(Satoshi Nakamoto)在2009年描述并且创造的。比特币区块链使用了Merkle证明,为的是将交易存储在每一个区块中。使得交易不能被篡改,同时也容易验证交易是否包含在一个特定区块中,Merkle树说明详见4.2节。比特币的Merkle证明树如图2-11所示。


图2-11 比特币的Merkle证明树

Merkle树的一个重要使用场景就是快速支付验证,也就是中本聪描述的“简化支付验证”(SPV)的概念:轻量级节点(light client)不用下载每一笔交易以及每一个区块,可以仅下载链的区块头,每个区块中仅包含下述5项内容,数据块大小为80字节。

上一区块头的哈希值

时间戳

挖矿难度值

工作量证明随机数(nonce)

包含该区块交易的Merkle树的根哈希

如果一个轻客户端希望确定一笔交易的状态,它可以简单地要求一个Merkle证明,显示出一个在Merkle树特定的交易,其根是在主链(main chain,非分叉链)上的区块头。

Merkle证明可以让区块链得到更广阔的应用,但比特币的轻客户有其局限性。虽然可以证明包含的交易,但无法证明任何当前的状态(例如:数字资产的持有,名称注册,金融合约的状态等)。一笔交易影响的确切性质(precise nature)可以取决于此前的几笔交易,而这些交易本身则依赖于更为前面的交易,所以最终你需要验证整个链上的每一笔交易。为了解决这个问题,以太坊进行了更进一步的创新。

以太坊的每一个区块头中并非只包含一棵Merkle树,而是包含了3棵Merkle树(见图2-12),分别对应了以下3种对象:

交易(Transactions)

收据(Receipts,基本上,它是展示每一笔交易影响的数据条)

状态(State)


图2-12 以太坊的Merkle证明树

这三棵树允许轻客户端轻松地进行并核实以下类型的查询答案:

1)这笔交易被包含在特定的区块中了吗?

2)告诉我这个地址在过去30天中,发出X类型事件的所有实例(例如,一个众筹合约完成了它的目标)。

3)目前我的账户余额是多少?

4)这个账户是否存在?

5)假装在这个合约中运行这笔交易,它的输出会是什么?

第一种是由交易树(transaction tree)来处理的;第3和第4种则是由状态树(state tree)负责处理,第2种则由收据树(receipt tree)处理。计算前4个查询任务是相当简单的。在服务器简单地找到对象,获取梅克尔分支,并通过分支来回复轻客户端。第5种查询任务同样也是由状态树处理。

7.?RLP

RLP(Recursive Length Pref?ix,递归长度前缀编码)是Ethereum中对象序列化的一个主要编码方式,其目的是对任意嵌套的二进制数据的序列进行编码。

以太坊中的所有数据都以“递归长度前缀编码”(Recursive Length Pref?ix encoding,RLP)形式存储,这种编码格式将任意长度和维度的字符串构成的数组串连接成字符串。例如,['dog', 'cat']被串接(以字节数组格式)为[130,67,100,111,103,67,99,97,116];其基本的思想是把数据类型和长度编码成一个单独的字节放在实际数据的前面(例如‘dog’的字节数组编码为[100,111,103],于是串接后就成了[67,100,111,103])。注意RLP编码正如其名字表示的一样,是递归的;当RLP编码一个数组时,实际上是在对每一个元素的RLP编码级联成的字符串编码。需要进一步提请注意的是,以太坊中所有数据都是整数;所以,如果有任何的以一个或多个0字节开头的哈希或者地址,这些0字节应该在计算出现问题的时候去除。以太坊中没有串接数据结构包含任何以0开头的数值。整数以大端基础(Big Endian)256格式存储(例如32767字节数组格式为[127,255])。

2.1.4 区块链交易流程

以比特币的交易为例,区块链的交易并不是通常意义上的一手交钱一手交货的交易,而是转账。如果每一笔转账都需要构造一笔交易数据会比较笨拙,为了使得价值易于组合与分割,比特币的交易被设计为可以纳入多个输入和输出,即一笔交易可以转账给多个人。从生成到在网络中传播,再到通过工作量证明、整个网络节点验证,最终记录到区块链,就是区块链交易的整个生命周期。整个区块链交易流程如图2-13所示。


图2-13 区块链交易流程

交易的生成。所有者A利用他的私钥对前一次交易和下一位所有者B签署一个数字签名,并将这个签名附加在这枚货币的末尾,制作成交易单。

交易的传播。A将交易单广播至全网,每个节点都将收到的交易信息纳入一个区块中。

工作量证明。每个节点通过相当于解一道数学题的工作量证明机制,从而获得创建新区块的权力,并争取得到数字货币的奖励。

整个网络节点验证。当一个节点找到解时,它就向全网广播该区块记录的所有盖时间戳交易,并由全网其他节点核对。

记录到区块链。全网其他节点核对该区块记账的正确性,没有错误后他们将在该合法区块之后竞争下一个区块,这样就形成了一个合法记账的区块链。

2.2 以太坊

2.2.1 什么是以太坊

自2008年比特币出现以来,数字货币的存在已经渐渐为一部分人所接受。人们也积极展开了基于比特币的商业应用的思考与开发。但是随着应用的扩展,人们发现比特币的设计只适合虚拟货币场景,由于存在着非图灵完备性、缺少保存状态的账户概念,以及PoW挖矿机制所带来的资源浪费和效率问题,在很多区块链应用场景下并不适用。人们需要一个新的基于区块链的具有图灵完备性、高效共识机制、支持更多应用场景的智能合约开发平台。以太坊在这种情况下应运而生。

以太坊的目的是对脚本、竞争币和链上元协议(on-chain meta-protocol)等概念进行整合和提高,使得开发者能够创建任意的基于共识的、可扩展的、标准化的、图灵完备的、易于开发和协同的应用。

以太坊是一个通用的全球性区块链,可以管理金融和非金融类型应用的状态。以太坊的新颖在于其神奇的计算机网络,它促成了一种新型的软件应用,真正的去中心化应用。将信任逻辑嵌入小程序里,运行在区块链上。而与比特币相比,以太坊建立了一种新的密码学技术基础框架,在其上开发应用更加容易,并对轻客户端友好,同时允许应用共享一个可行的经济环境和可靠的区块链安全。以太坊在全球范围内激发了商业和社会创新,为前所未有的去中心化应用打开了大门。从长远来看,它所带来的改变将影响全球经济和控制结构。

以太坊是个平台和编程语言,包括数字货币以太币(Ether),以及用来构建和发布分布式应用的以太脚本(EtherScript)。

以太币和著名的数字货币比特币有非常多的相似之处。两者均为数字货币且无法伪造,都以去中心化的方式运行来保证货币供应不被某一方所控制。以太坊的另一半重要特性是提供一个完整的编程语言环境,有时也被叫作以太脚本。我们都知道,编程语言是人类用来控制计算机工作的。因此,用任何编程语言写好的指令对计算机来说都是准确无误没有歧义的。也就是说,计算机如何执行一段代码是没有二义性的。在同样的条件下,一段代码总是会按照既定的步骤执行。这种特性正是人类现行法律与合约所缺失的。因此,有了以太脚本之后,我们就可以制定没有二义性的合约了。

从最底层角度来看,以太坊是一个多层的、基于密码学的开源技术协议。它的不同功能模块通过设计进行了全面的整合,作为一个整体,它是一个创建和部署去中心化应用的综合平台。虽然,以太坊看起来像由多个互相联系的开源项目构成的混合体,但是它的进化一直被明确目标所引导,所以各个组件可以协同地组装在一起。

同时,以太坊也是区块链与智能合约的完美结合,是智能合约的完整解决方案,被设计成了一个通用的去中心化平台,拥有一套完整的、可以扩展其功能的工具,在P2P网络、加密、HttpClient等技术的支持下实现了一个类似于比特币的区块链。它通过工作量证明机制实现共识,由矿工挖矿,通过对新的网络协议的制定实现对区块链的同步等操作。不同于比特币的是,在以太坊上可以任意编写智能合约,通过智能合约实现强大的功能,实现去中心化应用的开发。在以太坊上部署的智能合约运行在以太坊特有的虚拟机上,通过以太坊虚拟机和RPC接口与底层区块链进行交互。

以太坊的总体系统架构如图2-14所示。


图2-14 以太坊总体架构

2.2.2 以太坊技术

1.?以太坊核心概念

(1)以太坊虚拟机

以太坊虚拟机(EVM)是以太坊中智能合约的运行环境。它是以太坊项目中的另一个主要创新。有人说EVM“位于区块链之上”,实际上它是由许多互相连接的计算机组成的。任何人都可以上传程序,并让这些程序自动执行,同时保证现在和所有以前的每个程序的状态总是公共可见的。这些程序运行在区块链上,严格地按照EVM定义的方式继续执行。所以任何人都可以为所有权、交易格式和状态转换函数创建商业逻辑。

(2)账户

以太坊中有两类账户,它们共用同一个地址空间。外部账户,该类账户被公钥-私钥对控制。合约账户,该类账户被存储在账户中的代码控制。外部账户的地址是由公钥决定的,合约账户的地址是在创建合约时由合约创建者的地址和该地址发出过的交易数量计算得到。两类账户的唯一区别是:外部账户没有代码,人们可以通过创建和签名一笔交易从一个外部账户发送消息。每当合约账户收到一条消息,合约内部的代码就会被激活,允许它对内部存储进行读取、写入、发送其他消息和创建合约。

以太坊的账户包含4个部分:①随机数,用于确定每笔交易只能被处理一次的计数器;②账户目前的以太币余额;③账户的合约代码(如果有的话);④账户的存储(默认为空)。

(3)消息

以太坊的消息在某种程度上类似于比特币的交易,但是两者之间存在3点重要的不同。

1)以太坊的消息可以由外部实体或者合约创建,然而比特币的交易只能从外部创建。

2)以太坊消息可以选择包含数据。

3)如果以太坊消息的接收者是合约账户,可以选择进行回应,这意味着以太坊消息也包含函数概念。

(4)交易

以太坊中“交易”是指存储从外部账户发出的消息的签名数据包。交易包含消息的接收者、用于确认发送者的签名、以太币账户余额、要发送的数据和被称为STARTGAS和GASPRICE的两个数值。为了防止代码出现指数型爆炸和无限循环,每笔交易需要对执行代码所引发的计算步骤做出限制。STARTGAS就是通过需要支付的燃料来对计算步骤进行限制,GASPRICE是每一计算步骤需要支付矿工的燃料的价格。

(5)Gas

以太坊上的每笔交易都会被收取一定数量的燃料Gas,设置Gas的目的是限制交易执行所需的工作量,同时为交易的执行支付费用。当EVM执行交易时,Gas将按照特定规则被逐渐消耗。Gas价格由交易创建者设置,发送账户需要预付的交易费用= GASPRICE * Gas amount。如果执行结束还有Gas剩余,这些Gas将被返还给发送账户。无论执行到什么位置,一旦Gas被耗尽就会触发一个out-of-gas异常。同时,当前调用帧所做的所有状态修改都将被回滚。

(6)存储、主存和栈

每个账户都有一块永久的内存区域,被称为存储,其形式为key-value,key和value的长度均为256位。在合约里,不能遍历账户的存储。相对于主存和栈,存储的读操作开销较大,修改存储甚至更多。一个合约只能对它自己的存储进行读写。

第二个内存区被称为主存。合约执行每次消息调用时都有一块新的被清除过的主存。主存可以按字节寻址,但是读写的最小单位为32字节。操作主存的开销随着主存的增长而变大。

EVM不是基于寄存器的,而是基于栈的虚拟机。因此所有的计算都在一个称为栈的区域内执行。栈最大有1024个元素,每个元素有256位。对栈的访问只限于其顶端,允许复制最顶端的16个元素中的一个到栈顶,或者是交换栈顶元素和下面16个元素中的一个。所有其他操作都只能取最顶的一个或几个元素,并把结果压在栈顶。当然可以把栈里的元素放到存储或者主存中。但是无法只访问栈里指定深度的那个元素,在那之前必须把指定深度之上的所有元素都从栈中移除才行。

(7)指令集

EVM的指令集被刻意保持在最小规模,以尽可能避免可能导致共识问题的错误。所有的指令都是针对256位这个基本的数据单位进行的操作,具备常用的算术、位、逻辑和比较操作,也可以进行条件和无条件跳转。此外,合约可以访问当前区块的相关属性,比如它的编号和时间戳。

(8)消息调用

合约可以通过消息调用的方式来调用其他合约,或者发送以太币到非合约账户。消息调用和交易非常类似,它们都有一个源,一个目标,数据负载,以太币,Gas和返回数据。事实上每个交易都可以被认为是一个顶层消息调用,这个消息调用会依次产生更多的消息调用。

一个合约可以决定剩余Gas的分配。比如内部消息调用时使用多少Gas,或者期望保留多少Gas。如果在内部消息调用时发生了out-of-gas异常或者其他异常,合约将会得到通知,一个错误码被压入栈中。这种情况只是内部消息调用的Gas耗尽。在solidity中,这种情况下发起调用的合约默认会触发一个人工异常,这个异常会打印出调用栈。

就像之前说过的,被调用的合约(发起调用的合约也一样)会拥有崭新的主存,并能够访问调用的负载。调用负载被存储在一个单独的被称为calldata的区域。调用执行结束后,返回数据将被存放在调用方预先分配好的一块内存中。调用层数被限制为1024。因此对于更加复杂的操作,我们应该使用循环而不是递归。

(9)代码调用和库

以太坊中存在一种特殊类型的消息调用,被称为callcode。它跟消息调用几乎完全一样,只是加载来自目标地址的代码将在发起调用的合约上下文中运行。这意味着一个合约可以在运行时从另外一个地址动态加载代码。存储,当前地址和余额都指向发起调用的合约,只有代码是从被调用地址获取的。这使得Solidity可以实现“库”。可复用的库代码可以应用在一个合约的存储上,可以用来实现复杂的数据结构,从而使智能合约更加的强大。

2.?以太坊的状态转换

以太坊的状态转换是指在一个交易(TX)发生时,以太坊从一个正确状态(S)转变到下一个正确状态(S’)的转换过程,如图2-15所示。对于交易而言,为了防止代码的指数型爆炸和无限循环,每笔交易需要对执行代码所引发的计算步骤做出限制。STARTGAS就是限制,GASPRICE是每一计算步骤需要支付矿工的费用价格。


图2-15 以太坊状态转换

以太坊的状态转换函数为APPLY(S, TX) -> S’,可以定义如下:

1)检查交易的格式是否正确,签名是否有效,以及随机数是否与发送者账户的随机数匹配。如否,返回错误。

2)计算交易费用fee = STARTGAS * GASPRICE,并从签名中确定发送者的地址。从发送者的账户中减去交易费用和增加发送者的随机数。如果账户余额不足,返回错误。

3)设定初值Gas = STARTGAS,并根据交易中的字节数减去一定量的燃料值。

4)从发送者的账户转移价值到接收者账户。如果接收账户还不存在,创建此账户。如果接收账户是一个合约,运行合约的代码,直到代码运行结束或者燃料用完。

5)如果因为发送者账户没有足够的费用或者代码执行耗尽燃料导致价值转移失败,恢复原来的状态,但是还需要支付交易费用,交易费用加至矿工账户。

6)若代码执行成功,将所有剩余的燃料归还给发送者,消耗掉的燃料作为交易费用发送给矿工。

例如,假设一个合约的代码如下:

if !contract.storage[msg.data[0]]:

contract.storage[msg.data[0]] = msg.data[1]

需要注意的是,在现实中合约代码是用底层以太坊虚拟机(EVM)代码写成的。上面的合约是用我们的高级语言Serpent语言写成的,它可以被编译成EVM代码。假设合约存储器开始时是空的,一个值为10以太、燃料为2000、燃料价格为0.001以太并且两个数据字段值为[2,'CHARLIE']的交易发送后,状态转换函数的处理过程如下:

1)检查交易是否有效,格式是否正确。

2)检查交易发送者是否至少有2000×0.001=2个以太币。如果有,从发送者账户中减去2个以太币。

3)初始设定Gas=2000,假设交易长为170字节,每字节的费用是5,减去850,所以还剩1150。

4)从发送者账户减去10个以太币,为合约账户增加10个以太币。

5)运行代码。在这个合约中,运行代码很简单:它检查合约存储器索引为2处是否已使用,注意到它未被使用,然后将其值置为CHARLIE。假设这消耗了187单位的燃料,于是剩余的燃料为1150-187 = 963。

6)向发送者的账户增加963×0.001=0.963个以太币,返回最终状态。

如果没有合约接收交易,那么所有的交易费用就等于GASPRICE×交易的字节长度,交易的数据就与交易费用无关了。另外,需要注意的是,合约发起的消息可以对它们产生的计算分配燃料限额,如果子计算的燃料用完了,它只恢复到消息发出时的状态。因此,就像交易一样,合约也可以通过对它产生的子计算设置严格的限制,保护它们的计算资源。

3.?以太坊客户端

为了测试各种语言对以太坊的支持,同时使更多的人能够参与以太坊的开发及使用,目前有4种语言编写的以太坊的客户端。它们分别是用Go语言实现的客户端Geth,用C++实现的客户端Eth,用Python语言实现的客户端Pyethapp和用Java实现的客户端EthereumJ。其中,Go语言版是以太坊官方一直维护并推荐使用的客户端。

以太坊包括一个专用的客户端浏览器,使得用户可以运行各种各样的去中心化应用(DApp),发布智能合约。这一浏览器被称为Mist,它易于使用,降低了用户使用门槛,从而使得DApp和智能合约能够被大量用户使用。它的作用等同于浏览器之于互联网或者iTunes之于数字化内容下载。Mist由特殊的安全层、密钥管理、去中心化账户管理和与区块链相关的组件几部分组成。这一切使得Mist成为普通用户运行或者管理区块链去中心化应用不可或缺的工具,普通用户不需要理解技术方面的东西。

从用户体验角度而言,可以在Mist中使用DApp,就像通过常规浏览器与网站进行交互一样。例如,一个纯DApp(例如预测市场Augur)就可以在以太坊Mist浏览器中运行。当然,这些服务也可以通过一个常规浏览器以更加传统的Web 2.0的方式实现。

2.2.3 以太坊智能合约

1.?智能合约

智能合约是由尼克萨博提出的理念,几乎与互联网同龄。但是由于缺少可信的执行环境,智能合约并没有被应用到实际产业中。自从比特币诞生后,人们认识到比特币的底层技术区块链天生可以为智能合约提供可信的执行环境,以太坊首先实现了区块链和智能合约的完整契合。

以太坊是内置有图灵完备编程语言的区块链,通过建立抽象的基础层,使得任何人都能够创建合约和去中心化应用,并在其中设立他们自由定义的所有权规则、交易方式和状态转换函数。建立一个代币的主体框架只需要两行代码就可以实现,诸如货币和信誉系统等其他协议只需要不到20行代码就可以实现。智能合约就像能在以太坊的平台上创建的包含价值而且只有满足某些条件才能打开的加密箱子,并且因为图灵完备性、价值意识(value-awareness)、区块链意识(blockchain-awareness)和记录多状态所增加的功能而比比特币脚本所能提供的智能合约强大得多。

2.?开发语言

以太坊的软件开发语言是其最大特性之一,因为对区块链进行编程是一项首要目标。以太坊具有4种专用语言:Serpent(受Python启发)、Solidity(受JavaScript启发)、Mutan(受Go启发)和LLL(受Lisp启发),都是为面向合约编程而从底层开始设计的语言。

作为以太坊的高级编程语言,Serpent的设计非常类似于Python。它被设计为最大可能地简洁和简单,将低级语言的高效优势与编程风格中的易用性相结合。

Solidity是以太坊的首选语言,它内置了Serpent的所有特性,但是语法类似于JavaScript。Solidity充分利用了现有数以百万程序员已掌握JavaScript这一现状,降低了学习门槛,易于被掌握和使用。

以太坊区块链的另一关键特征是它的“图灵完备性”,这保证了以太坊可以解决所有的计算问题。更加准确地说,它是“半”图灵完备的,因为它是通过对计算量设置上限,它避免了完全图灵完备语言存在的无法停机问题。此外,因为以太坊的语言是为区块链专门设计的,它有账户的概念,使得它在交易的可视化和查询账户状态方面提供了实时性。这是一个受人欢迎的功能,但对比特币而言实现起来具有一定的挑战。在比特币上,由于只有UTXO而没有账户的概念,我们需要导入区块链数据库,解析所有的交易,并为了抽取出在区块链上的某个用户的交易情况而查询交易。而用以太坊,我们则可以在实时的区块链上,根据一个地址情况实时查看当前账户情况和交易状态。

3.?代码执行

以太坊合约的代码是使用低级的基于堆栈的字节码的语言写成的,被称为“以太坊虚拟机代码”或者“EVM代码”。代码由一系列字节构成,每一个字节代表一种操作。一般而言,代码执行是无限循环,程序计数器每增加一(初始值为零)就执行一次操作,直到代码执行完毕或者遇到错误、STOP或者RETURN指令。操作可以访问3种存储数据的空间:

1)堆栈,一种后进先出的数据存储,入栈、出栈的基本单位为32字节。

2)内存,可无限扩展的字节队列。

3)合约的长期存储,一个密钥/数值的存储,其中密钥和数值都是32字节大小。与计算结束即重置的堆栈和内存不同,存储内容将长期保持。

代码可以像访问区块头数据一样访问数值、发送和接收到的消息中的数据,代码还可以返回数据的字节队列作为输出。EVM代码的正式执行模型非常简单。当以太坊虚拟机运行时,它的完整的计算状态可以由元组(block_state,transaction,message,code,memory,stack,pc,gas)来定义,这里block_state是包含所有账户余额和存储的全局状态。每轮执行时,通过调出代码的第pc(程序计数器)个字节,每个指令如何影响元组都有定义。例如,ADD将两个元素出栈并将它们的和入栈,将Gas减1并将pc加1;stack将顶部的两个元素出栈,并将第2个元素插入由第1个元素定义的合约存储位置,同样减少最多200的Gas值,并将pc加1。虽然有许多方法通过即时编译去优化以太坊,但以太坊的基础性的实施可以用几百行代码实现。

2.2.4 以太坊的去中心化应用

1.?什么是DApp

一个DApp是由智能合约和客户端代码构成的。智能合约就像加密的包含价值的箱子。只有当特定条件被满足时它才被打开,它封装了一些逻辑、规则、处理步骤或者双方间的协议。

从架构角度而言,DApp非常类似于传统的Web应用。主要区别是:在传统Web应用中,客户端有JavaScript代码,由用户在自己的浏览器中执行;服务器端的代码由主机运行。但是在一个DApp中,它的智能逻辑运行在区块链上,客户端代码运行在特殊浏览器Mist里面。

2.?应用举例

正如苹果电脑公司的App Store给众多公司和个人提供了极佳的商业机会一样,以太坊这样的平台上一定会出现类似“愤怒的小鸟”这样的成功范例,对于IT导向的创业公司和个人,这是一个广阔的空间。下面举几个例子,看看这个空间中正在孕育的项目。

Augur(www.augur.net),一个正在开发去中心化预测系统。Augur在英文中的意思是“预言家”,用户可以在这个应用上对各种事件打赌并下注,例如希拉里会不会赢得2016年美国的大选;2016年中国的GDP增长会不会超过7%;上证指数2020年之前会不会超10000点,等等。对于参与者而言,如果预测正确,则将获得经济上的回报;而对于社会整体而言,Augur便成了一个群体智慧的收集器,在它上面的下注信息反映了人们对于未来某事件发生可能性的最佳评估。当你打开搜索引擎,输入“×××会不会赢得2020年美国的大选”的时候,可能搜到这样的结果:“Augur:该事件发生的可能性为46.6%”。

Maker(www.makerdao.com),一个正在开发中的金融类去中心化自治组织。Maker是一个去中心化自治组织(Decentralized Autonomous Organization,DAO),它维护一系列用于金融服务的合约软件(即智能合约),其中的一个软件是贷券信贷系统(The Dai Credit System)。贷券信贷系统是一个通过抵押进行借贷的应用,当用户在区块链上拥有众多资产时,一个必然的需求就是,在不出售资产的情况下通过抵押借款获得资金,类似于房屋抵押贷款。

WeiFund,一个正在开发中的去中心化众筹平台。这个众筹平台的好处是资金不需要第三方托管,而是由程序托管,因此能够确保资金100%安全。如果在限定时间内众筹项目的资助超过预定目标,则程序将资金发送给创业者;如果目标未达到,则将资金退回给众筹参与者。

Boardroom,一个正在开发中的DAO管理平台。去中心化自治组织与传统公司一样,也可以有股份的概念,通常就是DAO的代币,这些代币又可以有投票权。与上一个例子中的WeiFund结合,可以发生有趣的事:如果众筹募资的目标达到,则WeiFund可以将资金发送给Boardroom,并将该众筹项目的参与者组成DAO。如此一来,这些参与者便可以通过投票来控制资金的具体使用,而不是简单地将资金一次性发放给创业者,这样便大大避免了来自创业者的道德风险。

Ujo Music,一个音乐版权管理平台,测试版。Ujo Music作为音乐版权管理平台,可以直接在歌曲的创作者与消费者之间建立直接的联系,从而省去了中间商的费用提成。更进一步,歌手甚至可以将自己的作品在WeiFund上进行IPO上市,如此一来,持有歌手代币的投资者就会分得歌手今后歌曲的销售收入,他们是歌手天然的铁杆粉丝团。帮助歌手推广音乐也不仅仅出于经济动机,同时也是出于情感上的支持,试想在周杰伦默默无闻的时候就持有他的代币,该是一件多么令粉丝感到骄傲的事。同时代币也是歌手与粉丝团之间互动的媒介,例如歌手可以让持有代币的粉丝优先购买演唱会的门票,如此,粉丝经济会更加红火。

贷券(Decentralized Autonomous Insured Bond)简称Dai或者Dai Bond,是一种可转让的、彼此等价可互换的“加密债券”,它流通于信贷系统中,使用者无需事先认证,同时又是低风险的。贷券的发行人(借款方)将在以太坊区块链上的以太等数字加密资产作为抵押品来发行贷券,再将这些贷券在市场上卖给贷券持有人以换回流动性好的资产。贷券的持有人之所以买入贷券是为了赚取收益,或者是为了将贷券当作价值稳定的加密货币来流通使用。

2.3 基于区块链的电子货币

2.3.1 元币平台

元币(metacoin)单词前缀“meta-”意为“在其中”。所以元币是衍生于现有加密货币体系之上,更专注于业务系统的代币种类。

(1)彩币

彩币(Colored Coins)是一种建立在比特币数据块上的高级衍生应用协议。彩币建立在P2P网络之上,具有去中心化的所有优势,可以用来进行任何虚拟财产和现实资产的交易,并且比传统金融交易更加快捷和方便,更重要的是,它没有手续费。彩币由一种特殊的钱包负责管理,进行记录和阐释附加在彩币中的元数据。通过这种钱包,用户可以通过添加标签,将一定量的比特币转化为彩币,使其具有特殊意义。而这种特殊意义,往往使其价值提升。相关元数据是由用户来定义的,并且使比特币转化为彩币。彩币一旦定义,便可以进行买卖、分销、积累或者分红。当然,也可以去颜色化,回归比特币。

(2)万事达币

万事达币(mastercoin)发布于2013年6月24日,是建立在比特币协议之上的二代币,旨在帮助用户创建并交易加密货币以及其他类型的智能合同。万事达币不仅仅是一种代币,更像是一个去中心化的财产交易、合同签署、用户货币、智能财产代币等的平台。打个形象的比方,就像HTTP运行在TCP层之上一样,万事达币是工作于比特币交易层之上的应用层协议。

(3)合约币

合约币(counterparty)是另一种建立在比特块链基础之上的协议层,它把比特币块链当成可信的时间戳服务和可信的信息发布证明。合约币在比特币中添加额外的信息记录,以此强化比特币的交易。合约币实现了用户货币、可交易代币、财经工具、去中心化交易等一些功能。

2.3.2 代币

尽管部分代币没有使用比特币,而是直接在区块链的基础上全新创建的,但事实上,大多数代币都是比特币衍生出来的。其中最值得一提的是莱特币(Litecoin),而莱特币本身又被作为代币的母币,衍生出更多新的代币。以同样方式诞生的还有代链这个概念。如同字面意思,两者的区别在于,代币用作货币目的,而代链用于非货币目的。本节介绍内容属于代币范畴。

代币的创建过程非常简单。2011年8月,通过修改比特币的一些参数,加速货币的产生速度,世界上第一种代币IXCoin诞生。自此以后,代币发展极其迅速。到2016年,已经有超过600种代币发布,并且,大部分是莱特币的变种。它们与比特币的差异主要存在于货币政策、工作量证明和共识机制以及所引入的新特性方面。其实,大多数代币之间差异甚微,甚至,有些代币的产生,只是发明者为了增加收入的一种手段,并不具备研究价值。但是,这些代币中还是有一些比较明显的例外,或者说有非常重要的创新值得我们学习。那么如何衡量一种代币呢?通常从如下几个方面思考:是否具有重大创新?是否能因为与比特币的区别从比特币吸引过来用户?是否针对市场或者应用?是否能吸引足够多的矿工来抵御联合作弊?财经和市场指标上,又可以从资本量、预计用户量、日交易量和流通性上来评价一种代币。

1.?通过货币参数修改而建立的代币

比特币有一些货币参数来预防货币通货膨胀。比特币限制为2100万主要货币单元的货币总量。许多代币修改了比特币的主要参数,从而实现了新的不同货币政策。最具代表性的有如下几种。

(1)莱特币

要介绍莱特币(Litecoin),就不得不提Tenebrix,它是第一个应用不同工作量证明算法的加密货币。此算法被称作scrypt,是专门为预防暴力破解密码而设计的。Tenebrix并没有成功,却为莱特币的诞生奠定了基础。作为主要的成功代币,莱特币的核心是继承了scrypt算法,修改了块产生时间,使之从比特币的10分钟缩短到2.5分钟,从而成为一种轻型代币。拥护者们认为,相对于比特币,莱特币更适合零售业的交易。更重要的是,以莱特币为基础,后来延伸出来上百种类似的代币。

提示: 块产生时间,2.5分钟;总货币量,8400万(2140年);共识算法,工作量证明Scrypt;市值, 96 961万元(2016年年中)。

(2)狗狗币

作为莱特币的变种,狗狗币(Dogecoin)发布于2013年12月。狗狗币的货币政策特点是发行迅速,货币配额巨大。

提示: 块产生时间,1分钟;总货币量,10?000亿(2016年年中);共识算法,工作量证明Scrypt;市值,8201万元(2016年年中)。

(3)运输币

运输币(Freicoin)发布于2012年7月,是一种滞期代币。其储存额具有负利率。运输币不鼓励持有,它收取4.5%的年费来促进消费。运输币之所以出名,是因为它所采用的货币政策与比特币的通货紧缩政策完全相反。作为代币,运输币并没有取得成功,却成为了供代币借鉴的多样性货币政策的重要一员。

提示: 块产生时间,10分钟;总货币量,1亿(2140年);共识算法,工作量证明SHA256;市值,13万美元(2014年年中)。

2.?基于共识机制的创新而建立的代币

比特币的共识机制是建立在用SHA256算法加密的作业证据基础之上的。从此,共识机制的创新进入了一个狂热的发展阶段。一些代币采用了各式各样的算法,如:Scrypt、Scrypt-N、Skein,Groestl、SHA3、X11、Blake等。还有的代币同时采用其中的几种算法。2013年,作为工作量证明的替代品,权益证明(Proof of Stake)被提出,为许多新代币的诞生提供了基础。权益证明系统中,拥有者可以将货币像股票一样抵押生息。它在某种程度上类似于存款证明,持有者可以保留所持货币的一部分,同时,以利息支付和交易费的形式赚取投资回报。

(1)点点币

点点币(Peercoin)诞生于2012年8月,是第一种综合使用工作量证明和权益证明机制来发行新币的代币。

提示: 块产生时间,10分钟;总货币量,不限;共识算法,工作量证明机制与权益证明结合;市值,5825万元(2016年年中)。

(2)Myriad

Myriad发行于2014年2月,具有复合算法的特性,是第一个同时包含5种算法的加密货币。与比特币只能使用SHA256矿机挖矿不一样,Myriad兼容SHA256、Scrypt等算法,同时兼容GPU及CPU挖矿。Myriad对共识攻击具有更强的抵抗力,这是因为只有多种挖矿算法同时被攻击时才会受到攻击。

提示: 块产生时间,平均0.5分钟;总货币量,20亿(2024年);共识算法,工作量证明机制与多算法共用;市值, 12万美元(2014年年中)。

(3)黑币

发行于2014年2月的黑币(Blackcoin)使用权益证明作为共识算法。黑币走进人们的视野是因为它引入了多池这种可以根据利润差异在不同代币间自动切换的挖矿池。

提示: 块产生时间,1分钟;总货币量,不限;共识算法,权益证明;市值,1125万元(2016年年中)。

(4)维理币

维理币(VeriCoin)发行于2014年5月。它使用权益证明共识机制,并且采用根据市场供求动态调节的利率。同时,维理币也是第一种可以自动兑换成比特币的代币。

提示: 块产生时间,1分钟;总货币量,不限;共识算法,权益证明;市值,390万元(2016年年中)。

(5)未币

未币(NXT)彻底抛弃工作量证明,而仅仅使用权益证明共识机制,故NXT是一种全新的加密货币,因此不应称之为比特币的变种或者代币。NXT具有许多先进特性,如:名称注册、去中心化的财产交易、整合分散的安全消息、股票代表等。因此,NXT常被称作下一代数字加密货币。

提示: 块产生时间,1分钟;总货币量,不限;共识算法,权益证明;市值,3816万元(2016年年中)。

3.?通过双目标挖矿机制创新而建立的代币

比特币的工作量证明算法仅仅具有一个目的,那就是确保比特链的安全。尽管相对于传统支付系统的安全,这点挖矿开销并不高,但是被指是一种浪费。双目标工作量证明算法在产生工作量证明来满足安全的同时,解决一个具体的问题。但这样做也带来一定的风险。在向货币安全添加额外功能的同时,也影响了其供求曲线。

(1)质数币

质数币(Primecoin)发行于2013年7月,据称其“具有数学价值”。这种币尝试把虚拟货币中无目的的算法所浪费的资源利用起来。质数币的工作量证明机制有一定的科学价值。所以从某种意义上讲,质数币的矿工在挖矿的同时也促进了科学的进步。质数币是没有总量上限的。但是,质数币的产生速度很慢,这与大质数的计算困难特性有关。

提示: 块产生时间,1分钟;总货币量,不限;共识算法,工作量证明和质数链发现;市值,533万元(2016年年中)。

(2)治疗币

治疗币(Curecoin)发行于2013年5月。它将SHA256工作量证明算法与蛋白质折叠研究相结合,强调对生命科学和医学的贡献。其中蛋白质折叠是蛋白质生化反应的计算密集型模拟,目的在于发现新药。

提示: 块产生时间,10分钟;总货币量,不限;共识算法,工作量证明和蛋白质折叠研究;市值,194万元(2016年年中)。

(3)格雷德币

格雷德币(Gridcoin)发行于2013年10月。它支持基于scrypt的工作量证明算法。格雷德币通过伯克利的分布式计算项目(BOINC)进行包罗万象的科学探索,只有在挖矿的同时运行BOINC才能够获得较多的币。BOINC是一种科研网格计算的开放协议,允许参与者贡献自己的空余计算力来进行一系列科研计算。所以,不同于质数币和治疗币那样目的单一,格雷德币可以通过BOINC这个计算平台帮助进行各种科学研究,包括寻找外星人、计算RNA结果等。

提示: 块产生时间,2.5分钟;总货币量,不限;共识算法,工作量证明和BOINC网格计算;市值,2858万元(2016年年中)。

4.?注重隐私性的代币

比特币常常被误认为具有隐私性。事实上,通过大数据分析,关联身份和比特币地址相对容易,从而通过连接彼此的地址,解析一个人的比特币消费习惯。所以,一些代币专注于强隐私性,试图直接解决此问题。

(1)零币

零币(Zerocoin)作为比特币之上保持隐私性的元币协议,是针对隐私性的第一个尝试。它诞生于2013年,仅是一种针对数字货币隐私性的理论方法。应用零币理论的代币叫作Zerocash,至今仍在研究阶段,并未发行。

(2)CryptoNote

CryptoNote公布于2012年12月,是一种为匿名数字货币提供基础的参考实践代币。它的设计初衷就是为了不同的实践并且内置定时重置机制,这使得它本身不太可能成为一种货币。CryptoNote的出名还来自于它不是比特币的翻版,而是全新从头设计实践的加密货币。基于CryptoNote衍生出来的数字货币还有Bytecoin(BCN)、Aeon(AEON)、Boolberry(BBR)、DuckNote(DUCK)、Fantomcoin(FCN)、Monero(XMR)、MonetaVerde(MCN)和Quazarcoin(QCN)等。更详细的CryptoNote衍生代币请见网页https://en.wikipedia.org/wiki/File:Forks-tree-f?ixed.png。

(3)百特币

百特币(Bytecoin)发行于2012年7月,是第一个衍生自CryptoNote的代币(比CryptoNote本身的发行早)。百特币基于CryptoNote技术,提供一种可行的匿名货币。它从CryptoNote继承了环签名、非连接交易和抵制区块链分析的隐私性。之后,百特币还进行了包括多签名交易、安全更新等方面的改进。

提示: 块产生时间,2分钟;总货币量,1.84亿元;共识算法,工作量证明Cryptonight;市值, 2909万元(2016年年中)。

(4)门罗币

门罗币(Monero,XMR)是CryptoNote的另外一种应用。相比于百特币,它具有略微平坦的发行曲线,在前4年就发行了80%。它继承了CryptoNote所有的隐私性。

提示: 块产生时间,1分钟;总货币量,1844万元;共识算法,工作量证明Cryptonight;市值,2622万元(2016年年中)。

(5)黑暗币

黑暗币(Darkcoin)发布于2014年1月。作为匿名货币,它对所有交易采用一种叫作DarkSend的再混合协议。另外,黑暗币的出名还在于它在工作量证明算法中使用了11种不同的哈希函数(blake、bmw、groestl、jh、keccak、skein、luffa、cubehash、shavite、simd、echo)。

提示: 块产生时间,2.5分钟;总货币量,2200万(2016年年中);共识算法,作业证明多算法共用;市值,1900万美元(2014年年中)。

2.3.3 货币的未来

加密货币的未来整体来说比比特币更加繁荣。它们在比特币的基础上引进了全新的去中心化的组织形式和共识机制,并由此衍生出了数以百计的不可思议的创新。这将影响与经济相关的众多部门,如:财政、经济、货币、中央银行、企业管理等。

许多之前需要中心机构来执行授权或信用控制的活动,现在可以去中心化了。区块链和共识机制的发明,在根除权力集中、腐败、监管俘获的同时,必将大幅度削减组织和大规模系统协调的费用。

2.4 本章小结

本章主要介绍了区块链技术的基础知识。首先,介绍了区块链技术,这是这本书的基础,包括区块链技术的基本概念、框架与特点,核心技术及交易流程。在这个基础之上,我们详细介绍了区块链技术最成功的应用——比特币,包括概念、原理、及隐私模型。之后,我们介绍了区块链的另外一个重要应用——以太坊。以太坊是区块链技术发展的一个重要的方向,是区块链技术未来的一部分。我们介绍了以太坊技术、以太坊智能合约、以太坊去中心化应用、以太坊发展的现状及未来。最后,我们分析了现有的流行的电子货币各自的优缺点。

参考资料

[1] 袁勇,王飞跃.区块链技术发展现状与展望[J].自动化学报,2016,42(4).

[2] Antonopoulos A M. Mastering Bitcoin: Unlocking Digital Crypto-Currencies[J]. Oreilly Media Inc Usa, 2015.

[3] Swan M. Blockchain: blueprint for a new economy[M]. O'Reilly, 2015.

[4] 以太坊(Ethereum):下一代智能合约和去中心化应用平台.以太坊爱好者,2016-06-23.

[5] Deutsch Bank, Banking & Technology Snapshot, DB Research, 20 December 2012.

[6] Vatalik Buterin, Merkling-in-Ethereum, https://blog.ethereum.org/2015/11/15/merkling-in-ethereum/.


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

华章出版社

官方博客
官网链接