
Представляем фильтры токен-аккаунтов для gTFA
В октябре прошлого года мы выпустили getTransactionsForAddress — новый RPC-вызов Solana для запросов к историческим данным, который объединяет getSignaturesForAddress и getTransaction в одном методе.
Сегодня мы рады сообщить, что getTransactionsForAddress (gTFA) теперь позволяет получить историю переводов токенов кошелька одним RPC-вызовом.
Новая функция tokenAccounts позволяет включать транзакции связанных токен-аккаунтов кошелька. Ранее они не учитывались в gTFA и его предшественнике getSignaturesForAddress.
Раньше разработчикам приходилось вызывать getTokenAccountsByOwner, а затем getSignaturesForAddress для каждого токен-аккаунта.
Это было медленно и дорого и часто требовало сотен дополнительных RPC-вызовов.
Теперь достаточно одного вызова getTransactionsForAddress с tokenAccounts.
Проблема
В Solana токены фактически не хранятся непосредственно в вашем кошельке.
Вместо этого кошельку принадлежат связанные токен-аккаунты (Associated Token Accounts, ATA), в которых и хранятся ваши токены.
Например, когда кто-то отправляет вам USDC, токены поступают на ваш токен-аккаунт USDC, а не на основной адрес кошелька.
Из-за этого при запросе истории транзакций кошелька возникает серьезная проблема:
Когда вы вызываете getSignaturesForAddress для кошелька, то получаете только транзакции, которые напрямую ссылаются на адрес этого кошелька.
Переводы токенов, которые взаимодействуют с вашими токен-аккаунтами, но не упоминают кошелек, просто не отображаются.
Обходное решение
До сегодняшнего дня разработчикам приходилось применять громоздкое обходное решение:
- Вызвать
getTokenAccountsByOwner, чтобы получить токен-аккаунты кошелька - Вызвать
getSignaturesForAddressдля самого кошелька - Вызвать
getSignaturesForAddressдля каждого токен-аккаунта - Объединить все результаты
- Удалить дубликаты (многие транзакции затрагивают несколько аккаунтов)
- Отсортировать по времени
У этого подхода есть несколько недостатков:
1. Низкая производительность
Для кошелька с 50 токен-аккаунтами требуется не менее 51 RPC-вызова, чтобы составить полную историю. У профессиональных трейдеров, активных пользователей DeFi и любителей торговать мемкоинами могут быть сотни токен-аккаунтов.
2. Неэффективная пагинация
Хотите получить 20 последних транзакций? Нельзя просто получить по 20 транзакций из каждого источника и объединить их. Сначала нужно загрузить все данные, удалить дубликаты, отсортировать результаты и только затем выбрать первые 20 транзакций.
Эффективная пагинация невозможна без избыточной загрузки данных.
3. Расходы на RPC быстро растут
Каждый RPC-вызов создает дополнительные издержки. Если на один пользовательский запрос приходится более 100 таких вызовов, затраты быстро растут, особенно при масштабировании.
Решение
С новым фильтром tokenAccounts вы можете получить полную историю кошелька одним RPC-запросом:
{
"jsonrpc": "2.0",
"id": "helius-example",
"method": "getTransactionsForAddress",
"params": [
"86xCnPeV69n6t3DnyGvkKobf9FdN2H9oiVDdaMpo2MMY",
{
"filters": {
"tokenAccounts": "all"
},
"sortOrder": "asc",
"limit": 100
}
]
}Вот и всё. Один вызов. Полная история.
Параметры фильтрации
Фильтр tokenAccounts поддерживает три варианта: none, balanceChanged и all.
none (по умолчанию)
Если фильтр tokenAccounts установлен в none, транзакции должны ссылаться на адрес кошелька.
balanceChanged (рекомендуется)
При использовании balanceChanged транзакции должны ссылаться на адрес кошелька либо изменять баланс принадлежащего ему токен-аккаунта.
all
Если для tokenAccounts указано значение all, транзакции должны ссылаться на адрес кошелька или принадлежащего ему токен-аккаунта.
Варианты использования
Новая функция необходима для следующих решений:
- Кошельки, отображающие полную историю транзакций
- Трекеры портфелей, которым нужны данные о каждом перемещении токенов
- Налоговое ПО, рассчитывающее прибыль и убытки по всем токенам
- Аналитические панели, отображающие действия пользователей
Начало работы
Функция tokenAccounts уже доступна.
Просто добавьте tokenAccounts: balanceChanged (или all) в объект фильтров — и всё готово!
Еще не используете getTransactionsForAddress?
Ознакомьтесь с нашей документацией и SDK, чтобы узнать больше и начать работу.
Похожие статьи
Подпишитесь на Helius
Следите за новостями разработки на Solana и получайте уведомления о наших публикациях


