Aptos Move合约部署:构造函数初始化及Aptos CLI调用方法
Aptos Move合约部署构造函数及参数初始化指南
1. 部署阶段调用的构造函数
在Aptos Move中,合约部署时会自动触发模块内的**init函数**,它是合约初始化的入口,需满足以下要求:
- 归属目标部署模块
- 函数签名需包含
&signer类型参数(代表合约发布者账户),可按需添加其他参数 - 必须标记为
public(script),确保部署时能被Aptos框架自动调用
2. 初始化合约级别字符串值
合约级别字符串指模块顶层的storage存储变量,需在init函数中完成初始化,步骤如下:
- 在模块顶层定义
storage修饰的字符串变量 - 在
init函数中通过发布者的signer账户,将目标字符串写入存储
示例代码:
module my_addr::my_module { use std::string::String; use aptos_framework::account; // 合约级存储字符串变量 storage my_contract_str: String; // 部署时执行的初始化函数 public(script) fun init(account: &signer) { // 初始化固定字符串值 let init_str = String::utf8(b"Hello Aptos"); // 将值写入合约存储 my_contract_str::write(account, init_str); } // 用于验证的读取函数 public fun get_contract_str(): String { my_contract_str::read() } }
若需动态传入字符串初始化,只需修改init函数签名,添加String类型参数即可。
3. 通过aptos move publish携带参数调用构造函数
当init函数需要外部传入参数时,可通过--args参数在发布命令中传递值:
步骤1:修改init函数支持外部参数
调整函数签名,添加字符串参数:
public(script) fun init(account: &signer, init_str: String) { my_contract_str::write(account, init_str); }
步骤2:执行发布命令并传递参数
使用aptos move publish时,通过--args string:<你的字符串>格式传递参数:
aptos move publish --package-dir ./your-package-dir --named-addresses my_addr=0x<你的账户地址> --args string:"My Custom Initial String"
参数说明:
--package-dir:指定Move合约包所在目录--named-addresses:将模块内的命名地址绑定到你的发布账户地址--args:支持传递多个参数,格式为类型:值,多参数用空格分隔(如--args string:"First" u64:123)
验证初始化结果
部署完成后,可调用读取函数确认字符串是否正确初始化:
aptos move run --function-id 0x<你的账户地址>::my_module::get_contract_str --account 0x<你的账户地址>
内容的提问来源于stack exchange,提问作者Tahlil
相关产品推荐
相关产品推荐

