Skip to main content
Рекомендации и рекомендуемые паттерны для агентов, использующих Helius TypeScript SDK. Инструкции по установке и началу работы см. в обзоре.

Рекомендации для агентов

Используйте getTransactionsForAddress вместо двухэтапного поиска

getTransactionsForAddress объединяет поиск подписи и получение транзакции в одном вызове с фильтрацией на стороне сервера. Поддерживаются диапазоны времени и слотов, фильтрация по токен-аккаунтам и пагинация.

Используйте sendSmartTransaction для стандартной отправки

Этот метод автоматически выполняет симуляцию, оценивает количество вычислительных единиц, получает приоритетные комиссии и подтверждает транзакцию. Не создавайте инструкции ComputeBudget вручную — SDK добавляет их автоматически.

Используйте Helius Sender для минимальной задержки

Для транзакций, критичных ко времени (арбитраж, снайпинг, ликвидации), используйте sendTransactionWithSender. Этот метод направляет их через мультирегиональную инфраструктуру Helius и Jito.

Используйте getAssetBatch для нескольких активов

При получении нескольких активов объединяйте их в пакеты. Не вызывайте getAsset в цикле.

Используйте вебхуки или WebSocket вместо опроса

Не опрашивайте getTransactionsForAddress в цикле. Используйте вебхуки для уведомлений между серверами или WebSocket для потоковой передачи данных клиенту в реальном времени.

Пагинация

SDK использует разные стратегии пагинации в зависимости от метода.

На основе токена или курсора (методы RPC V2)

На основе страниц (DAS API)

Фильтр tokenAccounts

При запросе getTransactionsForAddress фильтр tokenAccounts определяет, включать ли активность токен-аккаунта:

changedSinceSlot — инкрементальное получение аккаунтов

changedSinceSlot возвращает только аккаунты, измененные после указанного слота. Это полезно для синхронизации и индексирования. Поддерживается в getProgramAccountsV2, getTokenAccountsByOwnerV2, getAccountInfo, getMultipleAccounts, getProgramAccounts и getTokenAccountsByOwner.

Распространенные ошибки

  1. transactionDetails: "full" не используется по умолчанию — по умолчанию getTransactionsForAddress возвращает только подписи. Укажите transactionDetails: "full", чтобы получить полные данные транзакций.
  2. Не добавляйте инструкции ComputeBudget при использовании sendSmartTransaction — SDK добавляет их автоматически. Если вы добавите собственные инструкции, возникнут дубликаты и транзакция завершится с ошибкой.
  3. Приоритетные комиссии указываются в микролампортах на вычислительную единицу — не в лампортах. Значения из getPriorityFeeEstimate уже представлены в единицах, необходимых для SetComputeUnitPrice.
  4. Пагинация DAS начинается с 1 — первая страница — page: 1, а не page: 0.
  5. blockTime указывается в секундах Unix, а не в миллисекундах — при фильтрации по blockTime используйте Math.floor(Date.now() / 1000).
  6. getAsset по умолчанию скрывает взаимозаменяемые токены — чтобы включить их, передайте options: { showFungible: true }.
  7. Потоки WebSocket необходимо закрывать — всегда используйте сигнал AbortController и по завершении вызывайте helius.ws.close(), чтобы избежать утечек соединений.
  8. Указывайте maxSupportedTransactionVersion: 1 при получении транзакций. Иначе getTransaction, getBlock и getTransactionsForAddress с transactionDetails: "full" завершаются ошибкой -32015 для транзакций v1. В транзакциях v1 приоритетная комиссия указана в message.transactionConfig.priorityFee как общая сумма в лампортах; инструкции ComputeBudget для поиска отсутствуют. См. раздел Поддержка транзакций v1.

Обработка ошибок и повторные попытки

SDK создает встроенные объекты Error, в строку сообщения которых включен код состояния HTTP (например, "API error (429): ..."). В объекте ошибки нет свойства .status, поэтому для определения состояния необходимо анализировать сообщение.