猜你喜欢
区块链原理、设计与应用

区块链原理、设计与应用

书籍作者:杨保华 ISBN:9787111577829
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:5238
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

  本书由超级账本核心设计和开发者撰写,是区块链开发落地专业指南。由浅入深、系统化介绍超级账本Fabric设计精华、应用开发等。全书分为理论篇和实践篇两大部分;第1~3章介绍区块链技术的由来、核心思想及典型的应用场景;第4~5章重点介绍区块链技术中大量出现的分布式系统技术和密码学安全技术;第6~8章介绍区块链领域的三个典型开源项目:比特币、以太坊以及超级账本;第9-11章以超级账本Fabric项目为例,具体讲解了安装部署、配置管理,以及使用 Fabric CA 进行证书管理的实践经验;第12章重点剖析超级账本Fabric项目的核心架构设计;第13章介绍区块链应用开发的相关技巧和示例;第14章介绍区块链服务平台的设计与开发,并讲解应用超级账本Cello项目构建服务平台的相关知识。本书覆盖了区块链和分布式账本领域的*新技术,可帮助读者深入理解区块链核心原理和典型设计实现,以及高效地开发基于区块链平台的分布式应用。


作者简介

  杨保华:博士,毕业于清华大学。超级账本(Hyperledger)大中华区技术工作组主席,IBM大中华区Blockchain技术社区首席顾问,资深研究员。曾主持多个大规模系统平台的架构设计和研发实施,是区块链、云计算、大数据等技术的早期研究者和实践者。他热爱开源技术,曾贡献OpenStack、OpenDaylight等开源项目,是超级账本Fabric项目核心设计和开发者,也是Cello和Fabric-SDK-Py项目的发起人。个人主页为https://yeasy.github.com。

  陈昌:毕业于清华大学。纸贵科技CTO,曾任IBM高级研究员。技术方向包括云计算、区块链、机器学习等。他是区块链技术的早期研究和推动者,是超级账本(Hyperledger)项目核心开发者。他有丰富的区块链应用实践经验,曾负责金融行业区块链解决方案的架构设计和实施,并主导开发了若干区块链服务平台。


编辑推荐

本书由超级账本核心设计和开发者撰写,Apache基金会创始人Brian Behlendorf倾情推荐,清华大学五道口金融学院常务副院长廖理博士作序。由浅入深,详细讲解超级账本Fabric架构设计精华与应用开发,是区块链开发落地专业指南。


前言

Preface 序  言

金融是人类文明发展过程中经济运行的基础,自诞生起,金融领域就伴随经济发展的阶段和商业模式的变迁不断涌现出先进的技术手段,这些都大大提升了社会和经济的运转效率。从延续了近千年的纸质记账,到二十世纪的电子化交易,再到影响现在及未来的互联网、大数据、人工智能和区块链,金融行业和金融科技领域始终以开放的姿态迎接新技术和新变化,并不断进行自我革新和升华。

区块链技术是金融科技领域当下最受人关注的方向之一。区块链作为一个新兴技术,具备去中心化、防篡改、可追溯等众多金融领域十分需要的特点。它可以实现多方场景下开放、扁平化的全新合作信任模型,而这些都为实现更高效的资源配置,更具体地说是金融交易,提供了有效的技术手段。在可见的未来,区块链技术将为人类商业社会的快速发展带来更多发展机遇和成长空间。

区块链技术在金融领域的实际应用之一——新型数字货币,被认为具备了变革整个金融行业的潜力,引发了国内外广泛的研究讨论和实践。英国央行已在研发利用分布式账本技术的下一代支付系统。中国人民银行也组建了数字货币研究所,深入研究数字货币相关的技术和监管课题。国际货币基金组织也公开认可区块链技术在清算和结算方面的独特优势。

清华五道口金融学院始终密切关注和积极开展金融行业及区块链相关领域的学术与研究,于2012年成立互联网金融实验室,专注于互联网金融和金融科技领域的研究、开发与孵化,并联合国内外众多的创新型企业和研究机构,一起开展数字资产和区块链相关的课题和项目。

