假设我有这样一个移动脚本:
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。
还请注意,它是如何在我定义的移动模块中调用函数的:
module addr::my_module {
public entry fun do_nothing() { }
}我把这些文件放哪儿?我需要Move.toml吗?如何使用CLI运行我的脚本?
发布于 2022-11-30 12:43:08
让我们用一步一步的例子来运行如何执行一个移动脚本,这应该会回答你所有的问题。
创建一个新目录,以便从以下位置工作:
mkdir testing
cd testing设置Aptos CLI:
aptos initCLI会问您要使用哪个网络(例如devnet、testnet、mainnet)。它还会要求您提供您的私钥(它看起来像:0xf1adc8d01c1a890f17efc6b08f92179e6008d43026dd56b71e7b0d9b453536be),或者它可以为您生成一个新的密钥,作为设置帐户的一部分。
从这里开始,初始化一个新的移动项目:
aptos move init --name my_script现在您需要为您的脚本创建一个文件。因此,以上面创建的脚本为例,将其放在sources/中,例如:
testing/
Move.toml
sources/
top_up.move换句话说,top_up.move应该包含问题中包含的脚本。
现在,对Move模块做同样的事情,让您了解以下内容:
testing/
Move.toml
sources/
top_up.move
my_module.move现在您可以编译脚本了:
$ 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中
[addresses]
addr = "b078d693856a65401d492f99ca0d6a29a0c5c0e371bc2521570a86e40d95f823"最后,您可以运行编译后的脚本:
$ 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 compile和aptos move run-script --compiled-script-path不同,您只需执行以下操作:
$ 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。因此,我建议现在使用前面的两步方法。
https://stackoverflow.com/questions/74627977
复制相似问题