首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Aptos CLI执行移动脚本?

如何使用Aptos CLI执行移动脚本?
EN

Stack Overflow用户
提问于 2022-11-30 12:43:08
回答 1查看 27关注 0票数 0

假设我有这样一个移动脚本:

代码语言:javascript
复制
script {
    use std::signer;
    use aptos_framework::aptos_account;
    use aptos_framework::aptos_coin;
    use aptos_framework::coin;

    fun main(src: &signer, dest: address, desired_balance: u64) {
        let src_addr = signer::address_of(src);

        let balance = coin::balance<aptos_coin::AptosCoin>(src_addr);
        if (balance < desired_balance) {
            aptos_account::transfer(src, dest, desired_balance - balance);
        };

        addr::my_module::do_nothing();
    }
}

这是调用部署在链上的coin.move模块上的函数。对于这个问题,它所做的并不是那么重要,但简而言之,它检查目标帐户的余额是否小于desired_balance,如果是的话,它将达到desired_balance

还请注意,它是如何在我定义的移动模块中调用函数的:

代码语言:javascript
复制
module addr::my_module {
    public entry fun do_nothing() { }
}

我把这些文件放哪儿?我需要Move.toml吗?如何使用CLI运行我的脚本?

EN

回答 1

Stack Overflow用户

发布于 2022-11-30 12:43:08

让我们用一步一步的例子来运行如何执行一个移动脚本,这应该会回答你所有的问题。

创建一个新目录,以便从以下位置工作:

代码语言:javascript
复制
mkdir testing
cd testing

设置Aptos CLI:

代码语言:javascript
复制
aptos init

CLI会问您要使用哪个网络(例如devnettestnetmainnet)。它还会要求您提供您的私钥(它看起来像:0xf1adc8d01c1a890f17efc6b08f92179e6008d43026dd56b71e7b0d9b453536be),或者它可以为您生成一个新的密钥,作为设置帐户的一部分。

从这里开始,初始化一个新的移动项目:

代码语言:javascript
复制
aptos move init --name my_script

现在您需要为您的脚本创建一个文件。因此,以上面创建的脚本为例,将其放在sources/中,例如:

代码语言:javascript
复制
testing/
   Move.toml
   sources/
      top_up.move

换句话说,top_up.move应该包含问题中包含的脚本。

现在,对Move模块做同样的事情,让您了解以下内容:

代码语言:javascript
复制
testing/
   Move.toml
   sources/
      top_up.move
      my_module.move

现在您可以编译脚本了:

代码语言:javascript
复制
$ aptos move compile --named-addresses addr=81e2e2499407693c81fe65c86405ca70df529438339d9da7a6fc2520142b591e
Compiling, may take a little while to download git dependencies...
INCLUDING DEPENDENCY AptosFramework
INCLUDING DEPENDENCY AptosStdlib
INCLUDING DEPENDENCY MoveStdlib
BUILDING my_script
{
  "Result": []
}

注意我是如何使用--named-addresses参数的。这是必要的,因为在您的代码中,您引用了这个名为addr的命名地址。编译器需要知道这指的是什么。与使用这个CLI参数不同,您可以将类似的内容放在Move.toml

代码语言:javascript
复制
[addresses]
addr = "b078d693856a65401d492f99ca0d6a29a0c5c0e371bc2521570a86e40d95f823"

最后,您可以运行编译后的脚本:

代码语言:javascript
复制
$ aptos move run-script --compiled-script-path build/my_script/bytecode_scripts/main.mv --args address:b078d693856a65401d492f99ca0d6a29a0c5c0e371bc2521570a86e40d95f823 --args u64:5
Do you want to submit a transaction for a range of [17000 - 25500] Octas at a gas unit price of 100 Octas? [yes/no] >
yes
{
  "Result": {
    "transaction_hash": "0x655f839a45c5f14ba92590c321f97c3c3f9aba334b9152e994fb715d5648db4b",
    "gas_used": 178,
    "gas_unit_price": 100,
    "sender": "81e2e2499407693c81fe65c86405ca70df529438339d9da7a6fc2520142b591e",
    "sequence_number": 53,
    "success": true,
    "timestamp_us": 1669811892262502,
    "version": 370133122,
    "vm_status": "Executed successfully"
  }
}

注意,编译脚本的路径在build/my_script/下,而不是build/top_up/下。这是因为它使用了Move.toml中包含的项目的名称,这是我们运行aptos move init --name my_script时的my_script

因此,要回答您的一个问题,是的,您需要一个Move.toml,您目前不能只使用CLI单独执行一个脚本文件。例如,编译器需要这个来确定使用什么Aptos框架。

请参阅这个答案中使用的代码:脚本

还请参见如何使用Rust而不是CLI:如何使用Rust SDK在Aptos上执行移动脚本?来完成此操作。

还有一种更精简的方式来执行脚本。与单独运行aptos move compileaptos move run-script --compiled-script-path不同,您只需执行以下操作:

代码语言:javascript
复制
$ aptos move run-script --script-path sources/my_script.move --args address:b078d693856a65401d492f99ca0d6a29a0c5c0e371bc2521570a86e40d95f823 --args u64:5

这将使用一个CLI命令执行两个步骤。不过,请注意,这种方法有一些主要的基础,请参阅https://github.com/aptos-labs/aptos-core/issues/5733。因此,我建议现在使用前面的两步方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74627977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档