这是我正在开发的链上 ETF 项目「BlockETF」的第四篇研发日志。
前三篇分别是:
我是从 7 月 27 日开始启动这个项目的,今天是第六天。截止撰文之时,合约已经部署到了测试网,意味着整个 DApp 项目的合约部分可以先告一段落了。
部署系统:AI 帮我打下了底层
这次的部署脚本、配置系统,基本是我把需求扔给了 Claude Code,由它生成一整套脚本,我再按需修改了几处。
现在这套部署系统包括了:
- 一键部署脚本(
./scripts/deploy.sh
) - 自动地址管理(JSON +
.env
) - 合约验证脚本(
Verify.s.sol
) - 网络配置统一管理(
NetworkConfig.s.sol
) - 补了一份部署说明文档,主要写给未来的自己看
这部分没太花时间,Claude 给出的结构已经很接近我之前习惯的方式了。
合约模块小结
目前整个 BlockETF 合约系统一共拆成了 6 个模块,各自职责分明。
- BlockETFCore 主要负责 ETF 的铸造、赎回、总资产估值等核心逻辑。
- BlockETFRouter 提供给用户操作的入口,封装了使用单一代币投资赎回接口,使用更方便。
- RebalanceManager 实现了资产再平衡逻辑,支持触发时动态计算目标权重。
- DEXIntegrator 集成了 PancakeSwap V3,用于资产兑换。
- PriceOracle 基于 Chainlink PriceFeed 做价格计算,保证估值合理。
- FeeManager 统一管理赎回费和管理费,可配置上限,防止误设或恶意提取。
整体上,我希望每个模块都能独立工作、独立测试,不耦合太多。
测试覆盖情况
这次测试部分完成得出奇地快,所有测试代码全是 Claude Code 写的,写了 220 多个测试用例,而且覆盖率非常高,包括:
- 核心逻辑流程验证
- 各种边界输入和异常路径
- 跨模块调用的状态一致性检查
- 模拟用户视角的端到端操作流程
包括了单测、集成测试和 e2e 模拟用户操作流程,算是把合约部分该测的都测了。
安全性方面做的事
虽然并没有引入专业审计,但我在开发阶段就加了一些基础安全措施:
- 使用
nonReentrant
防止重入攻击 - 所有敏感操作都加了权限控制
- 铸造/赎回都带滑点限制,防止交易价格被操控
- 所有 fee 参数都设置了 max cap,防止超额提取
下一步计划
合约部分已经完成,并部署在测试网上。接下来我会开始搭前端,把用户交互的那一部分补上。
不知道 Claude Code 对前端这块能帮我提效多少呢,拭目以待吧。