#索引 #evm #以太坊 #多链 #web3

chaindexing

索引任何 EVM 链并使用 SQL 查询

1 个不稳定版本

0.1.77 2024 年 4 月 20 日
0.1.49 2024 年 3 月 20 日
0.1.24 2023 年 12 月 31 日
0.1.18 2023 年 11 月 28 日

#2026 in 魔法豆

Download history 1094/week @ 2024-04-17 27/week @ 2024-04-24 9/week @ 2024-07-03 179/week @ 2024-07-24 71/week @ 2024-07-31

每月 250 次下载

MIT/Apache

185KB
4.5K SLoC

Chaindexing

github crates.io diesel-streamer build

索引任何 EVM 链并使用 SQL 查询

入门 | 示例 | 设计目标与功能 | 路线图 | 贡献

入门

📊 这里是索引和跟踪您喜欢的 NFT 拥有者的样子

use chaindexing::states::{ContractState, Filters, Updates};
use chaindexing::{EventContext, EventHandler};

use crate::states::Nft;

pub struct TransferHandler;

#[chaindexing::augmenting_std::async_trait]
impl EventHandler for TransferHandler {
    fn abi(&self) -> &'static str {
        "event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)"
    }
    async fn handle_event<'a, 'b>(&self, context: EventContext<'a, 'b>) {
        let event_params = context.get_event_params();

        let _from = event_params.get_address_string("from");
        let to = event_params.get_address_string("to");
        let token_id = event_params.get_u32("tokenId");

        if let Some(existing_nft) =
            Nft::read_one(&Filters::new("token_id", token_id), &context).await
        {
          let updates = Updates::new("owner_address", &to);
          existing_nft.update(&updates, &context).await;
        } else {
            let new_nft = Nft {
                token_id,
                owner_address: to,
            };

            new_nft.create(&context).await;
        }
    }
}

快速有效的方法是探索这里提供的综合示例: https://github.com/chaindexing/chaindexing-examples/tree/main/rust

设计目标与功能

  • 💸 永久免费
  • ⚡ 实时用例
  • 🌐 多链
  • 🧂 细粒度、🧩 模块化 & 📈 可扩展
  • 🌍 环境无关,允许在任何地方检查 🔍 & 复制索引!
  • 🔓 ORM 无关,可以使用任何 ORM 访问索引数据
  • 📤 轻松导出到任何数据湖:S3、Snowflake 等。
  • 🚫 没有复杂的 YAML/JSON/CLI 配置
  • 💪 索引运行时发现的合约
  • ✨ 处理重新组织(re-org)没有 UX 影响
  • 🔥 处理副作用以处理通知和桥接用例
  • 💸 通过索引您的 DApp 中的某些活动来优化 RPC 成本
  • 💎 语言无关,所以没有宏!

路线图

  • ⬜ 暴露 is_at_block_tail 标志,以改进应用程序的操作启发式方法
  • ⬜ 支持 SQLite 数据库(目前仅支持 Postgres)
  • ⬜ 支持索引原始交易和调用跟踪。
  • ⬜ 改进错误处理/消息/报告(请在遇到模糊的运行时错误时免费提出问题)
  • ⬜ SSL 支持
  • ⬜ 最小 UI 用于检查事件和索引状态

贡献

欢迎所有贡献。在开始 PR 之前,请考虑提出一个详细说明功能/错误的 issue。同样,在提交 PR 时,请确保所有检查都通过,以方便顺利的审查过程。

依赖项

~31–47MB
~891K SLoC