有几个示例,其中包括可以在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"
}
}
答案 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"
}
}