Skip to content

Commit

Permalink
Update FFFFourwood.md
Browse files Browse the repository at this point in the history
  • Loading branch information
FFFFourwood authored Sep 29, 2024
1 parent 2ef14c5 commit 35fbc93
Showing 1 changed file with 17 additions and 11 deletions.
28 changes: 17 additions & 11 deletions FFFFourwood.md
Original file line number Diff line number Diff line change
Expand Up @@ -335,20 +335,26 @@ Solidity的合约可以继承多个合约。规则:
- 重写在多个父合约中都重名的函数时,`override`关键字后面要加上所有父合约名字。

### 2024.09.29
抽象合约

如果一个智能合约里至少有一个未实现的函数,即某个函数缺少主体 `{}` 中的内容,则必须将该合约标为 `abstract`,不然编译会报错。另外,未实现的函数需要加 `virtual`,以便子合约重写。拿之前的插入排序合约为例,如果还没想好具体怎么实现插入排序函数,可以把合约标为 `abstract`,之后让别人补写上。


接口

接口类似于抽象合约,但它不实现任何功能。接口的规则:
- 不能包含状态变量
- 不能包含构造函数
- 不能继承除接口外的其他合约
- 所有函数都必须是 `external` 且不能有函数体
- 继承接口的非抽象合约必须实现接口定义的所有功能

虽然接口不实现任何功能,但它非常重要。接口是智能合约的骨架,定义了合约的功能以及如何触发它们:如果智能合约实现了某种接口(比如 ERC20 或 ERC721),其他 DApps 和智能合约就知道如何与它交互。因为接口提供了两个重要的信息:
- 合约里每个函数的 `bytes4` 选择器,以及函数签名函数名(每个参数类型)。
- 接口 ID(更多信息见 EIP165)。

另外,接口与合约 ABI(Application Binary Interface)等价,可以相互转换:编译接口可以得到合约的 ABI,利用 `abi-to-sol` 工具,也可以将 ABI json 文件转换为接口 sol 文件。

* 不能包含状态变量
* 不能包含构造函数
* 不能继承除接口外的其他合约
* 所有函数都必须是 external 且不能有函数体
* 继承接口的非抽象合约必须实现接口定义的所有功能
* 虽然接口不实现任何功能,但它非常重要。接口是智能合约的骨架,定义了合约的功能以及如何触发它们。如果智能合约实现了某种接口(比如 ERC20 或 ERC721),其他 DApps 和智能合约就知道如何与它交互。因为接口提供了两个重要的信息:

* 合约里每个函数的 bytes4 选择器,以及函数签名函数名(每个参数类型)。
* 接口 ID(更多信息见 EIP165)。
*
另外,接口与合约 ABI(Application Binary Interface)等价,可以相互转换:编译接口可以得到合约的 ABI,利用 abi-to-sol 工具,也可以将 ABI json 文件转换为接口 sol 文件。


<!-- Content_END -->

0 comments on commit 35fbc93

Please sign in to comment.