如何使用结构作为参数为VarArgs MultiArg端点参数配置mados scCall步骤



我正在尝试创建一个elrond智能合约,该合约允许同时发送多个元素,以减少向合约发送初始信息的事务数量。

为此,我使用了一个端点,该端点将MultiArg3 的VarArgs作为参数

#[allow(clippy::too_many_arguments)]
#[only_owner]
#[endpoint(createMultipleNft)]
fn create_multipl_nft(
&self,
#[var_args] args: VarArgs<MultiArg3<ManagedBuffer, ManagedBuffer, AttributesStruct<Self::Api>>>,
) ->SCResult<u64> { 
...
Ok(0u64)
}

这是我的属性构造

#[derive(TypeAbi, NestedEncode, NestedDecode, TopEncode, TopDecode)]
pub struct AttributesStruct<M: ManagedTypeApi> {
pub value1: ManagedBuffer<M>,
pub value2: ManagedBuffer<M>,
}

这是我的Mandos步骤(其余步骤运行良好,它们都与我以前实现的单个元素端点一起工作(。

{
"step": "scCall",
"txId": "create-multiple-NFT-1",
"tx": {
"from": "address:owner",
"to": "sc:minter",
"function": "createMultipleNft",
"arguments": [
["str:NFT 1"],
["str:www.mycoolnft.com/nft1.jpg"],
[
["str:test1", "str:test2"]
]
],
"gasLimit": "20,000,000",
"gasPrice": "0"
},
"expect": {
"out": [
"1", "1", "1"
],
"status": "0",
"message": "",
"gas": "*",
"refund": "*"
}
}

我也尝试过这个论点:

"arguments": [
["str:NFT 1",
"str:www.mycoolnft.com/nft1.jpg",
["str:test1", "str:test2"]
]

这个:

"arguments": [
["str:NFT 1",
"str:www.mycoolnft.com/nft1.jpg",
"str:test1", "str:test2"
]

这个:

"arguments": [
["str:NFT 1",
"str:www.mycoolnft.com/nft1.jpg",
{ 
"0-value1":"str:test1",
"1-value2":"str:test2"
}
]

这是错误消息:

失败:结果代码不匹配。Tx创建多个NFT-1。想要:0。有:4(用户错误(。消息:参数解码错误(args(:输入太短

同时,我在使用ManagedBuffer的结构的参数输入方面遇到了一些问题。我是不是做错了什么?我正在尝试为一个NFT创建一个参数结构,该结构包含多个字符串条目,我可以将其作为参数发送到智能合约。

由于使用的是结构,因此结构中的ManagedBuffer是嵌套编码的。这意味着你需要在它之前加上ManagedBuffer的长度

幸运的是,有一个使用nested:前缀的快捷方式。

所以你的论点是这样的:

"arguments": [
["str:NFT 1"],
["str:www.mycoolnft.com/nft1.jpg"],
[
["nested:str:test1", "nested:str:test2"]
]
]

最新更新