Skip to main content
Метод RPC getMultipleAccounts позволяет эффективно получать информацию сразу о нескольких учетных записях Solana. Вместо отдельных запросов getAccountInfo для каждой учетной записи getMultipleAccounts позволяет объединить эти запросы в пакет, сократить сетевые издержки и повысить скорость отклика приложения.

Распространенные сценарии использования

  • Пакетная загрузка данных учетных записей: Когда приложению необходимо отобразить или обработать данные нескольких известных учетных записей (например, учетных записей токенов пользователя или списка конфигураций ончейн-программ).
  • Трекеры портфелей: Получение балансов и состояний многочисленных учетных записей токенов, принадлежащих пользователю.
  • Интерфейсы маркетплейсов: Отображение сведений о нескольких NFT или выставленных на продажу объектах путем одновременного получения данных их учетных записей.
  • Повышение производительности dApp: Значительное сокращение количества вызовов RPC, что ускоряет загрузку и улучшает взаимодействие с приложением, особенно при работе с большим количеством учетных записей.

Параметры запроса

  1. pubkeys (array из string, обязательный):
    • Массив строк публичных ключей учетных записей, которые требуется запросить, в кодировке base58.
    • Не более 100 публичных ключей в одном запросе.
    • Пример: ["So11111111111111111111111111111111111111112", "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"]
  2. 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

Получение всех учетных записей, принадлежащих определенной программе