DEFI - 如何跟踪在Solana Raydium DEX上创建的新流动性池 - Quicknode

  • QuickNode
  • 发布于 2025-01-30 12:19
  • 阅读 27

本文介绍了如何使用 Solana WebSockets 监听 Raydium DEX 上新创建的流动性池,详细说明了所需的项目设置、API 使用和代码实现步骤。文章对 Raydium 的基本概念进行了深入介绍,并提供了实际的代码示例,便于开发者搭建自己的流动性池监测工具。

概述

随着 DeFi 活动的增加和在 Solana 区块链上 Memecoins 的兴起,越来越多的人对如何追踪在 Raydium DEX 上创建的新流动性池产生了兴趣。在本指南中,我们将学习如何使用 Solana WebSockets 收听 Solana 区块链以获取在 Raydium DEX 上创建的新流动性池。

新流动性池 API

Raydium 协议可能会随着时间的推移而变化。以下是他们的 AMMCLMM GitHub 恢复的链接。

为了确保你获取关于在 Raydium DEX 上创建的新流动性池的最新信息,可以尝试使用 Metis Marketplace Add-on,它提供一个 /new-pools REST API 端点,返回在 Raydium 上最近 100 个代币和流动性池的启动。

如何追踪在 Solana Raydium DEX 上创建的新池 在 YouTube 上观看

前提条件

什么是 Raydium?

Raydium 是一个去中心化交易所 (DEX) 和自动化做市商 (AMM),建立在 Solana 区块链上。其设计目的是为用户提供快速且低成本的交易。Raydium 是 Solana DeFi 生态系统中的关键参与者,一直以来是用户交易和提供各种代币流动性的热门选择。

什么是流动性池?

流动性池是去中心化交易所 DeFi 中的重要组成部分。它们被用来促进交易并为各种代币提供流动性。流动性池由代币对组成,用于在 DEX 上促进交易。用户通常可以为这些池提供流动性并获得费用作为回报。

设置你的项目

创建新项目

在终端中创建新的项目目录:

mkdir raydium-lp-tracker
cd raydium-lp-tracker

为你的应用程序创建一个文件,app.ts

echo > app.ts

使用 "yes" 标志初始化项目,以使用新包的默认值:

yarn init --yes
#或
npm init --yes

安装 Solana web3.js 库:

yarn add @solana/web3.js@1
#或
npm install @solana/web3.js@1

获取 QuickNode 端点

使用你的 QuickNode 端点连接到 Solana 集群

要在 Solana 上构建,你需要一个 API 端点与网络连接。你可以使用公共节点,或者部署和管理自己的基础设施;不过,如果你希望获得 8 倍的响应时间,你可以将重任交给我们。

查看为什么超过 50% 的 Solana 项目选择 QuickNode,并在 此处 注册一个免费帐户。我们将使用 Solana 主网端点。

复制 HTTP 提供者链接:

注意:我们将同时使用 WSS 端点,因此请保持窗口打开或保存该 URL 以备后用。

导入所需库

打开 app.ts 并导入所需的库:

import { Connection, PublicKey } from '@solana/web3.js';

定义常量

定义 Raydium DEX 和你的 QuickNode 端点的常量:

const RAYDIUM_PUBLIC_KEY = "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8";
const HTTP_URL = "YOUR_QUICKNODE_HTTP_ENDPOINT";
const WSS_URL = "YOUR_QUICKNODE_WSS_ENDPOINT";
const RAYDIUM = new PublicKey(RAYDIUM_PUBLIC_KEY);
const INSTRUCTION_NAME = "initialize2";

const connection = new Connection(HTTP_URL, {
    wsEndpoint: WSS_URL
});

在这里,我们仅定义 Raydium LP 程序的公共密钥,并与 Solana 主网建立连接。我们还定义了要在日志中查找的指令名称。我们正在寻找 "initialize2" 指令,这是负责创建新流动性池的 Raydium LP 程序指令。

创建 WebSocket 连接

创建一个函数以使用 WebSockets 连接到 Solana 区块链:

async function startConnection(connection: Connection, programAddress: PublicKey, searchInstruction: string): Promise<void> {
    console.log("正在监控程序的日志:", programAddress.toString());
    connection.onLogs(
        programAddress,
        ({ logs, err, signature }) => {
            if (err) return;

            if (logs && logs.some(log => log.includes(searchInstruction))) {
                console.log(" 'initialize2' 的签名:", `https://explorer.solana.com/tx/${signature}`);
                fetchRaydiumMints(signature, connection);
            }
        },
        "finalized"
    );
}

此函数建立到 Solana 区块链的简单 WebSocket 连接,并使用 onLogs 方法收听 Raydium DEX 程序的日志。

当找到包含 "searchInstruction" 的日志时,我们将提取与交易关联的代币铸币信息(我们将在下一步定义)。

获取 LP 铸币

我们现在需要一种方法来获取交易签名中的代币铸币。我们需要获取签名详细信息,然后解析结果以找到相关信息。在你的程序中,创建一个新函数 fetchRaydiumMints

async function fetchRaydiumMints(txId: string, connection: Connection) {
    try {
        const tx = await connection.getParsedTransaction(
            txId,
            {
                maxSupportedTransactionVersion: 0,
                commitment: 'confirmed'
            });

        //@ts-ignore
        const accounts = (tx?.transaction.message.instructions).find(ix => ix.programId.toBase58() === RAYDIUM_PUBLIC_KEY).accounts as PublicKey[];

        if (!accounts) {
            console.log("未在交易中找到账户。");
            return;
        }

        const tokenAIndex = 8;
        const tokenBIndex = 9;

        const tokenAAccount = accounts[tokenAIndex];
        const tokenBAccount = accounts[tokenBIndex];

        const displayData = [\
            { "Token": "A", "Account Public Key": tokenAAccount.toBase58() },\
            { "Token": "B", "Account Public Key": tokenBAccount.toBase58() }\
        ];

        console.log("发现新 LP");
        console.table(displayData);

    } catch {
        console.log("获取交易时出错:", txId);
        return;
    }
}

这里的内容很多,但并不是太复杂。

  • 首先,我们使用 getParsedTransaction 方法获取交易的详细信息。
  • 接着,我们在指令数组中查找 Raydium 程序 ID,并提取与交易相关的账户。
  • 如果我们找到账户,我们将从其预期的位置提取代币铸币(8 和 9)。
  • 最后,我们将代币铸币记录到控制台。

启动连接

现在我们已有了函数的定义,可以启动连接,监听新流动性池:

startConnection(connection, RAYDIUM, INSTRUCTION_NAME).catch(console.error);

运行程序

要运行程序,请使用以下命令:

ts-node app.ts

现在,坐下来观看在 Raydium DEX 上创建的新流动性池!每次创建新 LP 并符合我们的搜索标准时,你应该在终端中看到通知:

Raydium LP 追踪器

结束

干得好!你现在有一个能够监听在 Raydium DEX 上创建的新流动性池的 LP 追踪器。你可以将其作为起点,构建更复杂的应用程序,以追踪和监控 Solana 区块链上的 DeFi 活动,或者针对新流动性池创建时实现自定义逻辑。

如果你有任何问题或需要帮助,请随时在我们的 DiscordTwitter 上与我们联系。

我们 ❤️ 反馈!

让我们知道 如果你有任何反馈或希望添加新主题。我们希望听到你的声音。

资源

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

0 条评论

请先 登录 后评论
QuickNode
QuickNode
江湖只有他的大名,没有他的介绍。