当前位置: 首页 > 新闻 > 信息荟萃
编号:1241
区块链技术指南电子中文版.pdf
http://www.100md.com 2020年1月6日
第1页
第7页
第14页
第21页
第41页
第185页

    参见附件(11437KB,892页)。

     区块链技术指南,这是一本由浅入深为大家讲解区块链底层技术的书籍全书一共有11个章节,每个章节内容都非常非常,让你可以学习到有用的区块链知识。

    区块链技术指南内容简介

    区块链专家联袂推荐,资深区块链践行者联合撰写,从技术层面全面揭示区块链技术秘密。涵盖基础概念、架构、底层算法、应用开发、典型的区块链解决方案、常见问题等读者最为关心的技术与应用。

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

    第一部分为基础和入门(第1~2章),着重是区块链入门介绍,并讲解区块链基础,包括区块链的概念、种类、比特币交易、区块链的一些基础概念等,为后面深入介绍区块链技术做铺垫。

    第二部分为架构和技术篇(第3~10章):详细讲解了以下方面。

    区块链1.0/2.0/3.0架构,以及互联链架构属性与特点剖析,做到宏观理解与认识。

    区块链基于的密码学原理和典型的算法,了解区块链开发安全之道。

    区块链中常用的共识算法与作用,了解区块链价值传递与弱中心化之基石。

    比特币开发指南,帮助初学者入门。

    以太坊上的智能合约开发要领,为以后应用打下基础。

    HyperLedger开源项目及其架构,掌握主流的项目与应用。

    区块链上常见的问题,包括TheDAO攻击的源码级分析。

    典型解决方案:以闪电网络为主的支付方案;以标识登记为主的开源ODIN解决方案。

    第三部分为回顾和展望(第11章),从架构变革的角度探讨IT发展的原动力,并提供对区块链对未来IT发展的一些展望。

    区块链技术指南作者信息

    邹均,中关村区块链产业联盟专家、服务合约(ServiceContract)方向博士,关注与实践区块链技术与应用,现为海纳云CTO。曾任IBM澳洲金融行业首席软件架构师。擅长云计算、大数据、软件定义存储。融智北京高端外国专家,在国际会议期刊发表论文20余篇。

    张海宁,VMware中国云原生应用首席架构师,Harbor企业级开源容器Registry项目负责人,CloudFoundry中国社区*早的技术布道师之一,多年软件开发经验。曾任IBM资深软件工程师、Sun公司资深架构师等。目前着重关注容器、云计算和区块链领域的研究和开发。

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

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

    区块链技术指南目录预览

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

    第2章 区块链基础

    第3章 区块链架构剖析

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

    第5章 共识算法详解

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

    第7章 智能合约

    第8章 超级账本项目

    第9章 区块链常见问题

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

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

    区块链技术指南截图

    腾讯微博 @yanfabook

    新浪微博 @华章数媒

    官方网址:www.hzmedia.com.cn

    客服信箱:service@bbbvip.com

    客服热线:+ 86-10-68995265

    版权所有,侵权必究

    世图书发行有限公司)全球范围内制作与发行。

    华章分社(北京华章图文信息有限公司,北京奥维博

    本书纸版由机械工业出版社于2016年出版,电子版由

    ISBN:978-7-111-55356-4

    邹均 等著

    区块链技术指南目录

    本书作者

    序一:什么是区块链

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

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

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

    前言

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

    1.1 区块链简介

    1.1.1 区块链起源——比特币

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

    1.1.3 区块链分类

    1.1.4 区块链价值与应用

    1.2 区块链体验

    1.2.1 获取比特币的3种途径1.2.2 通过交易所购买比特币

    1.2.3 比特币钱包和地址

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

    1.2.5 比特币交易查询

    1.3 本章小结

    第2章 区块链基础

    2.1 区块链技术

    2.1.1 基本概念

    2.1.2 框架与特点

    2.1.3 区块链运作的核心技术

    2.1.4 区块链交易流程

    2.2 以太坊

    2.2.1 什么是以太坊

    2.2.2 以太坊技术

    2.2.3 以太坊智能合约

    2.2.4 以太坊的去中心化应用2.3 基于区块链的电子货币

    2.3.1 元币平台

    2.3.2 代币

    2.3.3 货币的未来

    2.4 本章小结

    第3章 区块链架构剖析

    3.1 基本定义

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

    3.2.1 比特币前端

    3.2.2 比特币节点后端

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

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

    链应用

    3.5 互联链架构剖析

    3.5.1 互联链背景

    3.5.2 互联账本3.5.3 互联账本协议组

    3.5.4 互联账本各层协议关系

    3.6 本章小结

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

    4.1 哈希算法

    4.1.1 哈希函数的性质与应用

    4.1.2 哈希指针链

    4.2 Merkle树

    4.3 公钥密码算法

    4.3.1 椭圆曲线密码算法

    4.3.2 secp256k1椭圆曲线

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

    4.4 本章小结

    第5章 共识算法详解

    5.1 拜占庭容错技术

    5.1.1 拜占庭将军问题5.1.2 拜占庭容错系统

    5.1.3 实用的拜占庭容错系统

    5.1.4 Raft协议

    5.2 PoW机制

    5.3 PoS机制

    5.4 DPoS机制

    5.5 Ripple共识算法

    5.6 小蚁共识机制

    5.7 本章小结

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

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

    6.1.1 下载和安装Oracle VM VirtualBox

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

    6.1.3 安装Node.js开发环境

    6.1.4 安装Docker运行环境

    6.1.5 安装和运行比特币测试网络6.1.6 运行第一个示例程序

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

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

    6.2.2 交易记录的实例解析

    6.2.3 运行示例程序

    6.3 实战:多重签名交易

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

    6.3.2 运行示例程序

    6.4 本章小结

    第7章 智能合约

    7.1 智能合约简介

    7.1.1 什么是智能合约

    7.1.2 智能合约的历史

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

    7.2 以太坊智能合约详解

    7.2.1 以太坊上的账户7.2.2 以太币和Gas

    7.2.3 合约和交易

    7.3 以太坊虚拟机

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

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

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

    7.5 本章小结

    第8章 超级账本项目

    8.1 超级账本项目简介

    8.1.1 项目背景

    8.1.2 项目管理形式

    8.1.3 项目的生命周期管理

    8.1.4 项目发展状况

    8.2 Fabric项目

    8.2.1 项目概述

    8.2.2 应用场景8.2.3 项目架构

    8.2.4 部署方式

    8.2.5 交易的执行

    8.3 Sawtooth Lake项目

    8.3.1 项目概述

    8.3.2 项目架构

    8.4 本章小结

    第9章 区块链常见问题

    9.1 钱包的安全性问题

    9.2 加密货币的交易方式

    9.3 匿名性和隐私性

    9.4 矿池算力集中的问题

    9.5 51%攻击问题

    9.6 去中心化的自治组织

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

    9.6.2 The DAO项目9.6.3 代码漏洞分析

    9.6.4 解决方案

    9.6.5 软分叉和硬分叉的影响

    9.6.6 重放攻击

    9.7 本章小结

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

    10.1 闪电网络

    10.1.1 闪电网络简介

    10.1.2 支付通道的创建

    10.1.3 支付通道的更新

    10.1.4 支付网络的构建

    10.1.5 支付通道的关闭

    10.1.6 小结

    10.2 ODIN:用区块链来替代DNS

    10.2.1 ODIN简介

    10.2.2 实现功能10.2.3 主要特点

    10.2.4 ODIN标识编码格式

    10.2.5 ODIN标识技术规范

    10.2.6 使用示例

    10.2.7 开放资源

    10.2.8 问题与思考

    10.3 本章小结

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

    11.1 架构心得

    11.1.1 架构和技术的关系

    11.1.2 关于计算的观察

    11.1.3 架构创新的神奇力量

    11.1.4 冯·诺依曼架构

    11.1.5 哈佛体系架构

    11.1.6 有影响力架构的特点

    11.1.7 从非生物计算到非生物智能11.2 架构创新——IT发展源源不断的动力

    11.2.1 大中型机时代

    11.2.2 开放时代的到来

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

    11.2.4 互联网时代

    11.2.5 云计算、大数据时代

    11.2.6 互联网+时代

    11.2.7 区块链+时代

    11.3 未来展望本书作者

    邹均: 中关村区块链产业联盟专家、服务合约

    (Service Contract)方向博士,关注与实践区块链技

    术与应用。擅长云计算、大数据、软件定义存储。现

    为海纳云CTO,曾任IBM澳洲金融行业首席软件架构

    师、多个云计算公司高管,是融智北京高端外国专

    家。在国际会议期刊发表论文20余篇,获2015年澳中

    校友会ICT和媒体类别杰出校友奖,区块链相关论文

    获2016年IEEE ICWS最佳博士论文奖。【欢迎加入罗

    友书社,微信:15535237487,罗辑思维,得到

    APP,樊登读书会,喜马拉雅系列海量书籍与您分

    享】

    张海宁: 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年来有多少

    科技上的突破,但华尔街日报却说区块链是人类历史

    上在金融领域最大的突破。这可能是因为出现了一个

    新的货币媒介,而每一次新货币媒介出现,都会引发

    社会和经济上的重大改革。【欢迎加入罗友书社,微

    信:15535237487,罗辑思维,得到APP,樊登读书会,喜马拉雅系列海量书籍与您分享】

    2016年1月,英国首席科学家建议英国政府把区

    块链技术列为英国国家战略,这是区块链历史上一个

    重大突破,原因是基于华尔街以及金融机构对区块链

    的评价。但自从2016年1月以后,区块链的评价是基

    于科学历史悠久的英国官方的评价。从各样指标来

    看,英国在科学上的建树经常是排名第二,仅次于美

    国。而世界科学排名第二的英国甚至把区块链列为国

    家战略,表示区块链的重要性毋庸置疑,而且有深远

    的影响。能够成为国家战略必须在科学上被验证过,另外还必须带来巨大的商业价值,两者都不可缺少才

    能成为国家战略。笔者曾在2016年3月拜访英国首席

    科学家,他们认为,区块链可以在各行各业使用,带

    来行业公平,例如:诚实报税、政府监管、反洗钱、国家安全等。2016年可以说是中国区块链元年,因为在2016年

    区块链在中国受到极大的重视。首先是1月的时候,人民银行宣布要使用数字货币。然后在30日以后,许

    多中国的组织单位就开始投资区块链。中国许多大学

    也开始研究区块链技术,大型金融机构都纷纷表态成

    立区块链团队来研究区块链,区块链的讨论班以及研

    讨会如雨后春笋一般大量涌现。

    但到底什么是区块链?笔者在2015年开始研究区

    块链,就发现了一件事情:学生们在实验,提出来的

    区块链模型、算法,或者架构都是有偏差的,而且有

    时候偏差甚大,例如,在设计私有区块链的时候把公

    有区块链的全部思想搬过来。结果不像私有区块链,但也不像原来的公有区块链。另外发觉很多人对相关

    的算法不熟悉,所以有的时候会有一些错误的看法,例如拜占庭将军的问题是一门专门的学问,而区块链只是用了一个近似的算法,若是把两者混为一谈,就

    会让人感到迷惑。

    再加上在讨论区块链时,有时候会有情绪化、宗

    教化或者政治化的言语出现,原来在数字货币领域,数字货币的先锋常带有一些政治思想,如无政府主

    义。再加上原来的数字货币过去有洗钱、犯罪的记

    录,所以在讨论时,有时候会失去焦点。这一点在英

    国首席科学家的报告里也有提出来,他们认为应该重

    视区块链,把区块链当做一门科学技术来看,而且是

    一门有助于经济的科学技术,而不是吹捧任何政治思

    想,或传递宗教概念。

    笔者从今年初开始多次提出应该以系统工程角度

    来发展区块链技术,例如基于云计算、软件工程、数

    据库等系统工程技术来开发区块链,区块链不只是一

    个加密技术或是数字货币,而是一门系统工程。区块链不是某些特殊政治思想的乌托邦,或洗钱的工具,而是一门科学家和工程师可以研究的系统工程,而且

    这项技术可以成为国家战略,改变各行各业的流程以

    及基础设施。英国首席科学家已经做出这样的判断,英国央行也做出了类似的决定,英国政府已经派了两

    位部长来领导这项计划,这就是我们所期待的。

    所以我非常高兴像邹均、张海宁、唐屹、李磊、刘天喜、陈晖、曲烈、郑晓明这些年轻的学者们开始

    书写区块链技术,因为现在市面上有关区块链的书都

    是在讲解区块链的概念及应用场景,但是今天描述区

    块链技术的书却很少。我们希望读者能多了解区块链

    技术,多发展区块链技术,并且加以应用。只有我们

    了解区块链技术之后,才能真正理解区块链的意义,而不会随波逐流,人云亦云,并且有自己的判断,希

    望读者们能够认真读这本书,了解区块链技术,相信必定会大有收获。

    蔡维德

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

    主任序二:区块链——未来已来,只是尚

    未流行

    比特币诞生于2008年美国次贷危机的末期。在比

    特币白皮书,即中本聪的论文《比特币:一种点对点

    的电子现金系统》中,还没有“区块链”这个词,只

    有“区块”(Block)和“链”(Chain)。一些人为这种

    超越主权、不会滥发的虚拟数字货币而欢欣鼓舞,开

    始积极投入到挖矿、炒币中,甚至发行自己的数字货

    币进行筹资(ICO),俗称“币圈”。而另一些人,包

    括很多专家和学者,则专注于比特币底层技术,对区

    块链(Blockchain)技术和应用进行深入地研究,考

    虑能否将这个技术加以改进,运用到更多的领域中

    去,俗称“链圈”。【欢迎加入罗友书社,微信:

    15535237487,罗辑思维,得到APP,樊登读书会,喜马拉雅系列海量书籍与您分享】

    七年之后,以2015年10月美国《经济学人》杂志

    发表的《信任的机器》(The Trust Machine)的封面

    文章为标志,大家意识到,作为比特币底层技术

    的“链”,其价值远大于比特币本身。区块链可以让人

    们在没有中央权威机构监督的情况下,对彼此的互相

    协作建立起信心。简单来说,它是一台创造信任的机

    器。华尔街开始热捧区块链。Gartner发布的2016年技

    术炒作曲线图表明,当前区块链正处于期望的最高

    点,即“过度期望期”,这也意味着在未来不久的一段

    时间,区块链将坠入“期望幻灭期”。人们对区块链的

    过度期望,实际暗示着对其存在很多误解,其中最典

    型的有三个,因为其关键词的首字母都是D,所以笔

    者将其归纳为“3D误区”。

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

    首先,区块链不是一项新技术,而是一个新的技

    术组合。其关键技术,包括P2P动态组网、基于密码

    学的共享账本、共识机制(拜占庭将军问题,即一种

    分布式场景下的一致性问题)、智能合约等技术,都

    是已经有十年以上的老技术了。但是,中本聪将这些

    技术很巧妙地组合在一起,并在此基础上引入了完善

    的激励机制,用经济学原理来解决传统技术无法解决

    的问题。

    其次,这个技术组合虽然有其独到的创新之处,但并非是颠覆性技术,是现有技术的有力补充。目前

    大部分人已经认同,区块链是“价值互联网”的基础协

    议,从这个角度看,其地位与当前“信息互联网”的

    HTTP协议相当,两者都是建立在TCPIP协议之上的

    应用层协议,同是互联网的两大基础协议。因而,两者是互补而非颠覆的关系。

    最后,这个技术组合,并未颠覆现有业务,而是

    引入了新的思想,去改善和改造现有业务模式,从而

    为大众提供更好的、普惠的服务。《华尔街日报》在

    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%的以太坊程序可被金融领域使用。 [1]

    第三,私有链和联盟链还很不成熟。 目前,以

    比特币和以太坊为代表的公有链相对比较成熟,而私有链和联盟链则远远不够成熟。开源而且好用的联盟

    链,更是不存在。目前全球影响力最大的开源联盟

    链,是Linux基金会下面的超级账本(Hyperledger)项

    目,目前已有95个成员单位。旗下的Fabric子项目是

    以IBM捐献出的OpenBlockchain为主体搭建而成的,目前还处在0.6版的快速迭代过程中,到0.8将是Alpha

    版,而0.9则是Beta版,再经过3个RC版本之后,才会

    进入相对成熟的1.0版。【欢迎加入罗友书社,微

    信:15535237487,罗辑思维,得到APP,樊登读书

    会,喜马拉雅系列海量书籍与您分享】

    想要找到或研发出一个成熟稳定的、适合金融领

    域的联盟链底层系统,还任重道远,需要很多仁人志

    士的共同努力,踏踏实实地投入到区块链的基础研究

    中去。

    在目前已出版的区块链书籍中,有很多都冠以“革命”、“重塑”、“重新定义世界”等煽动性词语作

    为书名,这更像是一种口号,而非切合实际的研究。

    我很高兴地看到,还有像邹均、张海宁、唐屹、李

    磊、刘天喜、陈晖、曲烈、郑晓明等这些研究者们,在踏踏实实地研究区块链底层技术,用普实的话语来

    介绍和普及区块链技术,让更多的人了解和接受区块

    链技术,实实在在地让人们了解区块链技术特征和特

    点,以及在现阶段环境下的不足,如何去改善这些不

    足等。知己知彼,方能百战不殆。世上没有“银弹”,没有哪一种技术能解决所有的问题。

    希望读者们能够通过本书,深入地了解区块链技

    术。也只有深入了解其底层运作机制和原理,才能更

    好地灵活运用该技术,取得理想的效果。

    未来已来,只是尚未流行,我辈仍需多努力。张斌,联动优势科技有限公司CEO

    [1] 参见《金融电子化(2016.5)》P60,《区块链技

    术在金融领域的应用解析》。序三:区块链——连接虚拟与现实

    我们对于一种新兴的技术,往往会在短期内对它

    有过高的不切实际的期望;泡沫破灭后,在长期的时

    间轴线上,又往往会忽视它的深刻影响,这一句话,用在区块链上,再合适不过。【欢迎加入罗友书社,微信:15535237487,罗辑思维,得到APP,樊登读

    书会,喜马拉雅系列海量书籍与您分享】

    区块链的发明,是建立在互联网之上。其所使用

    的技术,像P2P、分布式存储、分布式密钥的思想,十几年前就已经存在,但是如果没有中本聪那一篇开

    创性的关于比特币的白皮书,所有这些强大的工具,都还只是埋藏在学术论文堆里。因为这些工具单独使

    用,并不能解决问题,只有中本聪,出人意料地提出

    了一个系统性的、可供实践的解决方案。如果他能提前十年提出这篇论文,那么比特币就可以提前十年发

    明出来。所以,单个技术点,并非是区块链的魅力所

    在,运用这些技术的全新思想,才是区块链的本质和

    核心。

    单纯把区块链等同于一种分布式数据存储技术,就像将浏览器说成是一个网页解释器,将手机说成是

    一台手持电话,将云计算说成是一个服务器的集群一

    样,说了等于没有说,甚至比没说更糟糕,更容易造

    成误解。当全球的用户都打开浏览器访问网页,当街

    上每一个人都携带着一台能拍照、能上网、带GPS,运算性能可以发射登月火箭的智能手机,当我们所有

    的工作和生活数据都发生与存储在云上的时候,我们

    看到在浏览器、移动互联网和云计算上所承载的产业

    生态,跟最初的技术描述相比不知道差了多少万里。

    所以有人让我用一句话解释什么是区块链的时候,我往往会争取机会多说几句,争取让人更多了解一点。

    从功能上说,互联网实现了信息的传播,而区块

    链实现了价值的转移。互联网在最开始的时候,就是

    以信息传输管道的模式进行的设计,TCPIP协议底层

    并不关心上面传输的数据有什么差别——对于底层的

    交换机和路由器来说,一切都是0和1而已。无差别的

    信息传输,创造了信息复制的便捷通道,也造就了今

    天信息爆炸的信息社会。但是互联网虽然解决了信息

    传播的问题,却带来了信息权属的新问题,我们可以

    将一首歌曲或者电影,在几个小时内传遍全球,我们

    却不能知道,究竟是谁拥有这部电影的权利,是通过

    什么样的路径进行的传播。而区块链则可以做到,我

    将一个数据,发送给另外一个人之后,我自己就不再

    拥有这个数据的所有权,从而实现了可以利用一个虚

    拟的系统,来传输实际的价值。从机制上说,如果说TCPIP是机器与机器之间的

    通信协议,而区块链就是机器与机器之间的信任机制

    和合作协议。对于不需要验证真假的信息传输来说,TCPIP已经足够可用,但是一旦属于不同实体的计算

    机,需要彼此之间进行自动化的沟通和合作的时候,问题就会变得相当复杂。现实世界公司与公司之间的

    合作,有律师和合同来进行条款约定,有执法机关来

    保障合同的实行,而在虚拟世界,计算机没有办法开

    设银行账户,属于不同实体的计算机,也没有办法去

    法院起诉对方,因此在沟通和合作的时候,一定要有

    一种有效的机制,来快速实现共同协作。区块链就可

    以起到这样一个作用,所以在区块链行业中有一句

    话:代码即法律(Code is the Law)。未来不管我们

    的生活还是工作,都会有越来越多地需要计算机参

    与,人类将整体进入后人工智能时代,区块链就是在

    为这个时代的到来进行前期的铺垫和准备。未来我们将会看到无人驾驶汽车,通过区块链协议自动缴纳过

    路费用;智能投资顾问自动为我们计算各种投资组

    合;未来最先进的金融公司,也会像现在的无人工厂

    一样,看不到太多工作人员,只有无数的计算机,在

    快速地缔结无数的智能合约,进行精确到小数点后的

    资产配置。

    因为区块链的以上属性,区块链将会是连接虚拟

    世界与现实世界的最佳桥梁。在未来,区块链所连接

    的,不会像比特币一样是无法辨别的匿名账户和价值

    不定的虚拟资产,而将会是千千万万真实存在的个体

    和公司实体。上面所承载的资产,都将具有现实的价

    值和对应物,而这个虚拟的网络上发生的一切,也都

    会直接作用于现实世界。这一过程,需要的不仅仅是

    单纯的技术,还需要金融、商贸、法律、政府等各方

    面专家和人才凝聚在一起,来保证这一映射的有效性,也是我们一直在努力推进区块链生态系统和可信

    区块链概念的原因。区块链有巨大的潜力和未来,而

    这些潜力和未来,需要社会的共识与力量来共同推进

    和实现。【欢迎加入罗友书社,微信:

    15535237487,罗辑思维,得到APP,樊登读书会,喜马拉雅系列海量书籍与您分享】

    邓迪

    太一云科技有限公司董事长兼CEO序四:区块链——转型之擎

    邹均先生在国内外企业的IT架构、云计算、大数

    据、IT产品创新方面有很多年的经验,邹均本人也是

    我多年的好朋友和同亊。这次邹均先生主写的这本区

    块链的书,相信一定会在IT业内,特别是在企业IT架

    构圈内产生巨大的反响,一定会深受广大区块链爱好

    者、参与者、实践者的热烈欢迎。

    我和邹均先生工作背景相似,曾经从事过多年企

    业IT工作,从2009年开始,做云计算的创新,近年来

    也做金融科技的创新。从我这一年多时间的区块链的

    实践中,我个人看到区块链目前虽然还在发展初期,而每天区块链技术都有新的变化和突破,每天都

    是“山雨欲来风满楼”。但是区块链这样一个意义重大

    的技术,对整个IT的架构、基础协议、标准、运营、环境具有颠覆性的意义。因此我们应当充满紧迫感,应当预先了解区块链技术、商业模式和发展趋势,加

    强与国内外各界的合作,特别是在区块链的底层领

    域、区块链的平台领域和区块链的应用领域的合作,我们应当在区块链的全球协议和标准方面要占据主

    动。

    区块链技术具有全新的理念和逻辑结构,并且它

    每天还处在发展变化过程中,因此区块链技术与应用

    在企业内不可能单打独斗,区块链的应用必须在企业

    架构中上着天、下着地,和企业现有的应用系统相互

    关联。我们不应该简单地把区块链理解为一项技术,而应当考虑它在更高的企业IT架构转型层面的作用。

    区块链的应用不是简单地提供一个只能追加、不能更

    改的分布式数据库解决方案,而是要把区块链与云计

    算、大数据和传统企业的系统相互关联,使得企业系统由原来的传统系统和云计算这种“双核驱动”转变为

    传统系统、云计算与区块链的“三核驱动”,让企业的

    异构系统更好地发挥协同效应,一起解决原来传统IT

    系统难以解决的问题,这样才能更好地发挥区块链的

    独特性,才能够使传统企业IT架构更好地转型。

    本质上,因为区块链链与链之间具有隐私、安

    全、共识、自治、价值共享的特性,所以在技术层面

    解决了互联网上的价值传递问题。同时,区块链又具

    有底层开源和改变业务规则、创新业务多方共识等逻

    辑,因此区块链是未来整个IT架构和互联网转型的重

    要支撑。而企业与互联网IT架构的转型也为未来经济

    的转型、服务模式、信用交换和商业规则的转型提供

    了关键支持,因此研究和应用区块链不仅要研究技

    术,更要注意在互联网时代赢者通吃的规则,重要的

    是要研究和应用区块链带来的商业规则的改变。以前我们的信息化,不管是企业信息化、政府信

    息化,还是个人信息化,实际上都侧重在机构内部的

    信息化。这几年随着互联网、云计算、大数据、平台

    经济的蓬勃兴起,现在IT正在促使企业由内部信息化

    转型为外部信息化,最终通过平台转型为信息化的企

    业,由政府信息化转型为信息化政府,由个人信息化

    转型为信息化个人,这些词虽然相似,但性质具有很

    大的不同。它们在逻辑关系、业务处理方式、信息的

    确权、信息的使用、组织流程的改变、企业治理结构

    方面有很大不同,信息化已经不再是工具、手段和渠

    道。这样一个信息化平台的升级,未来会使得实体经

    济更好虚拟化,使得虚拟经济更好地结合实体化。

    实施区块链既需要具有传统IT系统的经验,也需

    要有互联网、云计算、大数据的实施经验,需要对整

    个IT系统变迁具有很强的洞察力,需要把整个IT系统协同起来,让整个IT系统互联互助,相互合作。因

    此,区块链系统在企业的应用,必然需要结合本地的

    实践,发挥原创的精神,必然还要有互联网时代产品

    开发的能力。而做一个好的区块链应用更需要研究共

    享经济理论、价值互联网和金融科技的创新与发展。

    这一切都需要在区块链理论与研究方面走到前列。

    因此,我希望邹均先生等人写的这本区块链的书

    籍,会连接IT架构的过去、现在与未来,开启大家创

    新的热情,会对行业产生影响,同时为大家开启一扇

    协同企业传统系统、云计算、大数据和区块链新的大

    门。

    黎江

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

    为什么要写这本书

    1900年9月8日,一场4级强度的飓风横扫德克萨

    斯州的加尔维斯顿。这个位于墨西哥湾的岛城,靠近

    德克萨斯海岸,在灾难来临前拥有37000人口和光明

    的经济前景。飓风猛烈攻击了这个毫无防备的低海拔

    城市,给该市带来了巨大的毁坏。飓风风速为每小时

    225千米,毁掉了3600座建筑,使占整个城市34的12

    个街区彻底消失,死亡人数为8000~10000人。是迄今

    为止,美国历史上死亡人数最多的自然灾害。

    而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)的《精通比特

    币》,以及普林斯顿大学以阿文·拿瑞延南

    (ArvindNarayanan)为首编著的《比特币和密码学技

    术》为代表的专注于比特币的技术性书籍。这些书籍

    满足了目前市场上一部分对区块链在行业中的应用有

    兴趣的偏业务的人士,以及对比特币技术有兴趣的偏

    技术的人士的需求。

    在这两类书籍所覆盖的市场中,其实还有一个很

    大的空白。我们发现,在对整个区块链架构(包括区

    块链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)【欢迎加入罗友书社,微信:15535237487,罗辑思维,得到APP,樊登读书会,喜马拉雅系列海

    量书籍与您分享】

    2)

    3)

    4)

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

    区块链(Blockchain)是近年来最具革命性的新

    兴技术之一。区块链技术发源于比特币(Bitcoin),其以去中心化方式建立信任等突出特点,对金融等诸

    多行业来说极具颠覆性,具有非常广阔的应用前景,受到各国政府、金融机构、科技企业、爱好者和媒体

    的高度关注。

    在本章中,我们首先介绍区块链的定义和特点,然后通过介绍购买、存储和交易比特币等实际使用场

    景来体验区块链,最后再探讨一些关于区块链的常见

    问题。1.1 区块链简介

    2016年1月20日,中国人民银行官方网站上发表

    了一条题为《中国人民银行数字货币研讨会在京召

    开》的新闻 [1]

    ,这一消息迅速在各大主流新闻媒体

    和比特币、区块链爱好者社区中传播,成为推动区块

    链技术在国内迅速升温的“导火线”。这是自从2013年

    12月5日中国人民银行、工信部、银监会、证监会和

    保监会五部委联合发布《关于防范比特币风险的通

    知》 [2]

    以来,相关首次公开对比特币底层技术——

    区块链技术给予了高度评价。

    在我们开始区块链体验之旅之前,让我们简要介

    绍区块链的定义和其发展历程。

    [1] 中国人民银行.中国人民银行数字货币研讨会在京召开[JOL].2016,http:www.pbc.gov.cngoutongjiaoliu1134561134693008070index.html.

    [2] 中国人民银行.中国人民银行等五部委发布《关于

    防范比特币风险的通知》【欢迎加入罗友书社,微

    信:15535237487,罗辑思维,得到APP,樊登读书

    会,喜马拉雅系列海量书籍与您分享】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 [1]

    和Linux基金会支持的超级账本(Hyperleder) [2]

    项目

    都属于联盟链架构。联盟链是一种需要注册许可的区

    块链,这种区块链也称为许可链(Permissioned

    Blockchain)。

    联盟链的共识过程由预先选好的节点控制。一般

    来说,它适合于机构间的交易、结算或清算等B2B场

    景。例如在银行间进行支付、结算、清算的系统就可

    以采用联盟链的形式,将各家银行的网关节点作为记

    账节点,当网络上有超过23的节点确认一个区块,该区块记录的交易将得到全网确认。联盟链可以根据

    应用场景来决定对公众的开放程度。由于参与共识的

    节点比较少,联盟链一般不采用工作量证明的挖矿机

    制,而是多采用权益证明或PBFT(Practical ByzantineFault 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个币,然后每

    210000个区块减半付酬;

    ·邻节点连接和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] R3.2016,http:r3cev.com.

    [2] HYPERLEDGER.2016,https:www.hyperledger.org.BLOCKSTREAM.2016,http:www.blockstream.com.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]。

    [1] 体验过程用到的现金可以转回交易所换回现金并

    提现,只会消耗少量的比特币作为矿工费用。1.2.1 获取比特币的3种途径

    获取比特币有3种途径:一是作为“矿工”挖矿获

    得,二是线上“交易所”购买或者线下通过中间人购

    买,三是作为商家收取比特币。

    1.挖矿

    由于比特币的独特设计,参与者可以通过计算能

    力竞争的方式获取系统奖励和支付小费,同时也维护

    着比特币这个区块链的稳定运转,我们把这种算力竞

    争行为称为“挖矿”。比特币价格的一路攀升。挖矿的

    设备和算力也一路升级,如图1-4所示,从最初的

    CPU挖矿,到第二代的显卡挖矿,经历过短暂的

    FPGA挖矿时代后,迅速进入专用芯片(ASIC)挖矿时代。【欢迎加入罗友书社,微信:15535237487,罗辑思维,得到APP,樊登读书会,喜马拉雅系列海

    量书籍与您分享】

    图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,读者可以根据情

    况选用。【欢迎加入罗友书社,微信:

    15535237487,罗辑思维,得到APP,樊登读书会,喜马拉雅系列海量书籍与您分享】

    首先,我们需要注册OKCoin的账号,在OKCoin

    中国站(https:www.okcoin.cnuserregister.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 本章小结

    本章中,我们首先简单介绍了区块链的起源和定

    义,以及区块链的分类、价值和应用。然后我们通过

    图示的方式,以比特币这个目前最大的公链为例,带

    领大家体验比特币,包括如何获取比特币,如何通过

    交易平台购买比特币,以及如何通过钱包存储比特

    币,最后将交易平台的比特币提取到钱包中,并在区

    块链上公开查询到这笔交易。

    毋庸置疑,区块链的发展已经远远超出了比特币

    和数字货币的范畴,可以说,区块链去中心化的信任

    机制和价值传递机制的变革将极具颠覆性,当前区块

    链领域的创新才刚刚开始。后续章节让我们一起继续

    关于区块链更深入的探索。第2章 区块链基础

    区块链是随着比特币等数字加密货币的日益普及

    而逐渐兴起的一种全新技术,它提供了一种去中心化

    的、无需信任积累的信用建立范式,目前已经引起金

    融行业、科研机构、政府部门和投资公司的高度重视

    与广泛关注。区块链技术通过建立一个共同维护且不

    可被篡改的数据库来记录过去的所有交易记录和历史

    数据,所有的数据都是分布式存储且公开透明的。在

    这种技术下,任何互不相识的网络用户都可以通过合

    约、点对点记账、数字加密等方式达成信用共识,而

    不需要任何的中央信任机构。在这种技术下,我们可

    以建立数字货币、数字资产、智能财产以及智能合约

    等。【欢迎加入罗友书社,微信:15535237487,罗

    辑思维,得到APP,樊登读书会,喜马拉雅系列海量书籍与您分享】

    通过上一章的介绍,相信大家已经对区块链和比

    特币有了初步的认识,在本章中,我们将继续探讨区

    块链的技术细节。

    本章将首先介绍区块链的相关基本概念及其运作

    原理,然后介绍区块链上可以进行的操作和相关细

    节,最后再讨论区块链上的交易流程和它的验证过

    程。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文件就是我们要找的数据区

    块文件。图2-2 数据区块文件

    我们还可以使用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树做详细介绍。

    图2-4 区块中的Merkle树

    8.双重支付

    双重支付问题又称为“双花”问题,即利用货币的

    数字特性用“同一笔钱”完成两次或者多次支付。在传

    统的金融和货币体系中,由于金钱货币是物理实体,具有客观唯一存在的属性,所以可以避免双重支付的

    情况。但在其他的电子货币系统中,则需要可信的第

    三方管理机构提供保证。区块链技术则在去中心化的

    系统中不借助任何第三方机构而只通过分布式节点之

    间的相互验证和共识机制,有效地解决了双重支付问

    题,在信息传输的同时完成了价值转移。区块链技术

    通过区块链接形成的时间戳技术加上验证比特币是否

    满足UTXO(未花费交易)和数字签名,有效避免了

    双重支付的问题。如果有人用同一笔UTXO构造了两

    笔付给不同交易方的交易,则比特币客户端只会转发

    最先被侦听到的那个。矿工会选择将那笔交易包入未

    来区块,当其中一笔交易所在的区块后有5个链接的

    区块,这笔交易已经得到了6次确认。在比特币区块

    链上,6次确认后可以基本上保证比特币不被双花。

    9.P2P网络P2P网络(peer-to-peer network,对等网络)是一

    种在对等者(peer)之间分配任务和工作负载的分布

    式应用架构,是对等计算模型在应用层形成的一种组

    网或网络形式。因此,从字面上,P2P可以理解为对

    等计算或对等网络,P2P网络示意图如图2-5所示。国

    内的迅雷软件采用的就是P2P技术。区块链系统是建

    立在IP通信协议和分布式网络的基础上的,它不依靠

    传统的电路交换,而是建立于网络通信之上,完全通

    过互联网去交换信息。网络中所有的节点具有同等的

    地位,不存在任何特殊化的中心节点和层级结构,每

    个节点均会承担网络路由、验证数据区块等功能。网

    络的节点根据存储数据量的不同可以分为全节点和轻

    量级节点,全节点存储了从创世区块以来的所有区块

    链数据(比特币网络现在大约有几十GB,且还在不

    断增长中)。全节点的优点是进行数据校验时不需要

    依靠别的节点,仅依靠自身就可以完成校验更新等操作,缺点是硬件成本较高。轻量级节点只需要存储部

    分数据信息,当需要别的数据时可以通过简易支付验

    证方式(Simplified Payment Verification,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)交易机制。【欢迎加入

    罗友书社,微信:15535237487,罗辑思维,得到

    APP,樊登读书会,喜马拉雅系列海量书籍与您分

    享】

    图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% [1]。一个重要原因就是传统银行在

    账本的维护、支付交易的结算和清算方面的架构过于

    复杂,维护成本过高。

    在应用方面,区块链平台能够提供编程环境让用

    户编写智能合约。通过智能合约,可以把业务规则转

    化成在区块链平台自动执行的合约,该合约的执行不

    依赖可信任的第三方,也不受人为的干预。理论上只

    要一旦部署,一旦符合合约执行的条件就会自动执

    行。执行结果也可以在区块链上供公开检查,提供了

    合约的公正性和透明性。因此,智能合约可以降低合

    约建立、执行和仲裁中所涉及的中间机构成本。区块

    链的智能合约奠定了未来建立可编程货币、可编程金

    融,甚至是可编程社会的基础。

    2.架构特点区块链具有去中心化、可靠数据库、开源可编

    程、集体维护、安全可信、交易准匿名性等特点。如

    果一个系统不具有以上特征,将不能被视为基于区块

    链技术的应用。

    (1)去中心化

    区块链数据的存储、传输、验证等过程均基于分

    布式的系统结构,整个网络中不依赖一个没有中心化

    的硬件或管理机构。作为区块链一种部署模式,公共

    链网络中所有参与的节点都可以具有同等的权利和义

    务。

    (2)可靠数据库

    区块链系统的数据库采用分布式存储,任一参与

    节点都可以拥有一份完整的数据库拷贝。除非能控制

    系统中超过一半以上的算力,否则在节点上对数据库的修改都将是无效的。参与系统的节点越多,数据库

    的安全性就越高。并且区块链数据的存储还带有时间

    戳,从而为数据添加了时间维度,具有极高的可追溯

    性。

    (3)开源可编程

    区块链系统通常是开源的,代码高度透明公共链

    的数据和程序对所有人公开,任何人都可以通过接口

    查询系统中的数据。并且区块链平台还提供灵活的脚

    本代码系统,支持用户创建高级的智能合约、货币和

    去中心化应用。例如,以太坊(Ethereum)平台即提

    供了图灵完备的脚本语言,供用户来构建任何可以精

    确定义的智能合约或交易类型。关于以太坊的更多内

    容请参考2.2节。

    (4)集体维护系统中的数据块由整个系统中所有具有记账功能

    的节点来共同维护,任一节点的损坏或失去都不会影

    响整个系统的运作。

    (5)安全可信

    区块链技术采用非对称密码学原理对交易进行签

    名,使得交易不能被伪造;同时利用哈希算法保证交

    易数据不能被轻易篡改,最后借助分布式系统各节点

    的工作量证明等共识算法形成强大的算力来抵御破坏

    者的攻击,保证区块链中的区块以及区块内的交易数

    据不可篡改和不可伪造,因此具有极高的安全性。

    (6)准匿名性

    区块链系统采用与用户公钥挂钩的地址来做用户

    标识,不需要传统的基于PKI(Public Key

    Infrastructure)的第三方认证中心(CertificateAuthority,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 OP_EQUALVERIFY

    OP_CHECKSIG

    Signature script: P2SH的脚本规则如下:

    Pubkey script: OP_HASH160 OP_EQUAL

    Signature script: [sig] [sig...]

    在上述的两种脚本规则里,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 Prefix,递归长度前缀编

    码)是Ethereum中对象序列化的一个主要编码方式,其目的是对任意嵌套的二进制数据的序列进行编码。2.1.4 区块链交易流程

    以比特币的交易为例,区块链的交易并不是通常

    意义上的一手交钱一手交货的交易,而是转账。如果

    每一笔转账都需要构造一笔交易数据会比较笨拙,为

    了使得价值易于组合与分割,比特币的交易被设计为

    可以纳入多个输入和输出,即一笔交易可以转账给多

    个人。从生成到在网络中传播,再到通过工作量证

    明、整个网络节点验证,最终记录到区块链,就是区

    块链交易的整个生命周期。整个区块链交易流程如图

    2-13所示。【欢迎加入罗友书社,微信:

    15535237487,罗辑思维,得到APP,樊登读书会,喜马拉雅系列海量书籍与您分享】图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价格由交易创建

    者设置,发送账户需要预付的交易费用

    =GASPRICEGas 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=STARTGASGASPRICE,并从签名中确定发送者的地址。从发送者的账户中减去交易费用和增加发送者的随机数。如果账户余额不

    足,返回错误。

    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.智能合约

    智能合约是由尼克萨博提出的理念,几乎与互联

    网同龄。但是由于缺少可信的执行环境,智能合约并

    没有被应用到实际产业中。自从比特币诞生后,人们

    认识到比特币的底层技术区块链天生可以为智能合约

    提供可信的执行环境,以太坊首先实现了区块链和智

    能合约的完整契合。

    以太坊是内置有图灵完备 [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。虽然有许多方法通过即时编译去优化以

    太坊,但以太坊的基础性的实施可以用几百行代码实

    现。

    [1] 关于图灵完备的相关内容请参见3.3节。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 Cred ......

您现在查看是摘要介绍页, 详见PDF附件(11437KB,892页)