在Polkadot Apps开发人员标签中,如何编码Rust元组?

时间:2019-10-14 13:51:38

标签: substrate polkadot-js

有几个示例,其中包括可以在Polkadot Apps接口here中应用的运行时模块中声明的自定义Rust类型。但是我不确定如何编码元组。对于其他计划在其代码和运行时API中使用元组以供polkadot-js使用的人,情况也是如此。

在Substrate Runtime模块中声明它的方式如下:

// tuple (struct)
pub type Code = u16;
pub type Type = u16;
pub struct Tuple(Code, Type);

// Complex struct using tuple
pub struct Record<T::AccountId,Tuple> {
    pub address: T::AccountId,
    pub tuple_values: Tuple,
}

// Storage
Record get(record):
        map T::AccountId => Option<Record<T::AccountId,Tuple>>;

我想将类似的内容添加到Polkadot Apps设置的Developer标签中,但是我不知道这是否是正确的语法。

{
    "Code": "u16",
    "Type": "u16",
    "Tuple": ["Code", "Type"],
    "Record": {
        "address": "AccountId",
        "tuple_values": "Tuple"
    }
}

1 个答案:

答案 0 :(得分:1)

Tuples,Tuple结构和Named结构都以相同的方式编码。来自https://substrate.dev/docs/en/next/conceptual/core/codec#tuples-and-structures

  

一系列固定大小的值,每个值可能具有不同但预定且固定的类型。这只是每个编码值的串联。对于结构,值是已命名的,但这与编码无关(名称将被忽略-仅顺序重要)。

所以在您的情况下,这样的方法将起作用:

```json
{
    "Code": "u16",
    "Type": "u16",
    "Tuple": {
        "bogus_name_1": "Code",
        "bogus_name_2": "Type"
    },
    "Record": {
        "address": "AccountId",
        "tuple_values": "Tuple"
    }
}