深入解析 aptos-core 的 Move 规范推断语料库以 AX-native-position-types-005 模块级样本为例【免费下载链接】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本文以 aptos-core 仓库aptos-move/flow/evaluation/spec-inference下的 Move 规范推断评估框架为背景完整拆解语料库样本AX-native-position-types-005的构造方式、目标契约、编译上下文与准备preparation流程。读者读完可以掌握这类样本配方sample recipe如何基于共享 framework 包生成独立的 Agent 工作区0x7::native_position_types模块的源码与参考规范长什么样以及补丁、哈希与任务描述符如何共同保证评估的可复现性。样本在评估框架中的定位aptos-move/flow/evaluation/spec-inference是一套用于**评估 Move Prover 规范推断specification inference**的可复现框架用于对比三种工作流unaided inference、prescribed WP workflow、free one在同一批 Move 任务上的表现并依据规范能否验证通过、能否拒绝错误代码双重标准打分。语料库corpus-v1.2是其中保留的框架语料与构建流水线见 spec-inference 目录 README 与 corpus-v1.2 README。语料库共包含 20 个样本AX-native-position-types-005是其中之一AX前缀表示其目标位于aptos_experimental0x7地址域。该样本针对的是实验性交易模块中的原生持仓类型native position types——即跨越 Move 与 Rust 原生边界的数据结构。从框架的设计看每个样本都不是一份独立快照而是一个覆盖在共享包之上的薄配方overlay recipe整个语料库只存一份可编辑的 Move 包即 framework/其中包含 154 个模块、257 个 Move 源码/规范文件——即全部目标与其源码级传递依赖的并集运行时控制器controller复制该共享包再应用本样本的preparation.patch该补丁只删除目标自身的参考规范并写入任务描述符由此得到一份独立的、交给 Agent 的 workspace样本之间不存在各自的 framework 快照。Target 声明目标、粒度与溯源信息样本 README 的 Target 段完整记录了本次推断任务的声明信息字段值Target0x7::native_position_typesGranularitymodule模块级原始源码aptos-move/framework/aptos-experimental/sources/trading/position/native_position_types.move共享包内路径sources/AptosExperimental/trading/position/native_position_types.moveSource rootaptos-move/framework/aptos-experimentalAptos Core commit950e413e46090d2056740c36dd7a77b1764b6936共享包 SHA-2561c41a4a754554758e1632217bb867a0dc8c622072f937edf1e1ef44adaf1f116预处理后树 SHA-2560cf49fe0eb3cfd0874bc553fcd586c35fdcbbdca7604fda2aa4f6e189f245d23必需契约类别normal-result其中两个 SHA-256 是内容哈希哈希的是文件树而非 git 状态因此即使在 commit 落地前后调度哈希验证依然成立这正是语料库保证每个实验臂拿到同一源码哈希的机制。本次推断目标是整个模块granularity: module需要为以下三个公开函数推断规范new_accumulative_indexnew_perp_v1unpack_perp_v1这与语料库中其他函数级样本如AF-account-025针对0x1::account::increment_sequence_number形成对照模块级样本要求 Agent 覆盖该模块内所有指定函数的契约而非单点函数。完整的样本清单与粒度对照见 corpus-v1.2 README 中的样本表。目标模块源码剖析跨 Move ↔ 原生边界的类型目标模块在仓库中的原始实现位于 native_position_types.move共享包内的同一份拷贝位于样本的framework/sources/AptosExperimental/trading/position/native_position_types.move。模块注释开宗明义这些是跨越native_positionMove ↔ 原生边界的类型字段顺序与宽度在此钉死了 RustNativePosition必须匹配的 BCS 编码——也就是说规范推断的正确性直接关系到链上数据与原生执行引擎之间的序列化契约。AccumulativeIndex包装 i128 的签名累计指数struct AccumulativeIndex has copy, drop, store { index: i128, }该结构包装原始i128用于表示签名累计指数funding、premium 等。包装的意义在于类型安全直接传裸i128容易在期望指数的地方误传其他数值而包装类型让类型系统参与校验。对应的两个函数new_accumulative_index(index: i128): AccumulativeIndex——构造器accumulative_index_value(idx: AccumulativeIndex): i128——取值器。注意accumulative_index_value不在本次推断目标列表中目标仅三个构造/解构函数但它仍是模块契约的一部分属于编译上下文而非额外推断目标。Position::PerpV1永续合约持仓结构enum Position has copy, drop, store { PerpV1 { size: u64, is_long: bool, entry_px_times_size_sum: u128, avg_acquire_entry_px: u64, user_leverage: u8, is_isolated: bool, funding_index_at_last_update: AccumulativeIndex, unrealized_funding_amount_before_last_update: i64, // Microsecond timestamp of the last update; used for ADL. timestamp: u64, }, }9 个字段涵盖持仓的完整状态仓位大小size、多空方向is_long、入场价×大小累计entry_px_times_size_sum、平均建仓价avg_acquire_entry_px、用户杠杆user_leverage、是否逐仓isolated marginis_isolated、上次更新时的资金指数funding_index_at_last_update复用AccumulativeIndex、上次更新前未实现资金金额unrealized_funding_amount_before_last_update以及微秒时间戳timestamp用于 ADL即自动减仓。模块注释特别说明所有数字字段采用生产者自定义精度链本身对精度无感知。围绕该枚举两个目标函数构成一对构造/解构操作new_perp_v1接收 9 个参数构造Position::PerpV1变体并返回unpack_perp_v1接收Position模式匹配解构后以 9 元组返回全部字段字段顺序与构造函数参数严格一一对应。这一对函数之所以重要是因为它们定义了持仓数据在 Move 世界中的规范化入口/出口任何 Rust 原生侧读取或写入持仓都要经由这套固定字段序的 BCS 编码而规范推断要保证构造与解构互为逆操作unpack_perp_v1(new_perp_v1(x...)) (x...)。参考规范Agent 需要推断出的目标契约样本在 Agent 可见源码中移除了目标的参考规范但参考规范本身保留在共享包中framework/sources/AptosExperimental/trading/position/native_position_types.spec.move。对读者而言这既是答案也是理解任务边界的钥匙spec aptos_experimental::native_position_types { spec new_accumulative_index(index: i128): AccumulativeIndex { pragma opaque; aborts_if false; ensures result AccumulativeIndex { index }; } spec accumulative_index_value(idx: AccumulativeIndex): i128 { pragma opaque; aborts_if false; ensures result idx.index; } spec new_perp_v1( size: u64, is_long: bool, entry_px_times_size_sum: u128, avg_acquire_entry_px: u64, user_leverage: u8, is_isolated: bool, funding_index_at_last_update: AccumulativeIndex, unrealized_funding_amount_before_last_update: i64, timestamp: u64, ): Position { pragma opaque; aborts_if false; ensures result Position::PerpV1 { /* 9 个字段原样保留 */ }; } spec unpack_perp_v1(pos: Position): (u64, bool, u128, u64, u8, bool, AccumulativeIndex, i64, u64) { pragma opaque; aborts_if false; ensures result_1 pos.size; ensures result_2 pos.is_long; ensures result_3 pos.entry_px_times_size_sum; ensures result_4 pos.avg_acquire_entry_px; ensures result_5 pos.user_leverage; ensures result_6 pos.is_isolated; ensures result_7 pos.funding_index_at_last_update; ensures result_8 pos.unrealized_funding_amount_before_last_update; ensures result_9 pos.timestamp; } }这些参考规范揭示了本样本的契约模式也对应其normal-result契约类别要求pragma opaque三个目标函数均声明为不透明——对调用方而言函数体不可见只有规范可见。这使得下游模块对这些函数的推理完全依赖规范本身规范质量直接影响整个依赖闭包的可验证性aborts_if false所有函数保证永不中止。由于这些函数是纯构造/解构无资源操作、无断言该属性成立且是必须捕获的核心行为ensures后置条件构造函数的输出必须精确等于按参数构造的结构/枚举变体解构函数的 9 个输出必须逐一等于输入字段。值得注意unpack_perp_v1的ensures result_N pos.N写法本质上是解构是构造的逆这一性质的逐字段展开。一套合格的推断结果至少应捕获这些纯函数语义而突变打分mutation scoring则进一步用变异后的代码验证规范能否拒绝错误实现。编译上下文共享包、地址别名与 Prover 配置样本 README 的 Compilation context 段说明共享包包含目标模块及其完整源码级传递模块依赖的并集模块/文件映射与已解析的命名地址记录在framework/corpus-modules.json中。对本样本而言三个闭包都是空的Opaque/bodyless 边界None证明期间可见的契约边界无外部不透明函数传递规范函数None传递源码模块None也就是说native_position_types是一个自包含的叶子模块——它不依赖任何其他交易模块仅使用 Move 内建类型。这在语料库中属于较为简洁的一类目标适合作为模块级规范推断的基准任务。地址别名Move.toml共享包的 Move.toml 声明了包名InferenceCorpusFramework及地址别名其中与本样本直接相关的是[addresses] aptos_experimental 0x7 aptos_framework 0x1 aptos_std 0x1 std 0x1因此源码中的module aptos_experimental::native_position_types对应链上地址0x7与任务描述符package_module_target: 0x7::native_position_types一致。语料库将所有目标源码统一放置在sources/下的AptosExperimental、AptosFramework、AptosStdlib、AptosTrading、MoveStdlib目录中与原始仓库路径的映射记录在corpus-modules.json。Prover 配置Prover.toml共享包还带一份 Prover.toml声明了证明期间的原生借用豁免[prover] borrow_natives [storage_slot::borrow_storage_slot_resource_mut]该配置与样本本身无直接耦合属于共享包整体的证明环境设置。准备阶段preparation.patch 与 Agent 编辑边界样本 README 的 Preparation 段明确可执行 Move 实现保持不变仅从 Agent 可见源码中移除目标参考规范块共 3 处对应 3 个目标函数各 1 个 spec block均在sources/AptosExperimental/trading/position/native_position_types.spec.move中。实际补丁内容见样本的 preparation.patch它做两件事删除参考规范将new_accumulative_index、new_perp_v1、unpack_perp_v1三个 spec block 逐行替换为空白保留accumulative_index_value的规范作为编译上下文的一部分新增任务描述符.move-inference-task.json记录本次推断任务的元数据{ called_function_dependencies: [], granularity: module, package_module_target: 0x7::native_position_types, schema_version: 3, source_commit: 950e413e46090d2056740c36dd7a77b1764b6936, source_path: sources/AptosExperimental/trading/position/native_position_types.move, spec_function_dependencies: [], target_functions: [ new_accumulative_index, new_perp_v1, unpack_perp_v1 ], task_id: AX-native-position-types-005, transitive_called_function_dependencies: [], transitive_function_dependencies: [], transitive_module_dependencies: [] }任务描述符与 README 的 Target 段互相印证task_id、package_module_target、target_functions、source_commit完全一致且三个传递依赖列表为空——从控制器角度这表示该样本无调用链/模块级依赖需要额外注入调度器可依据该描述符与manifest.json中的哈希完成一致性校验。Agent 的编辑边界准备流程规定Agent 只能编辑sources/AptosExperimental/trading/position/native_position_types.move换言之Agent 可以修改目标模块的实现文件通常做法是补充或调整规范但不能改动其他模块、不能改动corpus-modules.json记录的模块映射。这一约束保证了评估隔离不同实验臂之间的差异只能来自对同一目标模块的规范推断行为而非对整个语料库的任意篡改。验证与打分的下游机制样本本身的产出推断出的规范会进入评估框架的下游流水线筛选screening样本在语料库中的就绪状态记录于screening/summary.json历史兼容性证据保留在screening/results/AX-native-position-types-005.json突变打分mutation scoring语料库为样本准备了突变体见mutants/AX-native-position-types-005/与mutants-scoring/AX-native-position-types-005/推断出的契约需能拒绝变异后的错误实现。normal-result契约类别意味着本样本的验收重点是正常路径的返回结果契约而非中止条件运行与审计整个流程遵循 evaluation README 描述的轮次纪律——语料库变更必须作为新版本语料与轮次记录已完成的轮次永不重写。小结AX-native-position-types-005是理解 Move 规范推断语料库设计的一个理想入口它以模块为粒度目标是一个自包含、无传递依赖、纯构造/解构语义的交易类型模块参考规范清晰展示了pragma opaqueaborts_if falseensures的契约风格。其 recipe 机制共享包 preparation.patch 哈希校验 任务描述符则是整个语料库可复现性的基石每个实验臂都基于同一源码哈希、面对同一组被移除的参考规范、被限定在同一编辑边界内完成推断。若想继续深入可以按以下路径在仓库中对照阅读目标实现aptos-move/framework/aptos-experimental/sources/trading/position/native_position_types.move参考规范样本内framework/sources/AptosExperimental/trading/position/native_position_types.spec.move准备补丁aptos-move/flow/evaluation/spec-inference/corpus-v1.2/samples/AX-native-position-types-005/preparation.patch语料总览corpus-v1.2 README评估框架运行手册spec-inference README【免费下载链接】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),仅供参考