如何监控Raydium流动性池

  • Helius
  • 发布于 2024-04-26 17:16
  • 阅读 36

本文介绍了如何通过Webhook和WebSocket两种方式监控流动性池,重点在于如何设置Cloudflare Worker和Helius API,以及如何处理流动性池事件的通知。文章结构清晰,步骤详尽,涵盖了必要的代码示例和配置指南,适合对DeFi和流动性监控有深入了解的读者。

在传统金融中,买方和卖方通过集中市场为资产提供流动性。而去中心化金融(DeFi)则使用流动性池。流动性池是智能合约,允许用户在去中心化交易所和其他DeFi平台上买卖加密货币。通过监控流动性池,你可以跟踪特定资产的表现,并做出有关何时买入、卖出或交换的明智决策。监控新流动性池的创建也能帮助你发现最近推出的代币。

本文将介绍两种监控流动性池的方法:webhook和websocket。我们还将学习如何设置一个webhook和websocket来监听流动性池中发生的事件。在深入了解平台工作原理之前,你需要一个Helius API密钥。通过Helius仪表盘获取一个非常简单。使用你的GitHub、Solana钱包或Google帐户注册,然后导航到左侧边栏的API密钥部分。

通过Webhook

要通过Webhook构建,我们需要遵循三个高层步骤。首先,我们将设置Cloudflare Worker。其次,我们将设置一个Helius webhook并添加Cloudflare Worker的URL。每当在流动性池中监听到交易时,webhook将触发Worker。最后,我们将编辑Worker的代码以处理此通知并记录响应。

设置Cloudflare Worker

我们将设置一个由我们的webhook触发的Worker。我们将向Worker添加代码,以处理来自webhook的触发。Cloudflare Workers让我们能够部署无服务器代码。登录或注册Cloudflare网站,并在主页的左侧面板中选择Workers & Pages

设置Cloudflare Worker

‍点击创建 应用按钮。

创建应用

‍接下来,点击创建Worker

创建Worker

‍现在,点击部署

部署worker

‍Worker已成功部署。请复制Worker链接,因为我们将在设置webhook时使用它。

Worker已成功部署

设置Webhook

我们将监控Raydium,第一个建立在Solana上的AMM,利用完全去中心化的中央限价订单簿。中央限价订单簿是一种在股权世界中标准的交易执行方法,它根据价格和时间优先级匹配所有买价和卖价。去中心化中央限价订单簿(CLOB)是一个在分布式节点网络而非中央实体上运行的交易系统。

我们将使用Helius创建一个webhook。Webhooks允许你监听链上事件,并在这些事件发生时触发特定的操作。我们将配置webhook以监听特定交易类型在给定Raydium流动性池中的出现。Helius目前支持以下Raydium交易类型:

"RAYDIUM": [\
   "WITHDRAW_LIQUIDITY"\
   "ADD_LIQUIDITY"\
   "CREATE_POOL"\
   "SWAP"\
 ]

Webhooks可以通过Helius仪表盘API参考创建。要通过仪表盘创建一个,进入左侧面板中的Webhooks部分,然后点击新建Webhook

然后,通过提供以下详细信息配置webhook:

  1. 网络: 主网/开发网
  2. Webhook类型: 为获取所需数据,可以在增强型、原始或Discord webhook类型之间进行选择。如果你想获取人类可读的数据,请选择增强型;我们将选择这个。如果你更喜欢Discord,你必须提交Webhook URL,机器人会直接格式化并发送通知。如需帮助,请参考这篇文章,了解如何为Discord机器人设置webhook。如果你选择原始,请注意,你将无法指定交易类型。
  3. 交易类型: 选择下图所示的交易类型。你可以在这里找到程序支持的其他交易类型。
  4. Webhook URL: 添加我们在Cloudflare上设置的Worker的URL(如果你选择Discord,则需要提供机器人的Webhook URL)
  5. 身份验证头: 输入一个身份验证头,以传递到webhook的POST请求中。请注意,这是可选的。
  6. 账户地址: Raydium的AMM程序地址是这里的:675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8。如果需要,你还可以添加多个账户地址。你也可以包括你资产的地址以监控它们。

Webhook配置

一旦你点击确认,你的webhook将通知我们的Cloudflare Worker。

下一步是编写适当的代码来处理通知。

