0

我正在尝试创建一个 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 提供一个参数结构,其中包含多个字符串条目,我可以将其作为参数发送给智能合约。

4

1 回答 1

0

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

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

所以你的论点看起来像这样:

"arguments": [
    ["str:NFT 1"],
    ["str:www.mycoolnft.com/nft1.jpg"],
    [
        ["nested:str:test1", "nested:str:test2"]
    ]
]
于 2021-12-29T17:40:57.637 回答