嵌套存储映射的数据结构
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
任意嵌套地图,这进一步扩展了这一概念。
如何声明以下数据结构的类型?
一个产品可以有很多候选人,每个候选人都有股份。但同一候选人可以留在不止一种产品中,但股份不同。我还需要从候选 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
任意嵌套地图,这进一步扩展了这一概念。