Skip to content

Commit 863416f

Browse files
committed
Add study notes for 2025-08-17
1 parent 918a551 commit 863416f

1 file changed

Lines changed: 172 additions & 0 deletions

File tree

3956ray.md

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

1717
<!-- Content_START -->
18+
# 2025-08-17
19+
20+
# 一、Hardhat和Foundry
21+
22+
- **Hardhat**:以 Node.js 生态为核心的“脚手架 + 本地区块链 + 海量插件”平台,最强在**插件生态、部署编排、与前端/TS 工程体系的整合**
23+
24+
- **Foundry**:Rust 实现的**高性能 Solidity 原生开发套件**(forge/cast/anvil)。最强在**编译/测试速度、内置模糊/不变式测试、低摩擦链上脚本化**
25+
26+
27+
# 二、特性对比(工程视角)
28+
29+
|维度|Hardhat|Foundry|
30+
|---|---|---|
31+
|主要语言/脚本|TypeScript/JavaScript(测试、任务、部署脚本)|Solidity(测试、脚本)+ `cast` CLI|
32+
|本地链|Hardhat Network(主网分叉稳定、插件多)|Anvil(启动快、资源占用低、分叉快)|
33+
|编译与速度|基于 `solc`,速度中等,依赖 Node 生态|并行编译,普遍更快;缓存机制优秀|
34+
|测试形态|Mocha/Chai + ethers.js/viem(从“用户视角”写测试)|Solidity 原生单测,Cheatcodes 丰富,天然“合约内视角”|
35+
|Fuzz/Invariant|依赖外部工具(Echidna 等)或插件集成|**内置** fuzz/invariant 与 shrink,易上手|
36+
|Gas 工具|`hardhat-gas-reporter` 等插件|`forge test --gas-report``forge snapshot`|
37+
|覆盖率|`solidity-coverage` 插件成熟|`forge coverage`(现已可用,集成度高)|
38+
|调试体验|`hardhat/console.sol`、详细 error 堆栈、任务系统|`-vvvv` 级别调用追踪、`console2`、Cheatcodes(`prank/deal/warp` 等)|
39+
|依赖管理|npm/pnpm/yarn|`forge install`(git 源)+ remappings|
40+
|插件生态|**极其丰富**(部署、验证、升级、Defender…)|相对轻;更多“内建”而非“插件化”|
41+
|与前端集成|**一流**(TS 类型提示、viem/wagmi、任务式部署产物)|可行但更“工具箱化”,常与 Hardhat/前端仓分离|
42+
|CI/DevOps|基于 Node 工具链,模板众多|二进制工具,CI 速度快、镜像小|
43+
44+
> 选择:
45+
>
46+
> - **以 DApp/前端驱动、依赖插件和部署编排** → 选 **Hardhat****Hardhat+Foundry** 混合。
47+
>
48+
> - **以研究/安全/性能与测试为中心** → 选 **Foundry** 主导。
49+
>
50+
51+
# 三、选择
52+
53+
常见高效组合:
54+
55+
- **Foundry 负责:** 编译、单测、fuzz、不变式、gas 回归;
56+
57+
- **Hardhat 负责:** 多网络部署、Etherscan/区块浏览器验证、与前端/脚本任务编排、OpenZeppelin Upgrades 等插件链路。
58+
做法:同一仓或 mono-repo 中,保留 `foundry.toml``hardhat.config.ts`,合约源码共享,CI 中分别跑 `forge test``hardhat deploy/verify`
59+
60+
61+
# 四、安全技术栈
62+
63+
## 1) Hardhat 安全栈
64+
65+
**内核理念:** “插件驱动 + 外部安全工具的无缝集成 + 主网分叉回归”。
66+
67+
- **基线库**
68+
69+
- **OpenZeppelin Contracts**(安全基元、权限/代币/代理模式)
70+
71+
- OpenZeppelin **Upgrades** 插件(Transparent/UUPS 代理、**存储布局检查**
72+
73+
- **静态分析**
74+
75+
- **Slither**(Python,静态分析、漏洞检测、结构报告、脚本化审计)
76+
77+
- Solhint(风格/易错点 Lint)
78+
79+
- **属性/规约与形式化**
80+
81+
- **Scribble**(规范注释 → 仪表化断言,可与 Hardhat 流程集成)
82+
83+
- **Certora Prover**(规则级形式化验证;对关键合约很有价值)
84+
85+
- **模糊/符号执行**
86+
87+
- **Echidna**(基于性质的模糊测试)
88+
89+
- Mythril / Manticore(符号执行;更偏“审计/研究”)
90+
91+
- **覆盖率与 gas**
92+
93+
- `solidity-coverage``hardhat-gas-reporter`
94+
95+
- **运行时与回归**
96+
97+
- Hardhat Network **主网分叉**(对 DeFi/跨协议交互尤为重要)
98+
99+
- Defender(Sentinel/AutoTasks/Timelock/多签工作流)
100+
101+
- **最佳实践**
102+
103+
- 升级合约:强制存储布局 Diff、冻结不可变变量、独立 `initialize` 访问控制
104+
105+
- 多签、延时(Timelock)与角色最小化;事件审计与**变更公告**流程
106+
107+
108+
## 2) Foundry 安全栈
109+
110+
**内核理念:** “把安全测试做成默认路径:快、原生、可编排”。
111+
112+
- **内置能力(无需额外工具即上强度)**
113+
114+
- **Fuzz/Invariant**`forge test` 直接开启;`targetSelectors`/`targetContracts` 配置;Shrinking 默认支持
115+
116+
- **Cheatcodes**`prank/warp/roll/deal/record/revertTo` 等模拟权限、时间、随机性与链上状态
117+
118+
- **Gas/Trace**`--gas-report``-vvvv` 深度调用轨迹
119+
120+
- **Coverage**`forge coverage`
121+
122+
- **Scripts**`forge script --broadcast` 安全复现部署步骤、支持 Dry-run 与模拟
123+
124+
- **可叠加的外部工具**
125+
126+
- 同样可无缝接入 **Slither、Echidna、Scribble、Certora**(很多审计团队就是 Foundry+Slither/Echidna 的组合)
127+
128+
- **测试范式**
129+
130+
- **不变式测试**(Invariants)→ 对 DeFi 等状态机强约束非常有效(如“系统总余额守恒”、“永不出现负债爆表”)
131+
132+
- **差分测试**(与参考实现或旧版本对比)
133+
134+
- **主网分叉**`anvil --fork-url` + `forge test` 在真实协议上下文中 fuzz
135+
136+
- **最佳实践**
137+
138+
- 为关键不变量写“**最小可复现攻击面**”测试(单次交易 + 多 tx 序列)
139+
140+
- 为权限逻辑写“反向”用例(恶意调用者、错误角色、EOA/合约混合)
141+
142+
143+
# 五、端到端的安全流程
144+
145+
1. **编码前**:选用 **OZ Contracts** 基元;定稿**信任模型****升级策略**(是否可升级?由谁升级?是否 Timelock/多签?)。
146+
147+
2. **静态检查**:Solhint + **Slither** 基线扫描;定制 Slither 脚本做结构性检查(如授权点、外部可重入点)。
148+
149+
3. **单元/集成测试**
150+
151+
- Hardhat:Mocha/Chai + viem/ethers 写“用户视角”流程;
152+
153+
- Foundry:Solidity 单测覆盖“合约内细节与边界”。
154+
155+
4. **Fuzz / Invariant**
156+
157+
- Hardhat:引入 **Echidna** 或把合约仪表化(Scribble)后跑;
158+
159+
- Foundry:直接用内置 fuzz/invariant(推荐,把性质写清楚)。
160+
161+
5. **主网分叉回归**:模拟真实协议外部交互(预言机、Dex、借贷),验证经济安全与沙盒参数。
162+
163+
6. **形式化关键路径**:对资金关键模块用 **Scribble** 断言或 **Certora** 规则做“证明级”保障。
164+
165+
7. **覆盖率 & Gas 回归**:将覆盖率和 gas 预算纳入 CI 阈值(PR 降级即阻断)。
166+
167+
8. **部署/运维安全**
168+
169+
- 可升级合约强制存储布局对比;
170+
171+
- 多签/Timelock;
172+
173+
- **Etherscan/Blockscout 验证** + 生成 SBOM(依赖清单);
174+
175+
- 线上 **监控与告警**(Defender Sentinel、事件订阅)。
176+
177+
9. **应急预案**:暂停开关(可控可见)、速撤流动性/参数限制脚本、公告模板与回滚计划。
178+
179+
180+
# 六、如何选择(网上建议)
181+
182+
- **偏应用/前端协作/插件链路**重:**Hardhat**(或 Hardhat 做部署,Foundry 做测试)。
183+
184+
- **偏安全/研究/高覆盖测试**重:**Foundry** 主导,必要时加上 Hardhat 的部署插件链路。
185+
186+
- **团队 TS 很强**、与前端复用类型/工具:**Hardhat**
187+
188+
- **团队以审计/协议为中心**、强调 fuzz/invariant 与高频回归:**Foundry**
189+
18190
# 2025-08-15
19191

20192
# Uniswap

0 commit comments

Comments
 (0)