Предварительные требования: ключ API Helius (тариф Business или Professional для Mainnet LaserStream) и Node.js 18+. Знакомство с разделами Подписки на аккаунты и Мониторинг транзакций будет полезно, но не обязательно.
Настройка
Создайте новый проект, установите SDK иbs58 (используется для декодирования подписей транзакций), затем укажите свой ключ API:
Скрипт
Сохраните этот код какindex.ts, затем выполните npx ts-node index.ts:
Что делает скрипт
Одна подписка, два блока фильтров
Один вызовsubscribe(...) содержит две именованные группы фильтров:
- Фильтр
accountsполучает каждый аккаунт, принадлежащий программе Pump.fun (кривые бондинга, состояние выпуска токена и т. д.), при каждом изменении его данных. - Фильтр
transactionsполучает каждую транзакцию, взаимодействующую с программой Pump.fun. Флагиvote: false, failed: falseотбрасывают голоса и неуспешные транзакции до того, как они попадут в ваш обработчик.
Чтение необработанных полей
Чтобы упростить работу с некоторыми значениями полезной нагрузки, их нужно немного преобразовать: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, начиная с указанного слота.