在Solana上监听链上事件

  • Helius
  • 发布于 2023-05-26 15:28
  • 阅读 10

本文介绍了如何在Solana区块链上监听链上事件,主要探讨了轮询和流式数据传输的不同方法,并详细描述了通过Helius、Websockets和Geyser等技术构建高效的系统的具体实施方法。此外,还给出了一些实际应用案例,展示了如何使用这些技术实现自动化监控和触发操作。

7分钟阅读

2023年5月24日

介绍

成为加密开发者的最基本部分之一是建立监听区块链的系统。你可能在监听支付确认、NFT 销售、资金转移,或者仅仅是在监控账户以确保安全。无论你的用例是什么,为链上监控构建的系统都必须具备容错性、可靠性,并且优化延迟。

在这篇文章中,我们将讨论几种在 Solana 上构建这样的系统的方法、示例用例以及如何使用 Helius 构建更好的系统。

监听区块链

监听链上事件主要有两种方法:

  1. 轮询 (Polling)
  2. 流式传输 (Streaming)

轮询是一种方法,客户端或应用程序反复检查服务器或数据源以获取新数据。这可以在设定时间间隔内执行,也可以按需执行。当请求发送到服务器时,服务器会返回最新数据,无论是否发生了变化。这意味着客户端或应用程序可能反复接收到相同的数据,即使没有更新。

流式传输则是一种技术,在有更新时,服务器将数据推送到客户端或应用程序。这意味着客户端不需要反复请求数据,服务器只在数据发生变化时发送数据。这导致数据传输更加高效和实时,因为服务器仅发送相关数据。

虽然轮询是一种简单且广泛使用的技术,但它可能导致高网络流量,并且在频繁请求时可能消耗大量资源。相对而言,流式传输更高效,因为服务器仅发送更新,从而减少传输的数据量和网络流量。

流式传输通常用于实时数据更新至关重要的应用中,例如股票市场数据、社交媒体更新和在线游戏。轮询更常用于数据更新较少或不那么重要的应用,例如电子邮件客户端或新闻网站。

虽然这两种技术各有优缺点,但流式传输通常是实时数据更新的更高效和更受欢迎的方法,而轮询在某些数据更新不频繁的应用中仍然有用。

对于大多数区块链上的工作流程——尤其是 Solana——你会希望坚持使用流式传输。这样做有几个原因,但流式传输将更容易实现,处理高流量用例时也会更轻松,而这正是 Solana 的特长。

如何监听 Solana 上的链上事件

Solana 是一个非常快速的区块链。它每 400 毫秒发出新的区块,这些区块通常包含数千笔交易。令人惊讶的是,这是它能达到的最慢速度。随着核心工程师不断改进系统,区块链处理的新数据速率只会增加。因此,设计可扩展性的系统至关重要。

幸运的是,你有几种方法可以在 Solana 上监听链上数据:

  1. 轮询
  2. Websockets
  3. Geyser
  4. Helius Webhooks

轮询

这是在 Solana 上监听事件的最不推荐的方法,尽管从概念上讲它可能是最简单的。

根据你要获取的数据,你只需设置一个循环,反复调用 Solana RPC 上的 JSON-RPC 方法(例如 Helius)。这里的常见用例是轮询 getBlock 方法以监听新块,或者轮询 getSignaturesForAddress 以检查给定地址的新交易。

有趣的是,这也可能是非常高级用例的最佳方法,在这些用例中,你有非常自定义的逻辑来触发新更新。

Websockets

Solana RPCs 还为开发者提供了 PubSub websockets,可以方便地进行集成。可用的事件类型包括:

这里有一个小代码示例,用于通过支持 websockets 的 Helius RPC 监听账户变化,使用的语言是 JavaScript:

代码

