chaindexing 0.1.80

Index any EVM chain and query in SQL
Documentation
mod event;

pub use event::{Event, EventParam, PartialEvent};

use std::collections::HashMap;

use crate::{contracts, ChainId, Contract, ContractAddress};
use ethers::types::{Block, Log, TxHash, U64};

pub fn get<S: Send + Sync + Clone>(
    logs: &[Log],
    contracts: &[Contract<S>],
    contract_addresses: &[ContractAddress],
    chain_id: &ChainId,
    blocks_by_number: &HashMap<U64, Block<TxHash>>,
) -> Vec<Event> {
    let events_by_topics = contracts::group_events_by_topics(contracts);
    let contract_addresses_by_address =
        ContractAddress::group_contract_addresses_by_address_and_chain_id(contract_addresses);

    logs.iter()
        .map(
            |log @ Log {
                 topics,
                 address,
                 block_number,
                 ..
             }| {
                let contract_address =
                    contract_addresses_by_address.get(&(*address, *chain_id)).unwrap();
                let block = blocks_by_number.get(&block_number.unwrap()).unwrap();

                Event::new(
                    log,
                    events_by_topics.get(&topics[0]).unwrap(),
                    chain_id,
                    &contract_address.contract_name,
                    block.timestamp.as_u64() as i64,
                )
            },
        )
        .collect()
}