字符串数组作为端点中的参数导致 Mandos 测试中的错误代码 10

String array as argument in endpoint result in error code 10 in Mandos tests

问题

这是我的函数:

    #[endpoint(registerItem)]
    fn register_item(&self, items_id: &[String])
    {
        // nothing for the moment
    }

在我的 Mandos 测试中,一切都很好(setState、scDeploy 等),直到我像这样测试此端点的调用:

{
  "step": "scCall",
  "tx": {
    "from": "address:owner",
    "to": "sc:equip",
    "function": "registerItem",
    "arguments": [

        "0x70757461696e|0x70757461696e"

    ],
    "gasLimit": "5,000,000",
    "gasPrice": "0"
  },
  "expect": {
    "status": "0",
    "gas": "*",
    "refund": "*"
  }
}

当我 运行 它时,我收到错误代码 10,即执行失败。

这是完整的日志:

Output: Scenario: init.scen.json ...   FAIL: result code mismatch. Tx . Want: 0. Have: 10 (execution failed). Message: execution failed
Done. Passed: 0. Failed: 1. Skipped: 0.
ERROR: some tests failed

** 我尝试过的东西 **

我已经用 int 数组替换了 strings 数组,但我没有遇到这个问题。我也试过 [str] 但我得到了这个错误:

15 | #[elrond_wasm::derive::contract]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time

如果它是一个端点,我认为你必须使用像 ManagedVec 这样的 SDK 特殊类型,这样 Node 才能知道如何 serialize/deserialize 它。

也许试试这个:

    #[endpoint(registerItem)]
    fn register_item(&self, items_id: ManagedVec<ManagedBuffer>)
    {
        // nothing for the moment
    }