# AI+Web3实战营日志 #9 | 完成第二个里程碑

By [Keegan小钢](https://paragraph.com/@keeganlee) · 2025-10-02

---

这是我的 [**AI + Web3 实战营**](https://mp.weixin.qq.com/s?__biz=MzA5OTI1NDE0Mw==&mid=2652495279&idx=1&sn=4369256be0f5ad49989242a35eab3a04&scene=21#wechat_redirect) 的第 9 篇研发日志，前 8 篇如下：

[**AI+Web3实战营日志 #1｜开营**](https://mp.weixin.qq.com/s?__biz=MzA5OTI1NDE0Mw==&mid=2652495285&idx=1&sn=49acd14afddf10e8bd0e0813f07f90a0&scene=21#wechat_redirect)

[**AI+Web3实战营日志 #2 | 完成底层合约**](https://mp.weixin.qq.com/s?__biz=MzA5OTI1NDE0Mw==&mid=2652495299&idx=1&sn=bf08bcdf92558408615ca17c097f46ba&scene=21#wechat_redirect)

[**AI+Web3实战营日志 #3 | Router合约**](https://mp.weixin.qq.com/s?__biz=MzA5OTI1NDE0Mw==&mid=2652495306&idx=1&sn=0d618257cb93b52d90ea9ba790223823&scene=21#wechat_redirect)

[**AI+Web3实战营日志 #4 | Rebalancer合约**](https://mp.weixin.qq.com/s?__biz=MzA5OTI1NDE0Mw==&mid=2652495313&idx=1&sn=414daa096b58785018aa00dc6e3dc70c&scene=21#wechat_redirect)

[**AI+Web3实战营日志 #5 | 完成合约开发**](https://mp.weixin.qq.com/s?__biz=MzA5OTI1NDE0Mw==&mid=2652495320&idx=1&sn=4484cec86a4c52d147f4336dd82a5187&scene=21#wechat_redirect)

[**AI+Web3实战营日志 #6 | 开始合约测试**](https://mp.weixin.qq.com/s?__biz=MzA5OTI1NDE0Mw==&mid=2652495326&idx=1&sn=9c66af2a09d9a67d04f78e2b79054646&scene=21#wechat_redirect)

[**AI+Web3实战营日志 #7 | 完成Core合约测试**](https://mp.weixin.qq.com/s?__biz=MzA5OTI1NDE0Mw==&mid=2652495332&idx=1&sn=96f39b45560d90b6ac259f4719971f23&scene=21#wechat_redirect)

[**AI+Web3实战营日志 #8 | 重构ETFRouterV1**](https://mp.weixin.qq.com/s?__biz=MzA5OTI1NDE0Mw==&mid=2652495336&idx=1&sn=90cfde504973de9848a17f4a7ddc5030&scene=21#wechat_redirect)

* * *

另外，关于 AI + Web3 实战营的相关介绍则有如下几篇文章：

[**我要启动 AI + Web3 实战营了**](https://mp.weixin.qq.com/s?__biz=MzA5OTI1NDE0Mw==&mid=2652495268&idx=1&sn=c226a51bc06d180858a41fa9becbf752&scene=21#wechat_redirect)

[**再谈 AI+Web3 实战营：这到底能带给你什么？**](https://mp.weixin.qq.com/s?__biz=MzA5OTI1NDE0Mw==&mid=2652495273&idx=1&sn=628a703d76cc808a0484f576234f2c7a&scene=21#wechat_redirect)

[**AI+Web3实战营，9月15日正式开营**](https://mp.weixin.qq.com/s?__biz=MzA5OTI1NDE0Mw==&mid=2652495279&idx=1&sn=4369256be0f5ad49989242a35eab3a04&scene=21#wechat_redirect)

* * *

前言
--

今天，我们的 **BlockETF** 终于完成了第二个里程碑——**完成了合约测试**。

这意味着，从最初的合约架构设计与开发，到如今的系统性验证与覆盖，我们的核心功能已经进入一个更稳固、更可靠的阶段。

合约测试不仅仅是“跑通代码”，更是一次对系统安全性、健壮性和边界条件的全面检验。通过这一阶段，我们确认了 BlockETF 在申购、赎回、路由、再平衡、预言机、安全机制等各个环节都能稳定运行，为后续的前端集成和 Testnet 部署打下了坚实的基础。

最终成果
----

从开营到现在，我们总投入的时间已经达到了 **47 个小时**，录制了 **28 个视频**。

完成第一个里程碑的时候，才只花了 **11 小时**。也就是说，这第二个里程碑，我们花了 **36 小时**，已经是第一个里程碑的三倍不止。

这一阶段，我们一共编写并执行了 **1018 个测试用例**，分为了 **34** 个测试套件，涵盖了 **4** 个核心合约的所有公开和内部函数，实现了对核心合约的 **100% 功能覆盖率**。

这背后反映的，不仅仅是测试工作的繁琐和全面性，更体现了它在整个研发周期中的重要价值：

*   如果说第一个里程碑是把“骨架”搭建出来，那么第二个里程碑就是为这个骨架逐一打磨、加固。
    
*   每一条测试用例、每一个异常场景的验证，都是在为系统的稳定性和安全性“加一道保险”。
    
*   在传统开发模式下，这样一套完整的测试体系，往往需要一个小团队耗时数周才能完成，而我们依靠 **AI 辅助 + 高效迭代**，实现了“一人团队”的快速交付。
    

随着第二个里程碑的完成，BlockETF 已经从“能跑”进入“能稳定运行”的新阶段。

对比传统流程
------

在传统团队里，测试同学多来自 Web/APP 背景，对 **EVM 语义、交易原子性、重入、存储布局、权限模型** 等缺乏直觉，也不熟悉 **Foundry/Hardhat、mainnet-fork、预言机/DEX 的 mock、fuzz 与 invariants** 等工具链，因此测试重心往往停留在 **前端集成层**：更多验证主流程（happy path），而**边界、极端与安全机制**难以下沉到合约层实现全面覆盖。

因此，在传统开发模式下，**合约层测试常常只能由合约开发者亲自完成**；但受限于项目节奏与角色耦合，以及“作者测试自己代码”的**盲区效应**，**很难做到真正全面的覆盖**。这并非个体问题，而是流程现实：

*   ⏱️ **节奏压缩**：交付优先，测试窗口不断被挤压，资源集中在“能跑通”的主流程。
    
*   🧑‍💻 **角色耦合**：编写者 = 测试者，容易沿用同一思路，忽略对抗性场景与异常路径。
    
*   🧰 **工具门槛**：mainnet-fork、Oracle/DEX mock、fuzz/invariants、cheatcodes 的学习与维护成本高。
    
*   🧨 **风险后置**：重入、权限、精度边界、过期价格等问题，常在集成或上线后才暴露。
    

**BlockETF 的差异化做法**

*   ✅ **测试下沉到合约层**：对 **Core / Router / Rebalancer / Oracle** 做功能、异常与边界三层验证。
    
*   📜 **可执行规格**：把关键业务规则写成断言、属性测试与**不变量（invariants）**，持续守护核心假设。
    
*   🧱 **脚手架完备**：**OracleMock**、路由/再平衡模拟器、固定夹具（fixtures）、mainnet-fork 场景库。
    
*   🤖 **AI 辅助补盲**：用 AI 生成对抗与极端用例，系统性覆盖人脑容易忽略的角落。
    
*   📊 **以数据收口**：**1018 个用例、100% 覆盖率**，将风险前置在链上逻辑层，减少集成阶段偶发故障。
    

一句话：**传统做法把风险留到集成，BlockETF 选择把风险消化在合约层。**

测试过程中的优化
--------

在本轮 **1018** 条用例的推进中，我们不止在做“验证”，更在做“打磨”。这期间的投入并非全部用于执行测试，也包含针对测试中暴露问题的修复、重构与工程化优化。

包括在[第 7 篇日志](https://mp.weixin.qq.com/s?__biz=MzA5OTI1NDE0Mw==&mid=2652495332&idx=1&sn=96f39b45560d90b6ac259f4719971f23&scene=21#wechat_redirect)中所提到的，对 **Core** 合约的一些优化：

1.  **Oracle 初始化流程**
    
2.  **防止重入攻击**
    
3.  **代币转账的安全性**
    
4.  **减少 for 循环**
    
5.  **铸造时返还多余资产**
    
6.  **移除最小铸造份额限制**
    
7.  **完善预估函数的计算**
    
8.  **再平衡内部调用权限问题**
    

也包括[第 8 篇日志](https://mp.weixin.qq.com/s/6zN9gwSNuHld6fD05lMXNg)所聊到的对 **Router** 合约的重构。

另外，对 **Rebalance** 的执行也同样进行了流程优化，主要集中在两点：

1.  **简化了买入欠配资产的子流程**
    
2.  **加强了底层 Core 合约收到资产后的结果核验**
    

还有其他一些小地方的优化，包括但不限于：

*   **PriceOracle 批量配置**：新增批量设置 `priceFeed` 的接口，降低运维成本。
    
*   **事件补齐**：为关键 `set*` 与状态切换补发事件，提升可观测性。
    
*   **命名与语义统一**：对很多内部函数进行了重命名，让风格和语义统一。
    

小结：通过“验证→修复/重构→回归”的闭环，这些优化把复杂度**局部化**到库与入口层，把风险**前置**到合约与测试体系，为后续 **前端集成 + Testnet** 铺平了路。

下一步
---

里程碑二完成后，我们将进入 **“测试网 canary 部署 + 前端 UI 并行”** 的阶段：先把合约最小化上线到 **BNB Testnet**，锁定地址与 ABI，同步开启 UI 搭建与联调。

我会利用 **Claude 多任务**并行推进——一条线跑部署与脚本检查，另一条线搭 UI 骨架与联调。

---

*Originally published on [Keegan小钢](https://paragraph.com/@keeganlee/ai-web3-9)*
