Skip to content

Commit 14b1b33

Browse files
committed
Add study notes for 2025-08-15
1 parent a856a03 commit 14b1b33

1 file changed

Lines changed: 163 additions & 0 deletions

File tree

baidang201.md

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

1717
<!-- Content_START -->
18+
# 2025-08-15
19+
20+
现代合约项目架构解析​​
21+
1. ​​目录结构标准化​​
22+
├── lib/ # 依赖管理(Soldeer替代Git Submodules)
23+
├── snapshots/ # Gas消耗快照(forge snapshot)
24+
├── src/ # 核心合约
25+
├── test/ # 测试套件
26+
│ ├── bin/ # 外部合约字节码(如V3 Factory)
27+
│ ├── js-scripts/ # TS/Python辅助计算脚本
28+
│ └── fuzz/ # 模糊测试案例
29+
└── foundry.toml # 配置Remappings/Gas报告
30+
​​创新工具应用​​:
31+
32+
​​Soldeer​​:依赖锁定(soldeer.lock)
33+
[[dependencies]]
34+
name = "uniswap-v4-core"
35+
version = "4"
36+
url = "https://soldeer-revisions.s3.amazonaws.com/..."
37+
​​Gas快照对比​​:
38+
vm.startSnapshotGas("operation1");
39+
contract.optimizedFunction();
40+
vm.stopSnapshotGas(); // 输出gas差值
41+
2. ​​跨版本合约测试方案​​
42+
​​问题​​:V4合约需0.8.26,但V3为0.7.6 → 版本冲突
43+
44+
​​解决方案​​:
45+
46+
编译目标合约为字节码:
47+
forge inspect src/PoolManager.sol bytecode > v4PoolManager.bytecode
48+
部署时动态加载:
49+
bytes memory bytecode = vm.readFileBinary("bin/v4PoolManager.bytecode");
50+
address manager;
51+
assembly {
52+
manager := create2(0, add(bytecode, 0x20), mload(bytecode), salt)
53+
}
54+
⚙️ ​​现代Solidity编程范式​​
55+
1. ​​类型安全革命​​
56+
​​自定义类型​​(Type Safety):
57+
58+
type Currency is address; // 非简单别名,是独立类型
59+
60+
// 运算符重载
61+
using { greaterThan as > } for Currency global;
62+
function greaterThan(Currency a, Currency b) pure returns (bool) {
63+
return Currency.unwrap(a) > Currency.unwrap(b);
64+
}
65+
​​优势​​:
66+
67+
防止address与Currency误操作
68+
需显式转换(Currency.wrap(address))
69+
2. ​​存储指针精控​​
70+
​​Library高效访问存储​​:
71+
72+
library PositionLib {
73+
struct Position { address owner; uint256 value; }
74+
75+
function setOwner(Position storage self, address owner) internal {
76+
assembly {
77+
sstore(add(self.slot, 0), owner) // 精确计算存储槽
78+
}
79+
}
80+
}
81+
3. ​​Gas优化核心策略​​
82+
​​场景​​
83+
84+
优化方案
85+
86+
效果
87+
88+
状态变量写入
89+
90+
内存缓存批量更新 → 单次SSTORE
91+
92+
节省98% Gas
93+
94+
大数组处理
95+
96+
calldata替代memory
97+
98+
节省15% Gas
99+
100+
循环内计算
101+
102+
unchecked{}安全块
103+
104+
节省40% Gas
105+
106+
高频读操作
107+
108+
Extsload合约直接读存储
109+
110+
避免view开销
111+
112+
​​Extsload合约示例​​:
113+
114+
contract Extsload {
115+
function extsload(bytes32 slot) external view returns (bytes32 value) {
116+
assembly { value := sload(slot) }
117+
}
118+
}
119+
🛡️ ​​高级安全机制​​
120+
1. ​​终局原子性(Unlock模式)​​
121+
​​交互流程​​:
122+
123+
sequenceDiagram
124+
User->>Periphery: execute(unlockData)
125+
Periphery->>Core: unlock()
126+
Core->>Periphery: unlockCallback()
127+
Periphery->>Core: 执行多步骤操作
128+
Core->>Core: 最终状态检查(如头寸健康)
129+
Core->>Periphery: 返回结果
130+
​​优势​​:
131+
132+
用户操作顺序自由(如先借款后补保证金)
133+
终态校验保证安全性
134+
2. ​​BalanceDelta清算机制​​
135+
​​轧差模型​​:
136+
137+
function _accountDelta(Currency c, int128 delta) internal {
138+
userBalances[c] += delta; // 累积负债/资产
139+
}
140+
141+
// 最终清算
142+
function settle() internal {
143+
if (userBalances[USDC] < 0) {
144+
USDC.transferFrom(msg.sender, address(this), uint128(-delta));
145+
}
146+
}
147+
​​对比传统模式​​:
148+
149+
❌ V3:每步操作需即时清算 → Callback地狱
150+
✅ V4:多操作合并清算 → 单次清算
151+
🔧 ​​开发工具链创新​​
152+
1. ​​跨语言等效测试(FFI)​​
153+
​​Python计算EMA价格​​:
154+
155+
# ema_calc.py
156+
def ema_price(last, current, time_diff):
157+
alpha = math.exp(-time_diff/600)
158+
return alpha * current + (1-alpha) * last
159+
​​Solidity测试中调用​​:
160+
161+
function test_EMA() public {
162+
bytes memory result = vm.ffi(["python", "ema_calc.py", "100", "110", "60"]);
163+
uint256 ema = abi.decode(result, (uint256));
164+
assertEq(ema, 105); // 验证等效性
165+
}
166+
2. ​​存储布局热替换​​
167+
​​Transit Storage模式​​:
168+
169+
library Lock {
170+
bytes32 constant SLOT = keccak256("LockStorage");
171+
172+
struct Data { bool unlocked; }
173+
174+
function load() internal pure returns (Data storage s) {
175+
bytes32 slot = SLOT;
176+
assembly { s.slot := slot }
177+
}
178+
}
179+
​​优势​​:临时存储跨调用共享,替代高成本SSTORE
180+
18181
# 2025-08-14
19182

20183
DApp架构与从零部署」内容整理的深度学习笔记:

0 commit comments

Comments
 (0)