
Как отслеживать пул ликвидности Raydium
Содержание
В традиционных финансах покупатели и продавцы обеспечивают ликвидность актива через централизованный рынок. В децентрализованных финансах (DeFi) вместо этого используются пулы ликвидности. Пулы ликвидности — это смарт-контракты, которые позволяют пользователям покупать и продавать криптовалюту на децентрализованных биржах и других платформах DeFi. Отслеживая пулы ликвидности, вы можете оценивать динамику конкретного актива и принимать обоснованные решения о покупке, продаже или обмене. Мониторинг создания новых пулов ликвидности также помогает находить недавно запущенные токены.
В этой статье рассматриваются два способа мониторинга пулов ликвидности: webhook и WebSocket. Вы также узнаете, как настроить webhook и WebSocket для отслеживания событий в пуле ликвидности. Прежде чем разбираться в работе платформы, вам понадобится ключ Helius API. Его легко получить через панель управления Helius. Зарегистрируйтесь с помощью GitHub, Solana Wallet или аккаунта Google, затем перейдите в раздел API Keys на левой боковой панели.
Через webhook
Для работы через webhook нужно выполнить три основных шага. Сначала мы настроим Cloudflare Worker. Затем настроим webhook Helius и добавим URL Cloudflare Worker. Webhook будет запускать Worker каждый раз при обнаружении транзакции в пуле ликвидности. Наконец, мы изменим код Worker, чтобы он обрабатывал уведомление и записывал ответ в журнал.
Настройка Cloudflare Worker
Мы настроим Worker, который будет запускаться нашим webhook. Затем добавим в Worker код для обработки сигнала от webhook. Cloudflare Workers позволяет развертывать бессерверный код. Войдите или зарегистрируйтесь на сайте Cloudflare, затем выберите Workers & Pages на левой панели главной страницы.
Нажмите кнопку Create application.
Затем нажмите Create Worker.
Теперь нажмите Deploy.
Worker успешно развернут. Скопируйте ссылку на Worker: она понадобится для настройки webhook.
Настройка webhook
Мы будем отслеживать Raydium — первый AMM на Solana, использующий полностью децентрализованную книгу лимитных заявок. Центральная книга лимитных заявок — это стандартный для фондового рынка биржевой механизм исполнения, который сопоставляет все заявки на покупку и продажу с учетом приоритета цены и времени. Децентрализованная центральная книга лимитных заявок (CLOB) — это биржевая система, работающая в распределенной сети нод, а не под управлением централизованной организации.
Мы создадим webhook с помощью Helius. Webhook позволяет отслеживать ончейн-события и запускать определенные действия при их возникновении. Мы настроим webhook для отслеживания конкретных типов транзакций в выбранном пуле ликвидности Raydium. Сейчас Helius поддерживает следующие типы транзакций Raydium:
"RAYDIUM": [
"WITHDRAW_LIQUIDITY"
"ADD_LIQUIDITY"
"CREATE_POOL"
"SWAP"
]Webhook можно создать с помощью панели управления Helius или справочника API. Чтобы создать его через панель управления, откройте раздел Webhooks на левой панели и нажмите New Webhook.
Затем настройте webhook, указав следующие данные:
- Сеть: Mainnet/Devnet
- Тип webhook: Чтобы получать нужные данные, выберите тип webhook: Enhanced, Raw или Discord. Если вам нужны удобочитаемые данные, выберите Enhanced — мы будем использовать именно его. Если вы предпочитаете Discord, укажите URL webhook, и бот самостоятельно отформатирует и отправит уведомления. Инструкции по настройке webhook для бота Discord приведены в этой статье. Учтите, что при выборе Raw вы не сможете указать тип транзакции.
- Тип транзакции: Выберите типы транзакций, показанные на изображении ниже*.* Другие типы транзакций, поддерживаемые программой, перечислены здесь.
- URL webhook: Добавьте URL Worker, который мы настроили в Cloudflare (если вы выбрали Discord, укажите URL webhook для бота)
- Заголовок аутентификации: Укажите заголовок аутентификации, который будет передаваться в POST-запросах вашего webhook. Это необязательно.
- Адрес аккаунта: Адрес AMM-программы Raydium:
675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8. При необходимости можно добавить несколько адресов аккаунтов. Также можно добавить адреса своих активов, чтобы отслеживать их.
После нажатия Confirm, ваш webhook начнет отправлять уведомления в Cloudflare Worker.
Следующий шаг — написать код для обработки уведомления.
Обработка уведомления webhook в Worker
Нужно установить Wrangler CLI, чтобы добавить код в Worker и обеспечить корректную обработку данных при его запуске.
Войдите в аккаунт Cloudflare, чтобы разрешить Wrangler развертывать ваши скрипты в Cloudflare.
Откройте командную строку или терминал и введите следующую команду:
wrangler loginКогда Wrangler автоматически откроет в браузере экран согласия Cloudflare, нажмите кнопку Allow. После этого API Token будет отправлен в Wrangler.
Инициализируйте новый проект из Worker, созданного через панель управления Cloudflare:
wrangler init --from-dash <worker-name>Имя Worker можно найти в разделе Metrics:
Команда выше создаст папку с конфигурацией и кодом Worker. Затем замените код в файле src/index.js приведенным ниже кодом. Обязательно добавьте свой ключ API. Чтобы скрыть ключ API, рекомендуем следовать этим рекомендациям.
Теперь используем в Worker следующий код:
const HELIUS_API_KEY = API_KEY;
const HELIUS_RPC_URL = `https://mainnet.helius-rpc.com/?api-key=${HELIUS_API_KEY}`;
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
if (request.method === 'POST') {
const requestBody = await request.json();
console.log(requestBody[0].description);
return new Response('Logged POST request body.', { status: 200 });
} else {
return new Response('Method not allowed.', { status: 405 });
}
}В этом коде мы записываем в журнал только описание уведомления. Уведомления с ответом имеют формат разобранной транзакции. Обратите внимание, что финансовые данные, например сведения о цене, не предоставляются. Для получения финансовой информации можно использовать такие платформы, как Jupiter и Birdeye.
Разверните проект в глобальной сети Cloudflare:
wrangler publishПосле успешной публикации кода проверим журналы.
Вернитесь на сайт Cloudflare и откройте раздел Logs:
Нажмите кнопку Begin Log Stream.
Из-за большого количества транзакций, обрабатываемых Raydium, записей в журнале будет много. Позже вы сможете отфильтровать их, чтобы найти уведомления о нужных транзакциях.
Чтобы просмотреть записанные данные в разделе "message", разверните любую полученную запись журнала.
Через WebSocket
WebSocket — это протокол связи, который обеспечивает обмен данными между клиентами и серверами в реальном времени. Он отличается от традиционных методов, при которых клиент отправляет запрос и ждет ответа сервера. При использовании WebSocket соединение остается открытым, а данные передаются непрерывно. Мы будем использовать WebSocket для мониторинга пула ликвидности Raydium.
Если вам нужны уже декодированные свопы Raydium, Parsed Streams позволяет фильтровать данные на стороне сервера по программе, инструкции или аккаунту и получать через WebSocket полную транзакцию с именованными инструкциями, переводами и сводкой.
Чтобы ускорить получение ответов в проекте, мы используем улучшенный с помощью Geyser метод transactionSubscribe, доступный в бета-версии. Обратите внимание: этот метод доступен только на планах Business или Professional. Улучшенные с помощью Geyser WebSockets работают быстрее стандартных методов RPC WebSocket. Для начала создадим простой проект JavaScript и новую папку с именем websocket-test. Затем нужно создать файл package.json.
{
"name": "websocket-test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "ts-node src/index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@types/bn.js": "^5.1.0",
"ts-node": "^10.7.0",
"typescript": "^4.6.3"
},
"dependencies": {
"@solana/web3.js": "^1.41.3",
"dotenv": "^16.0.0"
}
}
Создайте папку с именем src и добавьте в нее файл index.js.
Скопируйте приведенный ниже код и вставьте его в файл, заменив <your-api-key> своим ключом Helius API.
const WebSocket = require('ws');
// Function to send a request to the WebSocket server
function sendRequest(ws) {
const request = {
jsonrpc: "2.0",
id: 420,
method: "transactionSubscribe",
params: [{
failed: false,
accountInclude: ["675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"]
},
{
commitment: "processed",
encoding: "base64",
transactionDetails: "full",
showRewards: true,
maxSupportedTransactionVersion: 0
}
]
};
ws.send(JSON.stringify(request));
}
function websocketHandler() {
// Create a WebSocket connection
let ws = new WebSocket('wss://atlas-mainnet.helius-rpc.com?api-key=<your-api-key>');
// Define WebSocket event handlers
ws.on('open', function open() {
console.log('WebSocket is open');
sendRequest(ws); // Send a request once the WebSocket is open
});
ws.on('message', function incoming(data) {
const messageStr = data.toString('utf8');
console.log('Received:', messageStr);
});
ws.on('error', function error(err) {
console.error('WebSocket error:', err);
});
ws.on('close', function close() {
console.log('WebSocket is closed');
// connection closed, discard old websocket and create a new one in 5s
ws = null
setTimeout(startWebsocket, 5000)
});
}
websocketHandler();Мы добавили адрес AMM-программы Raydium 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8 в параметр-массив accountInclude запроса. Чтобы получить нужные данные, добавьте подходящие параметры.
Код подключается к WebSocket и выводит весь ответ в консоль. WebSocket закрывается примерно через ~5 минут бездействия. Чтобы этого избежать, в обработчик onClose добавлена логика повторного подключения.
Выполните эту команду в командной строке или терминале:
npm install && npm startВ консоли начнут появляться такие записи:
Заключение
Вот и все! Настроить webhook для мониторинга пула ликвидности несложно. Для более быстрого получения ответов можно использовать улучшенный с помощью Geyser метод WebSocket. После завершения настройки вы можете создать подходящий интерфейс для отображения данных. Для выделенного соединения с более высокой скоростью можно использовать отдельную ноду с плагином Geyser RPC. Если у вас возникнут проблемы или понадобится помощь, свяжитесь с нами в Discord!
Укажите ниже свой адрес электронной почты, чтобы не пропускать новости Solana. Хотите узнать больше? Читайте свежие статьи в блоге Helius и продолжайте знакомство с Solana уже сегодня.
Ресурсы
- Создание webhook
- Cloudflare Worker
- Документация Helius по WebSocket
- Что такое пулы ликвидности — материал CoinDesk
- Solana Dev 101 — создание бота Solana для Discord с помощью webhook
Похожие статьи
Подпишитесь на Helius
Следите за новостями разработки на Solana и получайте уведомления о наших публикациях