在Worker中处理Webhook通知

我们需要安装Wrangler CLI以将我们的代码添加到Worker,以便在被触发时能够正确处理数据。

登录到你的Cloudflare帐户,以便Wrangler能将你的脚本部署到Cloudflare。

打开命令提示符/终端并输入以下内容:

wrangler login

当Wrangler自动打开你的浏览器以显示Cloudflare的同意屏幕时,点击允许按钮。这将向Wrangler发送APIToken。‍

从Cloudflare仪表盘创建的Worker初始化一个新项目:

wrangler init --from-dash <worker-name>

检查度量部分以找到Worker的名称:

Worker详细信息

‍上述命令将创建一个包含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('记录了POST请求体。', { status: 200 });
    } else {
        return new Response('方法不允许。', { status: 405 });
    }
}

‍在这段代码中,我们只是记录了通知的描述。响应通知具有解析的交易格式。请注意,不提供财务数据,如价格信息。你可以使用像JupiterBirdeye这样的平台来获取财务信息。‍

将你的项目部署到Cloudflare的全球网络:

wrangler publish

代码成功发布后,让我们检查日志。

返回到Cloudflare网站并进入日志部分:

Cloudflare日志

‍点击开始日志流按钮。

注意:

由于Raydium处理的交易量很大,日志会很多。稍后可以随意过滤日志以查找所需的交易通知。

开始日志流

‍你可以通过展开收到的日志,在" message "下查看记录的数据。

Webhook响应显示在Cloudflare Worker的日志中

通过Websockets

Websockets是一种通信协议,允许客户端和服务器之间实时数据交换。这与传统方法不同,传统方法中客户端发送请求并等待服务器响应。使用websockets,连接保持打开状态,可以持续交换数据。我们将使用websockets来监控Raydium流动性池。

为了在我们的项目中实现更快的响应速度,我们将使用geyser增强的transactionSubscribe方法,该方法作为测试功能可用。请注意,此方法仅适用于企业或专业计划。Geyser增强的websockets比标准的RPC websocket方法更快。要开始,先创建一个基本的JavaScript项目,并创建一个名为websocket-test的新文件夹。然后,我们需要创建一个package.json文件。

{
    "name": "websocket-test",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
        "test": "echo \"错误: 没有指定测试\" && 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');

// 向WebSocket服务器发送请求的函数
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() {
    // 创建WebSocket连接
    let ws = new WebSocket('wss://atlas-mainnet.helius-rpc.com?api-key=<your-api-key>');

    // 定义WebSocket事件处理程序

    ws.on('open', function open() {
        console.log('WebSocket已打开');
        sendRequest(ws); // 一旦WebSocket打开,发送请求
    });

    ws.on('message', function incoming(data) {
        const messageStr = data.toString('utf8');
        console.log('接收:', messageStr);
    });

    ws.on('error', function error(err) {
        console.error('WebSocket错误:', err);
    });

    ws.on('close', function close() {
        console.log('WebSocket已关闭');
        // 连接关闭,丢弃旧的websocket并在5秒后创建一个新的
        ws = null
        setTimeout(startWebsocket, 5000)
    });
}

websocketHandler();

我们在请求的accountInclude数组参数中添加了Raydium的AMM程序地址675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8。你可以添加适当的参数以获取所需数据。

代码连接到一个websocket并在控制台中记录完整的响应。在大约5分钟的非活动状态后,websocket关闭。为了防止这种情况,onClose处理程序中添加了重连逻辑。

在命令提示符/终端中运行此命令:

npm install && npm start

你将开始在控制台中看到类似的日志:

控制台中收到的Websocket响应

结论

就是这样!设置一个webhook来监控流动性池非常简单。或者,你也可以使用geyser增强的websocket方法以获得更快的响应速度。一旦你完成设置,就可以构建一个合适的前端来展示数据。你可以使用带有geyser RPC插件的专用节点,以获得更快速的专用连接。如果你遇到任何问题或需要帮助,请随时在Discord上联系我们!

请确保在下面输入你的电子邮件地址,这样你就不会错过关于Solana新动态的任何更新。准备深入了解吗?今天就探索Helius博客上的最新文章,继续你的Solana之旅。

资源

  • 原文链接: helius.dev/blog/how-to-m...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Helius
Helius
https://www.helius.dev/