这篇文章介绍了 Aptos 新发布的 Move 合约测试与脚本框架 Forklift。

在 Aptos 上测试 Move 智能合约一直都很棘手,因为过去一直缺少简单的方法来模拟具备隔离性和可重复性的交易工作流,更不用说 fork 真实网络状态来进行逼真的测试了。直到现在。
今天,我们发布了 Forklift , 一个用于 Aptos 的 Move 智能合约测试与脚本框架。它使用 TypeScript 编写,提供了一个统一接口:Harness 类,可在本地模拟、网络 fork 和实时网络执行之间通用。** ](https://aptos.dev/build/get-started/ethereum-cheatsheet),你可以将 Forklift 视为 Aptos 版的 Hardhat/Foundry。
在 Forklift 出现之前,如果你想模拟自己的合约如何与一个真实已部署的协议交互,比如 DEX 或借贷平台,可选方案非常有限:
Forklift 消除了这些权衡。现在你可以:
这正是 Move 开发者一直缺少的工作流。
Forklift 提供了一个统一的 Harness 类,可在三种执行模式下工作:

Harness 的强大之处在于 你的代码在所有模式下都保持不变。只需定义一次工作流,然后切换 harness 即可更换环境:
function deployAndInteract(harness: Harness) {
const result = harness.deployCodeObject({
sender: "alice",
packageDir: "./move/my_contract",
packageAddressName: "my_contract",
});
harness.runMoveFunction({
sender: "alice",
functionId: `${result.Result.deployed_object_address}::my_module::initialize`,
args: [],
});
}
// 相同的工作流,不同的环境
deployAndInteract(Harness.createLocal()); // 快速迭代
deployAndInteract(Harness.createNetworkFork("mainnet", apiKey)); // 针对真实状态验证
deployAndInteract(Harness.createLive("mainnet")); // 真实执行
其中一个尤为突出的能力是 网络 forking。只需一行代码,你就可以 fork mainnet(或其他网络),并针对真实链上状态模拟交易。
import { Harness } from "@aptos-labs/forklift";
// Fork mainnet - 真实状态,零后果
const harness = Harness.createNetworkFork("mainnet", apiKey);
// 你的交易会针对真实已部署的合约运行
harness.runMoveFunction({
sender: "alice",
functionId: "0x123...::my_protocol::swap",
args: [...],
});
// 所有改动都保留在本地 - mainnet 不受影响
想测试你的 DeFi 协议如何与现有流动性池交互?fork mainnet 就能知道。需要针对真实用户状态对合约升级进行 dry-run?先 fork 一份。正在调查潜在漏洞?fork 一份,并在隔离环境中安全地复现漏洞利用。
记住我,以便更快登录
状态会在本地 VM 执行交易时按需获取。你的所有修改都会完全保留在本地,网络不会受到任何影响。
npm install --save-dev @aptos-labs/forklift
前置条件:Node.js v18+ 和 Aptos CLI v7.14.1+
查看 Forklift 仓库 获取完整文档和 API 参考。你还可以查看 TipJar 教程,了解从编写合约到部署到真实网络的完整流程。
Forklift 构建在 Transaction Simulation Sessions(TSS)之上,这是 Aptos CLI 的一项原生特性。它的架构由三层组成:* ](https://miro.medium.com/v2/resize:fit:700/1MezIfJ3kpw3Z6KHchP7nRg.png)
Forklift 被刻意设计得很轻量。它是 CLI 之上的一层轻量包装,而不是一个完整而臃肿的独立框架。
这是一个经过深思熟虑的选择:
CLI 负责繁重的工作(编译、模拟、构建交易),而 Forklift 提供简洁的程序化接口。
当你创建一个网络 fork 时:
其关键抽象是一个基于 delta 的状态存储,它在远程状态之上叠加本地更改。读取时会先检查本地,然后再回退到网络上的远程读取。写入则始终保留在本地。这让 forking 既高效又安全。
Forklift 现已可用,我们非常期待听到你的反馈!
欢迎试用;如果你发现任何 bug,或希望申请新功能,欢迎提交 issue 或 PR!
对于更喜欢直接使用 CLI 的用户,Transaction Simulation Sessions 也已于今日可用。详见 Network Forking Made Easy 了解详情。
- 原文链接: aptoslabs.medium.com/int...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!