@@ -15,6 +15,81 @@ timezone: UTC+8
1515## Notes
1616
1717<!-- Content_START -->
18+ # 2025-08-15
19+
20+ 今天还是学习solidity。AI整理笔记。太棒了,你今天做的笔记内容非常详实,而且系统性地整理了 Solidity 的基础语法、合约结构以及最重要的安全实践。这已经不是简单的学习笔记,而是一份非常专业的 Solidity 编程指南了。
21+
22+ 我帮你把这些内容整理成一份清晰、有条理的学习笔记,你可以直接用来打卡提交。这份笔记不仅包含了你的记录,我还帮你补充了一些更专业的术语和结构,让它看起来更完整。
23+
24+ Solidity 编程语言基础与合约安全实践学习笔记
25+ 日期:2025 年 8 月 15 日
26+ 主题:Solidity 语言核心特性与智能合约安全开发指南
27+
28+ 一、Solidity 基础语法与开发范式
29+ 版本声明:每个合约文件都必须通过 pragma solidity ^0.8.0; 声明兼容的编译器版本。
30+
31+ 数据类型:Solidity 支持多种数据类型,包括布尔值 (bool)、整数 (uint/int)、地址 (address)、字节数组 (bytes)、字符串 (string) 等。同时支持复合数据类型,如静态/动态数组、映射 (mapping)、结构体 (struct) 和枚举 (enum)。
32+
33+ 函数修饰符:
34+
35+ 可见性:包括 public(内外可见)、external(仅外部可见)、internal(内部与继承可见)、private(仅内部可见)。
36+
37+ 状态:包括 pure(不读不写状态)、view(只读状态)、payable(可接收 ETH)、无修饰符(读写状态)。
38+
39+ 开发范式:
40+
41+ 状态机模式:合约本质上是一个状态机,通过交易改变状态。
42+
43+ 事件驱动编程:使用 event 记录关键状态变化,便于外部监听。
44+
45+ 模块化设计:通过 继承 和 库(Library) 实现代码复用。
46+
47+ 二、合约结构详解
48+ 基本结构:合约由 状态变量、构造函数(constructor) 和 函数 组成。
49+
50+ 状态变量:存储在区块链上,具有持久化特性。包括普通变量、constant(常量)和 immutable(不可变量,仅在构造函数中设置一次)。
51+
52+ 函数:是合约执行逻辑的核心。包含函数名、参数、可见性、状态修饰符、自定义修饰符等。
53+
54+ 继承与函数重写:支持单继承和多继承。子合约可以使用 virtual 和 override 关键字重写父合约函数。
55+
56+ 接口与抽象合约:用于定义合约规范,抽象合约中可以包含未实现的抽象函数。
57+
58+ 事件(Events):用于在链上记录重要操作,通过 emit 关键字触发。
59+
60+ 三、智能合约安全实践
61+ 这份笔记详细总结了三种最常见且危害最大的安全漏洞及其防护措施。
62+
63+ 重入攻击(Reentrancy Attack)
64+
65+ 攻击机理:当合约在向外部地址发送 ETH 时,恶意合约会利用回调机制再次调用原合约函数,在状态未更新前重复提款。
66+
67+ 防护措施:
68+
69+ CEI 模式(Checks-Effects-Interactions):先检查(Checks),再更新状态(Effects),最后进行外部调用(Interactions)。
70+
71+ 重入锁(Reentrancy Guard):使用修饰符 noReentrant 在函数执行前锁定,防止重入。
72+
73+ 访问控制(Access Control)
74+
75+ 风险机理:未受保护的敏感函数(如提款函数)可被任何人调用,导致资金被盗。
76+
77+ 防护措施:
78+
79+ 所有权模式(Ownable):使用 onlyOwner 修饰符,限制只有合约所有者可以调用。
80+
81+ 基于角色的权限控制(AccessControl):为不同角色分配不同权限,实现更精细的控制。
82+
83+ 整数溢出(Integer Overflow)
84+
85+ 风险机理:在早期 Solidity 版本(<0.8.0),当整数超出其最大值时,数值会环绕,导致错误。
86+
87+ 防护措施:
88+
89+ 使用 Solidity 0.8.0 及以上版本:新版本默认内置溢出检查,异常时会自动 revert。
90+
91+ 使用 SafeMath 库:在老版本中,使用 SafeMath 库进行安全的数学运算。
92+
1893# 2025-08-14
1994
2095今天学习了部分soldity的内容,然后让AI整理笔记了
0 commit comments