本文介绍了如何在Solana区块链上监听链上事件,主要探讨了轮询和流式数据传输的不同方法,并详细描述了通过Helius、Websockets和Geyser等技术构建高效的系统的具体实施方法。此外,还给出了一些实际应用案例,展示了如何使用这些技术实现自动化监控和触发操作。
7分钟阅读
2023年5月24日
成为加密开发者的最基本部分之一是建立监听区块链的系统。你可能在监听支付确认、NFT 销售、资金转移,或者仅仅是在监控账户以确保安全。无论你的用例是什么,为链上监控构建的系统都必须具备容错性、可靠性,并且优化延迟。
在这篇文章中,我们将讨论几种在 Solana 上构建这样的系统的方法、示例用例以及如何使用 Helius 构建更好的系统。
监听链上事件主要有两种方法:
轮询是一种方法,客户端或应用程序反复检查服务器或数据源以获取新数据。这可以在设定时间间隔内执行,也可以按需执行。当请求发送到服务器时,服务器会返回最新数据,无论是否发生了变化。这意味着客户端或应用程序可能反复接收到相同的数据,即使没有更新。
流式传输则是一种技术,在有更新时,服务器将数据推送到客户端或应用程序。这意味着客户端不需要反复请求数据,服务器只在数据发生变化时发送数据。这导致数据传输更加高效和实时,因为服务器仅发送相关数据。
虽然轮询是一种简单且广泛使用的技术,但它可能导致高网络流量,并且在频繁请求时可能消耗大量资源。相对而言,流式传输更高效,因为服务器仅发送更新,从而减少传输的数据量和网络流量。
流式传输通常用于实时数据更新至关重要的应用中,例如股票市场数据、社交媒体更新和在线游戏。轮询更常用于数据更新较少或不那么重要的应用,例如电子邮件客户端或新闻网站。
虽然这两种技术各有优缺点,但流式传输通常是实时数据更新的更高效和更受欢迎的方法,而轮询在某些数据更新不频繁的应用中仍然有用。
对于大多数区块链上的工作流程——尤其是 Solana——你会希望坚持使用流式传输。这样做有几个原因,但流式传输将更容易实现,处理高流量用例时也会更轻松,而这正是 Solana 的特长。
Solana 是一个非常快速的区块链。它每 400 毫秒发出新的区块,这些区块通常包含数千笔交易。令人惊讶的是,这是它能达到的最慢速度。随着核心工程师不断改进系统,区块链处理的新数据速率只会增加。因此,设计可扩展性的系统至关重要。
幸运的是,你有几种方法可以在 Solana 上监听链上数据:
这是在 Solana 上监听事件的最不推荐的方法,尽管从概念上讲它可能是最简单的。
根据你要获取的数据,你只需设置一个循环,反复调用 Solana RPC 上的 JSON-RPC 方法(例如 Helius)。这里的常见用例是轮询 getBlock
方法以监听新块,或者轮询 getSignaturesForAddress
以检查给定地址的新交易。
有趣的是,这也可能是非常高级用例的最佳方法,在这些用例中,你有非常自定义的逻辑来触发新更新。
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 对于原型设计非常有用,但我们发现它们在实际应用中非常脆弱且不可靠。强烈建议你不要在关键工作流程中使用它们,因为你可能会错过事件。
简而言之——你可以通过插件接口让 Solana 节点直接流式传输数据给你,自定义你接收数据的方式。这是 Solana 上流式传输数据的最快和最低延迟的方法,对于 DeFi 清算和对延迟敏感的应用来说绝对是必需的。
Solana 验证节点和 RPC 具有独特的 Solana 原生数据流传输方式:Geyser 插件。
这些验证节点经过增强,支持一种插件机制,称为 "Geyser" 插件,通过该插件,可以将账户、插槽、区块和交易的信息传输到外部数据存储,例如关系型数据库、NoSQL 数据库或 Kafka。随后可以开发 RPC 服务从这些外部数据存储中消费数据,并实现更灵活和有针对性的优化,例如缓存和索引。
不幸的是,设置 Geyser 可能相当复杂且昂贵。即使在设置完毕后,你也需要相当多的开发运维工作来确保它平稳运行。幸运的是,在 Helius,我们开发了一种名为 GeyserVM 的工具——它能够让你上传插件并在几秒钟内运行。我们高度可用和冗余的集群确保你不必担心任何数据问题,由于资源共享,你可以节省超过 200% 的月度成本!
如果你希望获得专用的 Geyser 服务,我们当然也提供这个服务。点击这里了解更多信息。
Webhooks 是一个简单的概念。简单来说,webhooks 监听事件,并在这些事件发生时将其发送到你设置的服务器。例如,当 NFT 销售发生时,你可能想要向你的 Discord 服务器发送通知——一个 webhook 可以轻松实现这一点。
对于在 Solana 上的大多数事件监听工作流,webhooks 是最简单、最灵活和最具成本效益的方法。唯一让你停顿的时机是对于极低延迟用例,5 毫秒的差异可能使你的应用崩溃——比如高频交易。
在 Helius,我们构建了整个加密领域最强大的 webhook 服务。
你可以监听多达 100,000 个地址(每一个 webhook!),配置你想要监听的事件类型(我们为你解析这些!),并简单地输入你服务器的 URL——这就是你开始使用的全部,且免费。
使用此类服务的众多好处之一是,你不仅可以节省数周或数月的开发时间和精力,而且还能获得一个具有弹性的后端,随着你的成长而扩展。
好了,现在你知道如何在 Solana 上监听链上事件,接下来你应该做什么?以下是一些可能有趣的用例:
在这篇文章中,我们讨论了轮询和流式传输的区别、监听 Solana 区块链的不同方法以及一些示例用例。
总之,你可以通过轮询、websockets、Geyser 或 Helius webhooks 来监听 Solana 上的链上事件。每种方法各有优缺点,因此在决定实施哪一种方法之前,考虑你的系统需求是非常重要的。感谢你的阅读!
要了解更多关于 Helius 的产品,包括 Solana RPCs、Solana APIs、Solana Webhooks 和 Solana 基础设施的信息,请访问我们的网站。
- 原文链接: helius.dev/blog/solana-d...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!