第1章 区块链入门 1
1.1 区块链技术的发展 1
1.2 分布式系统 5
1.3 区块链和比特币的历史 7
1.3.1 电子现金 7
1.3.2 区块链 9
1.4 区块链定义和相关术语 9
1.4.1 点对点 9
1.4.2 分布式账本 10
1.4.3 加密安全 10
1.4.4 仅可追加 10
1.4.5 可通过共识更新 11
1.5 区块链的通用元素 14
1.5.1 区块链的工作原理 16
1.5.2 区块链累积区块的方式 16
1.5.3 区块链技术的优点和局限性 17
1.5.4 区块链技术的层次 18
1.5.5 区块链的特性 20
1.6 区块链的类型 22
1.6.1 分布式账本 23
1.6.2 分布式账本技术 23
1.6.3 公共区块链 23
1.6.4 私有区块链 24
1.6.5 半私有区块链 24
1.6.6 侧链 24
1.6.7 许可型账本 25
1.6.8 共享账本 25
1.6.9 完全私有和专有区块链 25
1.6.10 代币化区块链 25
1.6.11 无代币区块链 26
1.7 共识 26
1.7.1 共识机制 26
1.7.2 共识机制的类型 27
1.7.3 区块链中的共识 27
1.8 CAP定理和区块链 30
1.9 小结 31
第2章 去中心化 33
2.1 去中心化的意义 33
2.2 去中心化的方法 35
2.2.1 去中介 35
2.2.2 竞争驱动的去中心化 36
2.3 去中心化的途径 38
2.3.1 去中心化的思路 38
2.3.2 去中心化框架示例 39
2.4 生态系统的去中心化 39
2.4.1 存储 39
2.4.2 通信 40
2.4.3 计算能力和去中心化 41
2.5 智能合约 43
2.6 去中心化组织 43
2.6.1 去中心化自治组织 43
2.6.2 去中心化自治公司 44
2.6.3 去中心化自治社团 44
2.6.4 去中心化应用程序 45
2.7 去中心化应用程序 45
2.7.1 去中心化应用程序的要求 45
2.7.2 去中心化应用程序和移动App的区别 46
2.7.3 KYC链 46
2.7.4 OpenBazaar 46
2.7.5 Lazooz 47
2.8 去中心化的平台 47
2.8.1 以太坊 47
2.8.2 MaidSafe 48
2.8.3 Lisk 48
2.9 小结 48
第3章 对称密码学 49
3.1 使用OpenSSL命令行 49
3.2 密码学简介 50
3.3 密码学的数学基础 51
3.3.1 集合 51
3.3.2 群 51
3.3.3 域 51
3.3.4 有限域 52
3.3.5 阶 52
3.3.6 阿贝尔群 52
3.3.7 质数域 52
3.3.8 环 52
3.3.9 循环群 52
3.3.10 模运算 53
3.4 密码学模型 53
3.5 现代信息安全的基本要求 54
3.5.1 保密性 54
3.5.2 完整性 54
3.5.3 可认证性 54
3.5.4 不可否认性 56
3.5.5 可追责性 56
3.6 密码学原语 57
3.7 对称密码学介绍 58
3.7.1 流密码 58
3.7.2 分组密码 59
3.8 分组密码的加密模式 61
3.8.1 电子密码本 61
3.8.2 密码块链接 62
3.8.3 计数器模式 62
3.9 密钥流生成模式 63
3.9.1 消息认证模式 63
3.9.2 加密哈希模式 64
3.10 数据加密标准 64
3.10.1 高级加密标准 64
3.10.2 AES工作原理 65
3.11 小结 68
第4章 公钥密码学 69
4.1 非对称密码学 70
4.1.1 整数分解 72
4.1.2 离散对数 72
4.1.3 椭圆曲线 73
4.2 公钥和私钥 73
4.3 RSA算法原理 74
4.3.1 RSA算法步骤 74
4.3.2 使用RSA进行加密和解密 75
4.4 椭圆曲线密码学 75
4.4.1 ECC背后的数学 75
4.4.2 点加法 76
4.4.3 点加倍 78
4.5 ECC中的离散对数问题 80
4.6 在OpenSSL中使用RSA算法 82
4.6.1 RSA公钥和私钥对 82
4.6.2 加密与解密 85
4.7 在OpenSSL中使用ECC算法 86
4.7.1 查看ECC标准 86
4.7.2 生成私钥 87
4.8 哈希函数的属性 89
4.8.1 将任意消息压缩为固定长度的摘要 89
4.8.2 易于计算 89
4.8.3 原像抗性 90
4.8.4 次原像抗性 90
4.8.5 抗碰撞性 90
4.9 消息摘要算法 91
4.10 安全哈希算法 91
4.11 安全哈希算法的设计 92
4.11.1 SHA-256的设计 93
4.11.2 SHA-3(Keccak)的设计 94
4.12 哈希函数的OpenSSL示例 95
4.13 消息认证码 95
4.13.1 使用分组密码的MAC 95
4.13.2 基于哈希的MAC 96
4.14 默克尔树 97
4.15 帕特里夏树 97
4.16 分布式哈希表 98
4.17 数字签名 99
4.17.1 RSA数字签名算法 99
4.17.2 先签名后加密 100
4.17.3 先加密后签名 100
4.17.4 椭圆曲线数字签名算法 101
4.17.5 使用OpenSSL生成数字签名 102
4.17.6 使用OpenSSL的ECDSA 103
4.18 同态加密 105
4.19 签密 106
4.20 零知识证明 106
4.21 盲签名 107
4.22 编码方案 107
4.23 金融市场和交易基础知识 107
4.23.1 金融市场 108
4.23.2 交易 108
4.23.3 交易所 109
4.23.4 订单和订单属性 109
4.23.5 订单管理和路由系统 109
4.23.6 交易票证 110
4.23.7 基础工具 110
4.23.8 金融工具的一般属性 110
4.23.9 经济特征 111
4.23.10 销售 111
4.23.11 交易对手 111
4.23.12 交易生命周期 111
4.23.13 庄家 112
4.23.14 操纵市场 112
4.24 小结 113
第5章 比特币详解 115
5.1 比特币的由来 115
5.1.1 比特币背后的理论基础 116
5.1.2 比特币的出现和监管争议 118
5.1.3 比特币的定义 120
5.1.4 从用户角度观察比特币 121
5.1.5 向某人付款 121
5.2 数字密钥和地址 127
5.2.1 比特币中的私钥 127
5.2.2 比特币中的公钥 128
5.2.3 比特币中的地址 129
5.2.4 Base58Check编码 130
5.2.5 虚荣地址 131
5.2.6 多签名地址 132
5.3 比特币交易 132
5.3.1 交易生命周期 132
5.3.2 交易费 133
5.3.3 交易池 133
5.3.4 交易数据结构 133
5.3.5 交易类型 137
5.3.6 币基交易 140
5.3.7 合约 140
5.3.8 交易验证 141
5.3.9 交易延展性 141
5.4 区块链的结构 142
5.4.1 区块的结构 142
5.4.2 区块标头的结构 143
5.4.3 创世区块 145
5.5 挖矿 147
5.5.1 矿工的任务 148
5.5.2 挖矿奖励 149
5.5.3 工作量证明 149
5.5.4 挖矿算法 149
5.5.5 哈希率 152
5.5.6 挖矿系统 153
5.5.7 矿池 155
5.6 小结 158
第6章 比特币网络和支付 159
6.1 比特币网络 159
6.1.1 比特币网络的节点 159
6.1.2 比特币网络常用协议消息 160
6.1.3 Wireshark 164
6.1.4 BIP 37和布隆过滤器 166
6.2 比特币钱包 167
6.2.1 非确定性钱包 168
6.2.2 确定性钱包 168
6.2.3 分层确定性钱包 168
6.2.4 脑钱包 169
6.2.5 纸钱包 169
6.2.6 硬件钱包 170
6.2.7 在线钱包 170
6.2.8 移动钱包 170
6.3 比特币支付 171
6.4 比特币的创新 173
6.4.1 比特币改进提案 174
6.4.2 高级协议 174
6.4.3 隔离见证 175
6.4.4 Bitcoin Cash 175
6.4.5 Bitcoin Unlimited 176
6.4.6 Bitcoin Gold 176
6.4.7 比特币投资和买卖比特币 177
6.5 小结 178
第7章 比特币客户端和API 179
7.1 比特币客户端的安装 179
7.2 Bitcoin Core客户端的类型 180
7.2.1 Bitcoind 180
7.2.2 Bitcoin-cli 180
7.2.3 Bitcoin-qt 181
7.3 设置比特币网络节点 181
7.4 设置源代码 182
7.5 设置bitcoin.conf 183
7.6 在测试网中启动节点 183
7.7 以regtest模式启动节点 184
7.8 使用Bitcoin-cli进行实验 184
7.9 比特币编程和命令行接口 186
7.10 小结 187
第8章 山寨币 189
8.1 山寨币现状 190
8.1.1 山寨币的由来 190
8.1.2 吸引用户的方法 190
8.1.3 山寨币的交易 191
8.2 工作量证明方案的替代方法 193
8.2.1 存储证明 195
8.2.2 权益证明 196
8.3 各种权益类型 197
8.3.1 币龄证明 197
8.3.2 存款证明 197
8.3.3 燃烧证明 197
8.3.4 活动证明 197
8.4 不可外包的难题 198
8.5 难度目标重新调整算法 198
8.5.1 Kimoto重力井 199
8.5.2 黑暗重力波 200
8.5.3 DigiShield 200
8.5.4 多间隔难度调整系统 201
8.6 比特币的局限性 201
8.6.1 隐私和匿名性 202
8.6.2 比特币之上的扩展协议 203
8.7 开发山寨币 206
8.7.1 共识算法 207
8.7.2 哈希算法 207
8.7.3 难度目标重新调整算法 207
8.7.4 块间时间 207
8.7.5 区块奖励 208
8.7.6 奖励减半率 208
8.7.7 区块大小和交易大小 208
8.7.8 利率 208
8.7.9 币龄 208
8.7.10 硬币总供应 208
8.8 域名币 209
8.8.1 Zooko三角形 209
8.8.2 合并挖矿 210
8.8.3 域名币交易 211
8.8.4 获取域名币 211
8.8.5 生成域名币记录 214
8.9 莱特币 216
8.9.1 Scrypt函数 216
8.9.2 莱特币交易 218
8.9.3 莱特币挖矿 219
8.9.4 软件源代码和钱包 219
8.10 质数币 220
8.10.1 质数币交易 220
8.10.2 质数币挖矿指南 221
8.11 Zcash 223
8.11.1 Zcash交易 225
8.11.2 采矿指南 226
8.11.3 地址生成 228
8.11.4 GPU挖矿 229
8.11.5 下载并编译nheqminer 230
8.11.6 首次代币发行 231
8.11.7 ERC20代币接口 232
8.12 小结 233
第9章 智能合约 235
9.1 智能合约的历史 235
9.2 智能合约的定义 236
9.3 李嘉图合约 238
9.4 智能合约模板 241
9.5 Oracle 243
9.6 智能Oracle 245
9.7 在区块链上部署智能合约 245
9.8 DAO黑客入侵事件 247
9.9 小结 247
第10章 以太坊入门 249
10.1 以太坊简介 249
10.1.1 黄皮书 250
10.1.2 有用的数学符号 251
10.1.3 以太坊区块链 251
10.2 从用户角度观察以太坊 252
10.3 以太坊网络 256
10.3.1 主网 256
10.3.2 测试网络 256
10.3.3 私有网络 256
10.4 以太坊生态系统的组成部分 257
10.4.1 密钥和地址 258
10.4.2 账户 259
10.4.3 账户类型 259
10.5 交易和消息 260
10.5.1 合约创建交易 263
10.5.2 消息调用交易 264
10.5.3 消息 264
10.5.4 调用 266
10.5.5 交易验证和执行 266
10.5.6 交易子状态 266
10.6 以太坊区块链中的状态存储 267
10.6.1 世界状态 267
10.6.2 账户状态 267
10.6.3 交易收据 269
10.7 以太币 270
10.8 以太坊虚拟机 271
10.8.1 执行环境 273
10.8.2 机器状态 275
10.8.3 迭代器函数 275
10.9 智能合约 276
10.10 本地合约 276
10.11 小结 278
第11章 深入了解以太坊 279
11.1 以太坊编程语言和操作码 279
11.1.1 运行时字节码 280
11.1.2 操作码及其含义 281
11.1.3 算术运算 281
11.1.4 逻辑运算 282
11.1.5 加密运算 282
11.1.6 环境信息 282
11.1.7 区块信息 283
11.1.8 堆栈、内存、存储和流操作 284
11.1.9 入栈操作 284
11.1.10 复制操作 285
11.1.11 交换操作 285
11.1.12 日志操作 285
11.1.13 系统操作 286
11.2 区块和区块链 287
11.2.1 区块标头 287
11.2.2 创世区块 289
11.2.3 区块验证机制 290
11.2.4 区块的终确定 290
11.2.5 区块难度 291
11.2.6 燃料 292
11.2.7 费用计划 293
11.2.8 区块链中的分叉 293
11.3 节点和矿工 294
11.3.1 共识机制 295
11.3.2 Ethash算法 296
11.3.3 CPU挖矿 297
11.3.4 GPU挖矿 298
11.3.5 基准测试 299
11.3.6 挖矿设备 299
11.3.7 矿池 301
11.4 钱包和客户端软件 301
11.4.1 Geth 302
11.4.2 Eth 302
11.4.3 Pyethapp 302
11.4.4 Parity 302
11.4.5 轻客户端 302
11.4.6 安装 303
11.4.7 Eth安装 303
11.4.8 Mist浏览器 303
11.4.9 Geth客户端应用 306
11.4.10 Geth控制台 306
11.4.11 用比特币为账户注资 307
11.4.12 Parity安装 308
11.4.13 使用Parity命令行创建账户 311
11.5 API、工具和DApp 311
11.5.1 在以太坊上开发的应用程序 311
11.5.2 工具 311
11.6 支持协议 312
11.6.1 Whisper 312
11.6.2 Swarm 312
11.7 可伸缩性、安全性和其他挑战 314
11.8 交易和投资 314
11.9 小结 315
第12章 以太坊开发环境 317
12.1 测试网络 318
12.2 建立以太坊私有网络 319
12.2.1 网络ID 319
12.2.2 创世文件 319
12.2.3 数据目录 321
12.2.4 标志及其含义 321
12.2.5 静态节点 322
12.3 启动私有网络 322
12.3.1 在私有网络上运行Mist 327
12.3.2 使用Mist部署合约 329
12.3.3 私有网络/本地以太坊的区块浏览器 333
12.4 小结 335
第13章 开发工具和框架 337
13.1 以太坊开发生态系统分类 337
13.1.1 语言 339
13.1.2 编译器 339
13.2 Solidity编译器 339
13.2.1 在Linux上安装 339
13.2.2 在macOS上安装 340
13.3 集成开发环境 342
13.4 工具和库 344
13.4.1 Node 344
13.4.2 EthereumJS 344
13.4.3 Ganache 346
13.4.4 MetaMask 346
13.4.5 Truffle 348
13.5 合约开发与部署 349
13.5.1 编写 350
13.5.2 测试 351
13.6 Solidity语言 351
13.6.1 类型 351
13.6.2 值类型 351
13.6.3 布尔类型 352
13.6.4 整型 352
13.6.5 地址 353
13.6.6 常量 354
13.6.7 枚举 354
13.6.8 函数类型 354
13.6.9 引用类型 355
13.6.10 全局变量 356
13.6.11 控制结构 356
13.6.12 事件 358
13.6.13 继承 358
13.6.14 库 359
13.6.15 函数 360
13.6.16 Solidity源代码文件的组件 363
13.7 小结 364
第14章 Web3详解 365
14.1 使用Web3库 365
14.1.1 合约部署 366
14.1.2 POST请求 372
14.1.3 HTML和JavaScript前端 373
14.2 安装和使用Web3.js 374
14.2.1 示例 375
14.2.2 创建一个Web3对象 377
14.2.3 通过调用任何Web3方法检查可用性 377
14.2.4 合约函数 378
14.3 开发框架 380
14.4 Truffle应用示例 381
14.4.1 初始化Truffle 381
14.4.2 与合约的交互 387
14.4.3 另一个示例 389
14.4.4 示例项目—思想证明 393
14.5 关于Oracle 404
14.6 去中心化存储 405
14.6.1 安装和使用IPFS 406
14.6.2 关于Swarm协议 408
14.6.3 分布式账本 409
14.7 小结 409
第15章 超级账本 411
15.1 Hyperledger项目 411
15.1.1 Fabric 412
15.1.2 Sawtooth Lake 412
15.1.3 Iroha 413
15.1.4 Burrow 413
15.1.5 Indy 413
15.1.6 Explorer 414
15.1.7 Cello 414
15.1.8 Composer 414
15.1.9 Quilt 415
15.2 Hyperledger即协议 415
15.3 参考架构 415
15.4 Hyperledger Fabric的要求和设计目标 418
15.4.1 模块化方法 418
15.4.2 隐私性和机密性 418
15.4.3 可伸缩性 419
15.4.4 确定性交易 419
15.4.5 身份识别 419
15.4.6 可审核性 419
15.4.7 互通性 419
15.4.8 可移植性 420
15.4.9 丰富的数据查询 420
15.5 关于Fabric 420
15.5.1 Hyperledger Fabric 421
15.5.2 成员资格服务 421
15.5.3 区块链服务 422
15.5.4 共识服务 422
15.6 分布式账本 423
15.6.1 点对点协议 424
15.6.2 账本存储 425
15.6.3 链码服务 425
15.6.4 事件 426
15.6.5 API和CLI 426
15.7 Fabric组件 426
15.7.1 对等者 426
15.7.2 排序者节点 427
15.7.3 客户端 427
15.7.4 通道 427
15.7.5 世界状态数据库 427
15.7.6 交易 427
15.7.7 成员资格服务提供商 427
15.7.8 智能合约 428
15.7.9 加密服务提供商 428
15.8 区块链上的应用 428
15.8.1 链码实现 428
15.8.2 应用模式 430
15.8.3 Hyperledger Fabric中的共识 431
15.8.4 Hyperledger Fabric中的交易生命周期 431
15.9 Sawtooth Lake 434
15.9.1 消逝时间量证明 434
15.9.2 交易族 435
15.9.3 Sawtooth Lake中的共识 437
15.9.4 设置Sawtooth Lake开发环境 437
15.10 Corda 440
15.10.1 状态对象 441
15.10.2 交易 442
15.10.3 共识 442
15.10.4 流 443
15.11 Corda组件 443
15.11.1 节点 443
15.11.2 许可服务 444
15.11.3 网络映射服务 444
15.11.4 公证人服务 444
15.11.5 Oracle服务 445
15.11.6 交易 445
15.11.7 保管库 446
15.11.8 CorDapp 446
15.11.9 设置Corda开发环境 446
15.12 小结 448
第16章 替代区块链 449
16.1 Kadena 450
16.1.1 可伸缩性和机密性 450
16.1.2 Kadena的共识机制 450
16.1.3 Pact语言 451
16.1.4 Kadena区块链 454
16.2 Ripple 454
16.2.1 节点 455
16.2.2 共识 456
16.2.3 组件 457
16.2.4 交易 457
16.2.5 Interledger 459
16.3 Stellar 460
16.4 Rootstock 461
16.4.1 侧链 462
16.4.2 驱动链 462
16.5 Quorum 463
16.5.1 Transaction Manager 463
16.5.2 Crypto Enclave 463
16.5.3 QuorumChain 463
16.5.4 Network Manager 463
16.6 Tezos 464
16.7 Storj 465
16.8 MaidSafe 466
16.9 BigchainDB 467
16.10 MultiChain 467
16.11 Tendermint 467
16.11.1 Tendermint Core 468
16.11.2 Tendermint套接字协议 468
16.12 平台和框架 469
16.12.1 Eris平台 469
16.12.2 eris:db许可区块链客户端 470
16.13 小结 471
第17章 区块链—代币之外的应用 473
17.1 物联网 473
17.1.1 物理对象层 475
17.1.2 设备层 475
17.1.3 网络层 476
17.1.4 管理层 476
17.1.5 应用层 476
17.2 物联网区块链实验 480
17.2.1 下载和安装Raspbian操作系统 481
17.2.2 下载和安装Geth客户端 481
17.2.3 创建创世区块 482
17.2.4 个节点的设置 484
17.2.5 Raspberry Pi节点设置 484
17.2.6 安装库和依赖项 486
17.2.7 硬件组件介绍 488
17.2.8 电路 489
17.2.9 开发智能合约 489
17.2.10 部署智能合约 493
17.2.11 使用JavaScript代码交互 494
17.3 政府治理 496
17.3.1 边境管制 496
17.3.2 投票 498
17.3.3 公民身份证明(身份证) 499
17.3.4 其他事项 500
17.4 医疗卫生 500
17.5 金融 501
17.5.1 保险 501
17.5.2 交易后结算 502
17.5.3 预防金融犯罪 503
17.6 数字媒体 503
17.7 小结 504
第18章 可伸缩性和其他挑战 505
18.1 可伸缩性 505
18.1.1 网络平面 506
18.1.2 共识平面 506
18.1.3 存储平面 506
18.1.4 视图平面 507
18.1.5 区块大小增加 507
18.1.6 减少区块间隔 508
18.1.7 可逆布隆查找表 508
18.1.8 分片 508
18.1.9 状态通道 509
18.1.10 私有区块链 510
18.1.11 权益证明 510
18.2 侧链 510
18.2.1 子链 511
18.2.2 树链 511
18.2.3 加快传播时间 511
18.2.4 Bitcoin-NG 512
18.2.5 Plasma 513
18.3 隐私保护 513
18.3.1 不可区分混淆 514
18.3.2 同态加密 514
18.3.3 零知识证明 515
18.3.4 状态频道 515
18.3.5 安全多方计算 516
18.3.6 使用硬件提供机密性 516
18.3.7 CoinJoin 516
18.3.8 保密交易 517
18.3.9 MimbleWimble 517
18.4 安全性 518
18.4.1 智能合约安全性 518
18.4.2 形式验证和分析 520
18.4.3 Oyente工具 522
18.5 小结 524
第19章 当前发展和未来展望 527
19.1 区块链技术发展的新兴趋势 527
19.1.1 专用区块链 527
19.1.2 企业级区块链 528
19.1.3 私有区块链 528
19.1.4 初创企业 528
19.1.5 浓厚的研究兴趣 529
19.1.6 标准化 530
19.1.7 增强功能 530
19.1.8 现实世界中的实现 531
19.1.9 联盟 532
19.1.10 应对技术挑战 532
19.1.11 融合发展 532
19.1.12 区块链技术教育 533
19.1.13 就业机会 533
19.1.14 加密经济学 533
19.1.15 密码学研究 534
19.1.16 新的编程语言 534
19.1.17 硬件研发 534
19.1.18 形式验证方法和安全性研究 535
19.1.19 区块链的替代品 535
19.1.20 互操作性的实现 535
19.1.21 区块链即服务 536
19.1.22 减少耗电的努力 536
19.2 区块链技术发展面临的其他挑战 536
19.2.1 法规监管 536
19.2.2 负面影响 537
19.3 区块链研究主题 539
19.3.1 智能合约 539
19.3.2 集中化问题 539
19.3.3 加密功能的局限性 539
19.3.4 共识算法 540
19.3.5 可伸缩性 540
19.3.6 代码混淆 540
19.4 区块链项目简介 540
19.4.1 以太坊上的Zcash 540
19.4.2 CollCo 541
19.4.3 Cello 541
19.4.4 Qtum 541
19.4.5 Bitcoin-NG 541
19.4.6 Solidus 542
19.4.7 Hawk 542
19.4.8 Town-Crier 542
19.4.9 SETLCoin 542
19.4.10 TEEChan 542
19.4.11 Falcon 543
19.4.12 Bletchley 543
19.4.13 Casper 544
19.5 区块链开发工具简介 544
19.5.1 Microsoft Visual Studio的Solidity扩展 544
19.5.2 MetaMask 544
19.5.3 Stratis 545
19.5.4 Embark 545
19.5.5 DAPPLE 545
19.5.6 Meteor 546
19.5.7 uPort 546
19.5.8 INFURA 546
19.6 与其他行业的融合发展 546
19.7 对区块链技术未来发展的预测 547
19.8 小结 549