0

当我知道用于存储数据的 ID 列表时,如何查询storagevia ?.entries

来自 decl_storage 的片段

/// PoE Proofs
Proofs get(fn proofs): map hasher(blake2_128_concat) GenericId=> ProofInfo<Proof, T::AccountId, T::BlockNumber>;

我试图获得仅有的几个条目的打字稿代码

type IncomingParam = [StorageKey, ProofInfo]
type SnGenericIds = GenericId[]
export async function getAll (
  items: SnGenericIds = []
): Promise<IncomingParam[]> {
  const api = getApi()
  return await api.query.poe.proofs.entries(items)
}
// items is  [ '0x6261666b313332313365616465617364' ]

当我在浏览器中使用 polkadot.js 应用程序并传递该 ID 时,我得到记录并且只有一个,上面的 TS 代码返回所有记录,我检查了https://polkadot.js.org/api/start/ api.query.other.html#map-keys-entries如果我正确理解上面的代码应该。工作

我知道,multi但我想用这种方法来获取全部或部分,这可能吗?

4

1 回答 1

0

.entries(args)只能使用和过滤其中double_mapargs与第一个参数匹配的单个字符串double_map

上面的 rust 代码没有过滤,因此 RPC 和 API 将检索所有条目。

所以锈代码如下:

/// PoE Proofs
pub Proofs get(fn proofs): double_map hasher(blake2_128_concat) GenericId, hasher(twox_64_concat) T::AccountId => ProofInfo<Proof, T::AccountId, T::BlockNumber>;

这允许使用以下方法进行过滤

api.query.poe.proofs.entries('0x1231233132312')

更多信息可以在这里找到

于 2020-09-14T14:43:36.153 回答