新書推薦:
《
万千教育学前·透视学前儿童的发展:解析幼儿教师常问的那些问题
》
售價:NT$
265.0
《
慈悲与玫瑰
》
售價:NT$
398.0
《
启蒙的辩证:哲学的片简(法兰克福学派哲学经典,批判理论重要文本)
》
售價:NT$
347.0
《
心跳重置
》
售價:NT$
269.0
《
云中记
》
售價:NT$
347.0
《
中国古代妇女生活(中国古代生活丛书)
》
售價:NT$
214.0
《
你的认知正在阻碍你
》
售價:NT$
296.0
《
我们身边的小鸟朋友:手绘观鸟笔记
》
售價:NT$
356.0
|
編輯推薦: |
本书详尽讲解了区块链与以太坊的核心知识,深入Solidity编程精髓,并通过丰富的实例助您掌握智能合约的开发与交互。适合作为高等院校区块链、软件工程相关专业的教材,也适合有一定编程基础的读者自学。
|
內容簡介: |
智能合约是区块链技术的重要组成部分,同时也是去中心化应用(DApp)开发过程中的核心。智能合约可以使用户实现与区块链的交互,执行用户操作。本书分为8章,讲解了以太坊和智能合约、搭建以太坊智能合约环境、Solidity基础、Solidity高级用法、智能合约应用、智能合约安全、智能合约交互、智能合约开发框架等内容。本书致力于让读者在学会Solidity语法的同时,也能通过案例编码练习提升编程能力。
本书适合作为高等院校区块链、软件工程相关专业的教材,也可作为有编程基础或经验的读者、去中心化应用开发工程师的自学用书。
|
關於作者: |
江海,现任江西软件职业技术大学区块链学院副院长,江西省区块链技术专委会委员、江西省区块链学会副秘书长、江西省计算机用户协会专家。
于洪伟,北京千锋互联科技有限公司教学主管,8年互联网开发经验,曾任光大银行技术研发,负责产品研发、技术牵引等工作。完成数十个大中型项目,多年的项目开发和项目管理经验。出版发行《以太坊源码分析》、《Fabric网络学习》、《区块链去中心化钱包》等系列视频和教程。
吴书博,河北工程技术学副教授,主要研究领域经济管理、教育管理。
|
目錄:
|
第1章 以太坊和智能合约1
1.1 区块链简介及分类 1
1.1.1 区块链发展起源 1
1.1.2 从0到1的比特币系统 1
1.1.3 从比特币到区块链 3
1.1.4 区块链简介 3
1.1.5 区块链分类 4
1.2 以太坊基础 5
1.2.1 以太坊简介 5
1.2.2 以太坊发展历史 5
1.3 以太坊核心概念 6
1.3.1 以太坊 6
1.3.2 以太币 6
1.3.3 Gas、Gas Price、Gas Fees 7
1.3.4 以太坊虚拟机 7
1.3.5 账户 8
1.3.6 交易 9
1.3.7 区块 10
1.3.8 节点和客户端 10
1.3.9 共识机制 12
1.4 智能合约与去中心化应用 14
1.4.1 智能合约 14
1.4.2 去中心化应用 14
1.4.3 去中心化应用的特点 14
1.5 比特币与以太坊系统架构 15
1.5.1 比特币系统架构 15
1.5.2 以太坊系统架构 16
本章小结 17
能力自测 17
第2章 搭建以太坊智能合约环境 18
2.1 以太坊公共网络 18
2.1.1 以太坊主网络 18
2.1.2 以太坊测试网络 18
2.1.3 Layer 2测试网络 20
2.2 以太坊专用网络 21
2.2.1 开发网络 21
2.2.2 联盟链 22
2.3 以太坊客户端 22
2.3.1 为什么要有客户端 22
2.3.2 安装Geth客户端 22
2.3.3 同步区块 24
2.3.4 数据存放目录 24
2.3.5 启动节点 24
2.4 启动客户端 24
2.4.1 启动主网客户端 24
2.4.2 启动测试网络客户端 25
2.4.3 启动客户端的可选项配置 25
2.5 搭建私有链 25
2.5.1 准备工作 26
2.5.2 创建创世区块配置文件 26
2.5.3 初始化:将创世区块信息写入区块链 27
2.5.4 启动私有节点 28
2.5.5 Geth的JavaScript控制台操作 29
2.6 搭建多节点私有链 31
2.6.1 创建节点目录 32
2.6.2 分别初始化节点 32
2.6.3 启动节点 32
2.6.4 查看节点信息 32
2.6.5 手动添加节点 33
2.7 以太坊钱包 33
2.7.1 以太坊钱包的概念 33
2.7.2 钱包的分类 34
2.7.3 钱包中的重要概念 35
2.8 MetaMask钱包 36
2.8.1 MetaMask简介 36
2.8.2 MetaMask的安装 36
2.8.3 创建新钱包 36
2.8.4 连接不同的网络 38
2.9 Solidity编程语言和开发工具 40
2.9.1 Solidity简介 40
2.9.2 Solidity程序结构和编程规范 41
2.9.3 智能合约开发工具Remix 42
2.9.4 智能合约部署和调用 43
本章小结 43
能力自测 44
第3章 Solidity基础 45
3.1 值类型 45
3.1.1 布尔型 45
3.1.2 整型 46
3.1.3 地址类型 47
3.1.4 字节数组 48
3.1.5 枚举 49
3.2 函数 50
3.2.1 函数的概念和定义 50
3.2.2 函数的可见性 50
3.2.3 pure和view关键字 51
3.2.4 payable关键字 53
3.2.5 函数的返回值 53
3.3 引用类型 54
3.3.1 数据存储位置 55
3.3.2 数据位置与赋值规则 56
3.3.3 数组 58
3.3.4 结构体 62
3.3.5 映射类型 63
3.4 变量初始值和常量 64
3.4.1 变量初始值 65
3.4.2 delete操作符 65
3.4.3 常量 66
3.5 流程控制 67
3.5.1 条件语句 67
3.5.2 循环语句 69
3.5.3 中断语句 71
3.6 特殊函数 73
3.6.1 构造函数 QE_肨麭 _73
3.6.2 析构函数 74
3.6.3 函数修改器 74
3.6.4 常见内置函数 75
3.7 事件 76
3.7.1 事件的定义 76
3.7.2 触发事件 76
3.8 继承 77
3.8.1 继承 77
3.8.2 函数重写 78
3.8.3 多继承 79
3.9 抽象合约 79
3.10 接口 80
3.10.1 接口的定义 80
3.10.2 实现接口 80
3.10.3 接口与抽象合约的区别 81
3.11 错误处理 81
3.11.1 错误处理机制 81
3.11.2 require和assert 82
3.11.3 revert函数 83
3.11.4 自定义error 84
本章小结 85
能力自测 85
第4章 Solidity高级用法 86
4.1 函数重载 86
4.1.1 函数重载的定义 86
4.1.2 实参匹配 86
4.2 库的使用 87
4.2.1 库的概念和定义 87
4.2.2 使用库合约 88
4.2.3 库示例和OpenZeppelin 88
4.3 导入并使用其他合约 92
4.3.1 文件路径导入 92
4.3.2 URL导入 93
4.3.3 安装库文件导入 94
4.4 接收以太币 94
4.4.1 msg全局变量 94
4.4.2 payable修饰符 95
4.4.3 receive和fallback函数 95
4.5 转账交易 98
4.5.1 transfer函数 98
4.5.2 send函数 98
4.5.3 call函数 98
4.6 合约间的交互 99
4.6.1 库的缺点 99
4.6.2 通过合约(接口)和地址创建合约引用 100
4.6.3 使用call调用其他合约 103
4.6.4 使用delegatecall调用其他合约 103
4.7 创建合约 105
4.7.1 CREATE操作码 105
4.7.2 CREATE2操作码 106
4.8 ABI 110
4.8.1 ABI简介 110
4.8.2 ABI的结构 110
4.8.3 ABI编解码 113
4.9 字节码 114
4.10 哈希函数 114
4.10.1 哈希函数 114
4.10.2 哈希函数的分类 115
4.10.3 Keccak算法的使用 116
4.11 异常捕获与处理 117
本章小结 119
能力自测 119
第5章 智能合约应用 120
5.1 钱包应用 120
5.1.1 钱包合约程序 120
5.1.2 多签钱包合约 122
5.2 ERC系列代币 126
5.2.1 ERC简介 126
5.2.2 ERC20代币 127
5.2.3 ERC721代币 131
5.2.4 ERC1155代币 141
5.3 默克尔树及其应用 152
5.3.1 默克尔树简介 152
5.3.2 默克尔树和默克尔证明 153
5.3.3 默克尔树的应用 155
本章小结 160
能力自测 160
第6章 智能合约安全 161
6.1 重放攻击 161
6.1.1 重放攻击原理 161
6.1.2 事件回顾及分析 161
6.1.3 简单重放攻击保护提案 162
6.1.4 防止重放攻击 162
6.2 重入攻击 163
6.2.1 重入攻击原理 163
6.2.2 事件回顾及分析 163
6.2.3 解决思路 165
6.3 整数溢出 165
6.3.1 整型溢出问题 165
6.3.2 溢出漏洞事件分析 166
6.4 访问控制 166
6.4.1 访问控制 166
6.4.2 漏洞分析 167
6.4.3 访问控制总结 168
6.5 条件竞争 170
6.5.1 条件竞争概念 170
6.5.2 分析和修复 171
6.6 选择器冲突 172
6.6.1 选择器冲突概念 172
6.6.2 事件回顾分析 173
6.7 短地址攻击 175
6.7.1 短地址攻击简介 175
6.7.2 短地址攻击防御 176
本章小结 176
能力自测 177
第7章 智能合约交互 178
7.1 以太坊JavaScript库及环境准备 178
7.1.1 Node.js简介 179
7.1.2 Node.js环境安装 179
7.1.3 Node.js程序示例 180
7.1.4 剖析package.json 181
7.1.5 npm使用介绍 183
7.2 Web3.js使用方法 184
7.2.1 Web3.js简介 184
7.2.2 Web3.js安装 185
7.2.3 连接到以太坊节点 186
7.2.4 查看以太坊链上信息 188
7.2.5 Web3库的API介绍 191
7.2.6 使用Web3编译部署合约 195
7.3 Ethers.js使用方法 200
7.3.1 Ethers.js简介 200
7.3.2 Ethers.js模块及API介绍 200
7.3.3 安装Ethers.js库 203
7.3.4 使用Ethers.js连接到本地节点 204
7.3.5 Ethers.js的基本使用方法 205
本章小结 208
能力自测 208
第8章 智能合约开发框架 209
8.1 框架的功能和举例 209
8.2 Truffle框架基础 210
8.2.1 Truffle简介 210
8.2.2 Truffle的构成及作用 210
8.2.3 Truffle安装 210
8.2.4 Truffle命令 211
8.2.5 使用Truffle创建项目 211
8.2.6 truffle-config.js文件解析 213
8.2.7 编译部署合约 215
8.3 Truffle框架进阶 217
8.3.1 控制台交互 217
8.3.2 与合约交互 217
8.4 Hardhat框架 220
8.4.1 Hardhat简介 220
8.4.2 安装Hardhat 221
8.4.3 创建智能合约应用 221
8.4.4 编写智能合约程序 222
8.4.5 编写测试合约 224
8.4.6 编译和部署合约 225
8.4.7 部署到指定网络环境 227
本章小结 228
能力自测 229
附录 本书教学资源 230
参考文献 231
|
內容試閱:
|
党的二十大报告指出 ,加快发展数字经济 ,促进数字经济和实体经济深度融合 ,打造具有国际竞争力的数字产业集群。区块链作为数字经济的基础支撑技术之一 ,促进了数字经济的创新和多样化 ,推进了数字经济新业务模式和服务的发展。
智能合约是区块链应用开发的核心 ,目前主要的智能合约开发语言有 Vyper、Serpent和 Solidity等。Vyper旨在提供更安全和可靠的合约编写方式 ,但 Vyper的生态系统相对较小 ;Serpent是一种较早期的智能合约开发语言 ,语法类似于 Python,易于理解和编写 ,但缺乏一些高级特性和工具支持 ,已经逐渐被 Solidity取代 ;Solidity是最常用的智能合约开发语言 ,广泛应用于以太坊平台 ,其语法类似于 JavaScript,易于学习和使用 ,同时具备丰富的库和工具生态系统 ,提供了大量的开发资源和支持。
目前市面上缺少系统介绍从以太坊区块链网络到智能合约语言语
法,再到智能合约交互的书籍 ,网络上的相关内容普遍比较零散 ,这为
很多刚刚接触区块链技术、刚刚学习智能合约程序编写的读者带来诸
多不便。
编者最早于 2016年接触到比特币白皮书及其相关技术 ,进而系统了解和学习了区块链相关技术知识 ;从2018年开始接触 Solidity编程语言,并开始编写智能合约程序 ,了解和学习相关的技术生态。近年来 ,支持智能合约的开发工具和编程库层出不穷 ,借助 Web3技术新潮流呈现迅猛发展之势。在实际工作中 ,编者发现有些书籍偏向于介绍区块链的理论 ,而有些书籍偏向于介绍智能合约开发的基础语法 ,缺少操作和使用流程的介绍 ,也缺少从生态的角度对智能合约开发相关内容的介绍。基于此 ,编者萌生了写一本关于智能合约开发的书的想法。在家人和朋友的鼓励下 ,在学习其他优秀书籍的基础上 ,这一想法得以逐步付诸实施,最终完成了读者现在看到的《区块链智能合约开发实战》这本书。
本书以 1.10.26版本的 Geth客户端、0.8.20版本的 Solidity语言为基础 ,详细介绍了以太坊核心概念、Geth的操作和使用流程 ,以及 Soiijhr.s
ldty开发相关的语法和流程规范。得益于 Web3.s和 Etesj两个功能强大的 JavaScript库,用户可以与智能合约进行交互 ,本书基
于1.8.j6.tesj
0版本的 Web3.s和2.1版本的 Ehr.s介绍两个库的具体用法和操作步骤。除此以外,安全问题是开发智能合约的重中之重,本书对常见的智能合约代码漏洞做了介绍和分析,并给出了预防和保护措施。
本书分为五个部分。
第一部分为第1、2章,这一部分介绍了区块链技术的发展阶段和以太坊的基础环境,方便读者从基础概念理解区块链的渊源,掌握以太坊网络的功能和概念。
第二部分为第3、4章,这一部分主要介绍了 Solidity语言的语法用法和智能合约编码规范,帮助读者建立编程习惯。
第三部分为第5章,这一部分在 Solidity基础语法的基础上,结合实际应用场景讲解智能合约的具体实践,帮助读者了解和掌握以太坊智能合约生态。
第四部分为第6章,这一部分主要介绍智能合约的安全问题,包括常见的代码漏洞和智能合约攻击方法分析及建议。js
第五部分为第7、8章,这一部分主要介绍智能合约应用开发的相关技术,使用 Web3.和 Ethersjs库实现与智能合约的通信交互;Truf
le和 Hardhat是提高智能合约开发效率的常用框架。.
在编写本书的过程中,编者尽力将自己学习积累的知识和教学经验转化为易于理解和实践的内容。然而,由于区块链技术和智能合约技术在不断地发展和变化,本书无法涵盖所有最新的进展和最佳实践。鉴于编者能力有限,本书可能存在深度不够等缺点,希望读者能够理解,并对本书中可能存在的不足之处保持宽容。如有任何问题、建议,我们将非常乐意听取您的反馈,以便改进本书的内容。
最后,希望本书能够为读者提供有价值的知识和实践指导,帮助读者在智能合约编程的过程中取得进步。
编者
2024年1月
|
|