智能合约是近年来出现的一种旨在以信息化方式传播、验证、执行合同的计算机协议。尽管可编程的区块链为去中心化的概念在生活中的应用创造了无限可能,但区块链项目的大规模落地与推广仍面临一系列挑战。本书秉承由浅入深、理论与实践相结合的思想,在阐述理论的同时,也对相关操作进行了详细说明。相信读者在阅读完本书后,会对以太坊智能合约有比较完整的了解,更重要的是,会对与以太坊智能合约相关的网络安全问题有充分的认识,并能够在开发和审计过程中积极应对常见的网络安全问题。本书适合智能合约开发人员、智能合约审计人员、网络安全研究人员,以及对区块链、智能合约感兴趣的读者阅读。
章 由浅入深理解区块链
1.1 区块链简介 1
1.2 区块链1.0 ——比特币,一种点对点的现金支付系
1.2.1 比特币的产生 1
1.2.2 深入分析比特币的工作机制 5
1.2.3 结合《比特币白皮书》理解比特币 9
1.2.4 比特币的回顾与剖析 13
1.2.5 比特币的不足 16
1.3 区块链2.0 ——以太坊 18
1.3.1 以太坊的产生 18
1.3.2 深入理解以太坊 18
1.4 区块链3.0 ——DApp 25
1.5 基于以太坊的智能合约入门 25
1.5.1 智能合约的结构 26
1.5.2 EOS上的智能合约及其与以太坊的对比 27
第2章 智能合约开发实战
2.1 以太坊网络 29
2.2 私有链的搭建 30
2.2.1 geth简介 30
2.2.2 geth的安装与配置 31
2.2.3 geth的操作及相关说明 33
2.2.4 以太坊中的账户与密钥 39
2.2.5 查看以太坊网络的状态 40
2.3 Mist和Ethereum Wallet的安装、配置与操作 42
2.3.1 下载与安装 42
2.3.2 通过Ethereum Wallet连接本地私有库 42
2.3.3 用Mist实现多重 45
2.4 以太坊智能合约开发实战 52
2.4.1 开发环境 52
2.4.2 编写个智能合约 54
2.5 ERC-20 Token合约 58
2.5.1 Token合约概述 58
2.5.2 ERC-20 Token合约详解 60
2.5.3 对ERC-20 Token合约的进一步说明 61
2.6 本章小结 63
第3章 智能合约语法实战
3.1 造就骨架——建立合约框架 64
3.2 初添血肉——添加状态变量 66
3.2.1 数据类型简介 66
3.2.2 添加uint类型的变量 67
3.2.3 添加结构体 67
3.2.4 添加数组 68
3.3 再添经脉——添加函数 70
3.3.1 添加一个简单的函数 70
3.3.2 添加一个复杂的函数 72
3.3.3 特别的函数——回退函数 75
3.4 与外界交互——添加事件 80
3.5 大脑的沟通——多用户拓展 82
3.5.1 神经的连接——映射和地址 82
3.5.2 神经的传输——msg.sender 85
3.5.3 神经兴奋的判别——require方法 87
3.5.4 生命的传承——Inheritance 87
3.5.5 血液里的本能——“猎食”和“繁殖” 90
3.5.6 DNA的融合 91
3.5.7 各司其职的隐私——关于函数可见性的更多内容 92
3.5.8 同化作用——合约交互 93
3.5.9 同化作用的结果——获得奖励 98
3.6 高级Solidity理论 100
3.6.1 外部依赖关系 100
3.6.2 权限的产生——Ownable Contracts 101
3.6.3 权限的确认——函数修饰符onlyOwner 105
3.6.4 运转的动力——gas 107
3.7 Truffle的介绍与安装 108
3.8 创建、部署、使用Token合约 110
3.8.1 Truffle的box和OpenZeppeli 110
3.8.2 安装tutorialtokebox和OpenZeppeli 111
3.8.3 创建TutorialToken合约 112
3.8.4 合约的编译与部署 114
3.8.5 合约操作与实践 116
3.9 创建、部署、使用ICO合约 121
3.9.1 ICO简介 121
3.9.2 创建ICO合约 122
3.9.3 ICO合约的编译与部署 125
3.9.4 ICO合约的操作实践 130
3.10 本章小结 131
第4章 智能合约常见漏洞
4.1 智能合约审计指南 132
4.1.1 智能合约审计概述 132
4.1.2 智能合约审计报告的结构 132
4.2 整型溢出漏洞 133
4.2.1 漏洞概述 133
4.2.2 代码片段 133
4.2.3 漏洞分析与调试 134
4.2.4 相关案例 139
4.2.5 规避整型溢出的神器——SafeMath库 140
4.3 重入漏洞 141
4.3.1 漏洞概述 141
4.3.2 代码片段 148
4.3.3 漏洞分析、调试与防范 149
4.3.4 相关案例 155
4.4 访问控制缺陷 155
4.4.1 漏洞概述 155
4.4.2 代码片段 156
4.4.3 漏洞分析、调试与防范 157
4.4.4 相关案例 162
4.5 特权功能暴露 162
4.5.1 漏洞概述 162
4.5.2 代码片段 163
4.5.3 漏洞分析、调试与防范 163
4.5.4 相关案例 170
4.6 跨合约调用漏洞 170
4.6.1 漏洞概述 170
4.6.2 代码片段 172
4.6.3 漏洞分析、调试与防范 173
4.6.4 相关案例 176
4.7 拒绝服务漏洞 177
4.7.1 漏洞概述 177
4.7.2 代码片段 177
4.7.3 漏洞分析、调试与防范 178
4.7.4 相关案例 185
4.8 矿工特权隐患 185
4.8.1 漏洞概述 185
4.8.2 代码片段 185
4.8.3 漏洞分析与防范 186
4.8.4 相关案例 187
4.9 短地址攻击 187
4.9.1 漏洞概述 187
4.9.2 代码片段 189
4.9.3 漏洞分析、调试与防范 190
4.10 tx.origin漏洞 195
4.10.1 漏洞概述 195
4.10.2 代码片段 195
4.10.3 漏洞分析、调试与防范 195
4.11 本章小结 199
第5章 智能合约蜜罐
5.1 智能合约蜜罐概述 201
5.2 WhaleGiveaway1 201
5.2.1 蜜罐分析 201
5.2.2 代码复现 203
5.3 Gift_1_ETH 207
5.3.1 蜜罐分析 207
5.3.2 代码复现 210
5.4 MultiplicatorX3 213
5.4.1 蜜罐分析 213
5.4.2 代码复现 215
5.5 TestBank 217
5.5.1 蜜罐分析 217
5.5.2 代码复现 221
5.6 CryptoRoulette 223
5.6.1 蜜罐分析 223
5.6.2 代码复现 225
5.7 OpenAddressLottery 226
5.7.1 蜜罐分析 226
5.7.2 代码复现 229
5.8 KingOfTheHill 231
5.8.1 蜜罐分析 231
5.8.2 代码复现 233
5.9 RACEFORETH 235
5.10 For_Test 237
5.10.1 蜜罐分析 237
5.10.2 代码复现 239
5.11 DividendDistributor 240
5.11.1 蜜罐分析 240
5.11.2 代码复现 244
5.12 与智能合约蜜罐相关的安全建议 246
5.13 本章小结 246
第6章 常见智能合约分析与审计工具
6.1 智能合约分析工具——Solgraph 247
6.1.1 Solgraph简介 247
6.1.2 Solgraph的安装与使用 248
6.2 智能合约审计工具——mythril 250
6.2.1 mythril的安装 251
6.2.2 mythril的使用与功能说明 252
6.3 智能合约审计平台——SECURIFY 257
6.3.1 SECURIFY概述 257
6.3.2 SECURIFY系统探究 259
6.3.3 SECURIFY的使用 261
第7章 智能合约审计实战
7.1 智能合约审计清单 264
7.2 博彩游戏合约审计 265
7.2.1 合约代码与合约功能浏览 265
7.2.2 审计报告 268
7.3 CryptoKitties合约审计 274
7.4 本章小结 277
第8章 智能合约字节码解构
8.1 打开引擎盖——智能合约下的字节码 278
8.2 解构步——creatio 282
8.3 解构第二步——runtime 291
8.3.1 函数选择器 292
8.3.2 函数包装器 295
8.3.3 函数主体 301
8.3.4 元数据散列 305
8.4 本章小结 309
参考文献 310
交易流程
发货方式
1、自动:在上方保障服务中标有自动发货的商品,拍下后,将会自动收到来自卖家的商品获取(下载)链接;
2、手动:未标有自动发货的的商品,拍下后,卖家会收到邮件、短信提醒,也可通过QQ或订单中的电话联系对方。
退款说明
1、描述:源码描述(含标题)与实际源码不一致的(例:描述PHP实际为ASP、描述的功能实际缺少、版本不符等);
2、演示:有演示站时,与实际源码小于95%一致的(但描述中有"不保证完全一样、有变化的可能性"类似显著声明的除外);
3、发货:手动发货源码,在卖家未发货前,已申请退款的;
4、服务:卖家不提供安装服务或需额外收费的(但描述中有显著声明的除外);
5、其他:如质量方面的硬性常规问题等。
注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。交易中的商品,卖家无法对描述进行修改!
注意事项
1、在未拍下前,双方在QQ上所商定的内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准);
2、在商品同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外);
3、在没有"无任何正当退款依据"的前提下,写有"一旦售出,概不支持退款"等类似的声明,视为无效声明;
4、虽然交易产生纠纷的几率很小,但请尽量保留如聊天记录这样的重要信息,以防产生纠纷时便于网站工作人员介入快速处理。