当然,创新技术的发展和落地往往难以一蹴而就。我们应该认识到,区块链技术目前仍处于早期阶段,在支撑大规模商业应用场景上还存在不少挑战,例如如何在不影响业务运行的前提下,将区块链系统融合到已有的业务系统;如何让区块链系统的处理性能满足金融交易的苛刻需求;如何设计基于区块链的全新业务运营框架,并对其实现有效的监管。这些都是非常值得进一步探索的课题。

在此之际,很欣喜地看到有这样一本系统讲解区块链技术及实践的书籍出版。与其他介绍区块链的图书不同,本书并没有局限在阐述区块链的思想、概念和应用场景等理论知识层面,而是进一步从实现角度剖析了区块链平台的架构、设计,并提供了大量一手的开发实践案例,特别是全球区块链领域首屈一指的开源项目——超级账本。这些都将帮助读者更深刻地理解和掌握区块链技术的核心原理与应用方法。

本书作者在技术体系的经验和视野 、创新意识、国际化合作等方面都展现出了作为金融科技专家的综合素养,让我们对中国金融业进入下一个全新的发展阶段的人才储备充满了信心。我们愿意跟作者们一起,共同关注、共同努力于中国金融科技的未来。


廖理,教授,博士生导师,清华大学五道口金融学院

2017年8月于清华五道口



Preface 前  言

区块链和机器学习被誉为未来十年内最有可能提高人类社会生产力的两大创新科技。如果说机器学习的兴起依赖于新型芯片技术的发展,那么区块链技术的出现,则是来自商业、金融、信息、安全等多个领域众多科技成果和业务创新的共同推动。

比特币网络自横空出世,以前所未有的新型理念支持了前所未有的交易模式;以太坊项目站在前人肩膀上,引入图灵完备的智能合约机制,进一步释放了区块链技术的应用威力;众多商业、科技巨头,集合来自大型企业的应用需求和最先进的技术成果,打造出支持权限管理的联盟式分布式账本平台——超级账本……开源技术从未如今天这样,对各行各业都产生着极为深远的影响。本书在剖析区块链核心技术时,正是以这些开源项目(特别是超级账本 Fabric 项目)为具体实现进行讲解,力图探索其核心思想,展现其设计精华,剖析其应用特性。

我们在写作中秉承了由浅入深、由理论到实践的思想,将全书分为两大部分:理论篇和实践篇。前三章介绍了区块链技术的由来、核心思想及典型的应用场景。第4~5章重点介绍了区块链技术中大量出现的分布式系统技术和密码学安全技术。第6~8章分别介绍了区块链领域的三个典型开源项目:比特币、以太坊和超级账本。第9~11章以超级账本 Fabric 项目为例,具体讲解了安装部署、配置管理,以及使用 Fabric CA 进行证书管理的实践经验。第12章重点剖析了超级账本 Fabric 项目的核心架构设计。第13章介绍了区块链应用开发的相关技巧和示例。最后,本书还就热门的“区块链即服务”平台进行了介绍,并讲解应用超级账本 Cello 项目构建区块链服务和管理平台的相关经验和知识。

相信读者在阅读完本书后,在深入理解区块链核心概念和原理的同时,对于区块链和分布式账本领域最新的技术和典型设计实现也能了然于心,可以更加高效地开发基于区块链平台的分布式应用。

在本书长达两年时间的编写过程中,得到了来自家人、同事以及开源社区开发者和技术爱好者的众多支持和鼓励,在此表示感谢!

最后,希望本书能为推动区块链技术的进步和开源文化的普及做出一点微薄的贡献!


作者

2017年8月于北京


目录

序 言

前 言

理 论 篇

第1章 区块链思想的诞生 2

1.1 从实体货币到数字货币 2

1.2 站在巨人的肩膀上 5

1.3 了不起的社会学实验 5

1.4 潜在的商业价值 7

1.5 本章小结 8

第2章 核心技术概览 9

2.1 定义与原理 9

2.2 技术的演化与分类 11

2.3 关键问题和挑战 13

2.4 趋势与展望 17

2.5 认识上的误区 19

