如何在 Raydium 上实时追踪新增交易池

  • Shyft_to
  • 发布于 2024-02-17 13:33
  • 阅读 5

本文介绍了如何使用 Shyft Callback API 实时监听 Raydium 上新增的交易池。通过注册回调API,可以追踪 Raydium 上的 swap、添加流动性、移除流动性等活动,并利用 Shyft JS SDK 简化注册流程。文章还展示了如何设置 API 接收回调数据,并对回调数据进行分析,最后展示了swap交易的json数据结构,为 DApp 提供实时更新。

在本文中,我们将探讨使用 Shyft Callback APIs 实时监听 Raydium 上新交易池的过程。

在今天的文章中,我们将探讨使用 Shyft APIs 跟踪 Raydium 上的活动(例如交换 token、添加流动性和移除流动性)的最简单方法之一。Raydium 是一个构建在 Solana 区块链上的自动化做市商 (AMM),它利用中心限价订单簿来实现闪电般的交易速度、共享流动性和赚取收益的新功能。此外,我们将研究使用 Shyft APIs 监控和分析这些交易的好处。

在此处阅读 SHYFT API 文档 here .

开始之前

要开始,我们需要准备一些东西。

注册你的 Shyft 帐户并获取你自己的 Shyft API 密钥。

x-api-key 是一个身份验证参数,它使你可以访问 Shyft APIs你可以从 Shyft 网站获取 你自己的 API 密钥 只需在此处使用你的电子邮件 ID 注册即可免费获得。如果你已经拥有 Shyft API 密钥,请跳过此步骤。

我们的教程将分为三个步骤

  • 为 token 地址注册一个回调。 在此过程中,我们将使用 Shyft JS SDK 为 Raydium AMM 地址注册回调。
  • 建立一个 API 来监听来自 Shyft 的回调。 此 API 将负责接收来自 Shyft 的回调数据。
  • 回调数据分析:收到来自 Shyft 的回调数据后,我们将分析该数据的结构。相信我,回调数据结构非常容易阅读和理解。

注册回调 API

Shyft 使我们能够为特定地址注册回调。这意味着每当这些地址发生任何链上事件时,Shyft 会立即通知我们相关的事件数据。在我们的例子中,我们为 Raydium AMM 程序地址 注册一个回调。这使 Shyft 能够在发生诸如交换、添加流动性或移除流动性等事件时立即通知我们。

要注册回调,你可以选择手动调用 Shyft 的回调注册 API 或通过提供必要的数据来使用 Shyft JS SDK。在我们的教程中,我们将选择 Shyft JS SDK 以增加便利性。有关回调 API 的更多详细信息,你可以在此 link 找到更多信息。

// setup Shyft client
import { Network, ShyftSdk } from "@shyft-to/js"

const RAYDIUM_AMM_ADDRESS = "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8";

const registerCallback = async () => {
  const shyft = new ShyftSdk({
    apiKey: process.env.NEXT_PUBLIC_SHYFT_API_KEY!,
    network: Network.Mainnet,
  });
  await shyft.callback.register({
    network: Network.Mainnet,
    addresses: [RAYDIUM_AMM_ADDRESS],
    // The URL of your API that listens for the callback event.
    // We will be set up in the next step.
    // 你的 API 的 URL,用于监听回调事件。
    // 我们将在下一步进行设置。
    callbackUrl: `${window.location.href}api/callback`,
    // In our tutorial, we are only interested in three events, but you can provide as many events as you like.
    // 在我们的教程中,我们只对三个事件感兴趣,但你可以根据需要提供任意数量的事件。
    events: [TxnAction.SWAP, TxnAction.ADD_LIQUIDITY, TxnAction.REMOVE_LIQUIDITY],
  });
  console.log("success");
};

设置 API 以接收回调

此 API 是一个标准的 POST API。我们在上一步中向 Shyft 提供了此 API 的 URL。当事件发生时,Shyft 将调用此 API 并将数据发送给我们。我们的责任包括检查和分析数据。 在我们的文章中,我们仅展示数据,但你可以随意将其用于任何你想要的目的,例如在前端显示此数据或将其存储在数据库中以供以后使用。要获得有关回调数据结构的更多见解,你可以参考此 link

