Coder Social home page Coder Social logo

chaindexing / chaindexing-rs Goto Github PK

View Code? Open in Web Editor NEW
46.0 1.0 4.0 478 KB

Index any EVM chain and query in SQL

License: Apache License 2.0

Rust 99.63% Makefile 0.37%
dapps solidity indexer ethereum multichain smart-contracts web3 postgres data-collection blockchain

chaindexing-rs's Introduction

Chaindexing

github crates.io diesel-streamer build

Index any EVM chain and query in SQL

Getting Started | Examples | Design Goals & Features | RoadMap | Contributing

Getting Started

📊 Here is what indexing and tracking owers of your favorite NFTs looks like:

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;
        }
    }
}

A quick and effective way to get started is by exploring the comprehensive examples provided here: https://github.com/chaindexing/chaindexing-examples/tree/main/rust.

Design Goals & Features

  • 💸 Free forever
  • ⚡ Real-time use-cases
  • 🌐 Multi-chain
  • 🧂 Granular, 🧩 Modular & 📈 Scalable
  • 🌍 Environment-agnostic to allow inspecting 🔍 & replicating indexes anywhere!
  • 🔓 ORM-agnostic, use any ORM to access indexed data
  • 📤 Easy export to any data lake: S3, Snowflake, etc.
  • 🚫 No complex YAML/JSON/CLI config
  • 💪 Index contracts discovered at runtime
  • ✨ Handles re-org with no UX impact
  • 🔥 Side effect handling for notifications & bridging use cases
  • 💸 Optimize RPC cost by indexing when certain activities happen in your DApp
  • 💎 Language-agnostic, so no macros!

RoadMap

  • ⬜ Expose is_at_block_tail flag to improve op heuristics for applications
  • ⬜ Support SQLite Database (Currently supports only Postgres)
  • ⬜ Support indexing raw transactions & call traces.
  • ⬜ Improved error handling/messages/reporting (Please feel free to open an issue when an opaque runtime error is encountered)
  • ⬜ Support TLS connections
  • ⬜ Minimal UI for inspecting events and indexed states

Contributing

All contributions are welcome. Before working on a PR, please consider opening an issue detailing the feature/bug. Equally, when submitting a PR, please ensure that all checks pass to facilitate a smooth review process.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.