
Como monitorar um pool de liquidez da Raydium
Índice
Nas finanças tradicionais, compradores e vendedores fornecem liquidez para um ativo por meio de um mercado centralizado. As finanças descentralizadas (DeFi) usam pools de liquidez. Pools de liquidez são contratos inteligentes que permitem aos usuários comprar e vender criptomoedas em corretoras descentralizadas e outras plataformas DeFi. Ao monitorar pools de liquidez, você pode acompanhar o desempenho de um ativo específico e tomar decisões fundamentadas sobre quando comprar, vender ou trocar. Monitorar a criação de novos pools de liquidez também pode ajudar você a descobrir tokens lançados recentemente.
Este artigo ensinará duas abordagens para monitorar pools de liquidez: webhooks e WebSockets. Também aprenderemos a configurar um webhook e um WebSocket para acompanhar eventos que ocorrem em um pool de liquidez. Antes de entender como a plataforma funciona, você precisará de uma chave de API da Helius. É fácil obtê-la pelo painel da Helius. Cadastre-se usando sua conta do GitHub, sua carteira Solana ou sua conta do Google e acesse a seção API Keys na barra lateral esquerda.
Via webhook
Para implementar essa solução via webhook, precisamos seguir três etapas gerais. Primeiro, configuraremos um Cloudflare Worker. Depois, configuraremos um webhook da Helius e adicionaremos a URL do Cloudflare Worker. O webhook acionará o worker sempre que uma transação no pool de liquidez for detectada. Por fim, editaremos o código do worker para processar essa notificação e registrar a resposta.
Configure um Cloudflare Worker
Configuraremos um worker que será acionado pelo nosso webhook. Adicionaremos código ao worker para processar o acionamento recebido do webhook. O Cloudflare Workers permite implantar código serverless. Entre ou cadastre-se no site da Cloudflare e selecione Workers & Pages no painel à esquerda da página principal.
Clique no botão Create application.
Em seguida, clique em Create Worker.
Agora, clique em Deploy.
O worker foi implantado com sucesso. Copie o link do worker, pois ele será usado para configurar nosso webhook.
Configure o webhook
Monitoraremos a Raydium, a primeira AMM criada na Solana a usar um livro de ordens com limite central totalmente descentralizado. Um livro de ordens com limite central é um método de execução semelhante ao de uma bolsa, comum no mercado de ações, que combina todas as ordens de compra e venda de acordo com a prioridade de preço e tempo. Um livro de ordens com limite central descentralizado (CLOB) é um sistema de negociação que opera em uma rede distribuída de nós, em vez de depender de uma entidade central.
Criaremos um webhook usando a Helius. Os webhooks permitem acompanhar eventos on-chain e acionar ações específicas quando esses eventos ocorrem. Configuraremos o webhook para detectar tipos específicos de transação em um determinado pool de liquidez da Raydium. No momento, a Helius oferece suporte aos seguintes tipos de transação para a Raydium:
"RAYDIUM": [
"WITHDRAW_LIQUIDITY"
"ADD_LIQUIDITY"
"CREATE_POOL"
"SWAP"
]É possível criar webhooks usando o painel da Helius ou a referência da API. Para criar um pelo painel, acesse a seção Webhooks no painel esquerdo e clique em New Webhook.
Em seguida, configure o webhook fornecendo detalhes como:
- Rede: Mainnet/Devnet
- Tipo de webhook: Para obter os dados desejados, escolha entre os tipos de webhook Enhanced, Raw ou Discord. Se você quiser dados legíveis, escolha Enhanced; selecionaremos essa opção. Porém, se preferir o Discord, você deverá fornecer a URL do webhook, e o bot formatará e enviará as notificações diretamente. Para obter ajuda, consulte este artigo e aprenda a configurar um webhook para um bot do Discord. Se escolher Raw, observe que não será possível especificar o tipo de transação.
- Tipo de transação: Selecione os tipos de transação mostrados na imagem abaixo*.* Você pode encontrar outros tipos de transação compatíveis com um programa aqui.
- URL do webhook: Adicione a URL do worker que configuramos na Cloudflare (se você selecionou Discord, deverá fornecer a URL do webhook do bot)
- Cabeçalho de autenticação: Insira um cabeçalho de autenticação a ser incluído nas solicitações POST do seu webhook. Este campo é opcional.
- Endereço da conta: O endereço do programa AMM da Raydium é:
675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8. Você também pode adicionar mais de um endereço de conta, se necessário. Também é possível incluir os endereços dos seus ativos para monitorá-los.
Quando você clicar em Confirm, o webhook notificará nosso Cloudflare Worker.
A próxima etapa é escrever o código apropriado para processar a notificação.
Processe a notificação do webhook no worker
Precisamos instalar a Wrangler CLI para adicionar nosso código ao worker, permitindo que ele processe os dados corretamente quando for acionado.
Entre na sua conta da Cloudflare para permitir que o Wrangler implante seus scripts na Cloudflare.
Abra um prompt de comando ou terminal e digite o seguinte:
wrangler loginQuando o Wrangler abrir automaticamente seu navegador para exibir a tela de consentimento da Cloudflare, clique no botão Allow. Isso enviará um token de API ao Wrangler.
Inicialize um novo projeto a partir do Worker criado pelo painel da Cloudflare:
wrangler init --from-dash <worker-name>Consulte a seção Metrics para encontrar o nome do worker:
O comando acima criará uma pasta com a configuração e o código do worker. Em seguida, substitua o código do arquivo src/index.js pelo código fornecido abaixo. Não se esqueça de adicionar sua chave de API. Recomendamos seguir estas práticas recomendadas para ocultar sua chave de API.
Agora, usaremos o seguinte código em nosso 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 });
}
}Nesse código, registramos apenas a descrição da notificação. As notificações de resposta têm um formato de transação analisada. É importante observar que dados financeiros, como informações de preço, não são fornecidos. Você pode usar plataformas como Jupiter e Birdeye para obter informações financeiras.
Implante seu projeto na rede global da Cloudflare:
wrangler publishDepois que o código for publicado com sucesso, vamos verificar os logs.
Volte ao site da Cloudflare e acesse a seção Logs:
Clique no botão Begin Log Stream.
Haverá muitos logs devido ao grande número de transações processadas pela Raydium. Você poderá filtrar os logs depois para encontrar as notificações de transação necessárias.
Você pode visualizar os dados registrados em "message" expandindo qualquer log recebido.
Via WebSockets
WebSockets são um protocolo de comunicação que permite a troca de dados em tempo real entre clientes e servidores. Isso é diferente dos métodos tradicionais, nos quais um cliente envia uma solicitação e aguarda a resposta do servidor. Com WebSockets, a conexão permanece aberta e troca dados continuamente. Usaremos WebSockets para monitorar o pool de liquidez da Raydium.
Se você quiser swaps da Raydium já decodificados, os fluxos analisados permitem filtrar por programa, instrução ou conta no lado do servidor e receber a transação completa por WebSocket, com instruções nomeadas, transferências e um resumo.
Para obter respostas mais rápidas em nosso projeto, usaremos o método transactionSubscribe aprimorado pelo Geyser, que está disponível como recurso beta. Observe que esse método está disponível apenas nos planos Business ou Professional. Os WebSockets aprimorados pelo Geyser são mais rápidos do que os métodos WebSocket padrão do RPC. Para começar, vamos criar um projeto JavaScript básico e uma nova pasta chamada websocket-test. Depois, precisamos criar um arquivo 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"
}
}
Crie uma pasta chamada src e adicione um arquivo chamado index.js.
Copie e cole o código a seguir no arquivo, substituindo <your-api-key> pela sua própria chave de API da Helius.
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();Adicionamos o endereço do programa AMM da Raydium 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8 ao parâmetro de array accountInclude da solicitação. Você pode adicionar parâmetros apropriados para obter os dados necessários.
O código se conecta a um WebSocket e registra a resposta completa no console. O WebSocket fecha após cerca de ~5 minutos de inatividade. Para evitar isso, adicionamos uma lógica de reconexão ao manipulador onClose.
Execute este comando no prompt de comando ou terminal:
npm install && npm startVocê começará a ver logs como este no console:
Conclusão
É isso! Configurar um webhook para monitorar um pool de liquidez é simples. Como alternativa, você pode usar o método WebSocket aprimorado pelo Geyser para obter respostas mais rápidas. Depois de concluir a configuração, você poderá criar um frontend adequado para exibir os dados. É possível usar um nó dedicado com um plugin Geyser RPC para ter uma conexão exclusiva e mais rápida. Se encontrar algum problema ou precisar de ajuda, fale conosco pelo Discord!
Insira seu endereço de e-mail abaixo para não perder nenhuma novidade sobre a Solana. Quer se aprofundar? Explore os artigos mais recentes no blog da Helius e continue hoje mesmo sua jornada na Solana.
Recursos
- Como criar um webhook
- Cloudflare Worker
- Documentação da Helius sobre WebSockets
- O que são pools de liquidez, por CoinDesk
- Solana Dev 101 — Como criar um bot do Discord para a Solana com webhooks
Artigos relacionados
Assine a Helius
Acompanhe as novidades mais recentes do desenvolvimento Solana e receba atualizações quando publicarmos


