第一部分 区块链开发概述 3
第1章 自己动手实现一个区块链系统 3
1.1 从比特币到区块链 3
1.1.1 比特币的诞生和发展 3
1.1.2 区块链 5
1.2 用300行代码开发一个区块链系统 13
1.2.1 区块和区块链的创建 13
1.2.2 工作量证明 19
1.2.3 提供和区块链进行交互的API 22
1.3 本章总结 30
第2章 DApp开发简介 32
2.1 智能合约 32
2.2 DApp简介 34
2.3 区块链应用开发平台简介 37
2.3.1 以太坊 38
2.3.2 Asch 40
2.3.3 Hyperledger 41
2.4 本章总结 42
第二部分 Asch源码解读 47
第3章 Asch——区块链应用开发平台 47
3.1 Asch的诞生和架构 47
3.2 开发工具 50
3.3 客户端的基本使用 50
3.4 如何基于Asch注册自己的资产 55
3.5 DApp案例简介 57
3.6 本章总结 58
第4章 Asch源码概览 59
4.1 Asch生态架构 59
4.2 asch库简要解读 60
4.2.1 数据结构 61
4.2.2 合约 62
4.2.3 接口 63
4.2.4 配置文件 64
4.3 asch-core库简要解读 64
4.4 Asch主链的启动流程 66
4.4.1 app.js 66
4.4.2 index.js 68
4.4.3 runtime.js 69
4.4.4 init.js 70
4.5 本章总结 72
第5章 账户与安全 73
5.1 区块链里的密码学 73
5.1.1 非对称加密 73
5.1.2 ECDSA算法 75
5.2 Asch的账户生成流程 80
5.2.1 BIP 39 80
5.2.2 ED25519 82
5.3 Asch的账户类型 82
5.4 本章总结 84
第6章 共识机制 86
6.1 拜占庭将军问题 86
6.2 区块链的共识算法 88
6.3 从DPoS到PBFT 89
6.3.1 DPoS算法 89
6.3.2 PBFT算法 91
6.4 共识算法源码解读 93
6.4.1 base/consensus.js 94
6.4.2 core/delegates.js 96
6.5 本章总结 102
第7章 区块 104
7.1 区块链的数据结构 104
7.2 区块的源码解读 105
7.2.1 base/block.js 106
7.2.2 core/blocks.js 110
7.3 本章总结 122
第8章 交易 123
8.1 Asch上的交易类型 123
8.2 交易的生命周期及其实现 124
8.2.1 创建交易 124
8.2.2 广播交易 127
8.2.3 验证交易 127
8.2.4 写入区块链 129
8.3 本章总结 130
第9章 跨链实现 132
9.1 跨链技术的提出与探索 132
9.2 比特币多签名交易的实现 135
9.2.1 m-of-n多签名交易的脚本 135
9.2.2 多签名脚本的执行 136
9.2.3 比特币里实现多签名交易 137
9.2.4 兑现多签名交易 142
9.3 Asch的跨链实现 149
9.3.1 网关提案的发起与投票 150
9.3.2 跨链账户的开通 156
9.3.3 对跨链网关的充值与提现 159
9.3.4 对跨链网关的提现 160
9.4 本章总结 166
第三部分 DApp开发实战 169
第10章 DApp设计与开发环境搭建 169
10.1 DApp整体设计 169
10.1.1 前期准备 169
10.1.2 业务需求描述 170
10.1.3 角色 171
10.1.4 经济模型 172
10.1.5 代码设计 174
10.1.6 DApp的目录结构 176
10.2 开发环境搭建 184
10.2.1 Asch的网络类型 184
10.2.2 配置localnet 185
10.2.3 DApp Demo 187
10.3 本章总结 193
第11章 DApp合约开发与接口实现 194
11.1 DApp合约的开发 194
11.1.1 创建频道(createChannel) 195
11.1.2 更新频道(updateChannel) 198
11.1.3 发布文章(postArticle) 199
11.1.4 打赏文章(voteArticle) 202
11.1.5 抽奖设计 207
11.1.6 发布评论(postComment) 208
11.1.7 点赞评论(likeComment) 209
11.1.8 举报(report) 210
11.1.9 结算抽奖(calculatePrize) 211
11.1.10 领取奖励(getReward) 214
11.2 DApp接口的实现 215
11.2.1 频道接口 217
11.2.2 文章接口 219
11.2.3 投票接口 222
11.3 DApp的前端实现 224
11.3.1 登录 224
11.3.2 调用合约 225
11.3.3 调用接口 226
11.4 本章总结 226
第12章 DApp测试 227
12.1 测试准备 227
12.1.1 初始化函数 227
12.1.2 区块等待 229
12.1.3 账户生成与转账 229
12.2 合约流程测试 233
12.3 本章总结 238