getMultipleAccounts позволяет эффективно получать информацию сразу о нескольких учетных записях Solana. Вместо отдельных запросов getAccountInfo для каждой учетной записи getMultipleAccounts позволяет объединить эти запросы в пакет, сократить сетевые издержки и повысить скорость отклика приложения.
Распространенные сценарии использования
- Пакетная загрузка данных учетных записей: Когда приложению необходимо отобразить или обработать данные нескольких известных учетных записей (например, учетных записей токенов пользователя или списка конфигураций ончейн-программ).
- Трекеры портфелей: Получение балансов и состояний многочисленных учетных записей токенов, принадлежащих пользователю.
- Интерфейсы маркетплейсов: Отображение сведений о нескольких NFT или выставленных на продажу объектах путем одновременного получения данных их учетных записей.
- Повышение производительности dApp: Значительное сокращение количества вызовов RPC, что ускоряет загрузку и улучшает взаимодействие с приложением, особенно при работе с большим количеством учетных записей.
Параметры запроса
-
pubkeys(arrayизstring, обязательный):- Массив строк публичных ключей учетных записей, которые требуется запросить, в кодировке base58.
- Не более 100 публичных ключей в одном запросе.
- Пример:
["So11111111111111111111111111111111111111112", "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"]
-
options(object, необязательный): Объект конфигурации, содержащий одно или несколько следующих полей:commitment(string): Задает уровень подтверждения для запроса (например,"finalized","confirmed","processed").encoding(string): Кодировка данных учетной записи. Доступные варианты:"base64"(по умолчанию): стандартная кодировка base64."base58": работает медленнее, но может быть полезна в некоторых случаях."base64+zstd": сжатые с помощью zstd данные в кодировке base64."jsonParsed": если учетная запись принадлежит программе, для которой у узла RPC есть синтаксический анализатор (например, SPL Token Program или Stake Program), полеdataбудет содержать объект JSON. Это очень удобно для работы со структурированными данными.
dataSlice(object): Позволяет получить только определенную часть данных учетной записи. Это полезно для больших учетных записей, когда требуется лишь небольшой фрагмент информации.offset(usize): Смещение в байтах от начала данных учетной записи.length(usize): Количество байтов, возвращаемых начиная с указанного смещения.- Примечание:
dataSliceдоступен только для кодировокbase58,base64илиbase64+zstd.
minContextSlot(u64): Минимальный слот, на котором может быть обработан запрос.
Структура ответа
Объект ответа JSON-RPC содержит полеresult со следующими данными:
context(object):slot(u64): Слот, на котором была получена информация.apiVersion(string, необязательный): Версия API узла.
value(array):- Массив, каждый элемент которого соответствует публичному ключу с тем же индексом в массиве
pubkeysзапроса. - Каждый элемент будет содержать одно из следующего:
null: Если учетная запись с указанным публичным ключом не существует или при ее получении произошла ошибка.- Объект учетной записи со следующими полями:
lamports(u64): Количество лампортов, принадлежащих учетной записи.owner(string): Публичный ключ программы, которой принадлежит учетная запись, в кодировке base58.data(arrayилиobject): Данные учетной записи. Если дляencodingзадано значениеjsonParsedи существует синтаксический анализатор, поле будет содержать объект JSON. В противном случае оно обычно содержит массив["encoded_string", "encoding_format"](например,["SGVsbG8=", "base64"]).executable(boolean): Указывает, содержит ли учетная запись программу, то есть является ли она исполняемой.rentEpoch(u64): Следующая эпоха, в которой с этой учетной записи будет взиматься арендная плата.space(u64): Размер данных учетной записи в байтах.
- Массив, каждый элемент которого соответствует публичному ключу с тем же индексом в массиве
Примеры
1. Получение основной информации о двух учетных записях
В этом примере получаются данные двух учетных записей: SOL Llama (NFT) и Serum Dex Program v3.2. Получение разобранных данных учетных записей токенов
В этом примере получаются данные двух учетных записей SPL Token и запрашивается кодировкаjsonParsed для получения структурированных данных.
Рекомендации для разработчиков
- Не более 100 учетных записей: За один вызов можно запросить не более 100 учетных записей.
- Атомарность: Запрос не является атомарным: если получение одной учетной записи завершится ошибкой, другие все равно могут быть получены успешно. Проверяйте каждый элемент массива
valueна значениеnull. - Удобство
jsonParsed: При работе с распространенными типами учетных записей, такими как учетные записи SPL Token, настоятельно рекомендуется использовать кодировкуjsonParsed. Это избавляет от необходимости вручную десериализовать данные. dataSliceдля больших учетных записей: Для очень больших учетных записей (например, некоторых учетных записей состояния программ) используйтеdataSlice, чтобы получить только необходимые байты и избежать передачи избыточного объема данных.- Обработка ошибок: Будьте готовы обрабатывать элементы
nullв массивеvalueответа. Они указывают, что учетная запись не найдена или ее не удалось получить.
getMultipleAccounts, вы можете создавать более производительные и масштабируемые приложения Solana.
Связанные методы
getAccountInfo
Получение подробной информации об одной учетной записи
getProgramAccounts
Получение всех учетных записей, принадлежащих определенной программе