2.6 本章小结 19

第3章 典型应用场景 20

3.1 应用场景概览 20

3.2 金融服务 22

3.2.1 银行业金融管理 22

3.2.2 证券交易 24

3.2.3 众筹投资 25

3.3 征信和权属管理 26

3.4 资源共享 28

3.5 贸易管理 29

3.6 物联网 30

3.7 其他场景 31

3.8 本章小结 33

第4章 分布式系统核心问题 34

4.1 一致性问题 34

4.1.1 定义与重要性 34

4.1.2 问题与挑战 35

4.1.3 一致性要求 36

4.1.4 带约束的一致性 36

4.2 共识算法 37

4.2.1 问题与挑战 38

4.2.2 常见算法 38

4.2.3 理论界限 38

4.3 FLP 不可能原理 39

4.3.1 定义 39

4.3.2 正确理解 39

4.4 CAP 原理 40

4.4.1 定义 40

4.4.2 应用场景 41

4.5 ACID 原则 41

4.6 Paxos 算法与 Raft 算法 42

4.6.1 Paxos 算法 42

4.6.2 Raft 算法 45

4.7 拜占庭问题与算法 45

4.8 可靠性指标 48

4.8.1 几个 9 的指标 48

4.8.2 两个核心时间 49

4.8.3 提高可靠性 49

4.9 本章小结 49

第5章 密码学与安全技术 50

5.1 Hash 算法与数字摘要 50

5.1.1 Hash定义 50

5.1.2 常见算法 51

5.1.3 性能 51

5.1.4 数字摘要 52

5.1.5 Hash 攻击与防护 52

5.2 加解密算法 52

5.2.1 加解密系统基本组成 53

5.2.2 对称加密算法 53

5.2.3 非对称加密算法 54

5.2.4 选择明文攻击 55

5.2.5 混合加密机制 56

5.2.6 离散对数与 Diffie–Hellman密钥交换协议 57

5.3 消息认证码与数字签名 57

5.3.1 消息认证码 58

5.3.2 数字签名 58

5.3.3 安全性 59

5.4 数字证书 59

5.4.1 X.509 证书规范 60

5.4.2 证书格式 61

5.4.3 证书信任链 62

5.5 PKI 体系 63

5.5.1 PKI 基本组件 63

5.5.2 证书的签发 63

5.5.3 证书的撤销 66

5.6 Merkle树结构 66

5.7 布隆过滤器 67

5.8 同态加密 68

5.9 其他问题 70

5.10 本章小结 71

第6章 比特币——区块链思想诞生的摇篮 72

6.1 比特币项目简介 72

6.1.1 比特币大事记 73

6.1.2 其他数字货币 74

6.2 原理和设计 75

6.2.1 基本交易过程 75

6.2.2 重要概念 76

6.2.3 创新设计 78

6.3 挖矿 80

6.3.1 基本原理 80

6.3.2 挖矿过程 81

6.3.3 如何看待挖矿 81

6.4 共识机制 82

6.4.1 工作量证明 82

6.4.2 权益证明 83

6.5 闪电网络 83

6.6 侧链 85

6.6.1 SPV 证明 85

6.6.2 双向挂钩 86

6.6.3 最新进展 87

6.7 热点问题 87

6.7.1 设计中的权衡 87

6.7.2 分叉 87

6.7.3 交易延展性 88

6.7.4 扩容之争 89

6.7.5 比特币的监管和追踪 90

6.8 相关工具 91

6.9 本章小结 92

第7章 以太坊——挣脱数字货币的枷锁 93

7.1 以太坊项目简介 93

7.1.1 以太坊项目简史 94

7.1.2 主要特点 95

7.2 核心概念 95

7.3 主要设计 97

7.3.1 智能合约相关设计 97

7.3.2 交易模型 97

7.3.3 共识 97

7.3.4 降低攻击 98

7.3.5 提高扩展性 98

7.4 相关工具 98

7.4.1 客户端和开发库 98

7.4.2 以太坊钱包 99

7.4.3 IDE 100

7.4.4 网站资源 100

