
如何监控 Raydium 流动性池
目录
在传统金融中,买卖双方通过中心化市场为资产提供流动性。去中心化金融(DeFi)则使用流动性池。流动性池是一类智能合约,允许用户在去中心化交易所和其他 DeFi 平台上买卖加密货币。通过监控流动性池,你可以跟踪特定资产的表现,并据此判断何时买入、卖出或兑换。监控新流动性池的创建,还能帮助你发现近期发行的代币。
本文将介绍两种监控流动性池的方法:webhook 和 WebSocket。我们还将学习如何设置 webhook 和 WebSocket,以监听流动性池中发生的事件。在深入了解平台的工作方式之前,你需要一个 Helius API 密钥。你可以通过 Helius 控制面板轻松获取。使用 GitHub、Solana 钱包或 Google 账户注册,然后前往左侧边栏中的 API Keys 部分。
通过 webhook
要通过 webhook 构建监控功能,我们需要完成三个主要步骤。首先,设置一个 Cloudflare Worker。其次,设置 Helius webhook,并添加 Cloudflare Worker 的 URL。每当监听到流动性池中的交易时,webhook 都会触发该 Worker。最后,修改 Worker 的代码以处理此通知并记录响应。
设置 Cloudflare Worker
我们将设置一个由 webhook 触发的 Worker,并向其中添加代码,以处理 webhook 发来的触发请求。Cloudflare Workers 让我们能够部署无服务器代码。登录或注册 Cloudflare 网站,然后从主页左侧面板中选择 Workers & Pages。
点击 创建****应用程序按钮。
接下来,点击创建 Worker。
现在,点击部署。
Worker 已成功部署。请复制 Worker 链接,后续设置 webhook 时会用到它。
设置 webhook
我们将监控 Raydium。它是首个基于 Solana 构建、采用完全去中心化中央限价订单簿的 AMM。中央限价订单簿是股票市场中常见的交易所式执行方式,会根据价格和时间优先级匹配所有买单和卖单。去中心化中央限价订单簿(CLOB)是一种运行在分布式节点网络而非中心化实体上的交易系统。
我们将使用 Helius 创建 webhook。webhook 允许你监听链上事件,并在事件发生时触发特定操作。我们会配置 webhook,让它监听指定 Raydium 流动性池中的特定交易类型。Helius 目前支持 Raydium 的以下交易类型:
"RAYDIUM": [
"WITHDRAW_LIQUIDITY"
"ADD_LIQUIDITY"
"CREATE_POOL"
"SWAP"
]你可以使用 Helius 控制面板或 API 参考文档创建 webhook。要通过控制面板创建,请前往左侧面板中的 Webhooks 部分,然后点击新建 Webhook。
然后提供以下详细信息来配置 webhook:
- 网络: Mainnet/Devnet
- Webhook 类型:根据所需数据,在 Enhanced、Raw 或 Discord webhook 类型中进行选择。如果需要易于阅读的数据,请选择 Enhanced;我们将使用这一类型。如果选择 Discord,则必须提交 Webhook URL,机器人会直接设置通知格式并发送通知。如需帮助,请参阅这篇文章,了解如何为 Discord 机器人设置 webhook。如果选择 Raw,请注意你将无法指定交易类型。
- 交易类型: 选择下图所示的交易类型*。* 你可以在此处查看程序支持的其他交易类型。
- Webhook URL: 添加我们在 Cloudflare 上设置的 Worker URL(如果选择了 Discord,则需要提供机器人的 Webhook URL)
- 身份验证标头: 输入一个身份验证标头,将其传入 webhook 的 POST 请求。此项为可选设置。
- 账户地址: Raydium 的 AMM 程序地址为:
675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8。如有需要,你也可以添加多个账户地址。还可以添加资产地址以监控这些资产。
点击**确认,**后,webhook 就会向我们的 Cloudflare Worker 发送通知。
下一步是编写相应代码来处理通知。
在 Worker 中处理 webhook 通知
我们需要安装 Wrangler CLI,以便将代码添加到 Worker 中,使其在触发时能够正确处理数据。
登录你的 Cloudflare 账户,以允许 Wrangler 将脚本部署到 Cloudflare。
打开命令提示符或终端,然后输入以下内容:
wrangler login当 Wrangler 自动打开浏览器并显示 Cloudflare 的授权页面时,点击允许按钮。系统会向 Wrangler 发送一个 API Token。
使用通过 Cloudflare 控制面板创建的 Worker 初始化新项目:
wrangler init --from-dash <worker-name>查看指标部分,找到 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('Logged POST request body.', { status: 200 });
} else {
return new Response('Method not allowed.', { status: 405 });
}
}在这段代码中,我们只记录通知的描述。响应通知采用已解析交易格式。请注意,其中不提供价格信息等金融数据。你可以使用 Jupiter 和 Birdeye 等平台获取金融信息。
将项目部署到 Cloudflare 的全球网络:
wrangler publish代码成功发布后,我们来查看日志。
返回 Cloudflare 网站,然后前往日志部分:
点击开始日志流按钮。
由于 Raydium 处理的交易量很大,因此会产生大量日志。之后你可以按需筛选日志,查找所需的交易通知。
展开任意收到的日志,即可在 “message” 下查看记录的数据。
通过 WebSocket
WebSocket 是一种通信协议,可让客户端与服务器实时交换数据。它不同于客户端发送请求后等待服务器响应的传统方式。使用 WebSocket 时,连接会保持打开并持续交换数据。我们将使用 WebSocket 监控 Raydium 流动性池。
如果你希望直接获取已解码的 Raydium 兑换数据,Parsed Streams 支持在服务器端按程序、指令或账户进行筛选,并通过 WebSocket 接收完整交易,其中包括已命名的指令、转账和摘要。
为了让项目获得更快的响应速度,我们将使用 geyser 增强版 transactionSubscribe 方法,该方法目前作为测试版功能提供。请注意,此方法仅适用于 Business 或 Professional 计划。 Geyser Enhanced WebSocket 比标准 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();我们已将 Raydium 的 AMM 程序地址 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 开发 101:使用 webhook 创建 Solana Discord 机器人
相关文章
订阅 Helius
及时了解 Solana 开发的最新动态,并在我们发布新内容时收到更新


