Skip to content

Commit f76e57c

Browse files
committed
Add study notes for 2025-08-17
1 parent 35facaa commit f76e57c

1 file changed

Lines changed: 49 additions & 0 deletions

File tree

CYL12345.md

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

1717
<!-- Content_START -->
18+
# 2025-08-17
19+
20+
### 一、文件架构:项目目录与工具实践
21+
1. **目录结构与依赖管理**
22+
- 以Uniswap V4 Core为例,核心目录包括`lib`(依赖)、`src`(源码)、`test`(测试)等。依赖管理推荐使用`soldeer`(类似npm,通过`soldeer.lock`锁定版本),替代Foundry默认的git modules,更高效。
23+
- 避免使用`remappings.txt`,转而在`foundry.toml`中配置remappings,明确依赖路径。
24+
25+
2. **测试相关目录与工具**
26+
- `snapshots`目录:存储测试中的gas消耗数据,用于验证代码修改的gas优化效果,需通过`vm.startSnapshotGas`等手动记录。
27+
- 测试工具:`echidna`用于不变量测试,Uniswap V4较少使用;推荐关注Recon的`create-chimera-app`框架及相关入门文章。
28+
- `test`目录细节:
29+
- `bin`文件夹:存储版本不兼容合约的字节码(如Uniswap V3合约,因Solidity版本与V4冲突),通过`create2`部署,需在`foundry.toml`配置文件读取权限。
30+
- `js-scripts`/Python脚本:用于数学计算等效性测试(如tick与price转化、EMA算法),通过Foundry的`ffi`特性在测试中调用,需注意`ffi`会拖慢测试速度,需限制fuzz次数。
31+
32+
33+
### 二、开发架构:组合优先于继承的实践
34+
1. **核心原则:组合替代继承**
35+
现代Solidity开发倾向减少继承,优先通过“自定义类型+library”实现功能,避免复杂的C3线性化问题。
36+
37+
2. **自定义类型的应用**
38+
-`solidity`的自定义类型语法(如`type Currency is address`)定义专属类型,底层为基础类型(如address、bytes32),但提供类型安全,避免误操作(如利率类型`InterestRate`不提供运算符重载,防止错误计算)。
39+
- 可通过`wrap`/`unwrap`转换与基础类型的关系,或通过内联汇编直接生成(如`PoolId``keccak256`结果强转),ABI中会自动转为底层类型。
40+
41+
3. **library的关键作用**
42+
- 作为组合的核心,通过存储指针(如`Position storage self`)访问和修改合约状态,支持复杂结构体操作(如Uniswap V4的`Pool.sol`处理`State`结构体,包含mapping等嵌套类型)。
43+
- 调用方式:`internal`函数通过JUMP跳转,`public`/`view`函数通过delegatecall/staticcall,需注意部署与调用成本(如AAVE v3的library用`public`避免合约体积过大)。
44+
45+
4. **继承的使用原则**
46+
- 避免多层级继承,`override`仅用于父合约需获取子合约数据的场景(如Uniswap V4中`_getPool`函数重写,方便协议手续费修改)。
47+
48+
49+
### 三、现代合约特性:效率与灵活性优化
50+
1. **Extsload合约:替代view函数**
51+
当状态变量为`internal`时,通过`Extsload`合约提供的函数(如`extsload(bytes32 slot)`)直接访问存储槽,避免编译器生成大量view函数导致合约体积膨胀,支持单槽、多槽(结构体)、批量槽读取。
52+
53+
2. **单体架构:按需选择**
54+
- Uniswap V4采用单体架构,优势在于优化链式兑换(减少cold合约调用的gas消耗)、配合Flash Account降低成本;
55+
- Licredity因跨池操作少,未采用,避免开发成本增加。
56+
57+
3. **Balance Delta机制:高效清算**
58+
类似金融轧差机制,在transit storage中记录用户与协议的资产负债(如用户提取资产时记为负数负债),支持用户多笔交互后统一清算,减少gas消耗,避免Uniswap V3的“callback地狱”。
59+
60+
4. **unlock与终局原子性:灵活交互**
61+
- 用户交互需先调用`unlock`,再执行操作,最终通过`unlockCallback`检查核心状态(如Licredity检查头寸健康度,Uniswap V4检查资产是否清算完毕)。
62+
- 优势:用户可任意顺序交互,仅需保障最终状态合规,提升灵活性;缺点是需通过外围合约(如Licredity的`LicredityAccount.sol`)转发交互,EOA无法直接交互。
63+
64+
5. **transit storage支撑**
65+
为上述特性(如Balance Delta、unlock)提供交易内可访问的临时存储,简化复杂递归逻辑的编写。
66+
1867
# 2025-08-14
1968

2069
# 汇编语言

0 commit comments

Comments
 (0)