import { CallbackDataType } from "@/types";
import { NextApiResponse } from "next";
import { NextRequest } from "next/server";
import { TxnAction } from "@shyft-to/js";

const ACTIONS = [\
  TxnAction.ADD_LIQUIDITY,\
  TxnAction.REMOVE_LIQUIDITY,\
  TxnAction.SWAP,\
  TxnAction.CREATE_POOL,\
];

export async function POST(req: NextRequest, res: NextApiResponse) {
  const body = (await req.json()) as CallbackDataType;

  if (
    !body.type ||
    !body.actions ||
    body.status !== "Success" ||
    !ACTIONS.includes(body.type as TxnAction)
  )
    return res.status(400).json({ message: "Invalid callback data" });
    // 你可以将回调数据存储到数据库中以供以后使用。
  // You can store the callback data into database for later use.
  console.dir(body, { depth: null });

  return Response.json({ success: true });
}

回调数据分析

每当发生链上事件(例如有人在 Raydium 上交换 token、添加流动性或移除流动性)时,我们已经成功设置了一个后端服务器,用于接收来自 Shyft 的数据。此数据对于你的 dApp 来说非常有价值,你可以使用它来在前端进行实时更新,让用户随时了解情况。让我们分析一下当有人在 Raydium 上交换 token 时我们收到的数据。

