Superset of Flashbots' plugin for Web3.py allowing bundles to be submitted to many miners.
Project description
Web3 More Bundlers
This library works by injecting flashbots (bundler
) as a new module in the Web3.py instance, which allows submitting "bundles" of transactions directly to miners. This is done by also creating a middleware which captures calls to eth_sendBundle
and eth_callBundle
, and sends them to an RPC endpoint which you have specified, which corresponds to mev-geth
.
To apply correct headers we use the flashbot
method which injects the correct header on POST
.
This is a superset project of Flashbot's package for Web3.py, and originally adapted from TitanBuilder's PR (flashbots/web3-flashbots#76). Flashbots currently only supports Web3.py version ^5.22.0 (not >=6).
Quick Start
Installing
Currently, this is not a published packaged, and is easiest to install using Poetry (pipx). But, any package/env management solution that can install from Git/Github will work.
poetry add git+https://github.com/vile/web3-more-bundlers
Example
import os
from eth_account.account import Account
from eth_account.signers.local import LocalAccount
from web3 import HTTPProvider, Web3
from web3morebundlers import bundler
ETH_ACCOUNT_SIGNATURE: LocalAccount = Account.from_key(os.environ.get("ETH_SIGNER_KEY"))
BUNDLER_ENDPOINTS = ["https://relay.flashbots.net", "https://rpc.titanbuilder.xyz", ...]
w3 = Web3(HTTPProvider("http://localhost:8545"))
bundler(w3=w3, signature_account=ETH_ACCOUNT_SIGNATURE, endpoint_uris=BUNDLER_ENDPOINTS)
Now the w3.flashbots.sendBundle
method should be available to you. Look in examples/simple.py for usage examples.
Using Testnets
Currently, the base flashbots package only supports Goerli. To use Goerli, add the Goerli relay RPC to the bundler
function arguments.
bundler(w3=w3, signature_account=ETH_ACCOUNT_SIGNATURE, endpoint_uris=BUNDLER_ENDPOINTS, flashbots_uri="https://relay-goerli.flashbots.net")
Migrating
Switching from the base Flashbots package to web3morebundlers is simple. This package initializes flashbot
under the hood and exposes all existing w3.flashbot
functions; only the initializer function needs to be changed (with an additional param).
Let's migrate flashbot's quickstart example:
from eth_account.signers.local import LocalAccount
from web3 import Web3, HTTPProvider
- from flashbots import flashbot
+ from web3morebundlers import bundler
from eth_account.account import Account
import os
ETH_ACCOUNT_SIGNATURE: LocalAccount = Account.from_key(os.environ.get("ETH_SIGNER_KEY"))
+ BUNDLER_ENDPOINTS = ["https://relay.flashbots.net", "https://rpc.titanbuilder.xyz", ...]
w3 = Web3(HTTPProvider("http://localhost:8545"))
- flashbot(w3, ETH_ACCOUNT_SIGNATURE)
+ bundler(w3=w3, signature_account=ETH_ACCOUNT_SIGNATURE, endpoint_uris=BUNDLER_ENDPOINTS)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for web3morebundlers-0.1.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4d96f658a780acc60143357b7dc83cd1b76ecae6bd1db128cb4485a1659aac5f |
|
MD5 | 128773125ef34d33ed86c5ddce8a4ed8 |
|
BLAKE2b-256 | 72006da7a830ef83ecb3044ba029c9af87dda6091cf7ac80cdbd22438bd84f16 |