Мониторинг новых монет Solana через WebSocket API
Блокчейн Solana - одна из самых активных платформ для запуска новых токенов: ежедневно здесь появляются тысячи цифровых активов. Если вы разрабатываете программу на Rust, которая должна в реальном времени уведомлять о каждой новой монете, вам потребуется не парсинг сайтов (это медленно и ненадёжно), а прямое взаимодействие с API через WebSocket. В этой статье мы разберём, какие сервисы предоставляют нужный функционал, как настроить подписку на события и какие библиотеки Rust использовать.
Почему парсинг сайтов не подходит?
Сайты вроде DexScreener или Birdeye обновляются с задержкой и могут блокировать частые запросы. WebSocket-соединение даёт мгновенные push-уведомления без опроса сервера. Для Solana существуют специализированные API, которые транслируют события создания новых токенов (mint) и добавления ликвидности.
Какие API и WebSocket использовать?
1. Helius WebSocket API
Helius предоставляет RPC-ноды с поддержкой WebSocket. Вы можете подписаться на logsSubscribe по программе Token Program (TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA). При создании нового токена в логе появляется событие create с адресом mint. Rust-крейт solana-client поддерживает WebSocket через PubsubClient.
2. GeckoTerminal API (от CoinGecko)
Предоставляет WebSocket-каналы для новых пулов на децентрализованных биржах (DEX). Подписка на new_pools возвращает данные о только что созданных парах. Подходит, если вас интересуют не просто новые токены, а именно появление ликвидности.
3. Jupiter API
Jupiter - агрегатор DEX на Solana. Его API позволяет получать список всех торгуемых токенов, но для реального времени лучше использовать WebSocket от Helius или GeckoTerminal.
Пошаговая реализация на Rust
Для написания бота на Rust вам понадобятся крейты: solana-client (для RPC и WebSocket), tokio-tungstenite (для асинхронного WebSocket) и serde_json (для парсинга ответов).
- Установите зависимости в
Cargo.toml:solana-client = "1.17",tokio-tungstenite = "0.21",serde_json = "1.0". - Подключитесь к WebSocket Helius: используйте URL вида
wss://mainnet.helius-rpc.com/?api-key=ВАШ_КЛЮЧ. - Отправьте запрос на подписку по методу
logsSubscribeс фильтромmentions: ["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"]. - Обрабатывайте входящие сообщения: при появлении
createв логах извлекайте адрес нового токена и выводите его в консоль.
Пример кода (упрощённый)
use solana_client::pubsub_client::PubsubClient;
use solana_sdk::commitment_config::CommitmentConfig;
let url = "wss://mainnet.helius-rpc.com/?api-key=YOUR_KEY";
let (mut client, receiver) = PubsubClient::logs_subscribe(
url,
CommitmentConfig::finalized(),
"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
).unwrap();
for msg in receiver {
if let Ok(log) = msg {
if log.value.logs.contains(&"create".to_string()) {
println!("Новый токен: {:?}", log.value.signature);
}
}
}Обратите внимание: signature - это транзакция создания, из которой можно извлечь адрес mint через дополнительный RPC-запрос.
Альтернативный подход: RPC-метод getProgramAccounts
Если WebSocket кажется сложным, можно использовать getProgramAccounts для программы Token Program с фильтром по размеру данных. Но этот метод - pull, а не push, поэтому он не подходит для real-time мониторинга.