Skip to main content

mev-commit python sdk for on-chain data retrieval for mev-commit chain

Project description

mev-commit-sdk-py

Introduction

The mev-commit-sdk-py is a Python-based SDK designed to interact with the MEV Commit protocol, enabling developers to efficiently query blockchain data such as events, transactions, and blocks. This SDK leverages Envio's Hypersync Indexer to streamline data retrieval from the MEV Commit chain.

Features

  • Event Querying: Retrieve and analyze specific events on the mev-commit blockchain.
  • Block and Transaction Retrieval: Access detailed block and transaction data across a specified range of blocks.
  • Data Transformation: Utilize Polars DataFrames to handle and process data efficiently. Customizable Queries: Flexibility in creating custom queries based on specific needs, including event filtering by block range or address.

Installation

Install with pip install mev-commit-sdk-py

This library uses rye as the project manager. First install rye. Then clone the repository and run rye sync to install the dependencies and get setup. Current Python version is 3.12.2. Alternatively a different virtual environment manager can be used as long as it can use Python 3.12.2.

Testing

Run the unit tests with python -m unittest discover -s tests command.

Usage

This SDK is designed for ease of use in querying blockchain data. Below are some examples to help you get started:

Event Querying

You can query specific events using event names:

  • "NewL1Block": Tracks new L1 block events.
  • "CommitmentProcessed": Tracks when commitments are processed.
  • "BidderRegistered": Tracks bidder registration with deposited amount.
  • "BidderWithdrawal": Tracks bidder withdrawals.
  • "OpenedCommitmentStored": Tracks when opened commitments are stored.
  • "FundsRetrieved": Tracks when funds are retrieved from a bidder.
  • "FundsRewarded": Tracks when funds are rewarded from a bidder.
  • "FundsSlashed": Tracks when funds are slashed from a provider.
  • "FundsDeposited": Tracks when funds are deposited by a provider.
  • "Withdraw": Tracks provider withdrawals.
  • "ProviderRegistered": Tracks when a provider is registered.
  • "UnopenedCommitmentStored": Tracks when unopened commitments are stored.

Block and Transaction Retrieval

To retrieve transactions and blocks for a specific range:

import asyncio
import polars as pl
from mev_commit_sdk_py.hypersync_client import Hypersync

client = Hypersync(url='https://mev-commit.hypersync.xyz')

txs, blocks = asyncio.run(client.get_blocks_txs(from_block=0, to_block=100000))
print(txs.head())
print(blocks.head())

Query Preconf Commitment Data:

To query and build a DataFrame of precommitment data:

import asyncio
import polars as pl
from mev_commit_sdk_py.hypersync_client import Hypersync

client = Hypersync(url='https://mev-commit.hypersync.xyz')

# Encrypted commits have the dispatchTimestamp, which is the time when the provider decides to open the commitment to reveal the data. 
encrypted_stores: pl.DataFrame = await client.execute_event_query('UnopenedCommitmentStored', from_block=from_block)

# Opened commits have all of the bidding data such as bidder, bid amount, and decay function parameters.
commit_stores: pl.DataFrame = await client.execute_event_query('OpenedCommitmentStored', from_block=from_block)

# Get commitment slashing
commits_processed = await client.execute_event_query('CommitmentProcessed', from_block=from_block)

# Polars join log data to get comprehensive commitment data
commitments_df: pl.DataFrame = (
    encrypted_stores
    .join(commit_stores, on='commitmentIndex', how='left')
    .with_columns(('0x' + pl.col("txnHash")).alias('txnHash'))
    .join(commits_processed.select('commitmentIndex', 'isSlash'), on='commitmentIndex', how='inner')
).select(
    'block_number', 'blockNumber', 'txnHash', 'bid', 'commiter', 'bidder',
    'isSlash', 'decayStartTimeStamp', 'decayEndTimeStamp', 'dispatchTimestamp',
    'commitmentHash', 'commitmentIndex', 'commitmentDigest', 'commitmentSignature',
    'revertingTxHashes', 'bidHash', 'bidSignature', 'sharedSecretKey'
)

print(commitments_df.head(5))

Query Provider Slashing

import asyncio
import polars as pl
from mev_commit_sdk_py.hypersync_client import Hypersync

client = Hypersync(url='https://mev-commit.hypersync.xyz')

provider_slashes = asyncio.run(client.execute_event_query('FundsSlashed'))
# print(provider_slashes.tail(10)) # tail gets most recent events

provider_table = provider_slashes.with_columns(
    (pl.col('amount')/ 10**18).alias('slash_amt_eth')
).group_by('provider').agg(
    pl.col('slash_amt_eth').sum().alias('total_amt_slashed_eth'),
    pl.len().alias('slash_count')
)

print(provider_table)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mev_commit_sdk_py-0.4.4.tar.gz (9.1 kB view details)

Uploaded Source

Built Distribution

mev_commit_sdk_py-0.4.4-py3-none-any.whl (7.6 kB view details)

Uploaded Python 3

File details

Details for the file mev_commit_sdk_py-0.4.4.tar.gz.

File metadata

  • Download URL: mev_commit_sdk_py-0.4.4.tar.gz
  • Upload date:
  • Size: 9.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.5

File hashes

Hashes for mev_commit_sdk_py-0.4.4.tar.gz
Algorithm Hash digest
SHA256 ced1f6865f10ee3355c4bbacc005349e8d58d3e0a60e951a508db2e58c5ef1ca
MD5 763fddfd0e6106a8db631082c5aeb1a7
BLAKE2b-256 6be7871c4031a568fe2957abe28e80d87f082c7bf756674ab5d9315d303870da

See more details on using hashes here.

File details

Details for the file mev_commit_sdk_py-0.4.4-py3-none-any.whl.

File metadata

File hashes

Hashes for mev_commit_sdk_py-0.4.4-py3-none-any.whl
Algorithm Hash digest
SHA256 0bacc2f341e8ea4151d1430b993626ab115e275f31096a75d9b4d30f52ff3604
MD5 1cf44f86997f06dd3717dd8121f8d29c
BLAKE2b-256 d7bd4c1fc26a0b82670a14300e8040483e09293958c9177c343bcebaa8ce706e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page