File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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# 以太坊测试网本地搭建讨论会议
You can’t perform that action at this time.
0 commit comments