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,36 @@ timezone: UTC+8
1515## Notes
1616
1717<!-- Content_START -->
18+ # 2025-08-14
19+
20+ 听的一愣一愣
21+
22+ - ** Gas消耗监控** :
23+ - ** 监控方式** :可通过基准测试记录每步Gas消耗,在提PR时对比前后Gas情况来证明优化效果。
24+ - ** 适用情况** :工程师团队较大或非常在意Gas消耗时可采用,说话人所在团队因开发者少且自行优化,未进行此项工作。
25+ - ** 多版本合约部署** :
26+ - ** 版本冲突问题** :V3锁定0.7.6版本,V4锁定0.8.26版本,直接编译会报错,Uni将V3编译成二进制放入;说话人所在团队主合约锁定0.8.30,与V4不兼容,采用部署V4字节码到测试环境的方式。
27+ - ** 部署方法** :通过特定指令获取V4编译后的字节码并处理,使用内联汇编的create 2进行部署,跳过字节码长度部分,部署时需给合约发钱,同时要配置文件权限允许读取。
28+ - ** 等效性测试** :
29+ - ** 测试原理** :在V4源代码里有等效性测试,对同一批slot先在V3里做一次操作,再在V4里做一次,最后计算DFS判断输出是否一致,若不一致则报错。
30+ - ** 测试作用** :可直接套用V3的形式化证明,监控代码修改情况。
31+ - ** FFI调用** :
32+ - ** 调用原因** :Solidity中一些数据函数(如指数计算)无法直接实现,可通过调用外部的Javascript代码(FFI)来判断Solidity输出与预期数学结果是否一致。
33+ - ** 调用配置** :FFI需要特殊配置,且会大幅拉低合约运行速度,Uni对使用FFI的地方配置运行次数较少。
34+ - ** Python调用示例** :说话人在流动性项目中为证明数据库正确性,用Python写了版本,使用高精度的mp master库保证精度,通过运行命令行工具进行FFI调用并转换输出类型。
35+ - ** 不变量测试** :配置insert test进行不变量测试,具体概念在之前博客及文档中有介绍。
36+ - ** 依赖管理与多版本引入** :方锥s unit swap的依赖管理不够现代,可考虑使用solder;在引入与自身版本冲突的代码时,可采用部署二进制合约的方式。
37+ - ** 代码架构** :
38+ - ** 组合大于继承** :现代编程提倡组合大于继承,V4虽有继承但较少做重载,用户自定义类型(0.8.30后引入)可优化代码开发体验,防止精度误用,是零成本抽象,编译时会还原为原始类型,可通过内联汇编做类型强制转换。
39+ - ** Library调用方式** :Library有两种调用方式,含internal或private函数的会编译到代码里,通过jump指令执行;含public或view修饰符的采用DELEGATECALL方式,会单独部署合约。
40+ - ** Mapping存储** :可通过特定方法确定Mapping的存储位置,默认情况下无需写内联汇编,直接用传统语法修改即可。
41+ - ** 现代合约特性** :
42+ - ** 少用view函数** :为减少合约体积,现代合约尽量不写view函数,可通过export函数直接读取存储槽内容。
43+ - ** 单体架构** :V4是单体合约,通过Mapping实现,优化了链式兑换的Gas消耗,但对于跨池操作少的项目(如借贷协议)不一定适用,需权衡开发成本和用户体验。
44+ - ** Delta机制** :可实现n笔操作统一清算,抵消资产和负债,优化V3中复杂的Callback逻辑,还可抵抗非on transfer代币。
45+ - ** 终局原子性** :解决Flash loan问题,要求合约交易结束时账是平的,可进行任意多的swap,但不满足条件会revert,同时有call data不进内存的Gas优化。
46+ - ** 审计相关** :可蹭Uni的市场,将代码交给审计机构报价选择;关注审计公司之前审计项目与自身项目的关联度、附加服务(如形式化证明、bug bounty)及品牌差异。
47+
1848# 2025-08-13
1949
2050ETH
You can’t perform that action at this time.
0 commit comments