Skip to main content
Передавайте все обновления аккаунтов и транзакции Pump.fun в реальном времени с помощью LaserStream SDK. На этой странице разбирается полный скрипт TypeScript, который можно запустить от начала до конца: он выводит каждую транзакцию по мере ее поступления, раз в минуту показывает скользящую статистику (пропускную способность, количество уникальных плательщиков комиссий и общую сумму комиссий в SOL) и автоматически сохраняет подключение при повторных соединениях. Это удобная отправная точка для любых решений, которым нужен непрерывный мониторинг Pump.fun: торговых ботов, аналитических панелей, конвейеров оповещений или простого изучения структуры данных, на основе которой можно создать более специализированное решение.
Предварительные требования: ключ API Helius (тариф Business или Professional для Mainnet LaserStream) и Node.js 18+. Знакомство с разделами Подписки на аккаунты и Мониторинг транзакций будет полезно, но не обязательно.

Настройка

Создайте новый проект, установите SDK и bs58 (используется для декодирования подписей транзакций), затем укажите свой ключ API:
Выберите ближайшую к месту запуска скрипта конечную точку. См. регионы LaserStream.

Скрипт

Сохраните этот код как index.ts, затем выполните npx ts-node index.ts:

Что делает скрипт

Одна подписка, два блока фильтров

Один вызов subscribe(...) содержит две именованные группы фильтров:
  • Фильтр accounts получает каждый аккаунт, принадлежащий программе Pump.fun (кривые бондинга, состояние выпуска токена и т. д.), при каждом изменении его данных.
  • Фильтр transactions получает каждую транзакцию, взаимодействующую с программой Pump.fun. Флаги vote: false, failed: false отбрасывают голоса и неуспешные транзакции до того, как они попадут в ваш обработчик.
Оба потока данных поступают через один поток gRPC, поэтому SDK управляет только одним подключением. Если подключение прерывается, SDK автоматически восстанавливает его, и вы продолжаете получать обновления от обоих фильтров.

Чтение необработанных полей

Чтобы упростить работу с некоторыми значениями полезной нагрузки, их нужно немного преобразовать:
  • tx.signature — это Buffer. Передайте его в bs58.encode(...), чтобы получить подпись в формате base58, которую вы увидели бы в обозревателе или ответе getTransaction.
  • tx.meta.fee — это значение u64, хранящееся в виде строки, чтобы значения выше Number.MAX_SAFE_INTEGER не теряли точность в JavaScript. Перед арифметическими операциями оберните его в Number(...). То же соглашение о хранении u64 в виде строк применяется к нескольким полям уровня блока. Полную структуру данных см. в разделе Мониторинг слотов и блоков.

Скользящая статистика

setInterval выводит сводку каждые 60 секунд: общее количество транзакций, число успешных и неуспешных транзакций, пропускную способность, количество уникальных плательщиков комиссий и общую сумму комиссий в SOL. Нажмите Ctrl+C, чтобы вывести последнюю сводку перед завершением работы скрипта.

Расширение скрипта

Вот несколько вариантов дальнейшего развития:
  • Декодируйте дискриминаторы инструкций, чтобы помечать сделки как buy / sell / create. Шаблон разбора см. в разделе Декодирование данных транзакций.
  • Сохраняйте скользящую статистику в базе данных (Postgres, Redis, ClickHouse), а не во внутренних Set / счетчиках в памяти.
  • Настройте оповещения по пороговым значениям: крупные плательщики комиссий, внезапные всплески объема, новые аккаунты кривых бондинга.
  • Воспроизводите пропущенную активность при запуске, задав fromSlot в SubscribeRequest (не более чем за последние 48 часов; см. Воспроизведение исторических данных).
  • Объедините скрипт с мониторингом слотов и блоков, чтобы получить контекст на уровне блоков.
  • Отслеживайте один токен вместо всей программы: укажите адрес выпуска токена в accountInclude и задайте matchMints: true в фильтре транзакций, чтобы получать каждую передачу, обмен, выпуск и сжигание этого токена (см. Фильтрация по выпуску токена).

Следующие шаги

Transaction Monitoring

Общие шаблоны фильтрации транзакций, используемые этим скриптом.

Decoding Transaction Data

Преобразуйте двоичную полезную нагрузку транзакции в читаемые транзакции Solana.

Account Subscriptions

Отслеживайте изменения состояния определенных аккаунтов с помощью фильтров.

Historical Replay

Воспроизводите до 24 часов прошлой активности Pump.fun, начиная с указанного слота.