本文介绍了如何使用 Shyft 的 Geyser-fed gRPC 和交易解析器来实时流式传输和解析 Raydium liquidity pool v4 交易。
gRPC 是获取 Solana 上发生的 实时 更新的最快方式。通过使用 Shyft 的全球 gRPC 网络,你可以在毫秒内过滤和 流式传输 Solana 上的任何类型的实时事件,例如账户更新、交易、区块和插槽更新。在本文中,我们将探讨如何使用 Shyft 的 gRPC 服务 实时 接收 Raydium v4 交易。
如果你想要一个完整的代码片段示例来跟进,请随意 fork 这个 replit。不要忘记在 secrets 部分添加 gRPC url 和访问Token。有关更多详细信息,请参阅“开始之前”部分。
要开始,我们需要一些东西。
身份验证:你的 Shyft API 密钥、gRPC 端点和 gRPC Token
你可以从 Shyft 网站 获取你自己的 Shyft API 密钥(Shyft 使用的身份验证参数)。你还可以在你的 Shyft 仪表板 上找到你特定区域的 gRPC 端点和访问Token。
服务器端后端(如 NodeJS)来接收 gRPC 数据
由于 Web 浏览器不支持 gRPC 服务,因此你需要一个后端应用程序来接收 gRPC 数据。对于此示例,我们使用了 NodeJS,但也可以使用任何其他后端 服务器端语言,例如 C#、Go、Java、Kotlin、Python 或 PHP。
Geyser 插件是模块化工具,旨在将有关帐户、插槽、区块和交易的数据传输到外部数据存储。Shyft 的 Geyser fed gRPC 提供帐户更新、交易、区块和插槽更新的流服务,因为它们会立即在链上发生。但是,设置 gRPC 流需要几个简单的步骤,
Shyft 的特定区域 gRPC url 在仪表板中可用,访问Token在其 discord 服务器中可用。有关更多详细信息,请参阅“开始之前”部分。
Shyft 提供来自 Triton 的 Yellowstone gRPC 节点,它在各种语言中具有许多预构建的客户端库,可以与 gRPC 接口进行交互。一些受支持的语言及其客户端:
对于本文,我们使用了 NodeJS 客户端,但可以根据你的要求选择任何客户端。首先,我们通过使用以下命令在我们的项目中安装 NodeJS 客户端:
## For npm,
npm install --save @triton-one/yellowstone-grpc
## or for yarn
yarn add @triton-one/yellowstone-grpc
安装 NodeJS 客户端库后,我们现在可以初始化客户端。我们只需从 @triton-one/yellowstone-grpc
SDK 导入 'Client' 类。Client 类的构造函数接受两个必填参数,首先是 Shyft gRPC 端点,其次是 gRPC 访问Token,这两个参数已在上一步中获得。
可以按以下方式初始化 gRPC 客户端:
import Client from "@triton-one/yellowstone-grpc";
const client = new Client(
"https://grpc.us1.shyft.to", //你的特定区域的 Shyft gRPC URL
"hbdj-asjnf-access-token-asdh", //Shyft gRPC 访问Token
undefined,
);
初始化客户端后,我们现在可以调用任何客户端方法。请注意,客户端以异步方式运行,因此所有调用都应在异步块或异步函数中执行。
从 gRPC 接收 实时更新 的关键在于 订阅流。Shyft gRPC 允许你使用 subscribe()
方法订阅特定的数据流。此方法返回一个流对象,该对象会在链上发生更新时立即发出更新。
const stream = await client.subscribe();
创建订阅流后,我们可以向 Shyft 的 gRPC 接口 发送 订阅请求,以便接收流式传输到我们后端服务器的特定更新。通过 gRPC,我们可以接收帐户更新、与特定程序相关的更新、经过过滤的帐户、交易等,并且每个订阅请求都有 不同的格式或参数。对于此示例,我们 订阅 Raydium Liquidity Pool V4 的 交易 的 实时 流,因此订阅请求与以下内容有些类似:
const req = {
accounts: {},
slots: {},
transactions: {
raydiumLiquidityPoolV4: {
vote: false,
failed: false,
signature: undefined,
accountInclude: [RAYDIUM_PUBLIC_KEY.toBase58()], //地址 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8
accountExclude: [],
accountRequired: [],
},
},
transactionsStatus: {},
entry: {},
blocks: {},
blocksMeta: {},
accountsDataSlice: [],
ping: undefined,
commitment: CommitmentLevel.CONFIRMED, //用于接收已确认的 txn 更新
};
准备好后,我们需要一个函数来处理我们将为 Raydium V4 接收的交易流,只要我们执行上述订阅请求。stream.on(“data”, callbackFunc())
回调函数处理收到的流,如下所示。
const stream = await client.subscribe();
// 创建 `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();
});
}); // 接收交易并处理更新的回调函数
stream.on("data", (data) => {
if (data?.transaction) {
//data.transaction 是接收到的原始交易
const txn = TXN_FORMATTER.formTransactionFromJson(
data.transaction,
Date.now(),
);
//接收到的交易可以根据应用程序的要求进一步处理
//对于此示例,我们解析了接收到的交易
const parsedTxn = decodeRaydiumTxn(txn); if (!parsedTxn) return; console.log(
new Date(),
":",
`New transaction https://translator.shyft.to/tx/${txn.transaction.signatures[0]} \n`,
JSON.stringify(parsedTxn, null, 2) + "\n",
);
}
});
成功设置流处理程序后,我们应该开始以原始格式接收与 Raydium Liquidity V4 相关的交易。我们可以对它们执行任何操作,例如简单地显示给用户、存储到数据库或解析它们并使用解析后的信息来根据我们应用程序的要求执行一些额外的操作。
function decodeRaydiumTxn(tx: VersionedTransactionResponse) {
if (tx.meta?.err) return;
const parsedIxs = IX_PARSER.parseTransactionWithInnerInstructions(tx);
const programIxs = parsedIxs.filter((ix) =>
ix.programId.equals(RAYDIUM_PUBLIC_KEY),
);
if (programIxs.length === 0) return;
const LogsEvent = LOGS_PARSER.parse(parsedIxs, tx.meta.logMessages);
const result = { instructions: parsedIxs, events: LogsEvent };
bnLayoutFormatter(result);
return result;
}
对于此示例,我们使用了 Shyft 的 transaction parser 来解析从 gRPC 接收到的交易。要了解有关解析交易的更多信息,请参阅我们的博客 如何在 Solana 上解析交易。
其中一个特别有用的场景是 实时跟踪 Raydium 交换。这是一个解析后的 Raydium 交换交易的示例,
从 Raydium Liquidity Pool v4 解析的交换交易
从这个解析的数据中,我们可以获得各种信息,例如 交换中涉及的代币、交换的数量 和 交换者地址。由于交易是实时流式传输的,因此可以立即解析此信息并在任何必要的应用程序中使用。
你可以在此 replit code here 中找到上述示例的代码片段。只需在 secrets 部分添加你的 gRPC url 和访问Token即可试用。
在本文中,我们展示了如何使用 SHYFT 的 gRPC 服务 实时流式传输 Raydium v4 交易。借助 gRPC 的速度和 SHYFT 的全球网络,设置实时数据流既快速又高效。T 他经济实惠的解决方案非常适合自托管 API、运行交易机器人和构建实时数据应用程序。 获取你的 API 密钥,立即开始流式传输!
如果你喜欢这篇关于 Solana 上的 gRPC 流的文章,请查看我们关于 使用 Shyft 和 Jito Bundle 构建 Telegram 交易机器人 或 跟踪实时 orca 事件 的其他文章。我们希望你在使用 SHYFT 构建 dApp 时获得美好的时光。
- 原文链接: blogs.shyft.to/how-to-st...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!