NUEVO: Helius adquiere Light Protocol
Cómo monitorear un pool de liquidez de Raydium
Blog/Desarrollo

Cómo monitorear un pool de liquidez de Raydium

Ingeniero de experiencia del desarrolladorAnam Ansari en XAnam Ansari en LinkedIn
7 min de lectura
Tabla de contenido

    En las finanzas tradicionales, los compradores y vendedores aportan liquidez a un activo mediante un mercado centralizado. Las finanzas descentralizadas (DeFi) utilizan pools de liquidez en su lugar. Los pools de liquidez son contratos inteligentes que permiten a los usuarios comprar y vender criptomonedas en exchanges descentralizados y otras plataformas DeFi. Al monitorear los pools de liquidez, puedes seguir el rendimiento de un activo determinado y tomar decisiones informadas sobre cuándo comprar, vender o intercambiar. Monitorear la creación de nuevos pools de liquidez también puede ayudarte a descubrir tokens lanzados recientemente.

    Este artículo te enseñará dos enfoques para monitorear pools de liquidez: webhooks y WebSockets. También aprenderemos a configurar un webhook y un WebSocket para escuchar los eventos que ocurren en un pool de liquidez. Antes de profundizar en cómo funciona la plataforma, necesitarás una clave de API de Helius. Puedes obtenerla fácilmente desde el panel de Helius. Regístrate con tu cuenta de GitHub, Solana Wallet o Google y ve a la sección API Keys en la barra lateral izquierda.

    Mediante un webhook

    Para implementar esta solución mediante un webhook, debemos seguir tres pasos generales. Primero, configuraremos un Cloudflare Worker. Segundo, configuraremos un webhook de Helius y agregaremos la URL del Cloudflare Worker. El webhook activará el Worker cada vez que detecte una transacción en el pool de liquidez. Por último, editaremos el código del Worker para procesar esta notificación y registrar la respuesta.

    Configura un Cloudflare Worker

    Configuraremos un Worker que se active mediante nuestro webhook. Agregaremos código al Worker para procesar el evento recibido desde el webhook. Cloudflare Workers nos permite implementar código sin servidor. Inicia sesión o regístrate en el sitio web de Cloudflare y selecciona Workers & Pages en el panel izquierdo de la página principal.

    ‍Haz clic en el botón Crear aplicación.

    ‍A continuación, haz clic en Crear Worker.

    ‍Ahora, haz clic en Implementar.

    ‍El Worker se implementó correctamente. Copia el enlace del Worker, ya que lo usaremos para configurar nuestro webhook.

    Configura el webhook

    Monitorearemos Raydium, el primer AMM creado en Solana que aprovecha un libro central de órdenes limitadas completamente descentralizado. Un libro central de órdenes limitadas es un método de ejecución similar al de un exchange, habitual en el mercado de acciones, que empareja todas las ofertas de compra y venta según la prioridad de precio y tiempo. Un libro central de órdenes limitadas descentralizado (CLOB) es un sistema de intercambio que funciona en una red distribuida de nodos en lugar de depender de una entidad central. 

    Crearemos un webhook con Helius. Los webhooks te permiten escuchar eventos on-chain y activar acciones específicas cuando ocurren. Configuraremos el webhook para escuchar tipos específicos de transacciones en un pool de liquidez determinado de Raydium. Actualmente, Helius admite los siguientes tipos de transacciones para Raydium: 

    Código
    "RAYDIUM": [
       "WITHDRAW_LIQUIDITY"
       "ADD_LIQUIDITY"
       "CREATE_POOL"
       "SWAP"
     ]

    Puedes crear webhooks desde el panel de Helius o mediante la referencia de la API. Para crear uno desde el panel, ve a la sección Webhooks en el panel izquierdo y haz clic en Nuevo webhook.

    Luego, configura el webhook con los siguientes datos:

    1. Red: Mainnet/Devnet
    2. Tipo de webhook: Para obtener los datos deseados, elige entre los tipos de webhook Enhanced, Raw o Discord. Si quieres datos legibles, elige Enhanced; seleccionaremos esta opción. Si prefieres Discord, debes proporcionar la URL del webhook, y el bot formateará y enviará las notificaciones directamente. Si necesitas ayuda, consulta este artículo para aprender a configurar un webhook para un bot de Discord. Si eliges Raw, ten en cuenta que no podrás especificar el tipo de transacción.
    3. Tipo de transacción: Selecciona los tipos de transacción que aparecen en la imagen de abajo*.* Puedes consultar otros tipos de transacciones compatibles con un programa aquí. 
    4. URL del webhook: Agrega la URL del Worker que configuramos en Cloudflare (si seleccionaste Discord, debes proporcionar la URL del webhook del bot)
    5. Encabezado de autenticación: Ingresa un encabezado de autenticación que se incluirá en las solicitudes POST de tu webhook. Ten en cuenta que es opcional.
    6. Dirección de la cuenta: La dirección del programa AMM de Raydium es: 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8. También puedes agregar más de una dirección de cuenta si es necesario. Asimismo, puedes incluir las direcciones de tus activos para monitorearlos. 

    Cuando hagas clic en Confirmar, tu webhook enviará una notificación a nuestro Cloudflare Worker.

    El siguiente paso es escribir el código adecuado para procesar la notificación.

    Procesa la notificación del webhook en el Worker

    Debemos instalar Wrangler CLI para agregar nuestro código al Worker, de modo que pueda procesar correctamente los datos cuando se active.

    Inicia sesión en tu cuenta de Cloudflare para permitir que Wrangler implemente tus scripts en Cloudflare.

    Abre una consola de comandos o terminal e ingresa lo siguiente:

    Código
    wrangler login

    Cuando Wrangler abra automáticamente el navegador y muestre la pantalla de consentimiento de Cloudflare, haz clic en el botón Permitir. Esto enviará un token de API a Wrangler.‍

    Inicializa un proyecto nuevo a partir del Worker creado desde el panel de Cloudflare:

    Código
    wrangler init --from-dash <worker-name>

    Consulta la sección Métricas para encontrar el nombre del Worker:

    ‍El comando anterior creará una carpeta con la configuración y el código del Worker. A continuación, reemplaza el código del archivo src/index.js por el código que aparece abajo. Asegúrate de agregar tu clave de API. Recomendamos seguir estas prácticas recomendadas para ocultar tu clave de API.

    Ahora usaremos el siguiente código en nuestro Worker:

    Código
    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 });
        }
    }

    ‍En este código, solo registramos la descripción de la notificación. Las notificaciones de respuesta tienen un formato de transacción analizada. Es importante tener en cuenta que no se proporcionan datos financieros, como información sobre precios. Puedes usar plataformas como Jupiter y Birdeye para obtener información financiera.‍

    Implementa tu proyecto en la red global de Cloudflare:

    Código
    wrangler publish

    Cuando el código se publique correctamente, revisemos los registros.

    Regresa al sitio web de Cloudflare y ve a la sección Registros:

    ‍Haz clic en el botón Iniciar transmisión de registros.

    ‍Puedes ver los datos registrados en "message" al expandir cualquiera de los registros recibidos.

    Mediante WebSockets

    WebSockets es un protocolo de comunicación que permite intercambiar datos en tiempo real entre clientes y servidores. Esto difiere de los métodos tradicionales, en los que un cliente envía una solicitud y espera la respuesta del servidor. Con WebSockets, la conexión permanece abierta e intercambia datos continuamente. Usaremos WebSockets para monitorear el pool de liquidez de Raydium.

    Para conseguir respuestas más rápidas en nuestro proyecto, usaremos el método geyser-enhanced transactionSubscribe, disponible como función beta. Ten en cuenta que este método solo está disponible en los planes Business o Professional. Los WebSockets Geyser Enhanced son más rápidos que los métodos WebSocket del RPC estándar. Para comenzar, creemos un proyecto básico de JavaScript y una carpeta nueva llamada websocket-test. Después, debemos crear un archivo package.json.

    Código
    {
        "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"
        }
    }
    

    Crea una carpeta llamada src y agrega un archivo llamado index.js.

    Copia y pega el siguiente código en el archivo. Reemplaza <your-api-key> por tu propia clave de API de Helius. 

    Código
    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();

    Agregamos la dirección del programa AMM de Raydium 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8 en el parámetro de matriz accountInclude de la solicitud. Puedes agregar los parámetros adecuados para obtener los datos que necesitas. 

    El código se conecta a un WebSocket y registra la respuesta completa en la consola. El WebSocket se cierra después de ~5 minutos de inactividad. Para evitarlo, se agregó una lógica de reconexión en el controlador onClose. 

    Ejecuta este comando en la consola de comandos o terminal: 

    Código
    npm install && npm start

    Comenzarás a ver registros como este en la consola:

    Conclusión

    ¡Eso es todo! Configurar un webhook para monitorear un pool de liquidez es sencillo. Como alternativa, puedes usar el método WebSocket geyser-enhanced para obtener respuestas más rápidas. Cuando termines la configuración, podrás crear un frontend adecuado para mostrar los datos. Puedes usar un nodo dedicado con un plugin Geyser RPC para obtener una conexión exclusiva y más rápida. Si encuentras algún problema o necesitas ayuda, contáctanos en Discord.

    Ingresa tu correo electrónico abajo para no perderte ninguna novedad de Solana. ¿Quieres profundizar más? Explora los artículos más recientes en el blog de Helius y continúa hoy mismo tu recorrido por Solana.

    Recursos

    ‍

    Suscríbete a Helius

    Mantente al día con las novedades del desarrollo en Solana y recibe actualizaciones cuando publiquemos

    Imagen ampliada