Skip to main content

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)

Metadata

Release files for mev-commit-sdk-py 0.4.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mev-commit-sdk-py 0.4.8
File Size Uploaded
mev_commit_sdk_py-0.4.8.tar.gz 10.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mev-commit-sdk-py 0.4.8
File Interpreter ABI Platform
mev_commit_sdk_py-0.4.8-py3-none-any.whl Python 3 none any Details

Total release size: 18.6 kB

Release files / mev_commit_sdk_py-0.4.8.tar.gz

Download URL mev_commit_sdk_py-0.4.8.tar.gz
Size 10.2 kB
Tags Source
SHA-256 checksum
How to use checksums
01923ecf6be3df96fa5e5efa4a8691b053fc40ab40e288163166f595f5ac942f
BLAKE2b-256 checksum
How to use checksums
6153040ef7c1e28d2f6d0d0fdff2a45b82f67ff138ad6776a277220522793129
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.12.5

Release files / mev_commit_sdk_py-0.4.8-py3-none-any.whl

Download URL mev_commit_sdk_py-0.4.8-py3-none-any.whl
Size 8.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c0f54495524b1d88097edf4e63565e5f3843d1cbb85cd320fbde9cbb6a4b80f2
BLAKE2b-256 checksum
How to use checksums
a59b534b3c59b0f5af2c158cc83cd1e4ab1deaca60c7db589554dea8f4b7ca75
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.12.5

Release history Release notifications | RSS feed

This release

0.4.8 This release

2 release files

0.4.7

2 release files

0.4.6

2 release files

0.4.5

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.12

2 release files

0.1.11

2 release files

0.1.10

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.3

1 release file

0.1.2

1 release file

0.1.1

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page