这是我的 AI + Web3 实战营 的第八篇研发日志,前七篇如下:
AI+Web3实战营日志 #4 | Rebalancer合约
另外,关于 AI + Web3 实战营的相关介绍则有如下几篇文章:
完成 Core 合约测试后,我们紧接着把 PriceOracle 的测试也跑完了。由于 PriceOracle 逻辑较为简单,测试同样顺利,没有发现问题。
随后转入 Router 合约测试。在此过程中,我们发现铸造函数的实现流程存在设计缺陷,并据此对整个铸造路径进行了重构。本文主要分享这次重构的思考与结果。
重构前仅有一个铸造函数 mintWithUSDT,支持用户用 USDT 一键申购 ETF 份额。该函数采用“输入驱动”的设计——用户给定投入的 USDT 数量,系统计算应得的 ETF 份额。流程如下:
transferFrom 将用户的 USDT 转入合约。该方案存在多处问题:
归纳为四类核心问题:
经分析后,我们引入“份额驱动”路径:由用户指定要铸造的份额数,而不是投入金额。
mintExactShares核心流程:
shares 与可接受的 USDT 上限 maxUSDT;maxUSDT 转入合约;shares 所需的各底层资产精确数量amounts;shares;除 maxUSDT 是上限外,其余步骤均为确定量。为便于前端估算,我们提供只读函数 usdtNeededForShares,其计算逻辑与实际执行一致,返回精确的 usdtAmount:
shares 反推所需底层资产精确数量;如果在同一笔交易内先调用 usdtNeededForShares 再执行 mintExactShares,两者的 USDT 结果将完全一致。
实际前端交互存在时间差,DEX 价格可能变动,因此 maxUSDT 通常在估算结果上再增加用户可配置的滑点(如 0.5%、1%、5% 等)。合约负责精确计算,滑点交给前端与用户控制,体验与 Uniswap 一致。
mintWithUSDT(金额驱动的简化版)在完成 mintExactShares / usdtNeededForShares 后,我们也重构了 mintWithUSDT 及其配套只读函数,使其计算路径更直接,避免多层嵌套的滑点处理:
执行流程:
usdtAmount 与可接受的最小份额 minShares;usdtAmount 分配到各资产的购买预算;只读估算函数 usdtToShares:
usdtAmount 按权重拆分为各资产预算;若两者在同一笔交易内依次调用,最终份额结果将保持一致。前端在实际申购时,可在 usdtToShares 的结果上下调一定比例设置 minShares,以覆盖成交过程中的价格波动并提升成交成功率。
到目前为止,我们已经累计投入 28 小时,产出了 19 个录播视频,完成了从 核心合约开发 → 测试 → 重构优化 的完整闭环。
这意味着,学员不仅能跟着真实的研发进度学习,还能获得一整套从 理论到实战、从踩坑到优化 的完整经验。这些录播内容本身就相当于一份“避坑指南”,能大幅提升学习效率和实战能力。
在正式开营之前,我就说过:“开营之后,价格会逐步上调”。只是之前没有在日志里公开宣布,所以迟迟没有执行。今天,随着第一阶段的里程碑成果完成,这个承诺终于要兑现了。
👉 从本篇日志开始,实战营价格将从 调整为调整为$309。
早期加入的同学,已经锁定了最优价格;而每一次加价,都会与一个关键成果绑定,成为项目成长的见证。
更重要的是:这还只是开始。后续我们还将持续展开 更多合约模块的测试、前端交互优化、实战部署与上线 等一系列内容。随着研发的深入,实战营的价值也会不断提升。
因此,如果你还在观望,现在就是最佳入场时机。