# AI+Web3实战营日志 #9 | 完成第二个里程碑 **Published by:** [Keegan小钢](https://paragraph.com/@keeganlee/) **Published on:** 2025-10-02 **URL:** https://paragraph.com/@keeganlee/ai-web3-9 ## Content 这是我的 AI + Web3 实战营 的第 9 篇研发日志,前 8 篇如下: AI+Web3实战营日志 #1|开营 AI+Web3实战营日志 #2 | 完成底层合约 AI+Web3实战营日志 #3 | Router合约 AI+Web3实战营日志 #4 | Rebalancer合约 AI+Web3实战营日志 #5 | 完成合约开发 AI+Web3实战营日志 #6 | 开始合约测试 AI+Web3实战营日志 #7 | 完成Core合约测试 AI+Web3实战营日志 #8 | 重构ETFRouterV1另外,关于 AI + Web3 实战营的相关介绍则有如下几篇文章: 我要启动 AI + Web3 实战营了 再谈 AI+Web3 实战营:这到底能带给你什么? AI+Web3实战营,9月15日正式开营前言今天,我们的 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 篇日志中所提到的,对 Core 合约的一些优化:Oracle 初始化流程防止重入攻击代币转账的安全性减少 for 循环铸造时返还多余资产移除最小铸造份额限制完善预估函数的计算再平衡内部调用权限问题也包括第 8 篇日志所聊到的对 Router 合约的重构。 另外,对 Rebalance 的执行也同样进行了流程优化,主要集中在两点:简化了买入欠配资产的子流程加强了底层 Core 合约收到资产后的结果核验还有其他一些小地方的优化,包括但不限于:PriceOracle 批量配置:新增批量设置 priceFeed 的接口,降低运维成本。事件补齐:为关键 set* 与状态切换补发事件,提升可观测性。命名与语义统一:对很多内部函数进行了重命名,让风格和语义统一。小结:通过“验证→修复/重构→回归”的闭环,这些优化把复杂度局部化到库与入口层,把风险前置到合约与测试体系,为后续 前端集成 + Testnet 铺平了路。下一步里程碑二完成后,我们将进入 “测试网 canary 部署 + 前端 UI 并行” 的阶段:先把合约最小化上线到 BNB Testnet,锁定地址与 ABI,同步开启 UI 搭建与联调。 我会利用 Claude 多任务并行推进——一条线跑部署与脚本检查,另一条线搭 UI 骨架与联调。 ## Publication Information - [Keegan小钢](https://paragraph.com/@keeganlee/): Publication homepage - [All Posts](https://paragraph.com/@keeganlee/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@keeganlee): Subscribe to updates - [Twitter](https://twitter.com/KKeeganLee): Follow on Twitter