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.5.tar.gz (9.1 kB view details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: mev_commit_sdk_py-0.4.5.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.5.tar.gz
Algorithm Hash digest
SHA256 26b917af683a29e50c6818a2ab2c08823d1ce3506999c3ae9474cddf83d431f7
MD5 ef8b2f4c6b6bec4a4b415c52bd2b1008
BLAKE2b-256 4add424a6a5d463d61351c56b8f02a66bd5d95b95b071ac686dad5a12ac7470e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mev_commit_sdk_py-0.4.5-py3-none-any.whl
Algorithm Hash digest
SHA256 7929ffbe587bbb2c15773b14d59e4885ce09553f2e88cd0ee7d5c017c89afdd9
MD5 4c4948ff1d2a037bda51207024305530
BLAKE2b-256 f35c4cb0592bf9f85c119aeef35703271f27b624e360a138ab2760d919171d31

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