Created
August 10, 2023 14:55
-
-
Save erikreppel/adc582344ee87b0b2a49707b927efb7a to your computer and use it in GitHub Desktop.
cryo event parsing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import pandas as pd | |
from pathlib import Path | |
from web3.types import LogReceipt | |
from web3._utils.events import get_event_data | |
from eth_utils import to_hex | |
from web3._utils.abi import build_default_registry | |
from eth_abi.codec import ABICodec | |
def read_parquet_glob(folder): | |
data_dir = Path(folder) | |
return pd.concat( | |
pd.read_parquet(parquet_file) | |
for parquet_file in data_dir.glob('*.parquet') | |
) | |
def decode_events_df(df, abi): | |
codec = ABICodec(build_default_registry()) | |
def process_row(row): | |
receipt = LogReceipt( | |
address=to_hex(row["contract_address"]), | |
blockNumber=row["block_number"], | |
blockHash="", | |
data=row["data"], | |
logIndex=row["log_index"], | |
topic=row["topic0"], | |
topics=[row[f"topic{i}"] for i in range(4)], | |
transactionHash=row["transaction_hash"], | |
transactionIndex=row["transaction_index"], | |
) | |
out = get_event_data(codec, abi, receipt) | |
# print(out) | |
d = {k: out["args"][k] for k in [event["name"] for event in abi["inputs"]]} | |
return pd.Series(d.values()) | |
processed = df.apply(process_row, axis=1) | |
processed.columns = [e["name"] for e in abi["inputs"]] | |
return processed | |
# usage: | |
df = read_parquet_glob("./data") | |
abi = ... # json form abi | |
df = decode_events_df(df, abi) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment