嵌套存储映射的数据结构

Data structure for nested storage map

如何声明以下数据结构的类型?

一个产品可以有很多候选人,每个候选人都有股份。但同一候选人可以留在不止一种产品中,但股份不同。我还需要从候选 ID 查询股权,从产品 ID 查询候选 ID。

    #[pallet::storage]
    #[pallet::getter(fn governor_group)]
    pub type ProductId<T> = StorageMap<_, Blake2_128Concat, ProductId, Vec<CandidateId>>; 

    #[pallet::storage]
    #[pallet::getter(fn candidate_nominee)]
    pub type Stakes<T> = StorageMap<_, Blake2_128Concat, CandidateId, Stake>;

在上面的代码中,每个候选人只能有一个赌注。

Substrate 中不允许嵌套存储映射,例如:

    #[pallet::storage]
    #[pallet::getter(fn governor_group)]
    pub type ProductId<T> = StorageMap<_, Blake2_128Concat, ProductId, Stakes>; 

我认为您正在寻找 StorageDoubleMap

这让您拥有:

Key -> Key -> Value

所以看起来像:

#[pallet::storage]
#[pallet::getter(fn governor_group)]
pub type ProductId<T> = StorageMap<
    _,
    Blake2_128Concat,
    ProductId,
    Blake2_128Concat,
    CandidateId,
    Stakes,
>;

您可能需要引入其他映射来阐明此双映射的子上下文,或者创建一些数据结构来保存您正在寻找的信息。

请注意,我们支持使用 StorageNMap 任意嵌套地图,这进一步扩展了这一概念。