| 作者 |
| 杨保华 陈昌 安德烈亚斯·M.安东波罗斯 |
| 丛书名 |
| 区块链技术丛书 |
| 出版社 |
| 机械工业出版社 |
| ISBN |
| 9782007271543 |
| 简要 |
| 简介 |
| 内容简介书籍计算机书籍 ---------------------------区块链原理、设计与应用 第2版--------------------------- 本书由超级账本核心设计和开发者撰写,是区块链开发落地专业指南。由浅入深、系统化介绍超级账本Fabric设计精华、应用开发等。全书分为理论篇和实践篇两大部分;第1~3章介绍区块链技术的由来、核心思想及典型的应用场景;第4~5章重点介绍区块链技术中大量出现的分布式系统技术和密码学安全技术;第6~8章介绍区块链领域的三个典型开源项目:比特币、以太坊以及超级账本;第9-11章以超级账本Fabric项目为例,具体讲解了安装部署、配置管理,以及使用 Fabric CA 进行证书管理的实践经验;第12章重点剖析超级账本Fabric项目的核心架构设计;第13章介绍区块链应用开发的相关技巧和示例;第14章介绍区块链服务平台的设计与开发,并讲解应用超级账本Cello项目构建服务平台的相关知识。本书覆盖了区块链和分布式账本领域的最新技术,可帮助读者深入理解区块链核心原理和典型设计实现,以及高效地开发基于区块链平台的分布式应用。 ---------------------------精通区块链编程:加密货币原理、方法和应用开发(原书第2版)--------------------------- 区块链的热度无须赘言。该书从基础技术层面解读开放区块链编程技术在金融领域的应用原理、实践及趋势。本书主要面向程序员,书中详细介绍了加密货币的原理、使用方法,以及如何开发与之相关的软件。对希望理解比特币及加密货币内在工作机制的非程序员读者们,本书前几章还深入介绍了比特币概念及其原理。 |
| 目录 |
---------------------------区块链原理、设计与应用 第2版--------------------------- 前言 第1版序言 第1版前言 理论篇 第1章 区块链的诞生 2 1.1 记账科技的千年演化 2 1.2 分布式记账与区块链 7 1.3 集大成者—比特币 10 1.4 区块链的商业价值 12 1.5 本章小结 14 第2章 核心技术概览 15 2.1 定义与原理 15 2.2 技术的演化与分类 17 2.3 关键问题和挑战 19 2.4 趋势与展望 23 2.5 认识上的误区 26 2.6 本章小结 27 第3章 典型应用场景 28 3.1 应用场景概览 28 3.2 金融服务 29 3.2.1 数字货币 30 3.2.2 支付清结算业务 31 3.2.3 证券交易后处理 34 3.2.4 供应链金融 35 3.2.5 税收服务 36 3.2.6 众筹管理 37 3.3 征信管理 38 3.4 权属管理与溯源 39 3.4.1 存证 39 3.4.2 溯源 41 3.4.3 数据管理 42 3.5 资源共享 42 3.6 物流与供应链 44 3.7 物联网 45 3.8 其他场景 46 3.9 本章小结 48 第4章 分布式系统核心技术 49 4.1 一致性问题 49 4.2 共识算法 52 4.3 FLP不可能原理 54 4.4 CAP原理 56 4.4.1 定义 56 4.4.2 应用场景 56 4.5 ACID原则与多阶段提交 57 4.6 Paxos算法与Raft算法 58 4.6.1 Paxos算法 58 4.6.2 Raft算法 61 4.7 拜占庭问题与算法 61 4.8 可靠性指标 65 4.9 本章小结 66 第5章 密码学与安全技术 67 5.1 密码学简史 67 5.2 Hash算法与数字摘要 68 5.3 加解密算法 70 5.4 消息认证码与数字签名 75 5.4.1 消息认证码 76 5.4.2 数字签名 76 5.4.3 安全性 77 5.5 数字证书 77 5.6 PKI体系 80 5.7 默克尔树结构 83 5.8 布隆过滤器 84 5.9 同态加密 85 5.10 其他技术 86 5.11 本章小结 89 第6章 比特币—初露锋芒的区块链 90 6.1 比特币项目简介 90 6.2 工作原理 94 6.2.1 基本交易过程 94 6.2.2 重要概念 95 6.2.3 创新设计 98 6.3 挖矿过程 99 6.4 共识机制 100 6.5 闪电网络 102 6.6 侧链 103 6.7 热门问题 105 6.8 相关工具 108 6.9 本章小结 109 第7章 以太坊—挣脱加密货币的枷锁 110 7.1 以太坊项目简介 110 7.2 核心概念 112 7.3 主要设计 114 7.4 相关工具 115 7.5 安装客户端 117 7.6 使用智能合约 118 7.6.1 搭建测试用区块链 118 7.6.2 创建和编译智能合约 119 7.6.3 部署智能合约 120 7.6.4 调用智能合约 121 7.7 智能合约案例 121 7.7.1 智能合约代码 121 7.7.2 代码解析 123 7.8 本章小结 125 第8章 超级账本——面向企业的分布式账本 126 8.1 超级账本项目简介 126 8.2 社区组织结构 128 8.3 顶级项目介绍 129 8.4 开发协作工具 134 8.5 贡献代码 136 8.6 本章小结 139 实践篇 第9章 Fabric安装与部署 142 9.1 简介 142 9.2 本地编译组件 143 9.2.1 环境配置 144 9.2.2 获取代码 145 9.2.3 编译安装Peer组件 145 9.2.4 编译安装Orderer组件 145 9.2.5 编译安装Fabric CA组件 146 9.2.6 编译安装配置辅助工具 146 9.2.7 安装Protobuf支持和Go语言相关工具 146 9.2.8 示例配置 147 9.3 容器方式获取 147 9.3.1 安装Docker服务 147 9.3.2 安装docker-compose 147 9.3.3 获取Docker镜像 148 9.3.4 镜像Dockerfile 150 9.4 用本地方式启动Fabric网络 154 9.4.1 规划初始网络拓扑 155 9.4.2 准备启动配置文件 156 9.4.3 启动排序节点 163 9.4.4 启动Peer节点 165 9.4.5 创建通道 166 9.4.6 加入通道 166 9.4.7 更新锚节点配置 167 9.5 用容器方式启动Fabric网络 167 9.6 本章小结 169 第10章 管理Fabric网络 170 10.1 简介 170 10.2 使用通道 170 10.3 管理节点 184 10.4 管理链上代码 186 10.5 监听网络事件 202 10.6 自动发现网络信息 205 10.6.1 主要功能 205 10.6.2 全局参数 205 10.6.3 子命令 205 10.7 使用运维服务 210 10.8 如何升级网络版本 213 10.8.1 能力类型 213 10.8.2 推荐升级步骤 214 10.9 使用SDK 216 10.10 注意事项与最佳实践 217 10.11 本章小结 219 第11章 智能合约的开发 220 11.1 简介 220 11.2 链码的概念与结构 221 11.2.1 Chaincode接口 222 11.2.2 链码结构 222 11.3 链码开发API 223 11.3.1 账本状态交互API 223 11.3.2 交易信息API 225 11.3.3 参数读取API 226 11.3.4 私密数据API 226 11.3.5 其他API 227 11.4 应用开发案例一:转账 228 11.5 应用开发案例二:资产权属管理 231 11.6 应用开发案例三:调用其他链码 240 11.7 应用开发案例四:发送事件 241 11.8 应用开发案例五:基于属性的权限控制 242 11.9 应用开发案例六:私密数据 243 11.10 使用外部链码 248 11.10.1 外部链码构建器结构 248 11.10.2 链码安装包结构 251 11.10.3 配置Peer节点调用外部链码 252 11.10.4 外部链码编写示例 252 11.11 最佳开发实践 253 11.12 本章小结 257 第12章 Fabric配置解析 258 12.1 简介 258 12.2 Peer配置剖析 259 12.2.1 peer部分 259 12.2.2 vm部分 266 12.2.3 chaincode部分 267 12.2.4 ledger部分 267 12.2.5 operations部分 268 12.2.6 metrics部分 268 12.3 Orderer配置剖析 269 12.4 生成组织身份 272 12.5 通道配置文件 277 12.6 管理通道配置 284 12.7 转换网络配置 294 12.8 本章小结 298 第13章 身份证书管理 299 13.1 简介 299 13.2 安装服务端和客户端 300 13.2.1 本地编译 300 13.2.2 获取和使用Docker镜像 301 13.3 启动CA服务 302 13.4 服务端命令剖析 304 13.4.1 全局命令参数 304 13.4.2 init命令 307 13.4.3 start命令 307 13.5 服务端RESTful API 307 13.6 服务端配置文件解析 310 13.7 与服务端进行交互 316 13.8 客户端命令剖析 317 13.8.1 全局命令参数 318 13.8.2 affiliation命令 320 13.8.3 enroll命令 320 13.8.4 gencrl命令 321 13.8.5 gencsr命令 322 13.8.6 getcacert和getcainfo命令 322 13.8.7 identity命令 322 13.8.8 reenroll命令 322 13.8.9 register命令 323 13.8.10 revoke命令 323 13.9 客户端配置文件解析 324 13.10 生产环境部署 325 13.11 本章小结 327 进阶篇 第14章 Fabric架构与设计 330 14.1 整体架构概览 330 14.2 核心概念与组件 333 14.2.1 网络层相关组件 334 14.2.2 共识机制相关组件 337 14.2.3 权限管理相关组件 338 14.2.4 业务层相关组件 339 14.3 消息协议 345 14.3.1 消息结构 345 14.3.2 客户端访问Peer节点 346 14.3.3 客户端、Peer节点访问Orderer 348 14.3.4 链码和Peer节点交互 348 14.3.5 Peer节点之间Gossip交互 349 14.4 权限策略和访问控制 352 14.4.1 应用场景 353 14.4.2 身份证书 354 14.4.3 身份集合 354 14.4.4 权限策略的实现 355 14.4.5 通道策略 359 14.4.6 通道访问控制 360 14.4.7 背书策略 362 14.4.8 基于证书属性的链码访问控制 364 14.4.9 实例化策略 365 14.5 隐私保护 365 14.5.1 通道机制 365 14.5.2 私密数据库 366 14.5.3 加密保护 368 14.6 用户链码 369 14.6.1 基本结构 369 14.6.2 链码与Peer的交互过程 370 14.6.3 Peer侧处理 372 14.6.4 链码侧处理 373 14.7 系统链码 375 14.7.1 配置系统链码 375 14.7.2 查询系统链码 376 14.7.3 背书系统链码 376 14.7.4 验证系统链码 377 14.7.5 传统生命周期系统链码 377 14.7.6 新的生命周期系统链码 378 14.8 排序服务 379 14.8.1 gRPC服务接口 380 14.8.2 账本管理 380 14.8.3 共识插件 383 14.9 本章小结 386 第15章 Fabric Peer实现剖析 387 15.1 节点启动 387 15.2 加入通道 399 15.2.1 解析和校验请求 399 15.2.2 创建本地账本结构 401 15.2.3 创建通道结构 402 15.2.4 启动Gossip服务 404 15.2.5 注册通道结构到全局字典 410 15.3 Gossip过程 411 15.3.1 整体流程 411 15.3.2 初始化配置 412 15.3.3 初始化和启动Gossip服务 413 15.4 链码启动和初始化 419 15.4.1 整体流程 419 15.4.2 编译和启动链码 421 15.4.3 初始化链码 426 15.4.4 处理链码消息 426 15.5 背书处理 430 15.5.1 检查和校验提案 431 15.5.2 模拟执行链码调用 431 15.5.3 对结果背书并返回结果 433 15.6 提交交易结果 434 15.6.1 整体流程 436 15.6.2 提交前准备 437 15.6.3 提交过程 440 15.6.4 提交后处理 449 15.6.5 总结本地账本结构 449 15.7 本章小结 451 第16章 Fabric Orderer实现剖析 452 16.1 核心工作过程 452 16.1.1 工作原理 452 16.1.2 核心共识过程 453 16.1.3 分块决策 455 16.2 排序服务启动 455 16.3 Broadcast调用 466 16.3.1 整体流程 466 16.3.2 解析消息 468 16.3.3 处理普通交易消息 469 16.3.4 处理配置交易消息 472 16.4 构造本地区块 475 16.4.1 整体流程 475 16.4.2 成为Leader后的处理 477 16.4.3 成为Follower后的处理 477 16.4.4 主共识循环 478 16.4.5 请求应答协程逻辑 483 16.5 Deliver调用 484 16.5.1 整体流程 485 16.5.2 解析消息 488 16.5.3 检查访问权限 489 16.5.4 计算区块范围 489 16.5.5 发送区块 490 16.5.6 返回响应 490 16.6 本章小结 490 第17章 区块链服务平台 491 17.1 简介 491 17.2 IBM区块链服务 492 17.3 甲骨文区块链服务 493 17.4 腾讯云区块链服务平台 494 17.5 阿里云区块链服务平台 495 17.6 百度超级链服务平台 497 17.7 纸贵科技Z-BaaS区块链服务平台 499 17.8 超级账本Cello项目 500 17.9 本章小结 502 附录 附录A 术语 504 附录B 常见问题 508 附录C 参考资源链接 511 ---------------------------精通区块链编程:加密货币原理、方法和应用开发(原书第2版)--------------------------- 前言1 第1章 比特币介绍9 1.1 比特币是什么9 1.2 比特币历史11 1.3 比特币的使用、用户及用户场景12 1.4 入门13 1.4.1 选择比特币钱包13 1.4.2 快速入门15 1.4.3 获取比特币17 1.4.4 查询比特币当前价格18 1.4.5 发送和接收比特币18 第2章 比特币的工作原理21 2.1 交易、区块、挖矿和区块链21 2.1.1 比特币概述21 2.1.2 购买一杯咖啡22 2.2 比特币交易24 2.2.1 交易输入和输出24 2.2.2 交易链25 2.2.3 找零25 2.2.4 常见的交易形式26 2.3 交易的构建27 2.3.1 获取正确的输入27 2.3.2 创建交易输出29 2.3.3 将交易加入账簿30 2.4 比特币挖矿31 2.5 在区块中挖掘交易32 2.6 消费交易33 第3章 比特币核心客户端:参考实现35 3.1 比特币开发环境36 3.2 从源码编译比特币核心36 3.2.1 选择比特币核心版本37 3.2.2 配置比特币核心生成38 3.2.3 生成比特币核心可执行文件40 3.3 运行比特币核心节点41 3.3.1 首次运行比特币核心42 3.3.2 配置比特币核心节点43 3.4 比特币核心客户端应用程序编程接口(API)46 3.4.1 获得比特币核心客户端状态信息47 3.4.2 探究和解码交易48 3.4.3 探究区块50 3.4.4 使用比特币核心的编程接口51 3.5 其他替代客户端、库和工具包54 3.5.1 C/C++类54 3.5.2 JavaScript类54 3.5.3 Java类54 3.5.4 Python类54 3.5.5 Ruby类55 3.5.6 Go类55 3.5.7 Rust类55 3.5.8 C#类55 3.5.9 Objective-C类55 第4章 密钥和地址56 4.1 简介56 4.1.1 公钥密码学和加密货币57 4.1.2 私钥和公钥58 4.1.3 私钥58 4.1.4 公钥60 4.1.5 椭圆曲线密码学60 4.1.6 创建公钥63 4.2 比特币地址64 4.2.1 Base58和Base58Check编码66 4.2.2 密钥的格式69 4.3 用Python实现密钥和比特币地址74 4.4 高级密钥和地址78 4.4.1 加密私钥(BIP-38)78 4.4.2 P2SH和多重签名地址79 4.4.3 靓号地址80 4.4.4 纸钱包85 第5章 钱包88 5.1 钱包技术概述88 5.1.1 非确定性(随机)钱包89 5.1.2 确定性(种子)钱包90 5.1.3 分层确定性钱包(BIP-32/BIP-44)90 5.1.4 种子和助记词(BIP-39)91 5.1.5 钱包最佳实践91 5.1.6 使用比特币钱包92 5.2 钱包技术细节93 5.2.1 助记词编码标准(BIP-39)93 5.2.2 从种子中创造HD钱包99 5.2.3在网店中使用扩展公钥103 第6章 交易108 6.1 简介108 6.2 交易细节108 6.3 交易的输出和输入110 6.3.1 交易输出111 6.3.2 交易输入113 6.3.3 交易费117 6.3.4 把交易费加到交易中118 6.4 交易脚本和脚本语言120 6.4.1 非图灵完备性121 6.4.2 无状态验证121 6.4.3 脚本构建(锁定与解锁)121 6.4.4 P2PKH124 6.5 数字签名(ECDSA)126 6.5.1 数字签名如何工作127 6.5.2 验证签名128 6.5.3 签名散列类型(SIGHASH)129 6.5.4 ECDSA数学131 6.5.5 随机性在签名中的重要性132 6.6 比特币地址、余额和其他摘要133 第7章 高级交易及脚本136 7.1 简介136 7.2多重签名136 7.3 P2SH138 7.3.1 P2SH地址140 7.3.2 P2SH的优点140 7.3.3赎回脚本和标准确认141 7.4 数据记录输出(RETURN操作符)141 7.5时间锁143 7.5.1交易锁定时间143 7.5.2检查锁定时间验证144 7.5.3相对时间锁146 7.5.4 带nSequence的相对时间锁146 7.5.5 带CSV的相对时间锁147 7.5.6 过去中位时间148 7.5.7针对费用狙击的时间锁149 7.6 具有条件控制的脚本(条件语句)149 7.6.1带有VERIFY操作码的条件语句150 7.6.2 在脚本中使用流控制151 7.7复杂的脚本示例153 第8章 比特币网络155 8.1 点对点网络架构155 8.2 节点类型和角色156 8.3 扩展比特币网络158 8.4 比特币中继网络158 8.5 网络发现160 8.6 全节点163 8.7 交换“库存清单”164 8.8 简易支付验证(SPV)节点165 8.9 Bloom过滤器168 8.10 SPV节点如何使用Bloom过滤器171 8.11 SPV节点和隐私172 8.12 加密与认证连接173 8.12.1 Tor传输173 8.12.2 P2P认证和加密174 8.13 交易池174 第9章 区块链176 9.1 简介176 9.2 区块结构177 9.3 区块头177 9.4 区块标识符:区块头散列值和区块高度178 9.5创世区块179 9.6 链接区块链中的区块180 9.7 默克尔树182 9.8 默克尔树和简单支付验证186 9.9 比特币的测试链187 9.9.1 testnet—比特币的试验场187 9.9.2 segnet—隔离见证测试网189 9.9.3 regtest—本地区块链189 9.10 使用测试区块链进行开发190 第10章 挖矿和共识191 10.1 简介191 10.2 去中心化共识194 10.3 交易的独立校验195 10.4 挖矿节点196 10.5 打包交易至区块197 10.5.1 创币交易198 10.5.2 创币奖励与矿工费199 10.5.3 创币交易的结构201 10.5.4 创币交易数据202 10.6 构造区块头203 10.7 挖掘区块205 10.7.1 工作量证明算法205 10.7.2 难度目标值表示210 10.7.3 重定目标实现调整难度211 10.8 成功挖出区块213 10.9 验证新区块214 10.10 区块链的组装与选择214 10.11 挖矿和算力竞争221 10.11.1 随机数升位方案223 10.11.2 矿池223 10.12 共识攻击226 10.13 改变共识规则229 10.13.1 硬分叉229 10.13.2 硬分叉:软件、网络、挖矿和链230 10.13.3 分离矿工和难度231 10.13.4 有争议的硬分叉232 10.13.5 软分叉232 10.13.6 对软分叉的批评234 10.14 使用区块版本发出软分叉信令234 10.14.1 BIP-34信令和激活234 10.14.2 BIP-9信令和激活235 10.15 共识软件开发237 第11章 比特币的安全239 11.1 安全原则239 11.1.2 安全地开发比特币系统240 11.1.3 信任根241 11.2 用户安全最佳实践241 11.2.1 比特币物理存储242 11.2.2 硬件钱包242 11.2.3 平衡风险243 11.2.4 分散风险243 11.2.5 多重签名和治理243 11.2.6 生存能力243 11.3 结论244 第12章 比特币应用245 12.1 简介245 12.2 基础模块(要素)245 12.3 源于基础模块的应用247 12.4 染色币248 12.4.1 使用染色币249 12.4.2 发行染色币249 12.4.3 染色币交易249 12.5 合约币252 12.6 支付通道和状态通道253 12.6.1 状态通道基本概念和术语254 12.6.2 简单支付通道示例254 12.6.3 制造无须信任的通道257 12.6.4 非对称可撤销承诺260 12.6.5 散列时间锁合约263 12.7 路由支付通道(闪电网络)264 12.7.1 闪电网络示例264 12.7.2 闪电网络传输和路由267 12.7.3 闪电网络优势269 12.8 结论270 附录A 比特币白皮书271 附录B 交易脚本语言操作符、常量和符号282 附录C 比特币改进建议287 附录D 隔离见证296 附录E Bitcore308 附录F pycoin库、实用秘钥及交易程序311 附录G 比特币浏览器命令320 |