我正在尝试创建一个 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)
}
这是我的 AttributesStruct
#[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"
}
]
这是错误消息:
FAIL:结果代码不匹配。Tx 创建多个 NFT-1。想要:0。拥有:4(用户错误)。消息:参数解码错误(args):输入太短
同时,我在使用 ManagedBuffer 的结构的参数输入方面遇到了一些问题。我做错了什么吗?我正在尝试为 NFT 提供一个参数结构,其中包含多个字符串条目,我可以将其作为参数发送给智能合约。