ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Aptos CLI E2E 测试包解析:用 Move 示例包验证 aptos move 子命令的端到端正确性

2026/9/17 7:29:57 拓冰建站 浏览量
Aptos CLI E2E 测试包解析:用 Move 示例包验证 aptos move 子命令的端到端正确性 Aptos CLI E2E 测试包解析用 Move 示例包验证 aptos move 子命令的端到端正确性【免费下载链接】aptos-coreAptos is a layer 1 blockchain built to support the widespread use of blockchain through better technology and user experience.项目地址: https://gitcode.com/GitHub_Trending/ap/aptos-coreAptos 官方 CLI 的aptos move子命令组编译、部署、entry/view 函数调用、脚本执行等需要一套真实可用的 Move 包做端到端E2E验证。本文以 aptos-move/move-examples/cli-e2e-tests 目录下的测试包为主体讲清它每个生产网络一个包的组织方式、Move.toml中依赖不同网络分支的关键差异以及测试源码如何刻意覆盖各种新特性Token Objects、大整数、向量参数、多签名脚本帮助读者理解 Aptos CLI E2E 测试的设计思路并能复用这套方法为自己的 CLI 测试编写类似的特性探针Move 包。一、CLI E2E 测试包的定位根据目录内的 README这些包的用途非常明确These packages, one per production network, are used by the CLI E2E tests to test the correctness of theaptos movesubcommand group.即每个生产网络对应一个测试包CLI 的 E2E 测试通过这些包来断言aptos move子命令组的正确性。README 同时给出了两条重要的设计说明内容选择是表达性的而非系统性的。README 原文指出包内内容 there is no particular rhyme or reason ... it is meant to be an expressive selection of different, new features we might want to assert——包里的代码不是按业务逻辑组织而是刻意挑选不同、较新的特性用来断言 CLI 能正确处理这些特性。因此这个包更像一组特性探针而不是一个可上链的真实应用。三个网络包目前共用同一份源码。README 说明 As it is now the 3 packages share the same source code并指出未来的演进方向当某个新特性先后落到 devnet、testnet、mainnet 时希望用这些测试确认 CLI 在各网络上都能正常工作届时就需要把三个包的源码拆开For that wed need to separate the source。二、目录结构与各网络包的组织cli-e2e-tests目录下的实际布局如下devnet/、testnet/、mainnet/三个同构的网络包各自包含Move.toml和sources/下的两个源文件sources/cli_e2e_tests.move测试模块下文第三节详述sources/cli_e2e_tests_script.move多签名者脚本下文第四节详述。common/sources/公共源码目录放置当前三个网络包共用的同一份源码与 README 中3 个包共享同一份源码的表述对应。struct-enum-args/一个独立的小包专门用于测试 struct / enum 作为 CLI 参数传递的场景与主测试包职责分离。这种多包同构 common 单一事实来源的布局正是 README 所述未来按网络拆分源码这一演进路线的铺垫现在通过common/保证三个包行为一致将来拆分时只需把各网络包改成各自维护sources/即可。三、Move.toml 配置同一包体、按网络切换框架依赖三个网络包的Move.toml结构完全一致核心差异只在依赖的 git 分支rev。以 devnet/Move.toml 为例[package] name cli_e2e_tests version 0.0.1 [addresses] addr _ [dev-addresses] addr 0x12345 [dependencies.AptosFramework] git https://github.com/aptos-labs/aptos-framework.git rev devnet subdir aptos-framework [dependencies.AptosTokenObjects] git https://github.com/aptos-labs/aptos-framework.git rev devnet subdir aptos-token-objects各配置项的含义与取值配置项取值作用[package].namecli_e2e_tests包名aptos move publish等命令会用到[package].version0.0.1包版本测试包不参与升级固定低版本[addresses].addr_声明占位地址发布时由 CLI 注入通常为本模块签名账户地址[dev-addresses].addr0x12345本地测试aptos move test使用的固定地址[dependencies.AptosFramework].rev按网络区分devnet/mainnet等决定该包编译时链接哪个分支的框架这是三个包的核心差异[dependencies.AptosTokenObjects]同上引入 Token Objects 框架测试包的全部道具逻辑都构建在其上对照 mainnet/Move.toml 可以看到唯一实质差异两处依赖的rev mainnetdevnet 包中为rev devnet。这正是 README 所述测试模型在配置层面的落地CLI E2E 测试对每个网络各编译一个包分别链接该网络分支的框架代码从而验证aptos move子命令在不同网络环境下的行为一致性与兼容性。独立的 struct-enum-args/Move.toml 则体现了另一种依赖来源其AptosFramework依赖直接指向aptos-core仓库git https://github.com/aptos-labs/aptos-core.gitsubdir aptos-move/framework/aptos-frameworkrev mainnet包名为StructEnumArgsTests版本1.0.0占位地址声明为struct_enum_tests _。四、测试模块源码一份特性探针式的 Move 代码三个网络包共用的主测试模块是 common/sources/cli_e2e_tests.move模块名addr::cli_e2e_tests。它围绕一个名为 Hero Quest 的 Token Objects 收藏定义了Hero、Armor、Weapon、Shield、Gem五种对象资源均通过#[resource_group_member(group aptos_framework::object::ObjectGroup)]注解加入ObjectGroup并覆盖了若干值得 CLI E2E 测试断言的新特性4.1 收藏与对象创建流程init_module调用collection::create_unlimited_collection创建 Hero Quest 无限供应收藏并部署OnChainConfig资源保存收藏名。create函数随后基于token::create_named_token创建命名 token再由create_hero/create_weapon/create_gem分别用object::generate_signer生成对象签名者、move_to落资源、object::address_to_object换取ObjectT引用——完整走了一遍 Token Objects 的标准创建链路。4.2 对象转移与装备操作hero_equip_weapon、weapon_equip_gem等函数演示option::fill/option::extract与object::transfer_to_object、object::transfer的组合用法并用断言码如EINVALID_WEAPON_UNEQUIP、EINVALID_GEM_UNEQUIP校验非法卸载操作。模块内的#[test(account 0x3)]测试test_hero_with_gem_weapon则把创建 → 装备 → 校验所有权 → 卸下 → 再校验的完整链路串成单元测试供aptos move test验证。4.3 为 CLI 参数解析准备的 entry / view 函数模块中有一批函数的注释明确写着 The following functions are used to test input args它们的签名本身就是测试点public entry fun test_move_run(...)一次性接受vectoru8、vectoru16、vectoru32、vectoru64、vectoru128、vectoru256、vectoraddress、vectorbool、vectorString九种向量类型参数——用来端到端验证 CLI 在aptos move run时对各类向量参数的序列化与传参#[view] public fun test_big_number(num64: u64, num128: u128, num256: u256)回显u64/u128/u256三个大整数验证 CLI 对超过 64 位整数的参数与返回处理#[view] public fun test_vector(...)将上述九种向量原样返回验证向量在返回侧的解析#[view] public fun view_hero(...)、view_hero_by_object(...)分别用creator, collection, name三元组和ObjectHero句柄两种方式读取完整 struct 返回值验证 CLI 对复杂 struct含String、Option、u64字段组合的输出渲染#[view] public fun view_objectT: key(obj: ObjectT): String泛型 view 函数按对象类型分派到string_utils::to_string用于验证泛型函数在 view 调用下的解析public entry fun mint_hero(...)与set_hero_description(...)常规 entry 函数示例后者还演示了权限校验ENOT_CREATOR。这些函数共同构成 README 所说的 expressive selection of different, new features大整数、复杂向量、泛型 view、Token Objects 句柄传参等都是aptos move子命令实现中容易出问题的解析点。五、多签名者脚本cli_e2e_tests_script.movecommon/sources/cli_e2e_tests_script.move 是一个接受两个签名者的脚本script { use aptos_framework::aptos_coin; use aptos_framework::coin; fun main( first: signer, second: signer, amount_first: u64, amount_second: u64, dst_first: address, dst_second: address, deposit_first: u64, ) { let coin_first coin::withdrawaptos_coin::AptosCoin(first, amount_first); let coin_second coin::withdrawaptos_coin::AptosCoin(second, amount_second); coin::merge(mut coin_first, coin_second); let coin_second coin::extract(mut coin_first, amount_first amount_second - deposit_first); coin::deposit(dst_first, coin_first); coin::deposit(dst_second, coin_second); } }该脚本从两个签名者账户分别提取 APT合并后按比例拆分并存入两个目标地址。对 CLI E2E 测试而言它专门验证aptos move run脚本执行路径中多签名者 混合标量参数两个u64、两个address、一个u64的 CLI 构造能力与cli_e2e_tests.move覆盖的 entry 函数路径形成互补。六、设计意图与演进方向回到 README 的两点核心表述可以总结这套测试包的设计哲学测试包即特性清单不追求业务完整性而是每个函数瞄准一种 CLI 需要正确处理的特性大整数、向量、泛型 view、对象句柄、多签名脚本。当 Move 语言或 CLI 新增特性时往包里加一个对应的 entry/view 函数即可纳入 E2E 断言。按网络分包为特性随网络逐步上线预留验证手段当前三个包共用common/下的同一份源码Move.toml仅以rev区分所链接框架分支devnet / mainnet 等README 明确指出未来要验证新特性先上 devnet、再上 testnet、最后上 mainnet的 CLI 兼容性时需要把三个包的源码拆开分别表达各网络当前实际支持的特性集合。对希望为自家工具编写类似 E2E 测试包的开发者这套模式提供了可直接复用的骨架同构的按环境分包、[addresses]占位符 [dev-addresses]本地地址的约定、依赖按环境分支切换以及每个函数对应一个待断言特性的源码组织方式。【免费下载链接】aptos-coreAptos is a layer 1 blockchain built to support the widespread use of blockchain through better technology and user experience.项目地址: https://gitcode.com/GitHub_Trending/ap/aptos-core创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考