Solidity智能合约开发技术与实战

“十四五”时期国家重点出版物,以太坊Solidity智能合约开发教程,实战案例丰富,配套资源齐全,提供微课视频。
分享 推荐 0 收藏 4 阅读 232
李晓黎 (作者) 978-7-115-58943-9

关于本书的内容有任何问题,请联系 人邮社 王宣

1.结合读者兴趣,讲解区块链基础理论,实现区块链技术科普。
作为去中心化的分布式系统,区块链的工作原理和运作方式与传统的中心化系统有很多不同之处。为了使读者充分理解基础的技术框架和工作原理,本书第 1 章结合人们耳熟能详的经典区块链应用——比特币,介绍区块链技术的工作原理。虽然讲解的是区块链基础理论,但是本书结合了读者感兴趣的主题,例如“区块链为什么会成为国家战略”等。
2.依托经典实例,分析智能合约相关原理,锤炼 DApp 开发实战技能。
作为区块链开发的入门级教材,本书通过各种流程图、结构图、架构图来描述区块链技术的数据结构和工作原理。本书将介绍很多基于以太坊智能合约 DApp 的经典实例,包括第 6 章的“明日之星”在线投票应用、第 8 章的代币模型实例 MetaCoin 和宠物商店实例 pet-shop、第 9 章的在测试网络中基于 Web3.js 完成以太坊交易实例以及第 10 章的智能合约的安全审计实例。这些经典实例为读者理解抽象概念提供了捷径,可以帮助读者系统掌握区块链技术在各领域的应用以及这些应用的实现过程。
3.面向高校教学,配套丰富教辅资源,录制优质微课视频。
编者为使用本书的教师制作了配套的电子教案,并提供各章课后习题的参考答案和7个实验的电子文档,以及书中涉及的所有实例程序的源码。此外,编者还针对本书各章中的重点及难点录制了优质微课视频,助力读者更好地开展自主学习。读者可以通过人邮教育社区下载本书的配套资源。

特别说明

“十四五”时期国家重点出版物出版专项规划项目

1. 基于区块链平台——以太坊,介绍区块链的典型应用场景。
2. 内容涵盖区块链技术科普、智能合约开发实践以及区块链应用的安全设计原则。
3. 配套课件PPT、源代码、微课视频等资源,助力读者扎实提升综合素质。

内容摘要

在区块链发展历程中,以太坊的诞生具有里程碑式的意义。本书介绍使用Solidity开发以太坊智能合约DApp的方法,内容涵盖Solidity的基本语法,使用开发框架Truffle开发、部署、测试以太坊DApp的方法,通过以太坊测试网络进行交易的方法,开发安全智能合约所应遵守的规范和对智能合约进行安全审计的方法等。读者在阅读本书时可以充分了解和体验以太坊智能合约的强大功能,以及使用Solidity开发以太坊智能合约DApp的便利。
本书可作为高等院校计算机、软件工程、大数据、人工智能等专业相关课程的教材,也可供区块链应用程序开发人员参考使用。

目录

【章名目录】
第1章 区块链技术基础
第2章  以太坊区块链
第3章 Solidity编程基础
第4章 常用语句
第5章 智能合约与函数
第6章 以太坊JavaScript API——Web3.js
第7章 事件与日志
第8章 以太坊DApp开发框架Truffle
第9章 以太坊测试网络
第10章 编写安全的智能合约

【详细目录】
第1章 区块链技术基础
1.1 从比特币说起 1
1.1.1 比特币的发展历程 1
1.1.2 什么是比特币系统 2
1.1.3 共识算法和比特币的挖矿 7
1.1.4 双花问题 10
1.1.5 区块链技术赋予比特币“价值” 13
1.2 区块链的工作原理及底层技术 15
1.2.1 分布式系统的概念 15
1.2.2 区块链的架构设计 15
1.2.3 加密算法 17
1.2.4 区块链的分类 19
1.2.5 区块链为什么会成为国家战略 19
1.2.6 区块链技术的发展历程 21
1.2.7 智能合约 22
1.2.8 区块链的编程语言 23
1.3 本章小结 24
习题 24

