| 作者 |
| 杨保华 陈昌(印度)纳拉扬·普鲁斯蒂(Narayan Prusty) |
| 丛书名 |
| 区块链技术丛书 |
| 出版社 |
| 机械工业出版社 |
| ISBN |
| 9781910301436 |
| 简要 |
| 简介 |
| 内容简介书籍计算机书籍 ---------------------------区块链原理、设计与应用--------------------------- 本书由超级账本核心设计和开发者撰写,是区块链开发落地专业指南。由浅入深、系统化介绍超级账本Fabric设计精华、应用开发等。全书分为理论篇和实践篇两大部分;第1~3章介绍区块链技术的由来、核心思想及典型的应用场景;第4~5章重点介绍区块链技术中大量出现的分布式系统技术和密码学安全技术;第6~8章介绍区块链领域的三个典型开源项目:比特币、以太坊以及超级账本;第9-11章以超级账本Fabric项目为例,具体讲解了安装部署、配置管理,以及使用 Fabric CA 进行证书管理的实践经验;第12章重点剖析超级账本Fabric项目的核心架构设计;第13章介绍区块链应用开发的相关技巧和示例;第14章介绍区块链服务平台的设计与开发,并讲解应用超级账本Cello项目构建服务平台的相关知识。本书覆盖了区块链和分布式账本领域的*新技术,可帮助读者深入理解区块链核心原理和典型设计实现,以及高效地开发基于区块链平台的分布式应用。 ---------------------------区块链项目开发指南--------------------------- 区块链是近十年来颇具颠覆性的新兴信息技术之一,它正以一种全新的方式建立人类交易过程的信任、仲裁和记录基础。本书共9章,首先介绍去中心化应用、DApp等基本概念,并据此展开对比特币、以太坊、超级账本等热门DApp的阐释。其次在解析以太坊工作原理的基础上介绍智能合约的编写方法,并介绍web3.js的应用方法。后利用上述知识进行钱包服务、智能合约部署平台、投注App、企业级智能合约以及联盟区块链等具体应用程序的创建。 |
| 目录 |
---------------------------区块链原理、设计与应用--------------------------- 序 言 前 言 理 论 篇 第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 ---------------------------区块链项目开发指南--------------------------- 译者序 前言 第1章 去中心化应用1 1.1 什么是DApp1 1.1.1 去中心化应用的优点2 1.1.2 去中心化应用的缺点3 1.2 去中心化自治组织3 1.3 DApp中的用户身份4 1.4 DApp中的用户账户5 1.5 访问中心化应用6 1.6 DApp中的内部货币6 1.7 什么是授权的DApp7 1.8 热门的DApp7 1.8.1 比特币7 1.8.2 以太坊9 1.8.3 超级账本项目9 1.8.4 IPFS10 1.8.5 Namecoin11 1.8.6 达世币12 1.8.7 BigChainDB14 1.8.8 OpenBazaar14 1.8.9 Ripple14 1.9 总结16 第2章 以太坊的工作原理17 2.1 以太坊概览17 2.2 以太坊账户18 2.3 交易18 2.4 共识19 2.5 时间戳20 2.6 随机数21 2.7 区块时间21 2.8 分叉24 2.9 创世区块24 2.10 以太币面值24 2.11 以太坊虚拟机25 2.12 gas25 2.13 发现对等节点26 2.14 Whisper和Swarm27 2.15 geth27 2.15.1 安装geth28 2.15.2 JSON-RPC和JavaScript操作台28 2.15.3 子命令和选项29 2.15.4 创建账户29 2.16 以太坊钱包31 2.17 浏览器钱包31 2.18 以太坊的缺点32 2.19 serenity33 2.20 总结35 第3章 编写智能合约36 3.1 Solidity源文件36 3.2 智能合约的结构37 3.3 数据位置38 3.4 什么是不同的数据类型39 3.4.1 数组类型39 3.4.2 字符串类型40 3.4.3 结构类型41 3.4.4 枚举类型42 3.4.5 mapping类型42 3.4.6 delete操作符43 3.4.7 基本类型之间的转换44 3.4.8 使用var44 3.5 控制结构45 3.6 用new操作符创建合约46 3.7 异常46 3.8 外部函数调用46 3.9 合约功能48 3.9.1 可见性48 3.9.2 函数修改器50 3.9.3 回退函数51 3.9.4 继承52 3.10 库54 3.11 返回多值56 3.12 导入其他Solidity源文件57 3.13 全局可用变量57 3.13.1 区块和交易属性57 3.13.2 地址类型相关58 3.13.3 合约相关58 3.14 以太币单位58 3.15 存在、真实性和所有权合约的证明59 3.16 编译和部署合约60 3.17 总结62 第4章 开始使用web3.js63 4.1 web3.js概述63 4.1.1 导入web3.js64 4.1.2 连接至节点64 4.1.3 API结构65 4.1.4 BigNumber.js66 4.1.5 单位转换66 4.1.6 检索gas价格、余额和交易细节67 4.1.7 发送以太币68 4.1.8 处理合约69 4.1.9 检索和监听合约事件71 4.2 为所有权合约创建客户端73 4.2.1 项目结构74 4.2.2 创建后端74 4.2.3 创建前端76 4.2.4 测试客户端80 4.3 总结82 第5章 创建钱包服务83 5.1 在线钱包和离线钱包的区别83 5.2 Hooked-Web3-Provider和EthereumJS-tx库84 5.3 分层确定性钱包87 5.4 密钥衍生函数87 5.5 LightWallet88 5.6 创建钱包服务89 5.6.1 必要条件89 5.6.2 项目结构90 5.6.3 创建后端90 5.6.4 创建前端91 5.6.5 测试97 5.7 总结101 第6章 创建智能合约部署平台102 6.1 计算一个地址的交易nonce102 6.2 solcjs概述104 6.2.1 安装solcjs104 6.2.2 solcjs API104 6.3 创建合约部署平台107 6.3.1 项目结构108 6.3.2 创建后端108 6.3.3 创建前端113 6.3.4 测试117 6.4 总结118 第7章 创建投注App119 7.1 Oraclize概述119 7.1.1 Oraclize的工作原理120 7.1.2 数据源120 7.1.3 真实性证明121 7.1.4 定价122 7.1.5 开始使用Oraclize API123 7.1.6 加密查询127 7.1.7 Oraclize Web IDE128 7.2 处理字符串128 7.3 创建投注合约130 7.4 为投注合约创建客户端133 7.4.1 项目结构133 7.4.2 创建后端134 7.4.3 创建前端135 7.4.4 测试客户端143 7.5 总结147 第8章 创建企业级智能合约148 8.1 探索ethereumjs-testrpc148 8.1.1 安装和使用149 8.1.2 可用RPC方法151 8.2 什么是事件主题153 8.3 开始使用truffle-contract154 8.3.1 安装和导入truffle-contract155 8.3.2 建立测试环境156 8.3.3 truffle-contract API156 8.4 truffle概述163 8.4.1 安装truffle163 8.4.2 初始化 truffle163 8.4.3 编译合约165 8.4.4 配置文件165 8.4.5 部署合约166 8.4.6 单元测试合约169 8.4.7 包管理175 8.4.8 使用truffle的操作台178 8.4.9 在truffle环境中运行外部脚本179 8.4.10 truffle的创建管线179 8.4.11 truffle的服务器端186 8.5 总结187 第9章 创建联盟区块链188 9.1 什么是联盟区块链189 9.2 什么是权威证明共识189 9.3 parity概述189 9.3.1 Aura的工作原理190 9.3.2 运行parity191 9.3.3 创建私有网络192 9.3.4 许可和隐私197 9.4 总结198 |