7.5 安装客户端 100

7.5.1 从 PPA 直接安装 100

7.5.2 从源码编译 101

7.6 使用智能合约 102

7.6.1 搭建测试用区块链 102

7.6.2 创建和编译智能合约 104

7.6.3 部署智能合约 105

7.6.4 调用智能合约 106

7.7 智能合约案例:投票 106

7.7.1 智能合约代码 107

7.7.2 代码解析 109

7.8 本章小结 111

第8章 超级账本——面向企业的分布式账本 112

8.1 超级账本项目简介 112

8.2 社区组织结构 114

8.2.1 基本结构 114

8.2.2 大中华区技术工作组 114

8.3 顶级项目介绍 115

8.3.1 Fabric 项目 116

8.3.2 Sawtooth 项目 117

8.3.3 Iroha 项目 117

8.3.4 Blockchain Explorer 项目 117

8.3.5 Cello 项目 118

8.3.6 Indy 项目 118

8.3.7 Composer 项目 118

8.3.8 Burrow 项目 119

8.4 开发必备工具 119

8.4.1 Linux Foundation ID 119

8.4.2 Jira——任务和进度管理 119

8.4.3 Gerrit——代码仓库和 Review管理 120

8.4.4 RocketChat——在线沟通 121

8.5 贡献代码 121

8.6 本章小结 126

实 践 篇

第9章 超级账本 Fabric 部署和使用 128

9.1 简介 128

9.2 本地编译安装 129

9.2.1 操作系统 130

9.2.2 环境配置 130

9.2.3 获取代码 131

9.2.4 编译安装 fabric-peer 组件 131

9.2.5 编译安装 fabric-orderer 组件 132

9.2.6 编译安装 fabric-ca 组件 133

9.2.7 编译安装辅助工具 133

9.2.8 获取 chaintool 133

9.2.9 安装Go语言相关工具 134

9.2.10 示例配置 134

9.3 使用 Docker 镜像 134

9.3.1 安装 Docker 服务 134

9.3.2 安装 docker-compose 135

9.3.3 获取 Docker 镜像 135

9.3.4 镜像 Dockerfile 138

9.4 启动 Fabric 网络 143

9.4.1 网络拓扑 143

9.4.2 准备相关配置文件 144

9.4.3 启动 Orderer 节点 150

9.4.4 启动 Peer 节点 151

9.4.5 操作网络 152

9.4.6 基于容器方式 156

9.5 链码的概念与使用 157

9.5.1 链码操作命令 158

9.5.2 命令参数 158

9.5.3 安装链码 159

9.5.4 实例化链码 162

9.5.5 调用链码 165

9.5.6 查询链码 167

9.5.7 升级链码 168

9.5.8 打包链码和签名 169

9.6 使用多通道 170

9.6.1 通道操作命令 170

9.6.2 命令选项 171

9.6.3 创建通道 172

9.6.4 加入通道 174

9.6.5 列出所加入的通道 175

9.6.6 获取某区块 176

9.6.7 更新通道配置 177

9.7 SDK 支持 178

9.8 生产环境注意事项 179

9.9 本章小结 181

第10章 超级账本 Fabric 配置管理 182

10.1 简介 182

10.1.1 配置文件 182

10.1.2 配置管理工具 183

10.2 Peer 配置剖析 183

10.2.1 logging部分 184

10.2.2 peer部分 184

10.2.3 vm部分 188

10.2.4 chaincode部分 189

10.2.5 ledger部分 190

10.3 Orderer 配置剖析 191

10.4 cryptogen 生成组织身份配置 194

10.4.1 配置文件 195

10.4.2 子命令和参数 196

10.4.3 生成密钥和证书文件 196

10.4.4 查看配置模板信息 198

10.5 configtxgen 生成通道配置 199

10.5.1 configtx.yaml配置文件 199

10.5.2 命令选项 203

10.5.3 生成Orderer初始区块并进行查看 203

10.5.4 生成新建通道交易文件并进行查看 211

10.5.5 生成锚节点更新交易文件 215

10.6 configtxlator 转换配置 215

