#anchor #run-time #events #service #indexer #syndica #dyndexer

syndica-dyndexer-runtime

支持在Syndica索引服务上运行的代码的库

4 个版本 (破坏性更新)

0.4.0 2024年8月6日
0.3.0 2024年7月19日
0.2.0 2024年7月9日
0.1.1 2024年6月24日
0.1.0 2024年6月24日

#6 in #anchor

Download history 205/week @ 2024-06-24 2/week @ 2024-07-01 115/week @ 2024-07-08 110/week @ 2024-07-15 11/week @ 2024-07-22 114/week @ 2024-08-05 1/week @ 2024-08-12

每月130 次下载

Apache-2.0

43KB
535 代码行

Syndica Dyndexer Runtime

此crate提供对Syndica Dyndexer服务提供的运行时功能进行访问。

示例

一个简单的示例是使用anchor功能,该功能包含一个Anchor事件的解析器,并可以将任何anchor事件作为输出记录

use std::sync::OnceLock;

use syndica_dyndexer_runtime::{processor, record_output, Event, Output};
use syndica_dyndexer_runtime::anchor::AnchorIdl;

const PROGRAM_ADDR: &str = "...";
const PROGRAM_IDL: &[u8] = include_bytes!("path/to/program-idl.json");
static IDL: OnceLock<AnchorIdl> = OnceLock::new();

#[processor]
fn process(event: Event) {
    let idl = IDL.get_or_init(|| AnchorIdl::deserialize(PROGRAM_ADDR, PROGRAM_IDL));

    if let Event::Transaction(transaction) = event {
        let events = idl.parse_events(&transaction);
        let signature = transaction.signature;

        for (idx, event) in events.into_iter().enumerate() {
            record_output(&Output::Object {
                uid: format!("{signature}:{idx}"),
                key: None,
                value: &event.data,
            });
        }
    }
}

依赖

~1.2–2.5MB
~53K SLoC