失效链接处理 |
以太坊智能合约开发实战 PDF 下载
本站整理下载:
版权归出版社和原作者所有,链接已删除,请购买正版
用户下载说明:
电子版仅供预览,下载后24小时内务必删除,支持正版,喜欢的请购买正版书籍:
http://product.dangdang.com/27857154.html
相关截图:
资料简介: 《以太坊智能合约开发实战》从区块链的概念、原理、核心技术和应用四个方面,系统地介绍了以太坊区块链开发的相关知识。其中,重点介绍了以太坊的相关概念和原理、以太坊客户端Geth、以太坊常用智能合约开发工具、Solidity语言和智能合约开发等内容,并介绍了众筹合约和代币合约两个项目实战案例,可以让读者对智能合约开发的整体流程有一个全面的了解。另外,书中结合示例对web3.js的相关知识也做了详细介绍,以帮助读者更好地理解和利用以太坊的相关数据。 《以太坊智能合约开发实战》共17章,分为4篇,涵盖的主要内容有区块链的概念、原理与底层技术;以太坊的相关概念与原理;以太坊相关协议;以太坊客户端Geth;以太坊智能合约的其他常用工具与客户端;Solidity语言的基本概念与数据类型;使用Solidity进行以太坊智能合约开发;通过web3.js与以太坊区块链数据进行交互;众筹智能合约与代币智能合约项目实战案例。 《以太坊智能合约开发实战》内容丰富,讲解通俗易懂,案例典型,实用性强,特别适合区块链技术爱好者和智能合约开发的相关从业人员阅读,也适合区块链底层研究人员阅读。另外,《以太坊智能合约开发实战》还适合区块链培训机构作为相关课程的培训教材。 资料目录:
第1篇 基础理论与原理
第1章 与区块链的次亲密接触 2
1.1 什么是区块链 2
1.1.1 区块链简介 2
1.1.2 区块链的链式结构 3
1.1.3 区块链上的区块常见数据 4
1.2 工作量证明机制(PoW) 6
1.2.1 区块链遭遇的问题 6
1.2.2 PoW模型 8
1.2.3 PoW为什么能防止篡改 9
1.3 权益证明机制(PoS) 11
1.3.1 什么是PoS 12
1.3.2 PoS的优势与劣势 12
1.4 委托权益证明(DPoS) 12
1.5 权威证明(PoA) 13
1.6 区块链的应用 13
1.7 本章小结 13
第2章 去中心化应用——DApp 15
2.1 DApp简介 15
2.1.1 什么是DApp 15
2.1.2 DApp网络组建过程 16
2.1.3 DApp的优点 16
2.1.4 DApp存在的问题 16
2.2 中心化与去中心化 17
2.2.1 身份验证 17
2.2.2 通信 17
2.2.3 数据交互 17
2.2.4 系统维护 18
2.3 DApp网络与通信 18
2.3.1 P2P网络与WWW 19
2.3.2 P2P网络拓扑结构类型 20
2.3.3 小结 21
2.4 DApp货币与中心化数据交互 22
2.4.1 DApp货币 22
2.4.2 中心化应用获取去中心化数据 22
2.4.3 去中心化应用获取中心化数据 22
2.5 常见的DApp 23
2.5.1 比特币 23
2.5.2 以太坊 23
2.5.3 IPFS存储系统 23
第3章 比特币那些事 25
3.1 比特币简介 25
3.1.1 比特币公钥与私钥 25
3.1.2 数字签名 26
3.2 椭圆曲线算法 26
3.2.1 群 26
3.2.2 椭圆曲线算法定义 28
3.2.3 椭圆曲线几何运算 29
3.2.4 椭圆曲线算法的代码实现 30
3.2.5 椭圆曲线加密与签名原理 37
3.3 比特币私钥、公钥与地址 39
3.3.1 从私钥到地址 39
3.3.2 公钥压缩 40
3.3.3 私钥格式 41
3.3.4 私钥与安全 41
3.4 比特币交易 44
3.4.1 交易简介 44
3.4.2 交易输出 44
3.4.3 交易输入 44
3.4.4 交易费 45
3.4.5 付款至公钥哈希(P2PKH) 45
3.4.6 多重签名与P2SH 46
3.5 比特币钱包 46
3.5.1 钱包简介 46
3.5.2 生成助记词 47
3.5.3 从助记词生成种子 48
3.5.4 从种子生成HD钱包 48
3.5.5 HD钱包密钥路径 50
3.6 比特币相关资源 51
第4章 以太坊 52
4.1 以太坊简介 52
4.1.1 什么是以太坊 52
4.1.2 以太坊虚拟机(EVM) 53
4.1.3 以太坊智能合约与高级语言 53
4.1.4 以太币单位 54
4.1.5 以太坊发行版本与提案 54
4.2 以太坊账户 55
4.2.1 外部账户 55
4.2.2 合约账户 56
4.2.3 外部账户与合约账户的异同 56
4.3 以太坊交易 57
4.3.1 gas、gasPrice与gasLimit 57
4.3.2 gasUsed与交易花费 58
4.3.3 什么是以太坊交易与消息 58
4.4 以太坊网络 59
4.4.1 以太坊网络简介 59
4.4.2 以太坊与Kademlia 59
4.4.3 以太坊客户端 61
4.5 挖矿 62
4.5.1 什么是挖矿 62
4.5.2 挖矿奖励 62
4.5.3 以太坊区块 63
4.6 GHOST协议 64
4.6.1 区块时间 64
4.6.2 区块分叉 65
4.6.3 普通分叉带来的问题 66
4.6.4 GHOST协议的具体内容 67
4.7 Ethash算法之DAG 68
4.7.1 什么是DAG 68
4.7.2 DAG生成过程 69
4.7.3 为什么要使用DAG 69
4.8 Ethash算法 70
4.8.1 Ethash算法简介 70
4.8.2 Ethash算法流程 70
4.9 本章小结 71
第2篇 开发工具
第5章 智能合约开发常用工具 74
5.1 Git简介 74
5.1.1 Git安装 74
5.1.2 Git常用命令 75
5.1.3 Git资源推荐 76
5.2 Node.js简介 76
5.2.1 什么是Node.js 76
5.2.2 Node.js安装 77
5.3 NPM简介 78
5.3.1 npm config命令 78
5.3.2 NPM与语义化版本 80
5.3.3 npm install命令 82
5.3.4 NPM镜像 83
5.3.5 NPM的其他常用命令 84
5.4 webpack简介 85
5.4.1 认识webpack 85
5.4.2 webpack首秀 85
5.4.3 webpack 与webpack-dev-server 87
5.4.4 webpack常用功能与配置 90
5.4.5 webpack总结 92
5.5 Postman简介 92
5.5.1 认识Postman 93
5.5.2 Postman的简单用法 94
5.5.3 Postman脚本 95
5.6 LevelDB简介 96
5.6.1 认识LevelDB 96
5.6.2 LevelDB文件 97
5.6.3 SST结构与数据查找 99
第6章 以太坊私链神器——Ganache 102
6.1 Ganache简介 102
6.1.1 什么是Ganache 102
6.1.2 ganache-cli命令安装 103
6.1.3 Ganache图形界面 104
6.2 Ganache常见命令参数 106
6.2.1 挖矿时间 106
6.2.2 主机端口与网络 106
6.2.3 gas相关参数 106
6.2.4 其他参数 106
6.3 Ganache账户 107
6.3.1 能多给我点钱吗 107
6.3.2 能多给我几个账户吗 108
6.3.3 助记词相关参数 108
6.3.4 指定账户 108
6.3.5 锁定账户与解锁 109
6.4 Ganache与JavaScript 109
6.4.1 在工程中引用Ganache的Provider 109
6.4.2 在工程中启动Ganache的Server 110
6.4.3 配置工程中依赖的Ganache 111
6.5 Ganache交易相关RPC方法 112
6.5.1 eth_sendTransaction方法 113
6.5.2 eth_getTransactionCount方法 115
6.5.3 eth_getTransactionReceipt方法 116
6.5.4 eth_getTransactionByHash方法 116
6.5.5 交易相关的其他方法 117
6.6 Ganache账户相关RPC方法 117
6.6.1 eth_accounts方法 118
6.6.2 eth_getBalance方法 118
6.6.3 eth_coinbase方法 119
6.7 Ganache区块相关RPC方法 119
6.7.1 eth_getBlockByHash方法 119
6.7.2 eth_getBlockByNumber方法 122
6.7.3 其他相关方法 122
6.8 Ganache日志相关RPC方法 123
6.8.1 eth_newFilter方法 123
6.8.2 eth_getFilterLogs方法 124
6.8.3 eth_getLogs方法 125
6.8.4 其他关联方法 126
6.9 Ganache的其他RPC方法 127
6.9.1 web3_clientVersion方法 127
6.9.2 net_version方法 127
6.9.3 eth_getCode方法 128
6.9.4 eth_sign方法 129
第7章 以太坊官方客户端——Geth 130
7.1 Geth简介 130
7.1.1 Geth是什么 130
7.1.2 Geth安装 130
7.1.3 Geth相关目录 132
7.1.4 Geth相关工具 134
7.2 Geth子命令 134
7.2.1 Geth子命令概述 135
7.2.2 Geth子命令之account 136
7.2.3 Geth子命令之console与attach 137
7.2.4 Geth子命令之copydb与removedb 137
7.3 Geth启动参数 138
7.3.1 Geth数据同步模式 138
7.3.2 Geth网络相关参数 138
7.3.3 Geth以太坊相关参数 139
7.3.4 Geth RPC相关参数 140
7.3.5 Geth挖矿相关参数 141
7.3.6 Geth ethash算法参数 142
7.3.7 Geth交易池配置 142
7.3.8 Geth日志参数 145
7.3.9 Geth的其他参数 146
7.4 Geth启动实例 146
7.4.1 Geth启动单个节点 146
7.4.2 Geth启动多节点组网 148
7.5 Geth控制台与管理接口 149
7.5.1 admin模块 149
7.5.2 debug模块 150
7.5.3 miner模块 151
7.5.4 personal模块 152
7.5.5 txpool模块 153
7.6 keystore文件 153
7.6.1 keystore文件简介 153
7.6.2 从密钥到密钥文件 154
7.6.3 从密钥到密钥文件流程验证 155
第8章 以太坊钱包与浏览器158
8.1 MetaMask插件 158
8.1.1 MetaMask简介 158
8.1.2 MetaMask安装 159
8.1.3 次使用MetaMask 160
8.1.4 MetaMask的连接配置 161
8.1.5 MetaMask的其他配置 162
8.1.6 MetaMask账户管理 163
8.1.7 MetaMask交易 164
8.1.8 小结 165
8.2 Ethereum Wallet钱包 166
8.2.1 Ethereum Wallet简介 166
8.2.2 安装Ethereum Wallet与Mist 166
8.2.3 使用Ethereum Wallet 169
8.3 Mist与Ethereum Wallet 170
8.3.1 Ethereum Wallet与Mist的区别 171
8.3.2 Mist的配置与使用 171
8.3.3 小结 172
8.4 MyEtherWallet网页钱包 172
8.4.1 MyEtherWallet简介 173
8.4.2 MyEtherWallet合约交互 174
8.4.3 MyEtherWallet离线交易 175
8.4.4 MyEtherWallet的其他功能 177
第3篇 Solidity与智能合约开发
第9章 Solidity初遇 180
9.1 Solidity简介 180
9.1.1 什么是Solidity 180
9.1.2 智能合约示例 181
9.1.3 Solidity编译版本 182
9.2 Solidity编辑器 182
9.2.1 Sublime编辑器 182
9.2.2 Atom编辑器 185
9.2.3 IDEA编辑器 187
9.3 Remix编辑器 188
9.3.1 Remix简介 188
9.3.2 Remix文件管理 189
9.3.3 Remix编辑面板与控制台 190
9.3.4 Remix编译与运行面板 191
9.3.5 Remix基本配置面板 193
9.3.6 Remix分析配置面板 194
9.4 Solidity常见概念 196
9.4.1 状态变量 196
9.4.2 局部变量 196
9.4.3 Solidity函数 197
9.4.4 返回多值 197
9.4.5 构造函数 198
9.4.6 异常 200
9.4.7 Solidity注释与文档 201
9.5 Solidity运算符 203
9.5.1 Solidity运算符简介 203
9.5.2 Solidity运算符注意事项 204
9.6 Solidity控制结构 205
9.6.1 控制结构简介 205
9.6.2 判断语句 205
9.6.3 for循环 206
9.6.4 while与do…while循环 206
9.6.5 continue与break 207
9.6.6 三目运算符 208
9.7 可见性修饰符 209
9.7.1 public修饰符 209
9.7.2 internal修饰符 210
9.7.3 private修饰符 213
9.7.4 external修饰符 214
9.8 函数其他修饰符 216
9.8.1 constant修饰符 216
9.8.2 view修饰符 217
9.8.3 pure修饰符 217
第10章 Solidity数据类型 219
10.1 数据类型简介 219
10.1.1 值类型 219
10.1.2 引用类型 220
10.1.3 小结 221
10.2 Booleans类型 221
10.2.1 Booleans类型简介 221
10.2.2 Booleans类型支持的运算符 221
10.3 Integers类型 223
10.3.1 Integers类型简介 223
10.3.2 Integers类型支持的运算符 224
10.3.3 Integers整除问题 225
10.4 定点数类型 226
10.4.1 定点数类型简介 226
10.4.2 定点数类型支持的运算符 227
10.5 字面量 227
10.5.1 字符串字面量 227
10.5.2 十六进制字面量 229
10.5.3 有理数字面量 230
10.6 Enum类型 231
10.6.1 枚举类型简介 231
10.6.2 枚举类型实例 231
10.7 mapping类型 232
10.7.1 mapping类型简介 232
10.7.2 mapping类型实例 232
10.8 struct类型 233
第11章 Solidity数据类型进阶 235
11.1 Solidity固定大小字节数组 235
11.1.1 固定大小字节数组类型 235
11.1.2 固定大小字节数组支持的运算符 236
11.1.3 固定大小字节数组的成员 236
11.1.4 固定大小字节数组与字符串 237
11.1.5 固定大小字节数组之间的转换 240
11.1.6 小结 241
11.2 Solidity动态大小字节数组 242
11.2.1 动态大小字节数组简介 242
11.2.2 创建动态大小字节数组 242
11.2.3 动态大小字节数组成员 243
11.2.4 字节数组间的转换 245
11.2.5 小结 247
11.3 Solidity数组 247
11.3.1 固定长度数组 248
11.3.2 动态长度数组 249
11.3.3 二维数组 250
11.3.4 小结 251
11.4 以太坊地址类型 251
11.4.1 地址简介 252
11.4.2 transfer、send与balance 254
11.4.3 call、callcode与delegatecall 255
11.5 函数类型 257
11.5.1 函数类型简介 258
11.5.2 函数签名 258
11.5.3 函数类型实例 260
11.6 数据类型转换 262
11.6.1 隐式转换 262
11.6.2 显式转换 263
11.6.3 var关键字 264
11.7 delete运算符 265
11.7.1 delete与常见类型 265
11.7.2 delete与数组 266
11.7.3 delete与mapping 267
11.7.4 delete与struct 267
11.8 本章小结 268
第12章 Solidity开发智能合约 270
12.1 智能合约简介 270
12.1.1 智能合约的概念 270
12.1.2 EVM结构与数据 271
12.1.3 智能合约执行 271
12.2 事件与日志简介 272
12.2.1 事件简介 272
12.2.2 事件主题 272
12.2.3 事件与日志 274
12.3 Solidity中的单位后缀 276
12.3.1 以太币单位 276
12.3.2 时间单位 277
12.4 区块与交易属性 279
12.4.1 区块的相关属性 279
12.4.2 消息的相关属性 281
12.4.3 交易的相关属性 282
12.5 错误处理函数 283
12.5.1 assert函数 283
12.5.2 require函数 283
12.5.3 revert函数 284
12.6 数学与Hash函数 285
12.6.1 数学运算函数 285
12.6.2 Hash函数 285
12.6.3 ecrecover函数 286
12.7 ABI编码与编码函数 287
12.7.1 ABI编码简介 287
12.7.2 ABI编码数据类型 289
12.7.3 常见数据类型ABI编码规则 290
12.7.4 复杂类型ABI编码规则 292
12.7.5 ABI编码实例 295
12.8 特殊类型函数 296
12.8.1 回退函数 296
12.8.2 析构函数 297
12.8.3 函数重载 298
12.8.4 使用new创建合约函数调用 299
第13章 Solidity开发智能合约进阶 303
13.1 Solidity数据位置 303
13.1.1 什么是数据位置 303
13.1.2 memory简介 304
13.1.3 storage简介 304
13.1.4 calldata简介 307
13.1.5 小结 308
13.2 数据位置与赋值 308
13.2.1 状态变量赋值给局部storage变量 308
13.2.2 状态变量赋值给memory局部变量 310
13.2.3 局部memory变量赋值给状态变量 310
13.2.4 状态变量赋值状态变量 311
13.2.5 局部memory变量赋值给局部memory变量 312
13.2.6 局部storage变量赋值给局部storage变量 313
13.2.7 局部storage变量赋值给局部memory变量 314
13.2.8 局部storage变量赋值给状态变量 315
13.2.9 小结 316
13.3 函数修改器 317
13.3.1 函数修改器简单实例 317
13.3.2 函数修改器复杂实例 319
13.3.3 小结 321
13.4 合约继承 324
13.4.1 继承简介 324
13.4.2 super关键词 327
13.4.3 抽象合约 328
13.4.4 接口合约 328
13.5 Solidity库 329
13.5.1 Solidity库简介 329
13.5.2 Solidity库应用实例 329
13.5.3 Solidity导入源文件 330
13.5.4 using for语句 331
13.6 Solidity编译 333
13.6.1 solc简介 333
13.6.2 solc编译合约 336
13.6.3 solc导入与库 338
13.6.4 solc.js简介 340
13.6.5 使用solc.js在项目中编译单个合约 340
13.6.6 使用solc.js在项目中编译多个合约 342
13.7 Solidity编码风格 344
13.7.1 命名风格 344
13.7.2 控制结构 344
13.7.3 函数相关风格 345
13.7.4 其他部分 346
第14章 通过web3.js与以太坊客户端进行交互 347
14.1 web3.js简介 347
14.1.1 web3.js概念 347
14.1.2 web3.js原理 348
14.1.3 web3.js模块 348
14.2 web3.js与以太坊节点 348
14.2.1 HTTP方式 348
14.2.2 IPC方式 349
14.2.3 WebSocket方式 350
14.3 web3.js工具的相关方法 350
14.3.1 以太币单位转换方法 351
14.3.2 十六进制、数字与字符串转换 351
14.3.3 填充字符与getStorageAt 352
14.4 web3.js账户的相关方法 354
14.4.1 获取账户与账户余额 354
14.4.2 创建账户 355
14.4.3 解锁账户 356
14.4.4 账户的其他相关方法 356
14.5 web3.js的ABI编码方法 357
14.5.1 函数签名与事件签名 357
14.5.2 函数单参数编码与解码 359
14.5.3 函数多参数编码与解码 360
14.5.4 编码函数调用 360
14.5.5 解码日志 361
14.6 web3.js合约的相关方法 362
14.6.1 创建与克隆合约 362
14.6.2 合约部署deploy 363
14.6.3 send函数与call函数 369
14.6.4 estimateGas函数与encodeABI函数 370
14.6.5 合约方法的调用 370
14.6.6 合约事件的处理 375
14.7 web3.js交易的相关方法 380
14.7.1 签名简介 380
14.7.2 签名与交易 381
14.7.3 发送交易 384
14.7.4 签名交易与发送签名交易 386
14.7.5 获取交易的相关数据 387
14.8 web3.js和IBAN的相关接口 388
14.8.1 IBAN简介 389
14.8.2 BBAN、IBAN与地址 390
14.8.3 IBAN的其他方法 390
14.9 web3.js的其他方法 391
14.9.1 订阅事件 391
14.9.2 网络及ENS的相关方法 392
14.9.3 与Swarm和Whisper交互的方法 392
14.10 与Ethereum相关的JavaScript库 393
14.10.1 BigNumber.js库 393
14.10.2 ethjs-abi库 395
14.10.3 其他Ethereum库 399
第4篇 项目案例实战
第15章 工程化项目开发利器——Truffle 402
15.1 Truffle简介 402
15.1.1 Truffle的主要功能 402
15.1.2 Truffle的安装及其相关命令 403
15.2 Truffle创建项目 404
15.2.1 init命令 405
15.2.2 unbox命令 406
15.3 通过Truffle编译项目 408
15.3.1 前置条件与编译 408
15.3.2 Truffle编译输出 409
15.3.3 Truffle编译依赖 410
15.4 Truffle配置文件 411
15.4.1 网络配置 411
15.4.2 输出目录配置 412
15.4.3 测试配置 413
15.4.4 编译配置 413
15.4.5 包管理相关配置 414
15.5 Truffle单元测试与部署 415
15.5.1 使用JavaScript测试 415
15.5.2 JavaScript测试交易 417
15.5.3 使用Solidity测试 419
15.5.4 合约部署 419
15.6 Truffle的其他命令 420
15.6.1 create命令 420
15.6.2 包管理相关命令 421
15.6.3 其他命令 421
第16章 项目流程与众筹实战案例 423
16.1 合约部分 423
16.1.1 项目简介 423
16.1.2 初始化与合约目录 424
16.1.3 部署与测试脚本目录 424
16.2 众筹合约 425
16.2.1 Owned合约 425
16.2.2 SafeMath合约 426
16.2.3 Crowd合约 427
16.3 合约的部署与使用 429
16.3.1 本地部署与测试环境搭建 429
16.3.2 本地部署与测试网络配置 429
16.3.3 本地部署 430
16.3.4 本地测试 430
16.3.5 Ropsten网络测试部署 431
16.4 项目的Web部分 432
16.4.1 初始化Web项目 432
16.4.2 webpack配置 432
16.4.3 package.json配置 433
16.4.4 运行Web项目 434
第17章 以太坊代币标准与ERC20代币案例 437
17.1 代币简介 437
17.1.1 ERC20简介 437
17.1.2 ERC223简介 438
17.1.3 ERC721简介 438
17.2 ERC20标准接口简介 438
17.2.1 基本信息 439
17.2.2 总额与余额 439
17.2.3 转账与授权 439
17.2.4 事件 440
17.3 ERC20代币实例 440
17.3.1 查看以太坊上已有的Token 440
17.3.2 创建Token 441
17.3.3 查看和转移Token 443
17.4 扩展ERC20标准代币 448
17.4.1 销毁代币 448
17.4.2 添加Token 449
17.4.3 冻结与解冻账户 449
17.4.4 买卖Token 450
17.4.5 小结 451
17.5 ERC20代币扩展实例 451
17.5.1 初始化项目 451
17.5.2 添加三方库合约 452
17.5.3 代币合约的逻辑实现 460
17.5.4 代币合约的部署 465
|