如何在 Solana 上流式传输和解析 PumpSwap 交易

  • Shyft_to
  • 发布于 2025-04-17 15:31
  • 阅读 26

本文介绍了如何使用 Shyft 的 gRPC 服务来实时流式传输和解析 Pump.fun 新推出的 AMM (PumpSwap) 上的交易。

在本文中,我们将探索使用 gRPC 流式传输和解析 Pump Swap AMM 交易

pump fun amm transaction streaming gRPC cover

实时数据对于跟踪像去中心化交易所这样动态市场的 Solana 应用程序至关重要。 gRPC 流式传输提供了一种高性能的方式来接收即时的链上更新。 之前,Pump.fun 的代币迁移到像 Raydium 这样的 DEX;现在,它们过渡到 Pump AMM。 监控这个新平台上的活动需要高效、低延迟的数据流,这使得 Solana gRPC 流式传输成为实时观察的关键工具。

在本文中,我们将探讨如何流式传输和解析 PumpSwap 交易Pump.fun 新推出的 AMM。

开始之前

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

身份验证:gRPC 端点和 gRPC Token

Shyft 的 gRPC 节点分布在整个欧盟和美国地区的各个位置。 要访问,我们需要一个特定于区域的 gRPC 端点和一个访问Token,这些Token可以在你的 Shyft 仪表板上购买。

一个服务器端后端(如 NodeJS)来接收 gRPC 数据

由于 Web 浏览器不支持 gRPC 服务,因此你需要一个后端应用程序,例如 C#、Go、Java、Python 等,以接收 gRPC 数据。

介绍

Shyft 的 gRPC 利用 Geyser 框架,提供链上 Solana 数据的实时流,包括帐户更新、交易、区块和插槽更改。 我们的方法包括连接到 Shyft 的 gRPC 服务,以专门为 PumpSwap AMM 创建实时交易流。

这将允许我们立即接收在区块链上处理的交易数据。 我们的后端将解析并显示此解析后的信息,这些信息可用于进一步处理。

本文的完整代码可在 GitHub 上的此处 找到,请随时克隆并跟随。

初始化 — Yellowstone Client

要使用 gRPC 流式传输 Pumpfun AMM 交易,我们需要两件事:gRPC 端点,即你特定于区域的端点,以及 gRPC 访问Token。 这两者都可以在你的 Shyft 仪表板中找到。 获得它们后,你可以初始化 yellowstone 客户端并开始流式传输 Pumpfun AMM 数据。

const client = new Client(
    'Your Region specific Shyft gRPC URL',
    'Shyft gRPC Access Token',
    undefined,
  );

现在我们可以继续从区块链获取数据。

指定要接收的数据 — 订阅请求

设置好 yellowstone 客户端后,下一步是准确定义我们要接收的信息。 Shyft 的 gRPC 接口提供各种类型的实时更新,例如帐户更改、交易、新区块和插槽更新。 为了只关注我们需要的数据,我们必须使用“subscribe requests”。 订阅请求定义要流式传输的数据。 在我们的例子中,订阅请求看起来像这样。

const req: SubscribeRequest = {
  accounts: {},
  slots: {},
  transactions: { //for streaming transactions
    pumpFun: {
      vote: false,
      failed: false,
      signature: undefined,
      accountInclude: [PUMPSWAP_AMM.toBase58()], //pumpswap program id
      accountExclude: [],
      accountRequired: [],
    },
  },
  transactionsStatus: {},
  entry: {},
  blocks: {},
  blocksMeta: {},
  accountsDataSlice: [],
  ping: undefined,
  commitment: CommitmentLevel.PROCESSED, //commitment level, can be confirmed
  //or finalized too
};

建立成功流的两个主要方面如下:

  • client:这是 yellowstone 客户端,用于连接到 Solana 区块链并订阅实时链上事件。
  • arg: 此参数通过订阅请求指定我们要从区块链检索的确切数据。

handle stream 函数负责从流中接收原始交易并发送订阅请求。

async function handleStream(client: Client, args: SubscribeRequest) {
    // Subscribe for events
    const stream = await client.subscribe();
   // Create `error` / `end` handler
    const streamClosed = new Promise<void>((resolve, reject) => {
      stream.on("error", (error) => {
        console.log("ERROR", error);
        reject(error);
        stream.end();
      });
      stream.on("end", () => {
        resolve();
      });
      stream.on("close", () => {
        resolve();
      });
    });
// Handle updates
    stream.on("data", async (data) => {
      try{
     console.log(data);
  }catch(error){
    if(error){
      console.log(error)
    }
  }
});
// Send subscribe request
    await new Promise<void>((resolve, reject) => {
      stream.write(args, (err: any) => {
        if (err === null || err === undefined) {
          resolve();
        } else {
          reject(err);
        }
      });
    }).catch((reason) => {
      console.error(reason);
      throw reason;
    });
     await streamClosed;
  }

接收和解析交易

gRPC 流提供像标准 RPC 一样的交易数据,加上额外的字段,如 isVote、消息头(签名、签名者)、isVersioned 和区块/ping/entry 信息。 Shyft 提供了一个实用函数,可以将这些 gRPC 交易转换为传统的 RPC 格式。

import { TransactionFormatter } from "./utils/transaction-formatter";
const TXN_FORMATTER = new TransactionFormatter();

//formatting raw gRPC data to RPC like transactions
const txn = TXN_FORMATTER.formTransactionFromJson(
    data.transaction,
    Date.now(),
);

下一步涉及解码交易,以便原始数据是人类可读的。 这就是解析的用武之地。 我们可以定义自己的交易解析器,或者只是使用 Shyft 的 Solana 交易解析器。

npm i @shyft-to/solana-transaction-parser

这个 解析器只需要程序 IDL,了解交易数据的结构,然后生成易于阅读和理解的解析后交易。 在我们的例子中,我们使用了 Shyft 的解析器,可以通过以下方式初始化。

//initialization
const TXN_FORMATTER = new TransactionFormatter();
const PUMP_FUN_AMM_PROGRAM_ID = new PublicKey(
  "pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA"
);
const PUMP_FUN_IX_PARSER = new SolanaParser([]);
PUMP_FUN_IX_PARSER.addParserFromIdl(
  PUMP_FUN_AMM_PROGRAM_ID.toBase58(),
  pumpFunAmmIdl as Idl
);

//decoding data
const paredIxs = PUMP_FUN_IX_PARSER.parseTransactionData(
   tx.transaction.message,
   tx.meta.loadedAddresses
);

结论

总之,使用 gRPC 建立 Pump AMM 的实时交易流,再加上通过 Shyft 的交易解析器进行高效解析,为开发人员提供了对平台活动的即时且可理解的见解。 这对于构建响应式应用程序和及时了解不断发展的 Pump.fun 生态系统至关重要。

如果你错过了,本文的完整代码可在 GitHub 上的此处 找到,请随时克隆并跟随。

你可以浏览我们的其他相关文章:在 Solana 上流式传输实时数据使用 gRPC 进行实时数据流:帐户、交易、区块如何在 Solana 上流式传输实时 Pump.fun 更新跟踪 Raydium 上的新池

资源

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

0 条评论

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