本文介绍了如何使用 Shyft 的 gRPC 服务来实时流式传输和解析 Pump.fun 新推出的 AMM (PumpSwap) 上的交易。
实时数据对于跟踪像去中心化交易所这样动态市场的 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 上的此处 找到,请随时克隆并跟随。
要使用 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 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!