第2章  以太坊区块链
2.1 以太坊的发展历程与特色 25
2.1.1 以太坊的诞生与发展 25
2.1.2 以太坊与比特币系统的对比 27
2.2 以太坊的工作原理 28
2.2.1 以太坊节点 28
2.2.2 以太坊的状态机 28
2.2.3 以太坊网络的总体架构 29
2.2.4 DApp 31
2.2.5 DApp浏览器 32
2.2.6 以太坊的数据结构与存储方式 33
2.2.7 以太坊的分叉 36
2.2.8 Gas和以太币 36
2.2.9 以太坊账户、钱包和交易 38
2.2.10 以太坊的PoS共识算法 38
2.3 搭建以太坊私有链 39
2.3.1 搭建测试环境 39
2.3.2 安装以太坊客户端Geth 46
2.3.3 初始化创世区块 49
2.3.4 创建开发者账户 50
2.3.5 以开发者模式启动私有链 51
2.3.6 私有链账户管理 51
2.3.7 在私有链中挖矿 53
2.3.8 转账操作 54
2.4 本章小结 55
习题 55

第3章 Solidity编程基础
3.1 Solidity的第一个示例程序 57
3.1.1 实时在线Solidity编辑器Remix 57
3.1.2 Solidity Hello World程序 58
3.1.3 使用Visual Studio Code开发Solidity程序 61
3.2 常量和变量 63
3.2.1 常量 63
3.2.2 变量 64
3.3 基本数据类型 66
3.3.1 字符串型 66
3.3.2 整型 68
3.3.3 定长浮点型 69
3.3.4 布尔类型 69
3.3.5 地址类型 70
3.3.6 合约类型 72
3.4 复合数据类型 72
3.4.1 枚举类型 72
3.4.2 结构体 73
3.4.3 映射 74
3.4.4 数组 75
3.5 本章小结 77
习题 77

第4章 常用语句
4.1 赋值语句 79
4.2 分支语句 80
4.2.1 if语句 80
4.2.2 if…else if…else…语句 81
4.3 循环语句 82
4.3.1 for语句 82
4.3.2 while语句 83
4.3.3 do…while…语句 84
4.4 本章小结 85
习题 86

第5章 智能合约与函数
5.1 智能合约编程基础 87
5.1.1 状态变量的可见性 87
5.1.2 智能合约的构造函数 90
5.1.3 智能合约之间的继承 91
5.2 函数编程基础 92
5.2.1 定义函数 92
5.2.2 函数修饰符 93
5.2.3 函数的参数 97
5.3 函数的高级应用 98
5.3.1 自毁函数 98
5.3.2 内置函数 99
5.3.3 函数重载 100
5.4 外部函数 101
5.4.1 导入外部函数 101
5.4.2 函数库 102
5.4.3 Fallback函数 103
5.5 抽象合约、接口和继承 106
5.5.1 抽象合约 106
5.5.2 接口 107
5.5.3 继承 107
5.6 异常处理函数 108
5.6.1 assert() 函数 108
5.6.2 require() 函数 109
5.6.3 revert() 函数 109
5.7 本章小结 110
习题 110

第6章 以太坊JavaScript API——Web3.js
6.1 Web3.js概述 111
6.1.1 什么是Web3.js 111
6.1.2 安装Web3.js 111
6.1.3 第一个Web3.js的小实例 113
6.1.4 在网页中使用Web3.js 114
6.1.5 本章实例的执行环境 115
6.1.6 JavaScript Promise对象 115
6.2 区块编程 117
6.2.1 标识区块 117
6.2.2 获取当前区块编号 118
6.2.3 获取默认区块编号 119
6.2.4 获取指定区块详情 119
6.2.5 获取指定叔区块 120
6.3 以太坊账户与交易编程 120
6.3.1 获取账户列表 120
6.3.2 默认账户和币基账户 121
6.3.3 获取账户余额 122
6.3.4 获取指定区块中的交易数量 123
6.3.5 获取指定区块中的交易详情 125
6.3.6 根据交易哈希获取交易对象 126
6.3.7 获取交易的收据对象 127
6.3.8 向以太坊网络提交交易 129
6.3.9 估算交易的Gas用量 131
6.4 智能合约编程基础 132
6.4.1 以太坊智能合约的ABI 132
6.4.2 以太坊智能合约的字节码 135
6.4.3 在Visual Studio Code中生成智能合约的 ABI和字节码 140
6.4.4 JSON-RPC 141
6.5 在Web3.js中与智能合约进行交互 148
6.5.1 创建合约对象 148
6.5.2 调用合约函数 151
6.6 Web3.js开发实例:“明日之星”在线投票 155
6.6.1 编写投票智能合约 155
6.6.2 部署和测试投票智能合约 157
6.7 本章小结 167
习题 167