{
  "timestamp": "2024-01-11T07:23:15.000Z",
  "fee": 0.000005003,
  "fee_payer": "MeowujaCA1FGaA7hna2ezUXLbrj36qZi4hGx94xNQLo",
  "signers": [ "MeowujaCA1FGaA7hna2ezUXLbrj36qZi4hGx94xNQLo" ],
  "signatures": [\
    "29YJoYraAvHPAWS6ANU1Ei4SyC5ErqzR18cVZ9MTt15V4LJArgPeoQydXJXhCTZpSsu9w4CirV2grZqFxbT5JxAa"\
  ],
  "protocol": {
    "address": "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8",
    "name": "RAYDIUM_LIQUIDITY_POOL_V4"
  },
  "type": "SWAP",
  "status": "Success",
  "actions": [\
    {\
      "info": {\
        "swapper": "MeowujaCA1FGaA7hna2ezUXLbrj36qZi4hGx94xNQLo",\
        "tokens_swapped": {\
          "in": {\
            "token_address": "2KE2UNJKB6RGgb78DxJbi2HXSfCs1EocHj4FDMZPr4HA",\
            "name": "Slow Protocol",\
            "symbol": "SLOW",\
            "image_uri": "https://t3wsqd23o7n5d2pjgvspqafxi3jcznjfrdgwkh6acmgf3zjpnsgq.arweave.net/nu0oD1t329Hp6TVk-AC3RtIstSWIzWUfwBMMXeUvbI0",\
            "amount": 17.90357\
          },\
          "out": {\
            "token_address": "mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So",\
            "name": "Marinade staked SOL (mSOL)",\
            "symbol": "mSOL",\
            "image_uri": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So/logo.png",\
            "amount": 0.000460532\
          }\
        },\
        "swaps": [\
          {\
            "liquidity_pool_address": "5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1",\
            "name": "SLOW-mSOL",\
            "source": "raydiumAmm",\
            "in": {\
              "token_address": "2KE2UNJKB6RGgb78DxJbi2HXSfCs1EocHj4FDMZPr4HA",\
              "name": "Slow Protocol",\
              "symbol": "SLOW",\
              "image_uri": "https://t3wsqd23o7n5d2pjgvspqafxi3jcznjfrdgwkh6acmgf3zjpnsgq.arweave.net/nu0oD1t329Hp6TVk-AC3RtIstSWIzWUfwBMMXeUvbI0",\
              "amount": 17.90357\
            },\
            "out": {\
              "token_address": "mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So",\
              "name": "Marinade staked SOL (mSOL)",\
              "symbol": "mSOL",\
              "image_uri": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So/logo.png",\
              "amount": 0.000460532\
            }\
          }\
        ],\
        "slippage_in_percent": null,\
        "quoted_out_amount": null,\
        "slippage_paid": null\
      },\
      "source_protocol": {\
        "address": "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8",\
        "name": "RAYDIUM_LIQUIDITY_POOL_V4"\
      },\
      "type": "SWAP"\
    },\
    {\
      "info": {\
        "amount": 0.000455053,\
        "sender": "EyaSjUtSgo9aRD1f8LWXwdvkpDTmXAW54yoSHZRF14WL",\
        "receiver_associated_account": "7ysRpeKN76QjwC4btS9a6hiyinvgzEVLvWPP97M42jNg",\
        "receiver": "HobVrQpdkms7h57vcfaTW4Lqmxd5EatY2MYRavtvF1oL",\
        "token_address": "mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"\
      },\
      "source_protocol": {\
        "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",\
        "name": "TOKEN_PROGRAM"\
      },\
      "type": "TOKEN_TRANSFER",\
      "parent_protocol": "s1owa2k7P2kkLEenZPKuGddWMVpy8Pt2oMVeBdtSHM6"\
    },\
    {\
      "info": {\
        "amount": 0.000747644,\
        "sender": "HobVrQpdkms7h57vcfaTW4Lqmxd5EatY2MYRavtvF1oL",\
        "receiver_associated_account": "BgSvPcNqikNUDiHWLq8ms1LcHXBzaxHWhmg1TUcnpAfB",\
        "receiver": "5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1",\
        "token_address": "mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"\
      },\
      "source_protocol": {\
        "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",\
        "name": "TOKEN_PROGRAM"\
      },\
      "type": "TOKEN_TRANSFER",\
      "parent_protocol": "s1owa2k7P2kkLEenZPKuGddWMVpy8Pt2oMVeBdtSHM6"\
    },\
    {\
      "info": {\
        "amount": 28.92023,\
        "sender": "5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1",\
        "receiver_associated_account": "8SDYmWNY3omVgX2qe5yyWADYa7dhewfxfmgyx8zZx6TW",\
        "receiver": "HobVrQpdkms7h57vcfaTW4Lqmxd5EatY2MYRavtvF1oL",\
        "token_address": "2KE2UNJKB6RGgb78DxJbi2HXSfCs1EocHj4FDMZPr4HA"\
      },\
      "source_protocol": {\
        "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",\
        "name": "TOKEN_PROGRAM"\
      },\
      "type": "TOKEN_TRANSFER",\
      "parent_protocol": "s1owa2k7P2kkLEenZPKuGddWMVpy8Pt2oMVeBdtSHM6"\
    }\
  ],\
  "accounts": []
}

我们收到每个链上交易的人工可读数据。

  • type 字段指示交易的操作,在本例中为“Swap”。
  • feefee_payersigners 字段是不言自明的:它们表示交易的 gas 费用、支付费用的钱包以及为交易签名的钱包。
  • protocol 字段包含执行交易的程序的名称和地址。
  • actions 字段是一个操作列表,提供详细信息,例如交换者的钱包、进出的 token 及其相应的数量。

此外,如果你是 Discord 机器人的爱好者并且希望在你的 Discord 服务器中接收回调数据,你只需修改注册回调函数即可。将 callbackUrl 替换为你的 Discord webhook URL 并指定 type: DISCORD。我们写了一篇文章,介绍如何使用 Shyft API 创建 Discord 机器人。你可以通过此 link 阅读它。

结论

因此,我们刚刚指导你如何使用 Shyft Callback API 实时监听链上 Raydium 事件。通过监听链上事件,你可以轻松地为你的 DApp 提供实时体验。

我们真诚地希望你喜欢阅读这篇博文!如果你有任何疑问或想法,请随时访问我们的 Discord 社区。

非常感谢你抽出时间阅读它!

资源

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

0 条评论

请先 登录 后评论
Shyft_to
Shyft_to
在 Solana上更快更智能地构建,使用Shyft的SuperIndexer、gRPC、RPC、API和SDK