目录
目录
第1讲从HelloWeb3开始
1.1Solidity简述1
1.2开发工具:remix1
1.3第一个Solidity程序2
1.4编译并部署代码3
1.5总结4
第2讲值类型
2.1布尔型5
2.2整型7
2.3地址8
2.4字节数组9
2.5枚举9
2.6总结10
第3讲函数
3.1Solidity中的函数11
3.2到底什么是pure和view?12
3.3代码实现13
3.4测试payable关键字声明的函数15
3.5总结17
第4讲函数输出
4.1返回值关键字return和returns18
4.2命名式返回19
4.3解构式赋值19
4.4总结20
第5讲变量的数据存储和作用域
5.1Solidity中的引用类型21
5.2数据位置21
5.3变量的作用域24
5.4变量的单位和换算26
5.5总结30
第6讲数组和结构体
6.1数组31
6.2结构体34
6.3总结37
第7讲映射类型
7.1映射的声明38
7.2映射的规则38
7.3映射的底层机制40
7.4总结40
第8讲变量的初始值
8.1值类型的初始值41
8.2引用类型的初始值43
8.3delete操作符43
8.4总结44
第9讲常量和不变量
9.1constant关键字45
9.2immutable关键字46
9.3总结47
第10讲控制流及其实践
10.1控制流48
10.2实例:用Solidity实现插入排序50
10.3总结53
第11讲构造函数和修饰器
11.1构造函数54
11.2修饰器55
11.3onlyOwner修饰器的演示56
11.4总结57
第12讲事件
12.1事件58
12.2EVM日志59
12.3在remix上演示Solidity事件和日志60
12.4总结62
第13讲继承
13.1继承的基本概念63
13.2简单继承63
13.3多重继承65
13.4修饰器的继承66
13.5构造函数的继承68
13.6调用父合约的函数69
13.7钻石继承71
13.8总结73
第14讲抽象合约和接口
14.1抽象合约74
14.2接口75
14.3应用:ERC721标准接口的实现75
14.4总结79
第15讲异常
15.1异常80
15.2在remix上演示异常82
15.3三种方法的gas消耗比较83
15.4总结84
第16讲函数重载
16.1函数重载的例子85
16.2实参匹配(argument matching)86
16.3总结87
第17讲库合约
17.1库合约88
17.2示例:Strings库合约88
17.3使用库合约的方法91
17.4总结92
第18讲导入其他合约
18.1import关键字94
18.2测试导入结果95
18.3总结96
第19讲接收ETH
19.1接收ETH的回调函数receive()97
19.2回退函数fallback()98
19.3两种回调函数的区别99
19.4在remix上演示回调函数99
19.5总结101
第20讲发送ETH
20.1接收ETH的合约102
20.2发送ETH的合约103
20.3总结108
第21讲调用其他合约
21.1调用已部署合约109
21.2编写目标合约109
21.3调用目标合约110
21.4总结115
第22讲call函数
22.1call函数及其使用场景116
22.2准备目标合约117
22.3用call函数调用目标合约118
22.4总结122
第23讲delegatecall函数
23.1delegatecall函数123
23.2delegatecall的应用场景124
23.3delegatecall的用法示例125
23.4在remix上展示delegatecall的用法126
23.5总结129
第24讲在合约中创建新合约
24.1基于CREATE操作码生成合约130
24.2示例:一个简化版的Uniswap130
24.3在remix上演示合约的创建133
24.4总结134
第25讲CREATE2操作码
25.1CREATE操作码如何计算新合约地址135
25.2CREATE2操作码如何计算新合约地址135
25.3示例:一个简化版的Uniswap2136
25.4在remix上演示基于CREATE2创建合约140
25.5CREATE2操作码的实际应用场景141
25.6总结141
第26讲删除合约
26.1selfdestruct命令142
26.2示例:DeleteContract合约142
26.3在remix上演示删除合约143
26.4注意事项145
26.5总结145
第27讲ABI的编码和解码
27.1ABI编码146
27.2ABI解码149
27.3在remix上展示ABI编码和解码150
27.4ABI的使用场景150
27.5总结152
第28讲哈希函数
28.1哈希函数的性质和应用153
28.2keccak256函数154
28.3总结156
第29讲函数选择器
29.1函数选择器157
29.2总结160
第30讲捕获异常
30.1try-catch实战162
30.2总结167
附录AERC20代币标准和实现
A.1ERC20代币标准168
A.2IERC20接口合约168
A.3ERC20代币的实现171
A.4发行ERC20代币174
A.5总结175
附录B贡献者名单176