第1章 区块链基础知识准备 1
1.1认识区块链 1
1.1.1区块链的概念 1
1.1.2链的分类 2
1.1.3区块链能做什么 3
1.2共识的作用 3
1.3常见的共识算法 4
1.3.1 PoW算法 5
1.3.2 PoS算法 7
1.3.3 DPoS算法 8
1.3.4共识算法的编码尝试 9
1.4链的分叉 14
1.4.1软分叉 16
1.4.2硬分叉 18
1.4.3常见的分叉情况 18
1.4.4 PoW共识机制的51%算力攻击 20
1.5小结 22
第2章 以太坊基础知识准备 23
2.1什么是以太坊 23
2.2以太坊的架构 24
2.3什么是DApp 26
2.3.1 DApp概述 26
2.3.2以太坊上的DApp 28
2.4区块的组成 29
2.4.1区块的定义 29
2.4.2以太坊地址(钱包地址) 31
2.4.3 Nonce的作用 33
2.4.4燃料费 34
2.4.5 GasUsed的计算 35
2.4.6叔块 38
2.4.7挖矿奖励 40
2.5账户模型 42
2.5.1比特币UTXO模型 43
2.5.2 Trie树 45
2.5.3 Patricia Trie树 47
2.5.4 默克尔树(Merkle Tree) 47
2.5.5以太坊MPT树 50
2.5.6 MPT树节点存储到数据库 53
2.5.7组建一棵MPT树 54
2.5.8 MPT树如何体现默克尔树的验证特点 57
2.5.9以太坊钱包地址存储余额的方式 57
2.5.10余额查询的区块隔离性 58
2.5.11余额的查询顺序 58
2.5.12 UTXO模型和Account模型的对比 59
2.6以太坊的版本演变 60
2.6.1以太坊与PoW共识机制 60
2.6.2君士坦丁堡 60
2.7以太坊Ghost协议 61
2.8 Casper:PoS的变种共识机制 62
2.8.1如何成为验证人 63
2.8.2验证人如何获取保证金 63
2.8.3候选区块的产生 64
2.8.4胜出区块的判断 64
2.9智能合约 64
2.9.1简介与作用 64
2.9.2合约标准 66
2.10以太坊交易 75
2.10.1交易的发起者、类型及发起交易的函数 75
2.10.2交易和智能合约的关系 76
2.10.3交易参数的说明 77
2.10.4交易方法的真实含义 79
2.10.5交易的状态 80
2.10.6交易被打包 82
2.11“代币”余额 83
2.12以太坊浏览器 84
2.12.1区块链浏览器访问合约函数 86
2.12.2区块链浏览器查看交易记录 89
2.12.3非ETH交易记录不能作为资产转账成功的依据 90
2.12.4区块链浏览器查看智能合约的代码 91
2.13以太坊零地址 94
2.13.1零地址的交易转出假象 94
2.13.2零地址的意义 96
2.14小结 97
第3章 智能合约的编写、发布和调用 98
3.1智能合约与以太坊DApp 98
3.2认识Remix 99
3.3实现加法程序 101
3.4实现ERC20代币智能合约 103
3.4.1定义标准变量 103
3.4.2事件与构造函数 103
3.4.3 Solidity的常见关键字 104
3.4.4授权与余额 105
3.4.5转账函数 106
3.4.6合约的代码安全 109
3.5链上的合约 110
3.6认识Mist 111
3.6.1节点的切换 112
3.6.2区块的同步方式 113
3.7创建以太坊钱包 113
3.8使用Mist转账代币 116
3.9使用Mist发布智能合约 119
3.9.1合约Solidity源码 121
3.9.2认识“ABI” 122
3.9.3提取ABI和Bytecode 124
3.9.4使用Bytecode发布合约 125
3.9.5使用合约的函数 128
3.10小结 130
第4章 实现以太坊中继——基础接口 131
4.1认识以太坊中继 131
4.2区块遍历 132
4.3 RPC接口 134
4.4以太坊接口 135
4.4.1重要接口详解 136
4.4.2节点链接 141
4.4.3获取链接 141
4.4.4进行测试 144
4.4.5获取测试币 147
4.5项目准备 148
4.6创建项目 151
4.7第一个Go程序 154
4.8封装“RPC”客户端 156
4.8.1下载依赖库 156
4.8.2编写“RPC”客户端 158
4.8.3单元测试 161
4.9编写访问接口代码 162
4.9.1认识“Call”函数 163
4.9.2查找请求的参数 164
4.9.3实现获取交易信息 166
4.9.4认识“BatchCall”函数 170
4.9.5批量获取交易信息 171
4.9.6批量获取代币余额 173
4.9.7获取最新区块号 179
4.9.8根据区块号获取区块信息 181
4.9.9根据区块哈希值获取区块信息 184
4.9.10使用“eth call”访问智能合约函数 186
第5章 实现以太坊中继——应用 191
5.1创建以太坊钱包 191
5.1.1以太坊钱包术语 192
5.1.2创建钱包 194
5.2实现以太坊交易 197
5.2.1以太坊交易的原理 197
5.2.2以太坊ETH的交易 206
5.3区块事件监听 224
5.3.1创建数据库 225
5.3.2实现数据库的连接器 226
5.3.3生成数据表 230
5.3.4区块遍历器 232
5.3.5理解监听区块事件 246
5.4小结 247
后记 248