ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Aptos Move 链上依赖实战:使用 `aptos` 依赖语法引用链上已发布包(pack1 依赖 pack2 最小示例)

Aptos Move 链上依赖实战:使用 `aptos` 依赖语法引用链上已发布包(pack1 依赖 pack2 最小示例) Aptos Move 链上依赖实战使用aptos依赖语法引用链上已发布包pack1 依赖 pack2 最小示例【免费下载链接】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/cli/src/aptos_dep_example/目录下的最小示例为蓝本系统讲解 Aptos Move 中通过aptos依赖语法直接引用链上已发布包的完整工作流包括依赖清单的写法、被依赖包的定义方式、端到端的编译发布步骤以及源码层面的调用关系印证。读完本文你将掌握在 Aptos 本地开发中让一个 Move 包依赖另一个已上链包的标准做法并能在本地测试网中完整复现该流程。示例全景两个包的职责分工该示例位于仓库的 aptos_dep_example 目录由两个相互独立的 Move 包组成包角色内容pack2被依赖方链上库定义project::m模块提供add函数pack1依赖方消费者通过aptos依赖声明引用链上的Pack2并调用其add函数从源码结构看整个流程的核心链路是pack2被编译并发布到本地测试网 →pack1在编译期通过aptos http://localhost:8080依赖声明从链上拉取Pack2的已发布代码 →pack1中的模块成功调用pack2中定义的函数。这一机制使得 Move 包之间的依赖不再局限于本地路径local或 Git 仓库git而是可以直接以链为仓库复用链上已经发布的模块。被依赖方 pack2一个最简库包pack2是本次示例中被链上发布、被他人引用的库包其清单文件 pack2/Move.toml 非常简洁[package] name Pack2 version 0.0.0注意这里只声明了包名和版本号没有本地依赖。Pack2是 pack1 在[dependencies]中引用它的逻辑名称二者必须一致才能正确解析。pack2提供的最小工具模块位于 pack2/sources/m.movemodule project::m { public fun add(x: u64, y: u64): u64 { x y } }该模块定义在命名地址project下导出一个简单的add(x, y)函数。它之所以能被外部调用关键在于两点函数被声明为public对其他模块开放调用模块挂载在project这个命名地址上后续编译发布时通过--named-addresses projectdefault将其解析为链上的默认账户地址。从该函数签名可以看出add只是两个u64相加的纯函数没有任何链上状态访问非常适合作为最小依赖示例的演示载体——读者可以在此基础上替换为自己的业务模块。依赖方 pack1aptos依赖语法详解pack1是消费方其清单文件 pack1/Move.toml 完整展示了本文的核心语法[package] name Pack1 version 0.0.0 [dependencies] Pack2 { aptos http://localhost:8080, address default }逐字段拆解这条依赖声明Pack2依赖的逻辑包名必须与 pack2/Move.toml 中的name完全一致编译期据此定位目标包aptos http://localhost:8080依赖来源类型与地址。aptos表示从 Aptos 链上获取该依赖后面的 URL 是链的 REST API 端点。示例中http://localhost:8080指向本地测试网节点实际部署时可替换为 testnet / mainnet 的节点地址。编译器会通过该端点读取链上已发布的对应包代码address default指定该依赖在链上绑定的账户地址。这里的default是一个账户别名在命令执行时通过--named-addresses或账户创建流程解析为具体地址。它决定了编译器从链上哪个账户的命名空间下解析Pack2的模块。pack1的模块 pack1/sources/hello.move 展示了消费端代码module project::test { use project::m; public entry fun test(_sender: signer) { assert!(m::add(1, 2) 1 2, 1); } }这段代码与 pack2/sources/m.move 形成了清晰的源码级印证use project::m;直接按project命名地址导入了来自Pack2的m模块m::add(1, 2) 1 2调用链上发布的add函数并用assert!校验1 2的运算结果整个test函数不包含任何Pack2之外的第三方依赖充分说明链上依赖已经完整替代了本地源码依赖。值得注意的是pack1自己的模块也命名为project::test与pack2的project::m同处一个命名地址命名空间之下这正体现了链上依赖模型的特性多个包通过同一命名地址共享命名空间依赖方通过use语句按模块名跨包引用。端到端运行步骤从启动节点到编译成功原文档给出了完整的可执行命令序列。以下按阶段还原并补充必要的解释使其可直接在本地复现阶段一启动本地测试网并创建账户# 启动本地测试网节点后台运行默认暴露 REST API 于 8080 端口 aptos node run-local-testnet # 创建名为 default 的账户并通过水龙头为其注入测试币 aptos account create --account default --use-faucetrun-local-testnet是 aptos CLI 提供的本地单节点测试网命令节点启动后即为后续aptos依赖声明中的http://localhost:8080提供链上数据服务--account default将账户命名为default这与依赖声明中的address default以及后续命令中的--named-addresses projectdefault形成完整的别名映射链--use-faucet表示通过内置水龙头为该账户铸造测试币用于支付后续publish交易的 Gas 费用。阶段二编译并发布 pack2cd pack2 aptos move compile --named-addresses projectdefault aptos move publish --named-addresses projectdefault--named-addresses projectdefault将源码中的命名地址project解析为default账户的真实地址编译与发布两个阶段必须保持一致aptos move publish会把pack2的字节码作为一笔交易提交到本地测试网交易成功后project::m模块即上链成为可供其他包引用的链上依赖。阶段三编译依赖链上包的 pack1cd ../pack1 aptos move compile --named-addresses projectdefault这一步是整条流程的验证点pack1并未在本地存放pack2的任何源码或字节码文件编译器仅凭 pack1/Move.toml 中的Pack2 { aptos http://localhost:8080, address default }声明即可从本地测试网获取已发布的Pack2完成类型解析与编译。编译通过即证明链上依赖链路完全打通。使用前提与注意事项基于示例本身的标注与仓库结构使用该特性时有以下几点需要注意示例的临时性质该目录的 README.md 明确说明这是一个展示新aptos依赖用法的小示例small example of using the newaptosdependency并注明在正式文档与测试就绪后会被移除。因此它更适合作为理解机制的最小范例而非长期生产依赖节点的可用性是硬前提aptos依赖的地址必须指向一个运行中且已同步到目标区块的节点示例为本地测试网http://localhost:8080节点不可达时编译会失败若依赖包发布于 testnet / mainnet则需要将 URL 替换为对应网络的公开节点地址并确保address指向实际发布账户账户别名的一致性address default、--account default、--named-addresses projectdefault三处对default的使用必须指向同一账户否则依赖解析会因地址不匹配而失败发布顺序的强约束必须先发布pack2再编译pack1因为pack1的编译依赖链上已存在的Pack2代码顺序颠倒会导致依赖拉取失败从源码结构看该示例位于 aptos-move/cli/src/aptos_dep_example由aptos-move/cli组件下的aptos命令体系承载所有操作均通过标准aptos move子命令完成无需额外安装其他工具。小结通过这个最小示例你可以清晰掌握 Aptos Move 链上依赖的核心用法被依赖包pack2正常编译发布依赖包pack1在Move.toml中以Pack2 { aptos node-url, address account-alias }声明引用随后以aptos move compile完成跨包编译。整个过程无需维护本地源码副本依赖直接取自链上为模块复用与多包协作提供了一条简洁的路径。如需深入了解完整操作序列可直接对照仓库中的 README.md 及两份 Move.toml 配置文件进行实验。【免费下载链接】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),仅供参考
返回列表