Skip to content

Commit 121ba43

Browse files
committed
Add study notes for 2025-08-14
1 parent a3a0821 commit 121ba43

1 file changed

Lines changed: 149 additions & 0 deletions

File tree

satalai.md

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

1717
<!-- Content_START -->
18+
# 2025-08-14
19+
20+
## 2.合约结构详解
21+
22+
### 1.基本结构
23+
24+
- // 是Solidity中的单行注释符号,例如:`//SPDX-License-Identifier:MIT` 用于指定源代码的许可证类型
25+
- `pragma` 关键字用于声明 Solidity 源代码所需的编译器版本,确保合约在兼容的编译器环境中正确编译。
26+
- `contract` 关键字用于定义一个智能合约,其语法格式为:`contract 合约名 { ... }`
27+
- 一个智能合约的基本结构通常由以下三部分组成:状态变量、构造函数和普通函数
28+
29+
```solidity
30+
// SPDX-License-Identifier: MIT
31+
pragma solidity ^0.8.0;
32+
33+
contract MyContract {
34+
// 状态变量
35+
uint256 public myNumber;
36+
37+
// 构造函数
38+
constructor() {
39+
myNumber = 100;
40+
}
41+
42+
// 函数
43+
function setNumber(uint256 _number) public {
44+
myNumber = _number;
45+
}
46+
}
47+
```
48+
49+
### 2.状态变量**(State Variables)**
50+
51+
状态变量是指在合约中定义的、其值永久存储在区块链上的变量。它们用于记录合约的持久化数据,构成了合约的整体状态。当合约被部署后,这些变量将被写入区块链,并在合约的整个生命周期中保持可访问性和可追踪性。
52+
53+
```solidity
54+
contract MyContract {
55+
/*
56+
* 可以通过内部与外部函数更改变量
57+
* public可以通过前端代码访问
58+
*/
59+
uint256 public totalSupply;
60+
mapping(address => uint256) private balances;
61+
address public owner;
62+
63+
// 常量
64+
uint256 public constant MAX_SUPPLY = 1000000;
65+
66+
// 不可变量(构造函数中设置一次)
67+
uint256 public immutable deploymentTime;
68+
69+
constructor() {
70+
owner = msg.sender;
71+
deploymentTime = block.timestamp;
72+
totalSupply = 0;
73+
}
74+
}
75+
```
76+
77+
## 3.函数
78+
79+
函数是 Solidity 智能合约中执行具体逻辑操作的核心组成部分。通过函数,可以实现对状态变量的读取、修改,或执行特定业务逻辑。
80+
81+
### **函数声明格式**
82+
83+
Solidity 中函数的标准声明格式如下所示:
84+
85+
```solidity
86+
function <函数名>(<参数列表>)
87+
<可见性>
88+
<状态可变性>
89+
<修饰符列表>
90+
<虚拟/重写关键字>
91+
returns (<返回值列表>)
92+
{
93+
// 函数体
94+
}
95+
```
96+
97+
各部分含义如下:
98+
99+
- `<函数名>`:函数的名称;
100+
- `<参数列表>`:传入函数的参数;
101+
- `<可见性修饰符>`:如 `public``private``internal``external`
102+
- `<状态可变性修饰符>`:如 `view``pure``payable`
103+
- `<函数修饰符>`:如 `onlyOwner` 等自定义逻辑控制;
104+
- `virtual/override`:用于支持继承与函数重写;
105+
- `returns`:定义返回值及其类型。
106+
107+
### 函数状态修饰符
108+
109+
用于指明函数是否修改或读取合约状态:
110+
111+
```solidity
112+
contract StateModifiers {
113+
uint256 public count = 0;
114+
115+
// view: 只读函数,不修改状态
116+
function getCount() public view returns(uint256) {
117+
return count;
118+
}
119+
120+
// pure: 纯函数,不读取也不修改状态
121+
function add(uint256 a, uint256 b) public pure returns(uint256) {
122+
return a + b;
123+
}
124+
125+
// payable: 可接收以太币
126+
function deposit() public payable {
127+
// msg.value 是发送的以太币数量
128+
}
129+
130+
// 默认:可修改状态
131+
function increment() public {
132+
count++;
133+
}
134+
}
135+
```
136+
137+
### 函数参数和返回值
138+
139+
Solidity 支持多参数与多返回值,以及命名返回值:
140+
141+
```solidity
142+
// 多个返回值
143+
function getPersonInfo() public pure returns(string memory name, uint256 age) {
144+
name = "Alice";
145+
age = 25;
146+
}
147+
148+
// 命名返回值
149+
function calculate(uint256 a, uint256 b) public pure returns(uint256 sum, uint256 product) {
150+
sum = a + b;
151+
product = a * b;
152+
// 自动返回命名变量
153+
}
154+
155+
// 调用带多返回值的函数
156+
function callExample() public pure {
157+
(string memory name, uint256 age) = getPersonInfo();
158+
// 或者忽略某些返回值
159+
(, uint256 productOnly) = calculate(5, 3);
160+
}
161+
```
162+
163+
### 修饰符
164+
165+
修饰符允许在函数执行前插入额外逻辑,常用于权限控制与前置检查:
166+
18167
# 2025-08-13
19168

20169
## Solidity智能合约教程

0 commit comments

Comments
 (0)