第1章 公链设计架构 1
1.1 概述 1
1.2 公链总体架构 2
1.3 比原链各模块功能 2
1.3.1 用户交互层 2
1.3.2 接口层 4
1.3.3 内核层 4
1.3.4 钱包层 6
1.3.5 共识层 6
1.3.6 数据存储层 7
1.3.7 P2P分布式网络 8
1.4 编译部署及应用 9
1.5 本章小结 12
第2章 交互工具 13
2.1 概述 13
2.2 bytomcli交互工具 13
2.2.1 bytomcli命令flag参数 13
2.2.2 使用bytomcli查看节点状态信息 15
2.2.3 bytomcli运行案例 16
2.3 dashboard交互工具 21
2.3.1 使用dashboard发送一笔交易 22
2.3.2 使用dashboard开启挖矿模式 22
2.4 本章小结 24
第3章 守护进程的初始化与运行 25
3.1 概述 25
3.2 bytomd守护进程初始化流程及命令参数 25
3.3 bytomd守护进程的初始化实现 27
3.3.1 Node对象 28
3.3.2 配置初始化 29
3.3.3 创建文件锁 32
3.3.4 初始化网络类型 33
3.3.5 初始化数据库(持久化存储) 35
3.3.6 初始化交易池 35
3.5.7 创建一条本地区块链 36
3.3.8 初始化本地钱包 37
3.3.9 初始化网络同步管理 37
3.3.10 初始化Pprof性能分析工具 38
3.3.11 初始化CPU挖矿功能 38
3.4 bytomd守护进程的启动方式和停止方式 39
3.5 本章小结 40
第4章 接口层 41
4.1 概述 41
4.2 实现一个简易HTTP Server 41
4.3 API Server创建HTTP服务 42
4.3.1 创建API对象 42
4.3.2 创建路由项 43
4.3.3 实例化http.Server 44
4.3.4 启动API Server 45
4.3.5 接收并响应请求 45
4.4 HTTP请求的完整生命周期 47
4.5 比原链API接口描述 48
4.6 API接口调用工具 50
4.6.1 使用curl命令行调用API接口 50
4.6.2 使用Postman调用API接口 50
4.7 比原链HTTP错误码一览 51
4.8 本章小结 52
第5章 内核层:区块与区块链 53
5.1 概述 53
5.2 区块 53
5.2.1 区块的数据结构 53
5.2.2 区块头的数据结构 54
5.2.3 区块标识符 55
5.2.4 创世区块 56
5.2.5 生成创世区块 57
5.2.6 区块验证 58
5.2.7 计算下一个区块的难度目标 60
5.2.8 孤块管理 60
5.3 区块链 63
5.3.1 区块链的数据结构 63
5.3.2 区块上链 64
5.3.3 区块连接 65
5.3.4 链重组 66
5.3.5 主链的状态 69
5.4 本章小结 70
第6章 内核层:交易 71
6.1 概述 71
6.2 交易的概念 71
6.2.1 现实生活中的交易 71
6.2.2 虚拟世界中的交易 72
6.3 核心数据结构 72
6.3.1 普通交易核心数据结构 73
6.3.2 Coinbase交易核心数据结构 78
6.3.3 交易Action数据结构 81
6.3.4 MUX交易类型 85
6.4 BUTXO模型 86
6.4.1 BUTXO模型原理 87
6.4.2 MUX结构 88
6.5 交易的流程 89
6.5.1 构建交易 89
6.5.2 签名交易 93
6.5.3 提交交易 95
6.6 隔离见证 97
6.7 交易脚本 97
6.7.1 支付到公钥 98
6.7.2 支付到脚本 99
6.7.3 资产上链 100
6.7.4 资产销毁 102
6.7.5 见证脚本 102
6.7.6 栈语言 103
6.8 交易验证 105
6.8.1 标准交易 105
6.8.2 交易验证流程 106
6.9 交易费 108
6.9.1 估算交易手续费 108
6.9.2 计算交易手续费 110
6.10 交易池 111
6.1 1 默克尔树 112
6.12 本章小结 115
第7章 内核层:智能合约 116
7.1 概述 116
7.2 基础知识 116
7.2.1 智能合约 116
7.2.2 图灵完备的智能合约 117
7.2.3 UTXO模型和Account模型 117
7.3 合约层设计 118
7.4 智能合约语言 119
7.4.1 Equity语言 119
7.4.2 Equity合约组成 119
7.5 基于UTXO模型合约开发实战 122
7.5.1 编写合约 123
7.5.2 编译合约 123
7.5.3 部署合约 125
7.5.4 解锁合约 129
7.6 本章小结 132
第8章 内核层:虚拟机 133
8.1 概述 133
8.2 BVM介绍 134
8.2.1 虚拟机的栈 134
8.2.2 具有图灵完备性的BVM 135
8.2.3 equity&vm代码结构 135
8.3 virtualMachine对象 136
8.4 栈实现 137
8.5 BVM操作指令集 139
8.6 智能合约在BVM上的运行过程 141
8.6.1 智能合约数据结构 141
8.6.2 合约编译流程与原理 142
8.6.3 合约程序字节码示例 156
8.6.4 合约程序字节码的执行 157
8.6.5 合约程序字节码的执行示例 159
8.7 BVM指令集 160
8.8 本章小结 165
第9章 钱包层 166
9.1 概述 166
9.2 钱包对象 167
9.3 密钥管理 167
9.3.1 密钥对生成 169
9.3.2 密钥对生成算法 170
9.3.3 密钥加密存储 172
9.4 账户管理 174
9.4.1 账户创建 175
9.4.2 账户地址 176
9.4.3 账户余额 178
9.5 资产管理 179
9.5.1 初始默认资产 179
9.5.2 发行资产 180
9.6 交易管理 182
9.6.1 筛选交易 182
9.6.2 筛选UTXO 183
9.6.3 UTXO花费选择算法 184
9.7 钱包管理 186
9.7.1 数据更新 186
9.7.2 备份 187
9.7.3 恢复 188
9.8 本章小结 188
第10章 P2P分布式网络 189
10.1 概述 189
10.2 P2P的四种网络模型 189
10.3 网络节点初始化 191
10.3.1 SyncManager初始化 191
10.3.2 P2P Switch初始化 194
10.4 节点发现机制 196
10.4.1 种子节点 196
10.4.2 Kademlia算法 197
10.4.3 UPnP协议 203
10.4.4 RLPX网络协议 205
10.5 节点发现代码实现 206
10.5.1 节点发现初始化 206
10.5.2 路由表实现 207
10.5.3 Kademlia通信协议 212
10.5.4 邻居节点发现实现 212
10.6 节点状态机 219
10.7 区块同步 223
10.7.1 区块同步流程 223
10.7.2 快速同步算法 225
10.7.3 普通同步算法 230
10.7.4 区块数据请求与发送 231
10.8 交易同步 233
10.9 快速广播 235
10.9.1 新交易快速广播 236
10.9.2 新区块快速广播 238
10.10 节 点管理 239
10.10.1 TCP连接数管理 240
10.10.2 Outbound连接数管理 240
10.10.3 动态节点评分机制DynamicBanScore 241
10.11 本章小结 245
第11章 数据存储 246
11.1 概述 246
11.2 为什么使用键值数据库 246
11.3 LevelDB常用操作 247
11.3.1 增删改查操作 247
11.3.2 迭代查询 248
11.3.3 按前缀查询 249
11.3.4 批量操作 249
11.4 存储层缓存 250
11.4.1 缓存淘汰算法 250
11.4.2 比原链缓存实现 252
11.5 存储层持久化 254
11.5.1 比原链数据库 254
11.5.2 持久化存储接口 255
11.5.3 持久化key数据前缀 255
11.5.4 持久化存储区块过程 256
11.6 Varint变长编码 257
11.7 本章小结 258
第12章 共识算法 259
12.1 概述 259
12.2 PoW和PoS 259
12.3 实现一个简易PoW共识算法 261
12.4 比原链PoW共识算法 266
12.4.1 PoW hash值 266
12.4.2 难度动态调整 267
12.4.3 Tensority算法 268
12.5 本章小结 278
第13章 矿池及挖矿流程 279
13.1 概述 279
13.2 与矿池相关的基本概念 279
13.3 矿池总架构 280
13.4 挖矿流程解析(矿池视角) 282
13.5 挖矿流程解析(矿机视角) 283
13.6 拒绝数与拒绝率 286
13.7 矿池的收益分配模式 286
13.8 交易打包至区块 287
13.8.1 Coinbase交易奖励 288
13.8.2 交易手续费Gas 289
13.9 矿池优化建议 290
13.10 本章小结 291
第14章 展望 292
14.1 概述 292
14.2 跨链 293
14.2.1 打通链与链的连接 293
14.2.2 BTC、ETH与BTM的跨链资产交换 293
14.3 闪电网络 294
14.4 子链 295
14.5 本章小结 296