Skip to content

Commit 09f62c2

Browse files
committed
Add study notes for 2025-08-15
1 parent c53fef3 commit 09f62c2

1 file changed

Lines changed: 95 additions & 0 deletions

File tree

satalai.md

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,101 @@ timezone: UTC+8
1515
## Notes
1616

1717
<!-- Content_START -->
18+
# 2025-08-15
19+
20+
### 继承与函数重写
21+
22+
Solidity支持单继承和多继承,子合约可重写父合约中的函数:
23+
24+
```solidity
25+
// 基础合约
26+
contract Animal {
27+
string public name;
28+
29+
constructor(string memory _name) {
30+
name = _name;
31+
}
32+
33+
function speak() public virtual returns(string memory) {
34+
return "Some sound";
35+
}
36+
}
37+
38+
// 继承合约
39+
contract Dog is Animal {
40+
constructor(string memory _name) Animal(_name) {}
41+
42+
// 重写父类函数
43+
function speak() public pure override returns(string memory) {
44+
return "Woof!";
45+
}
46+
}
47+
48+
// 多重继承
49+
contract Pet is Animal {
50+
address public owner;
51+
52+
constructor(string memory _name, address _owner) Animal(_name) {
53+
owner = _owner;
54+
}
55+
}
56+
57+
contract Labrador is Dog, Pet {
58+
constructor(string memory _name, address _owner)
59+
Dog(_name)
60+
Pet(_name, _owner) {}
61+
}
62+
```
63+
64+
### 接口与抽象合约
65+
66+
接口与抽象合约用于定义规范与继承框架:
67+
68+
```solidity
69+
// 接口定义
70+
interface IERC20 {
71+
function transfer(address to, uint256 amount) external returns (bool);
72+
function balanceOf(address account) external view returns (uint256);
73+
}
74+
75+
// 抽象合约
76+
abstract contract AbstractToken {
77+
string public name;
78+
79+
// 没有函数体的抽象函数,必须被子类使用 override 关键词重载实现
80+
function totalSupply() public virtual returns (uint256);
81+
82+
// 有函数体实现的抽象函数,子类可以不使用 override 关键词重载直接继承已有的实现,也可以选择使用 override 关键词重载实现
83+
function decimals() public view virtual returns (uint8) {
84+
return 18;
85+
}
86+
}
87+
```
88+
89+
### 事件机制
90+
91+
事件用于在链上记录重要状态变化,并可由外部监听器捕捉:
92+
```
93+
contract EventExample {
94+
// 定义事件
95+
event Transfer(address indexed from, address indexed to, uint256 amount);
96+
event Approval(address indexed owner, address indexed spender, uint256 amount);
97+
98+
mapping(address => uint256) public balances;
99+
100+
function transfer(address to, uint256 amount) public {
101+
require(balances[msg.sender] >= amount, "Insufficient balance");
102+
103+
balances[msg.sender] -= amount;
104+
balances[to] += amount;
105+
106+
// 触发事件
107+
// 可以在区块链浏览器查找到当前事件记录
108+
emit Transfer(msg.sender, to, amount);
109+
}
110+
}
111+
```
112+
18113
# 2025-08-14
19114

20115
## 2.合约结构详解

0 commit comments

Comments
 (0)