const solanaWeb3 = require(‘@solana/web3.js’)
const connection = new solanaWeb3.Connection(“https://rpc.helius.xyz?api-key=“);
(async () => {
connection.onAccountChange(
new solanaWeb3.PublicKey(“5yv6Vh8FNx93TXeSS94xy8VLZMbTqx4vXp7Zg5bDLZtE”),
(updatedAccountInfo, context) => console.log(“更新的账户信息: “, updatedAccountInfo),“confirmed”  );
})();

一个非常重要的警告是,虽然 websockets 对于原型设计非常有用,但我们发现它们在实际应用中非常脆弱且不可靠。强烈建议你不要在关键工作流程中使用它们,因为你可能会错过事件。

Geyser

简而言之——你可以通过插件接口让 Solana 节点直接流式传输数据给你,自定义你接收数据的方式。这是 Solana 上流式传输数据的最快和最低延迟的方法,对于 DeFi 清算和对延迟敏感的应用来说绝对是必需的。

Solana 验证节点和 RPC 具有独特的 Solana 原生数据流传输方式:Geyser 插件

这些验证节点经过增强,支持一种插件机制,称为 "Geyser" 插件,通过该插件,可以将账户、插槽、区块和交易的信息传输到外部数据存储,例如关系型数据库、NoSQL 数据库或 Kafka。随后可以开发 RPC 服务从这些外部数据存储中消费数据,并实现更灵活和有针对性的优化,例如缓存和索引。

不幸的是,设置 Geyser 可能相当复杂且昂贵。即使在设置完毕后,你也需要相当多的开发运维工作来确保它平稳运行。幸运的是,在 Helius,我们开发了一种名为 GeyserVM 的工具——它能够让你上传插件并在几秒钟内运行。我们高度可用和冗余的集群确保你不必担心任何数据问题,由于资源共享,你可以节省超过 200% 的月度成本!

如果你希望获得专用的 Geyser 服务,我们当然也提供这个服务。点击这里了解更多信息。

Webhooks

Webhooks 是一个简单的概念。简单来说,webhooks 监听事件,并在这些事件发生时将其发送到你设置的服务器。例如,当 NFT 销售发生时,你可能想要向你的 Discord 服务器发送通知——一个 webhook 可以轻松实现这一点。

对于在 Solana 上的大多数事件监听工作流,webhooks 是最简单、最灵活和最具成本效益的方法。唯一让你停顿的时机是对于极低延迟用例,5 毫秒的差异可能使你的应用崩溃——比如高频交易。

在 Helius,我们构建了整个加密领域最强大的 webhook 服务。

你可以监听多达 100,000 个地址(每一个 webhook!),配置你想要监听的事件类型(我们为你解析这些!),并简单地输入你服务器的 URL——这就是你开始使用的全部,且免费。

使用此类服务的众多好处之一是,你不仅可以节省数周或数月的开发时间和精力,而且还能获得一个具有弹性的后端,随着你的成长而扩展。

要了解有关 webhooks 的更多信息,请点击这里。

用例

好了,现在你知道如何在 Solana 上监听链上事件,接下来你应该做什么?以下是一些可能有趣的用例:

机器人 (Bots)

  • 当 NFT 在市场 X 上上架时,触发 "nft buy" 动作。
  • 当保证金仓位不健康时,触发 "liquidation" 动作。

监控与警报

  • 当程序发出某个日志时,触发 PagerDuty 集成。
  • 当代币账户余额变化超过 X% 时,使用 Dialect 进行警告操作。

事件驱动索引 (Event-driven Indexing)

  • 当特定程序发生任何交易时,将其直接发送到你的数据库或后端。

通知与活动跟踪

  • 当从钱包 X 转账到钱包 Y 时——发送 Slack 通知或电子邮件。

分析与日志

  • 当事件 X 发生时,发送至 ETL 管道或直接在 Helius 上持久化,以查看趋势变化。

工作流自动化

  • 当事件 X 发生时,触发任何一组动作。

结论

在这篇文章中,我们讨论了轮询和流式传输的区别、监听 Solana 区块链的不同方法以及一些示例用例。

总之,你可以通过轮询、websockets、Geyser 或 Helius webhooks 来监听 Solana 上的链上事件。每种方法各有优缺点,因此在决定实施哪一种方法之前,考虑你的系统需求是非常重要的。感谢你的阅读!

要了解更多关于 Helius 的产品,包括 Solana RPCs、Solana APIs、Solana Webhooks 和 Solana 基础设施的信息,请访问我们的网站。

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

0 条评论

请先 登录 后评论
Helius
Helius
https://www.helius.dev/