Skip to content

Commit 2deb0b5

Browse files
committed
Add study notes for 2025-08-14
1 parent 08a6bba commit 2deb0b5

1 file changed

Lines changed: 32 additions & 0 deletions

File tree

leopc999.md

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

1717
<!-- Content_START -->
18+
# 2025-08-14
19+
20+
# Uni V4 合约开发讨论
21+
22+
## 合约架构与依赖管理:
23+
- **依赖管理**:建议使用 `soldeer` 进行依赖管理,它类似 `npm` 包管理,能锁定依赖的版本和哈希,避免供应链攻击。
24+
- **架构对比**:对比 V4 和项目自身架构,V4 用特定依赖管理,项目用 `soldeer` ;V4 有 `remapping.txt`,项目写在配置文件中。
25+
- **合约目录介绍**
26+
- **`lib` 目录**:存放 Uni V4 依赖项,现代方法用 `soldeer` 管理依赖。
27+
- **`test` 目录**:包含 Uni V3 代码,V4 有等效性测试证明与 V3 在核心逻辑上一致;但 V3 和 V4 编译版本冲突,项目采用部署二进制合约方式解决。
28+
- **合约部署与 FFI 调用**
29+
- **合约部署**:通过特定指令获取 V4 编译后的字节码,用专门部署器,结合构造器参数和内联汇编进行部署,部署时需跳过字节码长度部分并给合约发钱,同时要配置文件读写权限。
30+
- **FFI 调用**:用于调用外部非 Solidity 代码,如 JS 和 Python 代码,可判断 Solidity 输出与预期数学结果是否一致,但会拉低合约运行速度,需特殊配置。
31+
32+
## 现代合约开发原则与语法:
33+
- **组合大于继承**:现代编程提倡组合大于继承,V4 合约核心模块较少通过继承实现,常用用户自定义类型和运算符重载优化代码开发体验,自定义类型在编译和外部调用时会还原成底层类型。
34+
- **`library` 使用**`library` 有两种调用方式,含 `internal``private` 函数的会编译到合约里,含 `public` 函数的会单独部署,`library` 可对合约状态做读写,可通过内联汇编优化 gas 消耗。
35+
- **现代合约特性**
36+
- **不写 `view` 函数**:正式项目为节省合约体积,不写 `public` 状态变量避免自动生成 `view` 函数,通过`export` 函数读存储槽内容获取状态。
37+
- **单体架构**:V4 通过 Mapping 实现单体合约,优化链式兑换的 gas 消耗。
38+
- **Delta 机制**:可做 n 笔操作后统一清算,抵消资产和负债,优化交易流程。
39+
- **终局原子性**:类似 Flash loan 拓展,要求合约交易结束时账平,Uni 和项目都有相关机制,可实现 call data 不进内存的 gas 优化。
40+
41+
- **合约审计相关**
42+
- **审计方式**:项目审计由外部审计公司进行,通过 Uni 官方平台汇集审计公司报价,Uni 基金会报销审计资金。
43+
- **审计关注点**:选择审计公司时关注其与项目的相似度和附加服务,如形式化证明;bug bounty 是按月付费的附加服务。
44+
45+
- **学习与职业相关**
46+
- **学习路线**:建议先写 Erc20 合约,再看 Uniswap V2 或 V3、Safe 合约,借贷项目可看 Morpho 合约。
47+
- **入门标准**:读懂 V4 的非数据库部分算入门,不同项目有不同要求。
48+
- **内联汇编学习**:通过项目阅读学习,可尝试等效替换代码,参考 `Solady` 库的优化技巧。
49+
1850
# 2025-08-13
1951

2052
# 以太坊测试网本地搭建讨论会议

0 commit comments

Comments
 (0)