getTokenAccountsByDelegate получает все аккаунты SPL Token, которые назначили указанный публичный ключ делегатом. Делегат имеет полномочия выполнять определенные действия с аккаунтом токенов, например переводить или сжигать токены в пределах делегированной суммы.
Этот метод полезен для сервисов, которые управляют делегированными полномочиями или должны определить, от имени каких аккаунтов токенов может действовать определенный ключ.
Распространенные сценарии использования
- Получение списка делегированных активов: Отображение всех аккаунтов токенов, для которых определенному кошельку или программе предоставлены полномочия делегата.
- Автоматизированное управление токенами: Сервисы, выполняющие действия от имени пользователей (например, автоматизированные маркет-мейкеры или протоколы стейкинга, управляющие токенизированными вознаграждениями), могут использовать этот метод для поиска аккаунтов, с которыми им разрешено взаимодействовать.
- Аудит делегированных полномочий: Проверка аккаунтов, которые делегировали полномочия определенному адресу.
- Отзыв делегированных полномочий: Определение аккаунтов токенов, у которых необходимо отозвать полномочия делегата (хотя сам отзыв выполняется отдельной транзакцией).
Параметры запроса
-
delegatePubkey(строка, обязательный): Закодированный в base-58 публичный ключ аккаунта делегата, связанные аккаунты токенов которого необходимо найти. -
filter(объект, обязательный): Объект JSON, в котором необходимо указатьmintилиprogramIdдля фильтрации аккаунтов:mint(строка): Закодированный в base-58 публичный ключ определенного минтинга токена. Если он указан, запрос вернет только аккаунты этого типа токенов, делегированныеdelegatePubkey.programId(строка): Закодированный в base-58 публичный ключ программы токенов, которая владеет аккаунтами. Обычно это стандартная программа SPL Token (TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA) или программа Token-2022 (TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb).
-
options(объект, необязательный): Необязательный объект конфигурации со следующими распространенными полями:commitment(строка, необязательный): Задает уровень подтверждения.encoding(строка, необязательный): Кодировка данных аккаунта. Настоятельно рекомендуется"jsonParsed", поскольку эта кодировка возвращает сведения об аккаунте в удобочитаемом виде. Среди других вариантов —"base64"и"base64+zstd". Если значение не указано, по умолчанию используется"base64".dataSlice(объект, необязательный): Позволяет получить только определенный фрагмент данных аккаунта. Содержит поляoffset(usize) иlength(usize). Применимо только для кодировокbase58,base64илиbase64+zstd.minContextSlot(u64, необязательный): Минимальный слот, на котором может быть обработан запрос.
Структура ответа
Полеresult.value в ответе JSON-RPC представляет собой массив объектов. Каждый объект представляет аккаунт токенов, для которого delegatePubkey является делегатом и который соответствует критериям filter. Каждый объект в массиве содержит два поля:
pubkey(строка): Закодированный в base-58 публичный ключ самого аккаунта токенов.account(объект): Объект с подробной информацией об аккаунте токенов:lamports(u64): Баланс аккаунта токенов в лампортах (для освобождения от арендной платы).owner(строка): Публичный ключ программы, которой принадлежит этот аккаунт (например, программы токенов).data: Данные аккаунта. Если используется кодировка"jsonParsed", это будет объект с полемprogram(например,"spl-token") и полемparsed, содержащим структурированные сведения:parsed.info: Объект с такими сведениями, как:mint(строка): Адрес минтинга токена.owner(строка): Владелец аккаунта токенов (не делегат).tokenAmount(объект): Общий баланс токенов на этом аккаунте (amount,decimals,uiAmount,uiAmountString).delegate(строка): Публичный ключ делегата (должен совпадать сdelegatePubkeyиз запроса).delegatedAmount(объект): Количество токенов, которыми делегат уполномочен управлять (amount,decimals,uiAmount,uiAmountString).isNative(логическое значение): Указывает, содержит ли аккаунт обернутые SOL.state(строка): Состояние аккаунта токенов (например,"initialized").
parsed.type(строка): Тип аккаунта (например,"account").
executable(логическое значение): Является ли аккаунт исполняемым.rentEpoch(u64): Эпоха, в которой с этого аккаунта в следующий раз потребуется арендная плата.space(u64, еслиjsonParsedне используется): Длина необработанных данных аккаунта в байтах.
jsonParsed):
Примеры кода
Рекомендации разработчикам
- Требование к фильтру: В параметре фильтра необходимо указать
mintилиprogramId. Без одного из этих фильтров нельзя запросить все делегированные аккаунты для всех типов токенов. - Кодировка: Настоятельно рекомендуется использовать
"jsonParsed"для параметраencoding. Это упрощает обработку данных, поскольку двоичные данные аккаунта декодируются в структурированный формат JSON. - Производительность: Запрос с
programIdможет потреблять больше ресурсов, чем запрос сmint, особенно если делегат имеет полномочия для множества различных типов токенов. Некоторые поставщики RPC могут устанавливать для этого метода более строгие ограничения частоты запросов. - Делегированная сумма: Поле
delegatedAmountв ответе указывает максимальное количество токенов, которое делегат в настоящее время уполномочен использовать. Оно может быть меньше общего значенияtokenAmountна аккаунте. - Отзыв делегированных полномочий: Этот метод только получает информацию. Чтобы отозвать делегированные полномочия, владелец аккаунта токенов должен отправить инструкцию
Revokeпрограмме SPL Token.
getTokenAccountsByDelegate для поиска аккаунтов SPL Token по назначенному для них делегату.