Skip to content

Commit

Permalink
publish review chapter 7-14
Browse files Browse the repository at this point in the history
  • Loading branch information
AmazingAng committed May 22, 2023
1 parent 00fe009 commit 789922f
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 16 deletions.
2 changes: 1 addition & 1 deletion 02_ValueTypes/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ tags:

2. **引用类型(Reference Type)**:包括数组和结构体,这类变量占空间大,赋值时候直接传递地址(类似指针)。

3. **映射类型(Mapping Type)**: `Solidity`里的哈希表。
3. **映射类型(Mapping Type)**: Solidity中存储键值对的数据结构,可以理解为哈希表

我们将仅介绍常用类型,不常用的类型不会涉及,本篇将介绍值类型。

Expand Down
24 changes: 12 additions & 12 deletions 07_Mapping/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,29 +19,29 @@ tags:

-----

这一讲,我们将介绍solidity中的哈希表:映射`Mapping`)类型。
这一讲,我们将介绍映射`Mapping`)类型,Solidity中存储键值对的数据结构,可以理解为哈希表

## 映射Mapping
在映射中,人们可以通过键(`Key`)来查询对应的值(`Value`),比如:通过一个人的`id`来查询他的钱包地址。

声明映射的格式为`mapping(_KeyType => _ValueType)`,其中`_KeyType``_ValueType`分别是`Key``Value`的变量类型。例子:
```solidity
mapping(uint => address) public idToAddress; // id映射到地址
mapping(address => address) public swapPair; // 币对的映射,地址到地址
mapping(uint => address) public idToAddress; // id映射到地址
mapping(address => address) public swapPair; // 币对的映射,地址到地址
```
## 映射的规则
- **规则1**:映射的`_KeyType`只能选择`solidity`默认的类型,比如`uint``address`等,不能用自定义的结构体。而`_ValueType`可以使用自定义的类型。下面这个例子会报错,因为`_KeyType`使用了我们自定义的结构体:
- **规则1**:映射的`_KeyType`只能选择Solidity内置的值类型,比如`uint``address`等,不能用自定义的结构体。而`_ValueType`可以使用自定义的类型。下面这个例子会报错,因为`_KeyType`使用了我们自定义的结构体:
```solidity
// 我们定义一个结构体 Struct
struct Student{
uint256 id;
uint256 score;
}
mapping(Student => uint) public testVar;
// 我们定义一个结构体 Struct
struct Student{
uint256 id;
uint256 score;
}
mapping(Student => uint) public testVar;
```
- **规则2**:映射的存储位置必须是`storage`,因此可以用于合约的状态变量,函数中的`storage`变量,和library函数的参数(见[例子](https://github.com/ethereum/solidity/issues/4635))。不能用于`public`函数的参数或返回结果中,因为`mapping`记录的是一种关系 (key - value pair)。

- **规则3**:如果映射声明为`public`那么`solidity`会自动给你创建一个`getter`函数,可以通过`Key`来查询对应的`Value`
- **规则3**:如果映射声明为`public`那么Solidity会自动给你创建一个`getter`函数,可以通过`Key`来查询对应的`Value`

- **规则4**:给映射新增的键值对的语法为`_Var[_Key] = _Value`,其中`_Var`是映射变量名,`_Key``_Value`对应新增的键值对。例子:
```solidity
Expand Down Expand Up @@ -72,5 +72,5 @@ tags:


## 总结
这一讲,我们介绍了`solidity`中哈希表——映射(`Mapping`)的用法。至此,我们已经学习了所有常用变量种类,之后我们会学习控制流`if-else`,` while`等。
这一讲,我们介绍了Solidity中哈希表——映射(`Mapping`)的用法。至此,我们已经学习了所有常用变量种类,之后我们会学习控制流`if-else`,` while`等。

6 changes: 4 additions & 2 deletions 09_Constant/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ tags:
所有代码和教程开源在github: [github.com/AmazingAng/WTFSolidity](https://github.com/AmazingAng/WTFSolidity)

-----
这一讲,我们介绍`solidity`中两个关键字,`constant`(常量)和`immutable`(不变量)。状态变量声明这个两个关键字之后,不能在合约后更改数值;并且还可以节省`gas`。另外,只有数值变量可以声明`constant``immutable``string``bytes`可以声明为`constant`,但不能为`immutable`
这一讲,我们介绍Solidity中和常量相关的两个关键字,`constant`(常量)和`immutable`(不变量)。状态变量声明这个两个关键字之后,不能在合约后更改数值。这样做的好处是提升合约的安全性并节省`gas`

另外,只有数值变量可以声明`constant``immutable``string``bytes`可以声明为`constant`,但不能为`immutable`

## constant和immutable
### constant
Expand Down Expand Up @@ -69,5 +71,5 @@ tags:
![9-3.png](./img/9-3.png)

## 总结
这一讲,我们介绍`solidity`中两个关键字`constant`(常量)和`immutable`(不变量),让不应该变的变量保持不变。这样的做法能在节省`gas`的同时提升合约的安全性。
这一讲,我们介绍了Solidity中两个关键字`constant`(常量)和`immutable`(不变量),让不应该变的变量保持不变。这样的做法能在节省`gas`的同时提升合约的安全性。

2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

**第1讲:三行代码HelloWeb3**[代码](https://github.com/AmazingAng/WTFSolidity/blob/main/01_HelloWeb3) | [文章](https://github.com/AmazingAng/WTFSolidity/blob/main/01_HelloWeb3/readme.md) | [Mirror](https://mirror.xyz/wtfacademy.eth/WfM30QbSWB2_-9t98g05unTmb_2ZXucOAZMPDa7MX48)

**第2讲:数值类型**[代码](https://github.com/AmazingAng/WTFSolidity/blob/main/02_ValueTypes) | [文章](https://github.com/AmazingAng/WTFSolidity/blob/main/02_ValueTypes/readme.md) | [Mirror](https://mirror.xyz/wtfacademy.eth/XHZVpWe8_sHBHgg6kkrNH2nAWYmQgoB7fKW8hoXnoyI)
**第2讲:值类型**[代码](https://github.com/AmazingAng/WTFSolidity/blob/main/02_ValueTypes) | [文章](https://github.com/AmazingAng/WTFSolidity/blob/main/02_ValueTypes/readme.md) | [Mirror](https://mirror.xyz/wtfacademy.eth/XHZVpWe8_sHBHgg6kkrNH2nAWYmQgoB7fKW8hoXnoyI)

**第3讲:函数 (external/internal/public/private, pure/view, payable)**[代码](https://github.com/AmazingAng/WTFSolidity/blob/main/03_Function) | [文章](https://github.com/AmazingAng/WTFSolidity/blob/main/03_Function/readme.md) | [Mirror](https://mirror.xyz/wtfacademy.eth/FWI887JBea4VpNiMlJ2ICyJ5aWUREReGo9Bz0X8iEVc)

Expand Down

0 comments on commit 789922f

Please sign in to comment.