字符串数组作为端点中的参数导致 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
}
问题
这是我的函数:
#[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
}