区块链开发指南
区块链开发指南
编辑推荐
区块链底层技术和应用开发的必备用书,中国三大区块链联盟的大伽联袂推荐
内容简介
本书以比特币、以太坊、Fabric 三种区块链的技术原理和实际操作为主要目标,全书具体内容如下。
第 1 章介绍比特币区块链,包括交易和交易链、区块和区块链、挖矿、矿池、脚本系统、合约应用案例等内容,向读者们介绍区块链基础知识。
第 2 章讲述区块链进阶技术,包括外带数据原理、Counterparty 原理、挖矿算法解析、侧链技术,以及*新的 IBLT、隔离见证、闪电网络等。
第 3 章的主要内容是区块链中使用的密码学基础,包括 Hash 函数、椭圆曲线密码体系、ECDSA 签名、Schnorr 数字签名和 Bloom f?ilter 算法等,向开发者介绍密码学相关算法。
第 4 章是比特币区块链的编译、代码剖析、建立私链及 API 开发等实操内容。
第 5 章介绍以太坊的技术原理,包括以太坊简介、账户管理、交易原理、智能合约等,还涉及搭建私有链,智能合约开发、部署和调用等实操过程。
第 6 章介绍了 IBM 开源的区块链底层技术平台 Fabric 的原理和实操,对 Fabric 系统架构、节点、验证总账、交易背书的基本流程进行了详尽独到的分析,对 Fabric 的私有链建立和配置、链上代码的开发过程进行了详细的描述,为开发者使用 Fabric 提供技术指导。
作者简介
申屠青春
金链盟常务副秘书长,银链科技 CEO,深圳金融标准委员会会员,深圳大学博士,高级工程师,深圳市高层次人才,深圳市政府采购评审专家。曾获 2008 年深圳科技创新奖、2009 年广东省科技进步三等奖,获得发明专利授权 4 项,获 2012 年深圳发明奖。2012 年创立银链科技,2013 年开始研究区块链,2016 年转向金融行业,并发起成立金链盟。
宋波
曾在某外企支付公司任职中国区软件开发部经理,负责 ATM、EMV IC 银行卡、Kiosk 等产品,现在币信负责移动 IM 的开发工作,先后参与了钱包、算法交易、区块链、交易引擎、矿池及 APP 等产品的开发。
张鹏
博士,硕士生导师,现为信息工程学院讲师,中国密码学会会员。研究方向为密码学与信息安全。近年来主持或参与本领域的国家、省、市多项科技计划项目,申请国家发明专利十余项,在本领域核心学术刊物上发表文章 20 多篇,其中多篇被 SCI、EI 检索。
汪晓明
朝夕网络 CEO,10 年互联网技术产品经验,在跨境电商、大数据、区块链等领域有丰富的经验。作为区块链技术早期探索者,一直积极推动区块链技术在国内的传播和应用落地,已推出面向金融机构的区块链数字资产和供应链产品。同时发起了有行业影响力的区块链视频节目《明说》,持续影响着更多人参与到区块链技术的研究和推广中。
季宙栋
万达网络科技集团先进技术研究中心副总经理,万达区块链负责人,(工信部)中国区块链技术与产业发展论坛副秘书长,超级账本中国技术工作组委员。专注于互联网金融业务的创新及金融科技实践,参与了工信部区块链白皮书及相关标准编制工作,ISO/IEC TC307 中国代表团成员,牵头工信部区块链开源社区工作。
左川民
先后在多家知名企业担任技术专家和高级架构师。2015 年开始从事区块链技术的研究工作,曾负责积分区块链项目区块链架构设计,专注于区块链技术框架 Fabric 的技术研究,目前为深圳科协、金链盟等机构的 Fabric 技术框架培训讲师,同时作为中国首批区块链系统功能测试评审专家参与区块链系统的评审。
目录
-
推荐序一 区块链的价值实现
-
推荐序二 区块链,推动金融代际跃升的新力量
-
推荐序三 区块链技术的现实和未来
-
前言
第 1 章 区块链基础 1
-
1.1 交易和交易链 2
-
1.1.1 比特币地址 3
-
1.1.2 交易的本质 3
-
1.1.3 输入和输出 5
-
1.1.4 交易类型 5
-
1.1.5 找零地址 6
-
1.2 区块和区块链 8
-
1.2.1 区块结构 8
-
1.2.2 创世块 10
-
1.2.3 区块链原理 13
-
1.3 挖矿、矿池 14
-
1.3.1 挖矿原理与区块的产生 14
-
1.3.2 挖矿难度 16
-
1.3.3 矿池原理与商业模式 18
-
1.4 脚本系统 19
-
1.4.1 脚本特点 20
-
1.4.2 脚本运行过程 24
-
1.4.3 脚本操作码解读 25
-
1.4.4 脚本执行过程 26
-
1.5 合约应用案例 27
-
1.5.1 合约应用原理 28
-
1.5.2 示例 1:提供押金证明 29
-
1.5.3 示例 2:担保和争端调解 30
-
1.5.4 示例 3:保证合约 30
-
1.5.5 示例 4:使用外部状态 32
-
1.5.6 示例 5:跨链交易 34
-
1.5.7 示例 6:支付证明合约 35
-
1.5.8 示例 7:特定对象的快速调整(微)支付 36
-
1.5.9 示例 8:多方去中心化彩票 37
-
参考资料 37
第 2 章 区块链进阶 39
-
2.1 外带数据 39
-
2.1.1 OP_RETURN 外带数据 39
-
2.1.2 Multi-Signatures 外带数据 40
-
2.2 Counterparty 40
-
2.2.1 Counterparty 附生链的实现机制详解 41
-
2.2.2 发送 41
-
2.2.3 订单 42
-
2.2.4 发行 42
-
2.2.5 广播 43
-
2.2.6 赌约 43
-
2.3 挖矿算法解析 43
-
2.3.1 PoW 挖矿算法及分析 43
-
2.3.2 PoS 股权证明算法及分析 44
-
2.3.3 DPoS 股份授权证明算法及分析 45
-
2.4 Sidechains 45
-
2.4.1 侧链背景 45
-
2.4.2 技术原理 46
-
2.5 最新比特币技术 49
-
2.5.1 IBLT 49
-
2.5.2 隔离见证 50
-
2.5.3 闪电网络 51
-
2.5.4 RSMC 51
-
2.5.5 HTLC 52
-
参考资料 53
第 3 章 密码学基础 54
-
3.1 Hash 函数 54
-
3.1.1 技术原理 54
-
3.1.2 SHA-1 算法 55
-
3.1.3 SHA-2 算法 57
-
3.1.4 SHA-3 算法 64
-
3.1.5 RIPEMD160 算法 65
-
3.2 椭圆曲线密码 66
-
3.2.1 椭圆曲线方程 67
-
3.2.2 公钥和私钥的产生算法 68
-
3.3 ECDSA 数字签名 69
-
3.4 Schnorr 数字签名 70
-
3.4.1 技术思想 70
-
3.4.2 Schnorr 与 ECDSA 的异同 70
-
3.5 Bloom f?ilter 71
-
3.5.1 技术原理 71
-
3.5.2 应用案例 72
第 4 章 比特币区块链开发 74
-
4.1 Bitcoin 的编译过程 74
-
4.1.1 Ubuntu 下的编译 74
-
4.1.2 Mac 下的编译 75
-
4.1.3 Windows 下的编译 76
-
4.2 代码剖析 77
-
4.2.1 主要模块 77
-
4.2.2 初始化和启动 79
-
4.2.3 P2P 网络 80
-
4.2.4 交易和区块 89
-
4.2.5 脚本系统 89
-
4.2.6 挖矿 91
-
4.2.7 私钥 92
-
4.3 性能实战 93
-
4.3.1 建立私链 93
-
4.3.2 优化改进 96
-
4.4 API 开发 97
-
4.4.1 命令行调用 97
-
4.4.2 RPC API 调用接口 100
-
4.4.3 如何调用 API 进行开发 103
-
4.4.4 通过命令实现区块链的查询实例 103
第 5 章 以太坊智能合约开发 109
-
5.1 以太坊 109
-
5.1.1 以太坊的定义 109
-
5.1.2 下一代区块链 109
-
5.1.3 以太坊虚拟机 110
-
5.1.4 以太坊的工作原理 110
-
5.2 以太坊账户管理 111
-
5.2.1 账户 111
-
5.2.2 钥匙文件 112
-
5.2.3 创建账号 112
-
5.3 更新、备份、恢复账号 115
-
5.3.1 更新账号 115
-
5.3.2 账号备份和恢复 116
-
5.4 公有链、联盟链、私有链及网络配置 117
-
5.4.1 以太坊网络 117
-
5.4.2 公有链、私有链和联盟链 117
-
5.4.3 如何连接 118
-
5.4.4 更快地下载区块链 119
-
5.4.5 静态节点、信任节点和启动节点 120
-
5.5 搭建测试网络和私有链 121
-
5.5.1 Modern 测试网 121
-
5.5.2 设置本地私有测试网 121
-
5.6 账户、交易核心概念及投注合约解析 125
-
5.6.1 外有账户与合约账户 125
-
5.6.2 什么是交易 126
-
5.6.3 什么是消息 126
-
5.6.4 什么是 gas 126
-
5.6.5 估算交易成本 127
-
5.6.6 账户交互示例:投注合约 128
-
5.7 深入浅出智能合约 131
-
5.7.1 合约的定义 131
-
5.7.2 以太坊高级语言 131
-
5.7.3 写合约 131
-
5.7.4 编译合约 132
-
5.7.5 创建和部署合约 134
-
5.7.6 与合约互动 135
-
5.7.7 合约元数据 136
-
5.7.8 测试合约和交易 137
-
5.8 如何部署、调用智能合约 138
-
5.8.1 RPC 138
-
5.8.2 惯例 138
-
5.8.3 部署合约 139
-
5.8.4 和智能合约互动 141
-
5.8.5 Web3.js 142
-
5.8.6 控制台 143
-
5.8.7 查看合约与交易 143
-
5.9 智能合约案例实战 143
-
参考资料 146
第 6 章 Fabric 原理和实操 147
-
6.1 超级账本项目背景 147
-
6.2 Fabric 简介 149
-
6.3 系统架构 150
-
6.3.1 交易 150
-
6.3.2 区块链数据结构 150
-
6.3.3 节点 151
-
6.4 交易背书的基本流程 155
-
6.4.1 客户端创建交易后发送到它所选择的背书节点 156
-
6.4.2 背书节点模拟交易,然后生成背书签名 157
-
6.4.3 提交客户端获取交易的背书,通过排序服务广播 158
-
6.4.4 排序服务向所有节点投递交易消息 158
-
6.5 背书策略 159
-
6.5.1 背书策略规范 159
-
6.5.2 交易评估与背书策略 159
-
6.5.3 背书策略示例 160
-
6.6 验证总账(1.0 版本之后的功能)和原始总账检查点(精简) 160
-
6.6.1 验证总账 160
-
6.6.2 原始总账检查点 161
-
6.7 Fabric V1.0 开发者快速入门 163
-
6.7.1 前置条件和系统配置 163
-
6.7.2 下载源代码,创建 Fabric 网络 164
-
6.7.3 生成配置文件 164
-
6.7.4 使用 Docker 创建 Fabric 网络 & 创建 / 加入通道(账本) 165
-
6.7.5 示例合约执行过程解析 165
-
6.7.6 查看智能合约执行日志 166
-
6.7.7 手工创建和加入通道 166
-
6.7.8 使用命令行工具部署、调用、查询智能合约 167
-
6.7.9 开发环境故障排除 168
-
6.7.10 Fabric 常用的 Docker 命令 168
-
6.8 智能合约开发 169
-
6.8.1 智能合约的定义 169
-
6.8.2 GO 语言智能合约的开发和部署 169
-
6.8.3 Java 智能合约的编写与部署 174
-
6.8.4 开发和提交代码 180
-
相关术语 182
-
附录 A 国内区块链联盟介绍 184
-
附录 B 《ChinaLedger 面向中国资本市场应用的分布式总账白皮书》全文 201