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

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

  • Проверка баланса SOL: Определите собственный баланс SOL любого аккаунта.
  • Проверка существования аккаунта: Проверьте, инициализирован ли аккаунт с указанным публичным ключом, то есть имеются ли у него лампорты или данные.
  • Проверка аккаунтов программ: Получите данные, сохраненные в аккаунте, принадлежащем программе. Это необходимо для понимания состояния программы.
  • Определение владельца аккаунта: Узнайте, какая программа владеет аккаунтом. Это помогает определить, как интерпретировать данные аккаунта и принадлежит ли он системной программе.
  • Проверка исполняемости аккаунта: Определите, содержит ли аккаунт развернутую программу.

Параметры

  1. publicKey (строка, обязательный): Публичный ключ запрашиваемого аккаунта в кодировке base58.
  2. config (объект, необязательный): Объект конфигурации со следующими полями:
    • commitment (строка, необязательный): Задает уровень подтверждения, используемый для запроса. Значение по умолчанию — finalized.
      • finalized: Узел запросит последний блок, который квалифицированное большинство кластера подтвердило как достигший максимального срока блокировки голосов.
      • confirmed: Узел запросит последний блок, за который проголосовало квалифицированное большинство кластера.
      • processed: Узел запросит свой последний блок. Обратите внимание, что блок может быть неполным.
    • encoding (строка, необязательный): Кодировка данных аккаунта. Значение по умолчанию — base64.
      • base58 (медленно)
      • base64
      • base64+zstd (если данные сжаты)
      • jsonParsed: Если данные аккаунта представляют собой известное состояние программы, например аккаунты токенов или стейкинга, узел попытается преобразовать их в структуру JSON. Для обычных аккаунтов программ вместо этого, как правило, возвращаются двоичные данные в кодировке base64.
    • dataSlice (объект, необязательный): Ограничивает возвращаемые данные аккаунта определенным срезом. Доступен только для кодировок base58, base64 и base64+zstd.
      • offset (число): Количество байтов от начала данных аккаунта до начала среза.
      • length (число): Количество возвращаемых байтов.
    • minContextSlot (число, необязательный): Минимальный слот, в котором можно обработать запрос.

Ответ

Если аккаунт найден, поле result будет содержать объект с двумя основными свойствами:
  • context (объект): Содержит метаданные запроса.
    • slot (число): Слот, в котором была получена информация.
    • apiVersion (строка, необязательный): Версия RPC API.
  • value (объект | null): Если аккаунт не существует, значение будет равно null. В противном случае это объект, содержащий:
    • lamports (число): Количество лампортов (1 SOL = 1 000 000 000 лампортов), принадлежащих аккаунту.
    • owner (строка): Публичный ключ программы-владельца этого аккаунта в кодировке base58.
    • data (массив | объект | строка): Данные, сохраненные в аккаунте. Формат зависит от параметра encoding, использованного в запросе.
      • Для base64 (по умолчанию), base58, base64+zstd: Обычно это массив [encoded_string, encoding_format], например ["string_data", "base64"].
      • Для jsonParsed: Это может быть объект JSON, если узел RPC способен выполнить синтаксический анализ данных, например для аккаунтов SPL Token. В противном случае, если данные не распознаны как стандартная структура, по умолчанию может использоваться ["", "base64"] или аналогичный формат.
    • executable (логическое значение): true, если аккаунт содержит программу; в противном случае — false.
    • rentEpoch (число): Следующая эпоха, в которой с этого аккаунта будет взиматься арендная плата.
    • space (число, необязательный): Длина данных в байтах. (Примечание: в официальной документации Solana указано поле space, и некоторые поставщики RPC могут включать его. Оно представляет общий объем пространства, выделенного для данных аккаунта). Подробнее о данных аккаунтов и десериализации читайте в нашем подробном руководстве.
Если аккаунт не найден, поле value в результате будет равно null.

Пример: получение информации об аккаунте

Получим информацию об идентификаторе Serum Program V3 (9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin) в основной сети. Примечание: В приведенных ниже примерах замените YOUR_API_KEY своим фактическим ключом API Helius.

Рекомендации разработчикам

  • Производительность: Если приложению необходимо часто проверять несколько аккаунтов, используйте getMultipleAccounts, чтобы объединять запросы в пакеты и сократить количество обращений к серверу.
  • Десериализация данных: Поле data часто требуется десериализовать с учетом структур данных программы-владельца. Обычно для этого нужны инструменты и библиотеки, предназначенные для конкретной программы, например библиотека SPL Token для аккаунтов токенов. В нашей статье о десериализации данных аккаунтов приведены полезные методы и примеры.
  • Ограничения частоты запросов: Учитывайте ограничения частоты запросов узла RPC, особенно при запросе большого количества аккаунтов или частом выполнении запросов.
  • Управление расходами: getAccountInfo обычно является недорогим запросом, но частый опрос может увеличить расходы. Оптимизируйте шаблоны запросов.
  • Используйте jsonParsed с осторожностью: Хотя jsonParsed может быть удобен, он поддерживает не все типы аккаунтов, а его выходные данные могут измениться при обновлении структур данных программы. Для критически важных приложений разбор двоичных данных по известной структуре обеспечивает более стабильное поведение.
  • Рассмотрите использование dataSlice: Если вам нужна только небольшая часть данных аккаунта, используйте dataSlice, чтобы сократить объем передаваемых данных и потенциально снизить стоимость запросов.

Связанные методы

getMultipleAccounts

Получите данные нескольких аккаунтов одним пакетным запросом для повышения производительности

getBalance

Получите только баланс SOL без полной информации об аккаунте