什么是 Solana Geyser 插件?

Solana 的 Geyser 插件有助于减少对验证器节点的依赖。本文将解释 Solana Geyser 插件是什么、它的工作原理以及如何设置 PostgeSQL 服务器以与 Geyser 插件接口一起使用。

Solana 开发了一种名为 Solana Geyser Plugin 的机制,用于将 RPC 请求路由到另一个内存位置并减少对验证器节点的依赖。远程过程调用 (RPC) 允许用户连接、读取和写入网络上的Solana 节点的信息。当 Solana 网络流量过大时,RPC 服务提供商可能会被大量请求淹没。这种异常流量可能导致Solana 验证器落后于节点领导者。

Solana Geyser 插件如何帮助外部数据源?

Solana Geyser 插件使开发人员能够访问某些形式的数据,而无需在链上请求它们。使用 Kafka、postgreSQL 和其他可能的数据存储,开发人员无需使用 RPC 资源来执行获取帐户、区块和插槽等操作。要与 Solana Geyser 插件交互,开发人员需要使用 crate。

Solana Geyser 插件中的板条箱是什么?

Solana Geyser 插件由 crate 组成,crates 是 Rust 上的编译单元,通常在编译时转换为库或二进制文件。crates与其他编程语言中的包同义。但在 Rust 中,包是一个或多个 crate 的组合。crates 由编译单元组成。

什么是编译单元?

编译单元是程序源代码的一部分,可以独立或单独编译。由于Rust 是一种通用编程语言,因此它支持函数式、命令式、面向对象和并发编程。Rust 使用语句来改变程序的状态,因为每个语句依次执行。这种方法允许用 Rust 编写的程序由编译单元组成。 

Solana Geyser 插件中的接口是什么?

插件接口由所使用的包定义。例如,Solana Geyser 插件接口由其 GeyserPlugin 特征指定。通过允许通信流,GeyserPlugin 可以传输帐户和交易详细信息。 

常见的 Solana Geyser 插件用例

Solana Geyser 插件接口的一些最实际的用例包括接收账户更新、插槽更改的通知以及通知交易。

1. 账户更新

以下方法用于通知帐户更新:

 fn update_account(
        &mut self,
        account: ReplicaAccountInfoVersions,
        slot: u64,
        is_startup: bool,
    ) -> Result<()>

ReplicaAccountInfoVersions结构包含正在流式传输的帐户的元数据和数据。 

is_startup为 true 时,表示验证器节点启动时从快照中加载账户。当 is_startup 为 false 时,处理交易时会更新账户。

当验证器从快照中恢复帐户详细信息时,所有帐户都已收到警报后,调用此函数。 

fn notify_end_of_startup(&amp;mut self) -> Result<()>

通过确保进程异步运行来维护外部数据持久性。这使得在调用 update_account 事务处理能够快速并行地进行。

2. 时段变更

以下方法用于通知插槽状态变化:

fn update_slot_status(
        &amp;mut self,
        slot: u64,
        parent: Option,
        status: SlotStatus,
    ) -> Result<()>

如果在保存数据时出现错误,插件可以决定中止验证器。数据保持一致,一旦验证器重新启动,所有帐户数据都会重新传输。

3. 通知交易

以下方法用于通知交易:

  fn notify_transaction(
        &amp;mut self,
        transaction: ReplicaTransactionInfoVersions,
        slot: u64,
    ) -> Result<()>

如何为 Solana 的 Geyser 插件设置 PostgreSQL 数据库

PostgreSQL 插件用于将帐户数据存储在 PostgreSQL 数据库中。要正确配置您的文件,请使用Solana 官方文档页面上的配置指南,并按照以下步骤设置数据库:安装 PostgreSQL 服务器、创建数据库实例和创建架构对象。

1.安装 PostgreSQL 服务器

按照说明在您的机器上安装 PostgreSQL 服务器。为了在验证器节点上获得正确的性能,强烈建议您在与验证器不同的节点上运行数据库服务器。 

2.创建数据库实例

接下来,启动服务器,创建数据库,创建用户并验证一切正常。

启动服务器:

sudo systemctl start postgresql@14-main

在官方示例中,以下行创建一个名为“solana”的数据库:

sudo -u postgres createdb solana -p 5433

创建数据库用户:

sudo -u postgres createuser -p 5433 solana

上一行代码将创建一个名为“solana”的用户。

验证数据库是否按预期工作:

psql -U solana -p 5433 -h 10.138.0.9 -w -d solana

3.创建架构对象

使用来自 GitHub 的 create_schema.sql 脚本创建用于存储账户和槽的对象。

运行以下脚本:

psql -U solana -p 5433 -h 10.138.0.9 -w -d solana -f create_schema.sql

现在,使用已加载的插件启动验证器。 

开始使用 Solana Geyser 插件来更快地访问数据

除了不变性之外,数据还应在区块链上随时可用且可访问。Solana 的 Geyser 插件使这种可访问性在 Solana 上成为可能且更快,同时帮助验证器节点管理其资源和正常运行时间。

本文由 SlerfTools 翻译自 What is the Solana Geyser Plugin?