getTransactionsForAddress и будете передавать новую активность в реальном времени через transactionSubscribe. Сначала вы опробуете встроенную демонстрацию, а затем создадите полноценное приложение Next.js.
Попробуйте в реальном времени
Вставьте свой API-ключ и адрес любого кошелька, чтобы увидеть совместную работу трех компонентов: портфеля, истории и ленты в реальном времени. Эти же данные будет отображать ваше приложение.Создайте приложение на Next.js
Grab the full app on GitHub
Клонируйте полный стартовый проект — готовое приложение Next.js из этого руководства, которое можно сразу запустить с помощью
npm install && npm run dev.Предварительные требования: Node.js 18+ и API-ключ Helius.
1
Scaffold the project
ws.Добавьте свой ключ в .env.local:.env.local
2
Proxy RPC calls through a route handler
Так API-ключ останется на сервере. Клиент отправляет сюда метод и параметры, а обработчик выполняет их через Helius SDK, который добавляет ваш ключ и формирует запрос.
app/api/helius/route.ts
3
Relay the live feed over Server-Sent Events
Браузер не может открыть подключение WebSocket к Helius без ключа. Вместо этого откройте WebSocket на сервере и передавайте подписи клиенту с помощью SSE.
app/api/stream/route.ts
4
Render the dashboard
Страница загружает портфель и историю через прокси, а затем подписывается на ленту SSE для получения обновлений в реальном времени.
app/page.tsx
5
Run it
Как это работает
Весь портфель одним вызовом DAS
getAssetsByOwner с showFungible: true и showNativeBalance: true возвращает взаимозаменяемые токены, NFT (как стандартные, так и сжатые) и нативный баланс SOL в одном ответе, поэтому отдельные вызовы getBalance или getTokenAccountsByOwner не нужны. Разделите items по interface, чтобы сгруппировать токены и NFT.
Каждый элемент содержит собственные метаданные, поэтому один и тот же вызов формирует оба списка. Используйте content.metadata.name для имени, а content.links.image — для логотипа или изображения. Взаимозаменяемые токены также содержат объект token_info с исходными значениями balance, decimals и symbol. Разделите balance на 10 ** decimals, чтобы получить количество в удобочитаемом формате. Не у каждого токена есть имя или логотип, поэтому корректно обрабатывайте их отсутствие.
Полная история в одном запросе
getTransactionsForAddress возвращает историю транзакций кошелька, а с filters.tokenAccounts: "balanceChanged" также включает переводы по связанным токен-аккаунтам кошелька — активность, которую обычный вызов getSignaturesForAddress пропустил бы. Используйте transactionDetails: "full", чтобы получить полные данные транзакций, а не только подписи.
Обновления в реальном времени без опроса
transactionSubscribe отправляет сообщение каждый раз, когда транзакция затрагивает кошелек, поэтому опрос не требуется. Если добавить в фильтр tokenAccounts: "balanceChanged", он также будет сопоставлять токен-аккаунты кошелька, и входящие переводы SPL появятся в ленте — это та же активность, которую учитывает вызов истории. Передача подписки через серверный обработчик маршрута не позволяет API-ключу попасть на клиент.
Дальнейшие действия
getAssetsByOwner
Все параметры отображения, пагинация и полная структура ответа с активами.
getTransactionsForAddress
Расширенная фильтрация по времени, слоту, токену, направлению и сумме.
transactionSubscribe
Параметры фильтрации и структура полезной нагрузки для ленты WebSocket в реальном времени.
Deploy your own program
Следующий этап: разверните программу Solana в devnet через Helius.