1 个不稳定版本
0.1.77 | 2024 年 4 月 20 日 |
---|---|
0.1.49 |
|
0.1.24 |
|
0.1.18 |
|
#2026 in 魔法豆
每月 250 次下载
185KB
4.5K SLoC
Chaindexing
索引任何 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