Как запросить хранилище субстрата через `.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')
Дополнительную информацию можно найти здесь