区块链是近十年来颇具颠覆性的新兴信息技术之一,它正以一种全新的方式建立人类交易过程的信任、仲裁和记录基础。本书共9章,首先介绍去中心化应用、DApp等基本概念,并据此展开对比特币、以太坊、超级账本等热门DApp的阐释。其次在解析以太坊工作原理的基础上介绍智能合约的编写方法,并介绍web3.js的应用方法。后利用上述知识进行钱包服务、智能合约部署平台、投注App、企业级智能合约以及联盟区块链等具体应用程序的创建。
封面图
目录
- 译者序
- 前言
- 第1章去中心化应用1
- 1.1什么是DApp1
- 1.1.1去中心化应用的优点2
- 1.1.2去中心化应用的缺点3
- 1.2去中心化自治组织3
- 1.3DApp中的用户身份4
- 1.4DApp中的用户账户5
- 1.5访问中心化应用6
- 1.6DApp中的内部货币6
- 1.7什么是授权的DApp7
- 1.8热门的DApp7
- 1.8.1比特币7
- 1.8.2以太坊9
- 1.8.3超级账本项目9
- 1.8.4IPFS10
- 1.8.5Namecoin11
- 1.8.6达世币12
- 1.8.7BigChainDB14
- 1.8.8OpenBazaar14
- 1.8.9Ripple14
- 1.9总结16
- 第2章以太坊的工作原理17
- 2.1以太坊概览17
- 2.2以太坊账户18
- 2.3交易18
- 2.4共识19
- 2.5时间戳20
- 2.6随机数21
- 2.7区块时间21
- 2.8分叉24
- 2.9创世区块24
- 2.10以太币面值24
- 2.11以太坊虚拟机25
- 2.12gas25
- 2.13发现对等节点26
- 2.14Whisper和Swarm27
- 2.15geth27
- 2.15.1安装geth28
- 2.15.2JSON-RPC和JavaScript操作台28
- 2.15.3子命令和选项29
- 2.15.4创建账户29
- 2.16以太坊钱包31
- 2.17浏览器钱包31
- 2.18以太坊的缺点32
- 2.19serenity33
- 2.20总结35
- 第3章编写智能合约36
- 3.1Solidity源文件36
- 3.2智能合约的结构37
- 3.3数据位置38
- 3.4什么是不同的数据类型39
- 3.4.1数组类型39
- 3.4.2字符串类型40
- 3.4.3结构类型41
- 3.4.4枚举类型42
- 3.4.5mapping类型42
- 3.4.6delete操作符43
- 3.4.7基本类型之间的转换44
- 3.4.8使用var44
- 3.5控制结构45
- 3.6用new操作符创建合约46
- 3.7异常46
- 3.8外部函数调用46
- 3.9合约功能48
- 3.9.1可见性48
- 3.9.2函数修改器50
- 3.9.3回退函数51
- 3.9.4继承52
- 3.10库54
- 3.11返回多值56
- 3.12导入其他Solidity源文件57
- 3.13全局可用变量57
- 3.13.1区块和交易属性57
- 3.13.2地址类型相关58
- 3.13.3合约相关58
- 3.14以太币单位58
- 3.15存在、真实性和所有权合约的证明59
- 3.16编译和部署合约60
- 3.17总结62
- 第4章开始使用web3.js63
- 4.1web3.js概述63
- 4.1.1导入web3.js64
- 4.1.2连接至节点64
- 4.1.3API结构65
- 4.1.4BigNumber.js66
- 4.1.5单位转换66
- 4.1.6检索gas价格、余额和交易细节67
- 4.1.7发送以太币68
- 4.1.8处理合约69
- 4.1.9检索和监听合约事件71
- 4.2为所有权合约创建客户端73
- 4.2.1项目结构74
- 4.2.2创建后端74
- 4.2.3创建前端76
- 4.2.4测试客户端80
- 4.3总结82
- 第5章创建钱包服务83
- 5.1在线钱包和离线钱包的区别83
- 5.2Hooked-Web3-Provider和EthereumJS-tx库84
- 5.3分层确定性钱包87
- 5.4密钥衍生函数87
- 5.5LightWallet88
- 5.6创建钱包服务89
- 5.6.1必要条件89
- 5.6.2项目结构90
- 5.6.3创建后端90
- 5.6.4创建前端91
- 5.6.5测试97
- 5.7总结101
- 第6章创建智能合约部署平台102
- 6.1计算一个地址的交易nonce102
- 6.2solcjs概述104
- 6.2.1安装solcjs104
- 6.2.2solcjs API104
- 6.3创建合约部署平台107
- 6.3.1项目结构108
- 6.3.2创建后端108
- 6.3.3创建前端113
- 6.3.4测试117
- 6.4总结118
- 第7章创建投注App119
- 7.1Oraclize概述119
- 7.1.1Oraclize的工作原理120
- 7.1.2数据源120
- 7.1.3真实性证明121
- 7.1.4定价122
- 7.1.5开始使用Oraclize API123
- 7.1.6加密查询127
- 7.1.7Oraclize Web IDE128
- 7.2处理字符串128
- 7.3创建投注合约130
- 7.4为投注合约创建客户端133
- 7.4.1项目结构133
- 7.4.2创建后端134
- 7.4.3创建前端135
- 7.4.4测试客户端143
- 7.5总结147
- 第8章创建企业级智能合约148
- 8.1探索ethereumjs-testrpc148
- 8.1.1安装和使用149
- 8.1.2可用RPC方法151
- 8.2什么是事件主题153
- 8.3开始使用truffle-contract154
- 8.3.1安装和导入truffle-contract155
- 8.3.2建立测试环境156
- 8.3.3truffle-contract API156
- 8.4truffle概述163
- 8.4.1安装truffle163
- 8.4.2初始化 truffle163
- 8.4.3编译合约165
- 8.4.4配置文件165
- 8.4.5部署合约166
- 8.4.6单元测试合约169
- 8.4.7包管理175
- 8.4.8使用truffle的操作台178
- 8.4.9在truffle环境中运行外部脚本179
- 8.4.10truffle的创建管线179
- 8.4.11truffle的服务器端186
- 8.5总结187
- 第9章创建联盟区块链188
- 9.1什么是联盟区块链189
- 9.2什么是权威证明共识189
- 9.3parity概述189
- 9.3.1Aura的工作原理190
- 9.3.2运行parity191
- 9.3.3创建私有网络192
- 9.3.4许可和隐私197
- 9.4总结198