第1章 区块链入门基础 1
1.1 初识比特币与区块链 1
1.1.1 比特币发展简史 1
1.1.2 比特币的定义 4
1.1.3 比特币的发行 5
1.1.4 比特币与区块链的关系 7
1.2 区块链的起源思想 7
1.2.1 去中心化 7
1.2.2 区块链雏形 8
1.2.3 区块链家族 9
1.3 区块链的本质及特性 10
1.3.1 区块与区块链 10
1.3.2 区块链的本质 11
1.3.3 区块链中的核心技术 13
1.3.4 区块链模型 13
1.3.5 目前区块链几大知名产品的编程语言 14
1.3.6 区块链分类 15
1.4 区块链技术的发展脉络及其对未来的影响 16
1.4.1 区块链技术的发展脉络 16
1.4.2 区块链技术对未来的影响 16
1.5 区块链的应用场景 17
1.5.1 全球最有代表性的区块链技术平台 17
1.5.2 区块链的应用领域 17
1.5.3 国外区块链的知名项目 18
1.5.4 国内企业在区块链技术上的进展 18
1.5.5 区块链的相关应用及公司 20
1.6 区块链的不足 21
1.7 参考资料 22
第2章 区块链常见问题集 23
2.1 比特币挖矿相关问题 23
2.1.1 比特币节点 23
2.1.2 挖矿、矿工、矿机、矿场、矿池 24
2.1.3 挖矿设备 25
2.1.4 算力 26
2.1.5 难度、难度目标、难度重定 26
2.1.6 区块结构 27
2.1.7 默克尔树及默克尔根 28
2.1.8 挖矿原理 28
2.2 比特币交易相关问题 30
2.2.1 比特币交易 30
2.2.2 比特币钱包 30
2.2.3 冷钱包和热钱包 31
2.2.4 全节点钱包、轻钱包 31
2.2.5 HD钱包 31
2.2.6 比特币钱包随机生成私钥的安全性 32
2.2.7 私钥的格式 33
2.2.8 比特币地址 34
2.2.9 私钥、公钥、比特币地址之间的关系 35
2.2.10 UTXO 35
2.2.11 比特币交易的找零机制 35
2.2.12 发出交易到矿工打包的步骤 36
2.2.13 比特币交易验证过程 36
2.2.14 双重支付 36
2.2.15 最长链及六次交易确认 37
2.3 区块链其他相关问题 37
2.3.1 中本聪 37
2.3.2 图灵完备 38
2.3.3 比特币与图灵完备性 38
2.3.4 P2P网络 38
2.3.5 LevelDB 39
2.3.6 共识机制 39
2.3.7 比特币扩容 40
2.3.8 隔离见证 40
2.3.9 区块链分叉 40
2.3.10 BIP 41
2.3.11 IPFS 41
2.3.12 Token与积分的区别 41
2.3.13 对区块链存在的误解 42
2.3.14 区块链生态系 42
2.3.15 区块链与编程语言的关系 43
2.4 参考资料 43
第3章 区块链骨骼——密码学算法 44
3.1 密码学家族 44
3.2 哈希算法 45
3.2.1 Hash的定义 45
3.2.2 流行的Hash算法 46
3.2.3 Hash与加密解密的区别 48
3.3 对称加密算法 50
3.3.1 概述 50
3.3.2 DES和3DES算法 51
3.3.3 AES算法 52
3.4 非对称加密算法 52
3.4.1 非对称加密算法发展史 52
3.4.2 非对称加密的概念 53
3.4.3 非对称加密与对称加密的区别 53
3.4.4 RSA加密算法 54
3.4.5 椭圆曲线加密算法 54
3.4.6 数字签名的概念 55
3.4.7 数字签名应该满足的要求 57
3.4.8 比特币系统中的数字签名 57
3.5 字符编码与解码 58
3.5.1 Base64编码与解码 58
3.5.2 Base64编码的步骤 58
3.5.3 Base58编码与解码 59
3.5.4 Base58编码的步骤 60
3.6 比特币地址的生成算法 61
3.6.1 生成比特币地址的理论概述 61
3.6.2 Base58Check 62
3.6.3 比特币地址的生成步骤 63
3.7 生成WIF和WIF-compressed格式私钥的步骤 64
3.8 ECDSA实现交易签名及签名验证 66
3.8.1 初步认识比特币交易 66
3.8.2 交易链 67
3.9 签名序列化 68
3.10 参考资料 70
第4章 区块链灵魂——共识算法 71
4.1 共识算法概述 71
4.1.1 分布式系统 71
4.1.2 分布式系统的一致性问题 73
4.1.3 FLP定理与CAP定理 73
4.1.4 拜占庭将军问题 74
4.1.5 共识算法的概念 78
4.2 共识算法的目的和价值 79
4.2.1 共识算法的目的 79
4.2.2 共识算法的假设条件 80
4.3 常用的共识算法 80
4.3.1 PoW算法 80
4.3.2 PoS算法 81
4.3.3 DPoS算法 83
4.3.4 PBFT算法 84
4.3.5 Paxos算法 85
4.3.6 Raft算法 85
4.3.7 共识算法总结 86
4.4 比特币挖矿原理 88
4.5 计算难度目标 88
4.6 验证挖矿结果 89
4.7 难度目标Hash值的快速算法 90
4.7.1 比特币区块bits值变化趋势 90
4.7.2 bits值与目标Hash值的规律 90
4.7.3 计算难度目标的步骤 91
4.7.4 计算挖矿难度difficulty 91
4.8 参考资料 91
第5章 比特币系统架构 93
5.1 比特币系统的整体架构 93
5.1.1 早期的比特币系统架构 93
5.1.2 目前的比特币系统架构 94
5.2 比特币系统的前端模块 95
5.2.1 钱包服务 95
5.2.2 HTTP JSON-RPC接口服务 96
5.2.3 bitcoin-cli命令行接口服务 96
5.2.4 GUI图形开发工具 96
5.3 比特币系统的后端模块 97
5.3.1 区块链管理 97
5.3.2 交易验证 98
5.3.3 共识管理 98
5.3.4 密码及数字签名 98
5.3.5 脚本引擎 98
5.3.6 P2P网络管理 99
5.3.7 数据库管理 99
5.3.8 挖矿模块 99
5.3.9 其他管理模块 100
5.4 区块链节点 101
5.4.1 节点类型 101
5.4.2 维护区块链需要优质节点 101
5.4.3 节点相关问题 102
5.5 区块链钱包 103
5.5.1 钱包的含义 103
5.5.2 钱包的类型 103
5.6 比特币核心钱包 105
5.6.1 Bitcoin Core的安装 105
5.6.2 Bitcoin Core客户端目录结构 107
5.7 bitcoin-cli命令 110
5.7.1 进入Bitcoin Core的RPC控制台 110
5.7.2 执行bitcoin-cli命令 110
5.8 bitcoind的定义 114
5.9 bitcoin-cli高级命令 115
5.10 参考资料 117
第6章 比特币交易及交易脚本 118
6.1 比特币交易的流程 118
6.1.1 比特币交易的本质 118
6.1.2 比特币交易的生命周期 119
6.1.3 比特币交易的规则 122
6.1.4 交易验证的过程 122
6.1.5 比特币交易的优先级 123
6.2 比特币交易脚本 123
6.2.1 比特币交易脚本概述 123
6.2.2 比特币交易脚本中常用的指令 124
6.2.3 简单数学运算的脚本执行过程 124
6.2.4 比特币交易的脚本执行过程 125
6.2.5 比特币交易类型(交易脚本的类型) 129
6.3 比特币交易的数据结构 130
6.3.1 比特币区块的结构 130
6.3.2 比特币交易的数据结构 131
6.4 P2PKH交易的数据解析案例 132
6.4.1 P2PKH交易的原始数据 132
6.4.2 P2PKH交易数据结构解析 134
6.4.3 P2PKH交易记录的JSON格式 137
6.5 P2PK交易的数据结构解析 140
6.5.1 P2PK交易的原始数据 140
6.5.2 P2PK交易数据结构解析 141
6.5.3 P2PK交易记录的JSON格式 143
6.6 比特币交易构造过程 145
6.6.1 在regtest模式下搭建测试私链 145
6.6.2 比特币交易流程 146
6.6.3 bitcoin-cli实现比特币交易 146
6.7 参考资料 152
第7章 以太坊原理及核心概念 153
7.1 以太坊的定义 153
7.1.1 以太坊产生的项目背景 153
7.1.2 以太坊的概念 154
7.1.3 比特币和以太坊挖矿算法的优势和劣势 154
7.1.4 以太坊出块速度快的原因 156
7.1.5 以太坊的发展历程 156
7.1.6 以太币的通货膨胀问题 157
7.2 以太坊的架构组成 158
7.2.1 以太坊的架构图 158
7.2.2 以太坊中的软件组成 159
7.2.3 学习以太坊的网站资源 160
7.3 以太坊中的核心概念 160
7.3.1 状态 160
7.3.2 账户 161
7.3.3 交易 164
7.3.4 收据 165
7.3.5 区块头 166
7.3.6 燃料 167
7.3.7 以太坊挖矿Ethash算法的原理 171
7.3.8 Keccak-256 Hash:以太坊中的Hash算法 173
7.3.9 GHOST协议 174
7.3.10 孤块和叔块 177
7.3.11 以太币 178
7.4 参考资料 179
第8章 以太坊数据存储 180
8.1 以太坊数据存储基础 180
8.1.1 以太坊数据存储概述 180
8.1.2 以太坊LevelDB中的数据格式 181
8.2 RLP 182
8.3 Trie和Patricia Trie 183
8.3.1 Trie的基本概念 183
8.3.2 传统Trie的局限 184
8.3.3 Patricia Trie 185
8.4 MPT 186
8.4.1 基本概念 186
8.4.2 以太坊中的MPT对Trie的改进 186
8.4.3 MPT中的4种节点 187
8.4.4 16进制前缀 189
8.4.5 MPT存储的3种编码格式 189
8.5 状态的存储 190
8.5.1 StateDB 190
8.5.2 结构体源码分析 191
8.5.3 状态数据的三级存储机制 192
8.5.4 状态存储设置两层缓存的原因 192
8.5.5 状态信息三层存储的完整流程 193
8.6 交易的存储 196
8.6.1 交易存储的图示 196
8.6.2 交易信息在LevelDB中的存储 196
8.7 收据的存储 197
8.7.1 收据存储的图示 197
8.7.2 收据信息在LevelDB中的存储 198
8.8 参考资料 198
第9章 以太坊开发前准备 199
9.1 使用Mist钱包 199
9.1.1 Mist钱包介绍 199
9.1.2 下载钱包 199
9.1.3 安装并进入钱包 200
9.1.4 转账 200
9.1.5 备份钱包 201
9.1.6 数据存储路径 202
9.2 主网络与测试网络 204
9.2.1 以太坊的主网络 204
9.2.2 以太坊的测试网络 205
9.3 使用MetaMask 206
9.4 搭建以太坊私链 213
9.4.1 安装客户端 213
9.4.2 新建创世区块的配置文件 213
9.4.3 配置初始状态 215
9.4.4 启动私链客户端 215
9.4.5 以太坊常用对象及其用法 216
9.4.6 调用以太坊对象的方法来查看数据 216
9.5 参考资料 219
第10章 以太坊开发智能合约 220
10.1 智能合约 221
10.1.1 智能合约的基本定义 221
10.1.2 智能合约的特点及优势 222
10.1.3 智能合约与区块链的关系 223
10.1.4 基于区块链的智能合约构建及执行步骤 223
10.1.5 智能合约应用场景 224
10.2 DApp 225
10.2.1 DApp的概念 225
10.2.2 DApp的应用领域 225
10.3 使用remix-ide开发智能合约 226
10.3.1 remix-ide简介 226
10.3.2 安装remix-ide 226
10.3.3 创建合约 227
10.3.4 选择运行环境 228
10.3.5 部署智能合约 229
10.3.6 执行合约 231
10.4 Solidity基本语法 233
10.4.1 Solidity的定义 233
10.4.2 Solidity的数据类型 233
10.4.3 Solidity的基本构成 233
10.4.4 Solidity合约文件的存储位置 234
10.5 发布ERC20标准代币 236
10.5.1 ERC20介绍 236
10.5.2 ERC20 Token协议的实现 236
10.5.3 Token合约的发布 238
10.6 web3.js的定义 243
10.6.1 web3.js简介 243
10.6.2 web3.js环境搭建 244
10.7 Truffle概述 244
10.8 参考资料 245