描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302531265
产品特色
编辑推荐
本书以Go编程语言讲解,从必要的理论知识到编码实践,循序渐进地介绍以太坊DApp开发的技术要点。全书主要内容分4大部分:
*部分介绍区块链的一些重要基础知识;
第二部分全面地介绍以太坊公链的应用基础,内容包含但不限于以太坊的大量术语;
第三部分介绍以太坊智能合约整体开发与部署实践;
第四部分以以太坊DApp中继服务作为综合范例,介绍以太坊区块链DApp的开发流程与实践。
本书注重应用,代码注释详尽,适合IT技术开发者阅读,对于想了解以太坊及其DApp开发技术的人员或想开发一款基于以太坊的DApp开发者尤为合适。
*部分介绍区块链的一些重要基础知识;
第二部分全面地介绍以太坊公链的应用基础,内容包含但不限于以太坊的大量术语;
第三部分介绍以太坊智能合约整体开发与部署实践;
第四部分以以太坊DApp中继服务作为综合范例,介绍以太坊区块链DApp的开发流程与实践。
本书注重应用,代码注释详尽,适合IT技术开发者阅读,对于想了解以太坊及其DApp开发技术的人员或想开发一款基于以太坊的DApp开发者尤为合适。
内容简介
本书以Go编程语言讲解,从必要的理论知识到编码实践,循序渐进地介绍以太坊DApp开发的技术要点。全书主要内容分4大部分:*部分介绍区块链的一些重要基础知识;第二部分全面地介绍以太坊公链的应用基础,内容包含但不限于以太坊的大量术语;第三部分介绍以太坊智能合约整体开发与部署实践;第四部分以以太坊DApp中继服务作为综合范例,介绍以太坊区块链DApp的开发流程与实战。
本书注重应用,代码注释详尽,适合IT技术开发者阅读,对于想了解以太坊及其DApp开发技术的人员或想开发一款基于以太坊的DApp开发者尤为合适。
本书注重应用,代码注释详尽,适合IT技术开发者阅读,对于想了解以太坊及其DApp开发技术的人员或想开发一款基于以太坊的DApp开发者尤为合适。
目 录
目 录
第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
第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
前 言
前 言
出版这本书之前,我是一位已经撰写技术博文5年之久的程序员,技术栈范围包含但不限于安卓应用开发、后端开发以及现在所从业的区块链DApp开发。
曾经有不少出版社联系我出书,但限于对知识的敬畏和对出书的谨慎,都一一婉拒了。正式签约出版这本书是2018年10月中旬,那时我处于一个对区块链和以太坊知识非常热衷的阶段,当时的工作也正好是基于区块链做各种DApp的开发,比如具有代表性的钱包、中心化交易所和去中心化交易所应用。对区块链、以太坊的各个方面构建了一套完整的知识体系,所以在清华大学出版社的编辑联系我的时候,市面上关于以太坊DApp技术开发的书籍几乎为零,而理论性的书籍过多,在深思熟虑之后,便决定编写此书。
写书最怕的是误人子弟。后面正式编写的时候才发现,将整个以太坊的知识体系展开来讲的话,有很多的细节是自己之前还没有掌握的,比如:区块链浏览器上所看到的非ETH交易记录不能作为资产转移成功的依据等。编写此书的过程中,也遇到了一些疑惑点,通过借鉴优秀的博客文章、阅读源码和咨询业界一些技术大佬的意见,反复检查、检验整理编写入书内,对我自己来说也是一种提升,丰富并拓展了我的以太坊知识体系。我在这里衷心感谢他们并将会在书后列举出这些文章的链接和相关大佬的名字。
全书的内容关联性很强,篇幅适中,非必要的理论性内容几乎没有谈及。在术语阐述上,我尽力做到用通俗的语言去讲解,如果读者在阅读的过程中依然无法理解某一个知识点,欢迎通过我的联系方式直接询问,我会为你们一一解答。
虽然,笔者已尽最大努力避免书中内容出现错误,但由于水平所限,难免会有错误,如果读者在书中发现错误的结论,欢迎联系我进行勘误。我将十分感谢您!对于被纠正的内容,我将会在技术博客中公布。此外,技术交流方面可以加入QQ群,群号等联系信息参见本书的后记。
出版这本书之前,我是一位已经撰写技术博文5年之久的程序员,技术栈范围包含但不限于安卓应用开发、后端开发以及现在所从业的区块链DApp开发。
曾经有不少出版社联系我出书,但限于对知识的敬畏和对出书的谨慎,都一一婉拒了。正式签约出版这本书是2018年10月中旬,那时我处于一个对区块链和以太坊知识非常热衷的阶段,当时的工作也正好是基于区块链做各种DApp的开发,比如具有代表性的钱包、中心化交易所和去中心化交易所应用。对区块链、以太坊的各个方面构建了一套完整的知识体系,所以在清华大学出版社的编辑联系我的时候,市面上关于以太坊DApp技术开发的书籍几乎为零,而理论性的书籍过多,在深思熟虑之后,便决定编写此书。
写书最怕的是误人子弟。后面正式编写的时候才发现,将整个以太坊的知识体系展开来讲的话,有很多的细节是自己之前还没有掌握的,比如:区块链浏览器上所看到的非ETH交易记录不能作为资产转移成功的依据等。编写此书的过程中,也遇到了一些疑惑点,通过借鉴优秀的博客文章、阅读源码和咨询业界一些技术大佬的意见,反复检查、检验整理编写入书内,对我自己来说也是一种提升,丰富并拓展了我的以太坊知识体系。我在这里衷心感谢他们并将会在书后列举出这些文章的链接和相关大佬的名字。
全书的内容关联性很强,篇幅适中,非必要的理论性内容几乎没有谈及。在术语阐述上,我尽力做到用通俗的语言去讲解,如果读者在阅读的过程中依然无法理解某一个知识点,欢迎通过我的联系方式直接询问,我会为你们一一解答。
虽然,笔者已尽最大努力避免书中内容出现错误,但由于水平所限,难免会有错误,如果读者在书中发现错误的结论,欢迎联系我进行勘误。我将十分感谢您!对于被纠正的内容,我将会在技术博客中公布。此外,技术交流方面可以加入QQ群,群号等联系信息参见本书的后记。
林冠宏
2019年3月
评论
还没有评论。