这是我的 AI + Web3 实战营 的第 9 篇研发日志,前 8 篇如下:
AI+Web3实战营日志 #4 | Rebalancer合约
AI+Web3实战营日志 #8 | 重构ETFRouterV1
另外,关于 AI + Web3 实战营的相关介绍则有如下几篇文章:
今天,我们的 BlockETF 终于完成了第二个里程碑——完成了合约测试。
这意味着,从最初的合约架构设计与开发,到如今的系统性验证与覆盖,我们的核心功能已经进入一个更稳固、更可靠的阶段。
合约测试不仅仅是“跑通代码”,更是一次对系统安全性、健壮性和边界条件的全面检验。通过这一阶段,我们确认了 BlockETF 在申购、赎回、路由、再平衡、预言机、安全机制等各个环节都能稳定运行,为后续的前端集成和 Testnet 部署打下了坚实的基础。
从开营到现在,我们总投入的时间已经达到了 47 个小时,录制了 28 个视频。
完成第一个里程碑的时候,才只花了 11 小时。也就是说,这第二个里程碑,我们花了 36 小时,已经是第一个里程碑的三倍不止。
这一阶段,我们一共编写并执行了 1018 个测试用例,分为了 34 个测试套件,涵盖了 4 个核心合约的所有公开和内部函数,实现了对核心合约的 100% 功能覆盖率。
这背后反映的,不仅仅是测试工作的繁琐和全面性,更体现了它在整个研发周期中的重要价值:
随着第二个里程碑的完成,BlockETF 已经从“能跑”进入“能稳定运行”的新阶段。
在传统团队里,测试同学多来自 Web/APP 背景,对 EVM 语义、交易原子性、重入、存储布局、权限模型 等缺乏直觉,也不熟悉 Foundry/Hardhat、mainnet-fork、预言机/DEX 的 mock、fuzz 与 invariants 等工具链,因此测试重心往往停留在 前端集成层:更多验证主流程(happy path),而边界、极端与安全机制难以下沉到合约层实现全面覆盖。
因此,在传统开发模式下,合约层测试常常只能由合约开发者亲自完成;但受限于项目节奏与角色耦合,以及“作者测试自己代码”的盲区效应,很难做到真正全面的覆盖。这并非个体问题,而是流程现实:
BlockETF 的差异化做法
一句话:传统做法把风险留到集成,BlockETF 选择把风险消化在合约层。
在本轮 1018 条用例的推进中,我们不止在做“验证”,更在做“打磨”。这期间的投入并非全部用于执行测试,也包含针对测试中暴露问题的修复、重构与工程化优化。
包括在第 7 篇日志中所提到的,对 Core 合约的一些优化:
也包括第 8 篇日志所聊到的对 Router 合约的重构。
另外,对 Rebalance 的执行也同样进行了流程优化,主要集中在两点:
还有其他一些小地方的优化,包括但不限于:
priceFeed 的接口,降低运维成本。set* 与状态切换补发事件,提升可观测性。小结:通过“验证→修复/重构→回归”的闭环,这些优化把复杂度局部化到库与入口层,把风险前置到合约与测试体系,为后续 前端集成 + Testnet 铺平了路。
里程碑二完成后,我们将进入 “测试网 canary 部署 + 前端 UI 并行” 的阶段:先把合约最小化上线到 BNB Testnet,锁定地址与 ABI,同步开启 UI 搭建与联调。
我会利用 Claude 多任务并行推进——一条线跑部署与脚本检查,另一条线搭 UI 骨架与联调。