getAccountInfo — это основной инструмент для выполнения запросов к блокчейну Solana. Он позволяет получить всю сохраненную информацию, связанную с определенным публичным ключом аккаунта. Сюда входят баланс аккаунта в лампортах, программа-владелец, признак исполняемости и сохраненные данные.
Распространенные сценарии использования
- Проверка баланса SOL: Определите собственный баланс SOL любого аккаунта.
- Проверка существования аккаунта: Проверьте, инициализирован ли аккаунт с указанным публичным ключом, то есть имеются ли у него лампорты или данные.
- Проверка аккаунтов программ: Получите данные, сохраненные в аккаунте, принадлежащем программе. Это необходимо для понимания состояния программы.
- Определение владельца аккаунта: Узнайте, какая программа владеет аккаунтом. Это помогает определить, как интерпретировать данные аккаунта и принадлежит ли он системной программе.
- Проверка исполняемости аккаунта: Определите, содержит ли аккаунт развернутую программу.
Параметры
-
publicKey(строка, обязательный): Публичный ключ запрашиваемого аккаунта в кодировке base58. -
config(объект, необязательный): Объект конфигурации со следующими полями:commitment(строка, необязательный): Задает уровень подтверждения, используемый для запроса. Значение по умолчанию —finalized.finalized: Узел запросит последний блок, который квалифицированное большинство кластера подтвердило как достигший максимального срока блокировки голосов.confirmed: Узел запросит последний блок, за который проголосовало квалифицированное большинство кластера.processed: Узел запросит свой последний блок. Обратите внимание, что блок может быть неполным.
encoding(строка, необязательный): Кодировка данных аккаунта. Значение по умолчанию —base64.base58(медленно)base64base64+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 без полной информации об аккаунте