第7章 事件与日志
7.1 事件 169
7.1.1 事件模型 169
7.1.2 定义和触发事件 170
7.1.3 在Web3.js中监听事件 170
7.2 日志 176
7.2.1 在Remix中查看日志数据 176
7.2.2 底层日志接口 177
7.2.3 检索日志 179
7.3 本章小结 180
习题 181

第8章 以太坊DApp开发框架Truffle
8.1 Truffle开发框架概述 182
8.1.1 Truffle开发框架的基本特性 182
8.1.2 安装Truffle开发框架 182
8.1.3 选择以太坊客户端 183
8.1.4 个人区块链Ganache 183
8.2 Truffle项目管理 185
8.2.1 创建项目 185
8.2.2 配置Truffle项目 188
8.2.3 编译合约 189
8.2.4 部署合约 190
8.3 智能合约编程 193
8.3.1 与合约进行交互 193
8.3.2 Truffle Develop 198
8.3.3 Truffle框架与智能合约MetaCoin交互的前端应用示例 200
8.3.4 在Truffle框架中使用MetaMask 205
8.3.5 使用Truffle react项目模板开发基于以太坊智能合约的DApp 211
8.4 测试合约 221
8.4.1 Mocha测试框架简介 221
8.4.2 使用JavaScript编写测试脚本 223
8.4.3 使用Solidity编写测试脚本 224
8.5 Truffle示例项目宠物商店pet-shop 226
8.5.1 创建pet-shop项目 226
8.5.2 编写智能合约 226
8.5.3 编译和部署智能合约 227
8.5.4 开发前端应用 227
8.5.5 安装并配置MetaMask钱包 231
8.5.6 运行应用程序 232
8.6 本章小结 234
习题 234

第9章 以太坊测试网络
9.1 主网络和测试网络 236
9.1.1 以太坊测试网络概述 236
9.1.2 获取测试币 237
9.2 通过Infura节点集群连接以太坊网络 238
9.2.1 注册Infura账户 238
9.2.2 通过Infura连接以太坊网络 238
9.2.3 项目ID和项目密钥 241
9.2.4 白名单 243
9.2.5 部署智能合约到Ropsten网络 243
9.3 在测试网络中基于Web3.js完成以太坊交易 245
9.3.1 以太坊交易的过程 245
9.3.2 使用ethereumjs-tx实现与以太坊的交易 246
9.3.3 完整的交易实例 249
9.4 本章小结 252
习题 252

第10章 编写安全的智能合约
10.1 以太坊智能合约安全设计的基本原则 253
10.1.1 需要遵循的安全理念 253
10.1.2 从软件工程技术角度规避风险 256
10.1.3 开发文档 263
10.1.4 关于报错赏金 264
10.2 常见的针对智能合约的攻击 265
10.2.1 重入问题 265
10.2.2 抢先交易 268
10.2.3 强制发送以太币到智能合约 269
10.3 智能合约开发过程中的安全建议 269
10.3.1 关于以太坊智能合约系统开发的建议 270
10.3.2 Solidity的安全问题 271
10.4 智能合约的安全审计 274
10.4.1 如何对智能合约进行审计 274
10.4.2 一个审计报告的例子 275
10.4.3 使用Mythril分析Solidity智能合约的安全漏洞 282
10.5 本章小结 287
习题 287

读者评论

赶紧抢沙发哦!

我要评论

作者介绍

李晓黎:
软件开发工程师,毕业于吉林大学计算机系;自2006年以来,带领团队一直从事网络管理软件、企业ERP系统和电商平台等的开发与建设工作,具有中国投资银行、国家开发银行、中信银行等多家银行从业经历,参与银行信息化建设、网银平台开发、智能合约设计与开发工作多年,在系统软件开发、团队组织管理和系统架构设计等领域积累了丰富的实战经验。

相关图书

人邮微信
本地服务
人邮微信
教师服务
微信二维码
读者服务
读者服务
返回顶部
返回顶部