如何通过SUI CLI调用Move入口函数并传递向量/字符串参数?
解决SUI CLI调用Move函数时的参数传递问题
核心问题分析
你遇到的错误有两个关键原因:
- u8参数超出范围:
year参数类型为u8,取值范围仅为0-255,你传递的2022远超该范围,这是直接报错的根源之一。 - vector
参数格式错误 :SUI CLI对Move的vector<u8>类型有特定传递规范,你之前尝试的写法均不符合要求。
正确的参数传递方式
1. 处理u8类型的year参数
将2022调整为u8范围内的有效值,比如用22代表2022年的后两位,或根据业务逻辑替换为其他0-255之间的数值。
2. 传递vector类型的name参数
SUI CLI支持两种合规的vector<u8>传递方式:
- 方式一:字符串转字节数组
用双引号包裹字符串,后缀:vector<u8>指定类型,CLI会自动将字符串转为对应UTF-8字节数组。 - 方式二:直接指定字节数组
用方括号包裹十进制字节值,以逗号分隔,比如[74,73,77]对应"JIM"的UTF-8字节。
完整SUI CLI调用示例
结合你的模块地址、Cap对象ID,正确调用命令如下:
方式一:用字符串传递name参数
sui client call --package 0x426ff70c987a00b9384b102f10a4f8bb8945141f --module certificates --function issue_certificate --args "0x8e724e1266e1f4f1a8d6cfa904b2e0749ed41953" "JIM":vector<u8> 22 "0x[实际接收者地址]" --gas-budget 100000000
方式二:用字节数组传递name参数
sui client call --package 0x426ff70c987a00b9384b102f10a4f8bb8945141f --module certificates --function issue_certificate --args "0x8e724e1266e1f4f1a8d6cfa904b2e0749ed41953" [74,73,77] 22 "0x[实际接收者地址]" --gas-budget 100000000
命令参数说明
--package:指定模块发布地址--module:目标模块名称certificates--function:要调用的入口函数issue_certificate--args:按函数签名顺序传递参数:- CertCreatorCap对象的ID(字符串形式)
- vector
类型的name参数(两种格式二选一) - u8类型的year参数(必须是0-255之间的数值)
- 接收者的实际地址(字符串形式)
--gas-budget:指定交易的gas上限,可根据实际情况调整
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