10.6.1 RESTful接口 215

10.6.2 解码为Json格式 216

10.6.3 编码为二进制格式 217

10.6.4 计算配置更新量 217

10.6.5 更新通道配置 218

10.7 本章小结 219

第11章 超级账本 Fabric CA 应用与配置 220

11.1 简介 220

11.2 安装服务端和客户端 221

11.2.1 本地编译 221

11.2.2 获取和使用Docker镜像 223

11.2.3 示例Dockerfile 223

11.3 启动 CA 服务 225

11.4 服务端命令剖析 228

11.4.1 全局命令参数 228

11.4.2 init命令 230

11.4.3 start命令 230

11.5 服务端配置文件解析 231

11.6 与服务端进行交互 235

11.7 客户端命令剖析 237

11.7.1 全局命令参数 237

11.7.2 enroll命令 239

11.7.3 getcacert命令 240

11.7.4 reenroll命令 241

11.7.5 register命令 241

11.7.6 revoke命令 242

11.8 客户端配置文件解析 243

11.9 生产环境部署 245

11.10 本章小结 247

第12章 超级账本 Fabric 架构与设计 248

12.1 整体架构概览 248

12.1.1 核心特性 248

12.1.2 整体架构 249

12.1.3 典型工作流程 249

12.2 核心概念与组件 251

12.2.1 网络层相关组件 252

12.2.2 共识相关组件 254

12.2.3 权限管理相关组件 255

12.2.4 业务层相关组件 257

12.3 gRPC 消息协议 262

12.3.1 Envelope消息结构 262

12.3.2 客户端访问Peer节点 263

12.3.3 客户端、Peer节点访问Orderer 265

12.3.4 链码容器和Peer节点之间的操作 265

12.3.5 多个节点之间的操作 266

12.4 权限管理和策略 267

12.4.1 策略应用场景 267

12.4.2 身份证书 268

12.4.3 权限策略的实现 268

12.4.4 通道策略 272

12.4.5 背书策略 273

12.4.6 实例化策略 273

12.5 用户链码 274

12.5.1 基本结构 274

12.5.2 链码与Peer的交互过程 275

12.5.3 链码处理状态机 277

12.6 系统链码 279

12.7 排序服务 281

12.7.1 gRPC服务接口 282

12.7.2 链和账本管理 283

12.7.3 通道配置更新 284

12.7.4 共识插件 286

12.8 本章小结 288

第13章 区块链应用开发 290

13.1 简介 290

13.2 链码的原理、接口与结构 292

13.2.1 Chaincode接口 292

13.2.2 链码结构 293

13.2.3 链码基本工作原理 294

13.3 链码开发 API 295

13.3.1 账本状态交互API 296

13.3.2 交易信息相关API 296

13.3.3 参数读取API 297

13.3.4 其他API 297

13.4 应用开发案例一:转账 298

13.4.1 链码结构 298

13.4.2 Init方法 299

13.4.3 Invoke方法 300

13.5 应用开发案例二:资产权属管理 301

13.5.1 链码结构 301

13.5.2 Invoke方法 303

13.6 应用开发案例三:调用其他链码 312

13.7 应用开发案例四:发送事件 313

13.8 开发最佳实践小结 314

13.9 本章小结 316

第14章 区块链服务平台设计 317

14.1 简介 317

14.1.1 参考架构 318

14.1.2 考量指标 318

14.2 IBM Bluemix 云区块链服务 319

14.3 微软 Azure 云区块链服务 321

14.4 使用超级账本 Cello 搭建区块链服务 324

14.4.1 基本架构和特性 324

14.4.2 环境准备 325

14.4.3 下载Cello源码 325

14.4.4 配置Worker节点 325

14.4.5 配置Master节点 326

14.4.6 使用Cello管理区块链 327

14.4.7 基于Cello进行功能扩展 330

14.5 本章小结 330

附  录

附录A 术语表 334

附录B 常见问题解答 338

附录C Golang 开发相关 342

附录D ProtoBuf 与 gRPC 349

附录E 参考资源 353


标签
区块链,程序员,比特币
产品特色