logo资料库

Solidity编程 - 构建以太坊和区块链智能合约的初学者指南.pdf

第1页 / 共188页
第2页 / 共188页
第3页 / 共188页
第4页 / 共188页
第5页 / 共188页
第6页 / 共188页
第7页 / 共188页
第8页 / 共188页
资料共188页,剩余部分请下载后查看
第1章 区块链、以太坊和智能合约
1.1 什么是区块链
1.2 为什么是区块链
1.3 加密技术
1.3.1 散列
1.3.2 数字签名
1.4 以太币
1.5 gas
1.6 区块链和以太坊架构
1.6.1 区块如何互相连接
1.6.2 交易和区块如何互相连接
1.7 以太坊节点
1.7.1 EVM
1.7.2 以太坊挖矿节点
1.7.3 如何挖矿
1.8 以太坊账户
1.8.1 外部账户
1.8.2 合约账户
1.9 交易
1.10 区块
1.11 端到端的交易
1.12 什么是合约
1.13 什么是智能合约
1.14 如何部署合约
1.15 本章小结
第2章 安装以太坊和Solidity
2.1 以太坊网络
2.1.1 主网
2.1.2 测试网络
2.1.3 私有网络
2.1.4 联盟网络
2.2 Geth
2.3 搭建一个私有网络
2.4 ganache-cli
2.5 Solidity编译器
2.6 web3 JavaScript库
2.7 Mist钱包
2.8 MetaMask
2.9 本章小结
第3章 Solidity介绍
3.1 以太坊虚拟机
3.2 Solidity和Solidity文件
3.2.1 预编译指令
3.2.2 注释
3.2.3 import语句
3.2.4 合约
3.3 合约的结构
3.3.1 状态变量
3.3.2 结构
3.3.3 修改器
3.3.4 事件
3.3.5 枚举
3.3.6 函数
3.4 Solidity中的数据类型
3.4.1 值类型
3.4.2 引用类型
3.5 存储和内存数据位置
3.5.1 规则1
3.5.2 规则2
3.5.3 规则3
3.5.4 规则4
3.5.5 规则5
3.5.6 规则6
3.5.7 规则7
3.5.8 规则8
3.6 字面量
3.7 整型
3.8 布尔型
3.9 字节数据类型
3.10 数组
3.10.1 固定数组
3.10.2 动态数组
3.10.3 特殊数组
3.10.4 数组属性
3.11 数组的结构
3.12 枚举
3.13 地址
3.14 映射
3.15 本章小结
第4章 全局变量和函数
4.1 var类型变量
4.2 变量声明提前
4.3 变量作用域
4.4 类型转换
4.4.1 隐式转换
4.4.2 显式转换
4.5 区块和交易全局变量
4.5.1 交易和消息全局变量
4.5.2 tx.origin 和msg.sender的区别
4.6 加密全局变量
4.7 地址全局变量
4.8 合约全局变量
4.9 本章小结
第5章 表达式和控制结构
5.1 Solidity表达式
5.2 if决策控制
5.3 while循环
5.4 for循环
5.5 do...while循环
5.6 break语句
5.7 continue语句
5.8 return语句
5.9 本章小结
第6章 编写智能合约
6.1 智能合约
6.2 编写一个简单的合约
6.3 创建合约
6.3.1 使用new关键字
6.3.2 使用合约地址
6.4 构造函数
6.5 合约组合
6.6 继承
6.6.1 单继承
6.6.2 多级继承
6.6.3 分层继承
6.6.4 多重继承
6.7 封装
6.8 多态性
6.8.1 函数多态性
6.8.2 合约多态性
6.9 方法覆盖
6.10 抽象合约
6.11 接口
6.12 本章小结
第7章 函数、修改器和fallback函数
7.1 函数输入和输出
7.2 修改器
7.3 view函数、constant函数和pure函数
7.4 地址相关函数
7.4.1 send方法
7.4.2 transfer方法
7.4.3 call方法
7.4.4 callcode方法
7.4.5 delegatecall方法
7.5 fallback函数
7.6 本章小结
第8章 异常、事件与日志
8.1 错误处理
8.1.1 require语句
8.1.2 assert语句
8.1.3 revert语句
8.2 事件与日志
8.3 本章小结
第9章 Truffle基础与单元测试
9.1 应用程序开发生命周期管理
9.2 Truffle
9.3 使用Truffle进行开发
9.4 使用Truffle进行测试
9.5 本章小结
第10章 合约调试
10.1 调试
10.1.1 Remix编辑器
10.1.2 使用事件
10.2 使用Block Explorer
10.3 本章小结
号? 。,,巾的 目 录 译者序 前言 审校者简介 第1章区块链、以大坊和智能合约… 1 1.8. l 外部账户 …………… … … 16 1.8.2 合约账户 ………………… 0016 1.9 交易…………………… … …. 16 1.10 区块…………………………. 20 1.11 端到端的交易……….. . 21 1.1 什么是区块链· ……….. 2 1.12 什么是合约- ………· 22 1.2 为什么是区块链 ……….. 3 1.13 什么是智能合约..... . ..…· 22 1.3 加密技术…………······· · · · ··… ·4 1.14 如何部署合约 …… . . 27 1.3. l 散列 ………………………… 5 1.15 本章小结………… · 27 1.3.2 数字签名 …………………… 7 1.4 以太币……………· · ···· · …….. 7 第2章安装以太坊和Solidity ……… 29 1.5 gas ……………………………… ·8 2.1 以太坊网络………………….. 29 1.6 区块链和以太坊架构………… 9 2.1.l 主网……………………… 30 1.6.l 区块如何互相连接 ……….. 10 2. 口 测试网络 ………………….. 30 1.6.2 交易和区块如何互相连接 …. 11 2.1.3 私有网络 ………………… 31 1.7 以太坊节点…… … ……………. 12 2.1.4 联盟网络 ………………… 31 1.7.l EVM ……………………… · 12 2.2 Geth ……·………………..….. 31 1.7.2 以太坊挖矿节点 …………… 13 2 .3 搭建一个私有网络…·· … ·35 1.7.3 如何挖矿………………… 14 2 4 ganache-cli …………………… 40 1.8 以太坊账户……………………. 15 2.5 Solidity 编译器…………… . 43 非卖品,仅供非商业用途或交流学习使用
警号 XII 2 .6 web3 JavaScript 库……………. 43 2.7 Mist 钱包… … … …. 45 2.8 MetaMask ………………………·47 2.9 本章小结………·· 51 第3章 Solidity介绍……… … … ….. 53 3.1 以太坊虚拟机 ….............. 53 3.2 Solidity 和 Solidity 文件 ……… 54 3.2. 1 预编译指令…… ………….. 55 3.2.2 注释 ………… …………… ·56 3.2.3 import 语句 ………………… 57 3.2.4 合约 ……………………… 58 3.3 合约的结构……........... . . . ..… 59 3.3.1 状态变量 ………………… 60 3 3.2 结构 ……………………… ·62 333 修改器 ………………… ….. 63 334 事件 ……… ……………… ·64 3.3.5 枚举… ……· · ………… 65 3.3.6 函数 ………· ……… ·66 3 .4 Solidity 中的数据类型 ……….. 68 3 4 I 值类型 …………………….. 68 3.4.2 引用类型………… ……….. 69 3.5 存储和内存数据位置…… .. 71 3 5 l 规则 l ………… ……… · 71 3 5 2 规则 2 …………………… ·71 3 5 3 规则 3 …………………… ·72 3.5.4 规则 4 …………………….. 72 3 5 5 规则 5 …………………… ·72 3 5.6 规则 6 …··………………… 74 3.5.7 规则 7 ··……………… ·75 3.5.8 规则 8 ………………… 76 3.6 字面量 …··· · ··· · ·· ··…. ... ... …. 77 3 . 7 整型………………· … 78 3.8 布尔型………………… 79 3.9 字节数据类型…·· …. 80 3.10 数组………… … · · … 82 3.10.1 固定数组… …… ……….. 83 3.1 0.2 动态数组 ……… ………. 83 3.10.3 特殊数组 …………….. 84 3. 10.4 数组属性 ……………….. 86 3.11 数组的结构……·………· · 86 3 . 12 枚举 ……········ … ………·· 88 3.13 地址 ……… …………………… 89 3.14 映射…………. 90 3.15 本章小结…………………··” 第4章全局变量和函数…….... 97 4.1 var 类型变量 ·· ……. 97 4.2 变量声明提前 … … · · 99 4.3 变量作用域 ……….. ..... 100 4.4 类型转换 ……… …… 101 4.4.1 隐式转换 ………………… 102 4.4.2 显式转换 …………… ……· 102 4.5 区块和交易全局变量 …… 104 4.5.1 交易和消息全局变蛊 ……. 105 4.5.2 tx.origin 和 msg.sender 的 区别 ……………………… 105 非卖品,仅供非商业用途或交流学习使用
号? XIII 4.6 加密全局变量 …… …. 106 6.7 封装… ……………………… 132 4.7 地址全局变量 … … .. 107 6.8 多态性........……… … … …… 132 4.8 合约全局变量 ……………….. 107 6.8.1 函数多态性 ………… 133 4 .9 本章小结…………... . ...… . .. 108 6.8.2 合约多态性………… ……. 133 第5章表达式和控制结构....... . . . ... 109 5 .1 Solidity 表达式……… ……. 109 5.2 if 决策控制 …… ………· .. 111 5.3 while 循环………….......... . . .. 113 6.9 方法覆盖…………….... . ...…. 135 6.10 抽象合约…· · ….... 136 6.11 接 口……… … …… …… …….. 137 6.12 本章小结… ……...... 139 5.4 for 循环……... . ....…… ..... .. . . 114 第7章函数、修改器和fallback 5.5 do ... while 循环………………. 115 函数………………· 叫 5.6 break 语句… ………… 116 7.1 函数输入和输出 …..... . ..…… 141 5. 7 5.8 continue 语句… ·· ………. 117 7.2 修改器 ………· . . . . . 143 return 语句… . .. .... … . ......….. 118 7.3 view 函数、 constant 函数和 5.9 本章小结…………··……. . 119 pure 函数……… …….... 146 第6章编写智能合约…… . . . 121 6.1 智能合约…………………… 12 1 6.2 编写一个简单的合约…... 122 6.3 创建合约 ……· … 123 6.3.1 使用 new 关键字 ………… ·123 6.3.2 使用合约地址 ……………· 124 6.4 构造函数…… ……… ……… 125 6.5 合约组合- ....... ….. 126 6.6 继承- ……………………….. 127 7.4 地址相关函数·· …… 148 send 方法 .. .. ........ ... . .. ··· 149 7.4.1 7.4.2 transfer 方法 ……………… 151 7.4.3 call 方法 …………………. 1 日 7.4.4 callcode 方法 …………… · · 154 7.4.5 delegatecall 方法 …………·· 154 7.5 fallback 函数………………. . 154 7.6 本章小结………………… 157 第8章异常、事件与日志…… . ... 159 6.6 I 单继承…… … ……… … 127 8.1 错误处理… 6.6.2 多级继承· ………… 129 8.1.1 require 语句……………… 160 6.6.3 分层继承………… ………· 130 8.1.2 assert 语句 ………………·· 162 6.6.4 多重继承……… ………… 130 8.1.3 revert 语句……… ……….. 163 非卖品 ,仅供非商业用途或交流学 习 使用
XIV 号? 8.2 事件与 日 志………… … ……… 163 . . 167 8.3 本章小结… · · . ... . ..... 第9章 Truffle基础与单元测试 ... 169 9.1 应用程序开发生命周期 9.5 本章小结 ……………… 178 第10章合约调试…………………… 179 10.1 调试……………. 179 JO.I.I Remix 编辑器 …… …… 180 管理…… … …… ……… . . 169 10.1.2 使用事件… ……… ……. 183 9.2 Truffle ………………………. 170 10 . 2 使用 Block Explorer ……. .. 183 9.3 使用 Truffle 进行开发 - … 171 10.3 本章小结 …………… · 186 9.4 使用 Truffle 进行测试………. 176 非卖品,仅供非商业用途或交流学 习使用
防 ............. .......... ...... ..... . . . ... .... . 第 1 章 : Ov-114.门, 区块链 、 以太1万和智能合约 最 近 十多年来,科技和机器 计 算的生态系统发生了重大 的 变 化 。 技术 创 新在多个领域影 响 显著,从 物联网 ( IoT )到 人工智能 ( AI) ,再到区块链 ( BlockChain ),它们中的每一个都具有颠覆产业的力 量。 当前区块链已经成为 最具有颠覆性的技术之一 ,它将潜在地改变各个行业,并将催生新的业务模式, 很多行业将发生巨变 。 然而,区块链并不是一个全新的技术,它在过去数年间, 一直在缓慢 而持续地成长 。 区块链 的 突然爆发,是由于我们 开始越来越多地思 考去 中心化和 分布式应用 的问 题, 它恰好是目前 的 系统架构转 向 不可篡改 的 分 布式数据库的一个方案 。 在第 l 章中,你将快速学习和理解一些简单的 、 基础性的区块链和以太坊 的知识 。 我们也会讨论使区块链和以太坊得以运行的重要概念。 同时,我们也 将简要地涉及智能合约,以及如何使用 Solidity 编写智能合约 。 需要注意 的 是,本章只会简单地介绍一些重要的区块链概念,并没有对其 非卖品,仅供非商业用途或交流学习使用
2 •!• Solidity编程·构建以太坊和区块链智能合约的初学者指南 盼 进行展开叙述,否则单单介绍概念,恐怕就需要一本书才能讲完 。 因为以太坊 是区块链技术的实现,所以,本书中这两个词会互换使用 。 1.1 什么是区块链 区块链实质上是一个去中心化、分布式的数据库或账本,具有下列典型 特征: · 去中心化 :简单来说,在网络上一个或多个服务器瘫痪的情况下,应用 或服务仍然能够持续地运行,这就是去中心化 。 服务和应用部署在网 络 上后,尽管每个服务器都有一份数据和执行程序的副本,但是没有任何 一个服务器能够绝对控制数据和程序的执行过程 。 · 分布式: 网络上的每个服务器或节点都互相连接在一起,服务器之间是 多对多连接,而不是一对一或一对多连接 。 ·数据库: 指的是存储持久化数据、用户能够及时从任何地点进行访问的 地方 。 数据库的基本功能是数据存储和检索,同时也提供了一些管理功 能,以方便高效地管理数据,如 : 数据导人和导出,数据备份和恢复 。 · 账本: 这是一个会计专业术语。 你也可以认为它是一个专 门存储和检索 数据的 地方 。 账本对银行业而言很有用处 。 例如, Tom 在他的银行账户 上存入了 1 00 美元, 对银行而言,需要在账本上计人一笔贷方金额 。 未 来的某一天, Tom 取回了 25 美元,银行不会直接把 100 美元修改成 75 美元,而是在同一个账本上,新增一笔借方金额 25 美元 。 从这个例子中 可以看出,账本是一种特殊的数据存储方式,它不允许修改历史数据, 要改变账户的余额只能通过新增和追加记录来实现 。 区块链是与账本存 在共同特征的数据库,新的数据只能通过追加的方式进行存储,没有任 何修改历史数据的可能 。 这里非常关键的一点就是理解只能通过新增记 非卖品,仅供非商业用途或交流学习使用
第 1 章区块链、以太坊和智能合约 •!• 3 号? 录去修改已有的数据 。 如果需要修改 100 美元的账户余额,只需要新增 一笔借方或贷方记录就可以了,而不需要改变以前的记录 。 如下图所示: 链 区块组成的链条 区块链是由区块组成的一个链条 。 这意味着它是由多个区块前后连接在一起 的,而交易记录则是保存在每个区块的内部,采用这种方式后,这些交易记录就 不可能再被更改 。 在后面的章节中,我们会谈到交易记录的存储方式以及区块链 的不可篡改特征是如何实现的 。 由于去中心化和分布式特性,区块链具有稳定性 、 健壮性、持久性和高可 用性的特点,不存在单点故障的问题 。 没有单个节点或服务器能控制 整个链上 的数据,因此人人都能够参与其中,成为区块链社区的参与者 。 因为不能修改历史记录,所以区块链具有较高的可信任性 、 透明性和公 正性 。 以太坊允许通过智能合约进一步扩展它的功能,本书中将对智能合约进行 详细介绍 。 1.2 为什么是区块链 以太坊的主要工作原理就是接受账户发出的交易,更新它们的状态,然后 维持该状态,直到另外的交易更新它们为止 。 在 以 太坊上,整个交易接受、执 非卖品,仅供非商业用途或交流学习使用
分享到:
收藏