问题
为了发布调用另一个 Move 模块中的函数的 Move 模块,您需要其源代码。所有 Move 模块都是如此,而不仅仅是您自己的模块。你会注意到Move.toml
已经存在依赖关系AptosFramework
。这允许您调用所有框架函数,例如与硬币、代币、签名者、时间戳等相关的内容。
因此,要实现此功能,您需要访问源代码。
来源:Git 依赖项
如果您可以访问另一个 git 存储库中的源代码,您可以告诉编译器在哪里可以找到other
模块,将其添加到 Move.toml 中:
[dependencies.other]
git = 'https://github.com/banool/move-examples.git'
rev = 'main'
subdir = 'call_other_module/other'
这是告诉编译器,“源代码other
可以在call_other_module/other/
该 git 存储库的目录”。
来源:本地
如果您本地有源代码,则可以这样做:
[dependencies.other]
local = "../other"
论点在哪里local
是源代码的路径。
来源:我没有?
如果没有源码,可以尝试下载。默认情况下,当有人发布 Move 模块时,他们会在其中包含源代码。
首先尝试下载代码:
cd /tmp
aptos move download --account 6286dfd5e2778ec069d5906cd774efdba93ab2bec71550fa69363482fbd814e7 --package other
如果源代码确实部署在链上,您应该看到以下内容:
Saved package with 1 module(s) to `/tmp/other`
{
"Result": "Download succeeded"
}
Inside /tmp/other
你会找到完整的来源,包括Move.toml
and sources/
.
从这里开始,您只需按照以下步骤操作即可Source: Local
above.
Note: 的值--package
应该匹配name
领域在Move.toml
已部署的代码。有关如何根据链上数据确定这一点的更多信息。
来源: 下载失败?
如果你跑了aptos move download
并看到了这个:
module without code: other
Saved package with 1 module(s) to `/private/tmp/other_code/other`
{
"Result": "Download succeeded"
}
你会发现sources/other.move
是空的。
这意味着作者发布了带有此 CLI 参数集的代码:
--included-artifacts none
这意味着他们故意选择不将来源包含在链上。
不幸的是,现在你运气不好。编译的硬性要求是,如果要调用另一个 Move 模块中的函数,则必须拥有该模块的源代码。管道中的工作应该能够反编译 Move 字节码,但尚未准备好。
我希望这有帮助,编码愉快!
该答案中使用的代码可以在这里找到:https://github.com/banool/move-examples/tree/main/call_other_module https://github.com/banool/move-examples/tree/main/call_other_module.