Как запросить хранилище субстрата через `.entries` для частичных элементов

Как я могу запросить storage через .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 в браузере и передаю этот идентификатор, я получаю запись и только одну, указанный выше код TS возвращает ВСЕ записи, я проверил https://polkadot.js.org/api/start/api.query.other.html#map-keys-entries и, если я правильно понимаю, приведенный выше код должен. Работа

я знаю о multi но я хотел бы использовать этот метод, чтобы получить все или некоторые, это вообще возможно?

1 ответ

Решение

То .entries(args) можно использовать и фильтровать только с double_map где args - это одна строка, которая соответствует первому аргументу double_map

В приведенном выше коде ржавчины нет фильтрации, поэтому 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')

Дополнительную информацию можно найти здесь

Другие вопросы по тегам