Git Product home page Git Product logo

alloy-mev's Introduction

Alloy MEV

Easily send transaction bundles using Alloy.

Installation

Add alloy-mev to your Cargo.toml.

alloy-mev = "0.2"

Features

MEV-Share

This crate contains the MevShareProviderExt extension trait. When it's in scope, it adds methods to send bundles to the Flashbots matchmaker on your provider built on an HTTP transport.

#[tokio::main]
async fn main() -> Result<()> {
    dotenv().ok();
    let eth_rpc = env::var("ETH_HTTP_RPC")?;

    // This is your searcher identity
    let bundle_signer = PrivateKeySigner::random();

    // This signs transactions
    let tx_signer = EthereumWallet::from(PrivateKeySigner::random());

    // Build a provider with MEV
    let provider = ProviderBuilder::new()
        .with_recommended_fillers()
        .wallet(tx_signer.clone())
        .on_http(eth_rpc.parse()?);

    // Pay Vitalik using a MEV-Share bundle!
    let tx = TransactionRequest::default()
        .from(tx_signer.default_signer_address())
        .to(Some(address!("d8dA6BF26964aF9D7eEd9e03E53415D37aA96045"))) // vitalik.eth
        .value(U256::from(1000000000));

    // Build a bundle...
    let bundle = SendBundleRequest {
        bundle_body: vec![provider.build_bundle_item(tx, false).await?],
        inclusion: Inclusion::at_block(provider.get_block_number().await? + 1),
        ..Default::default()
    };

    // ... and send it!
    let response = provider.send_mev_bundle(bundle, bundle_signer).await?;

    println!("Bundle hash: {}", response.bundle_hash);

    Ok(())
}

Blocks builders

This crate also contains the EthMevProviderExt extension trait that adds methods to broadcast bundles to blocks builders on yourprovider built on an HTTP transport.

#[tokio::main]
async fn main() -> Result<()> {
    dotenv().ok();
    let eth_rpc = env::var("ETH_HTTP_RPC").unwrap();
    let bundle_signer = PrivateKeySigner::random();
    let tx_signer = EthereumWallet::new(signer.clone());

    let provider = ProviderBuilder::new()
        .with_recommended_fillers()
        .wallet(tx_signer.clone())
        .on_http(eth_rpc.parse().unwrap());

    // Select which builders the bundle will be sent to
    let endpoints = provider
        .endpoints_builder()
        .beaverbuild()
        .titan(BundleSigner::flashbots(bundle_signer.clone()))
        .build();

    let block_number: u64 = provider.get_block_number().await.unwrap().into();

    // Pay Vitalik using a MEV-Share bundle!
    let tx = TransactionRequest::default()
        .from(tx_signer.default_signer_address())
        .to(Some(address!("d8dA6BF26964aF9D7eEd9e03E53415D37aA96045"))) // vitalik.eth
        .value(U256::from(1000000000));

    // Broadcast the bundle to all builders setup above!
    let responses = provider
        .send_eth_bundle(
            EthSendBundle {
                txs: vec![provider.encode_request(tx)],
                block_number: block_number + 1,
                min_timestamp: None,
                max_timestamp: None,
                reverting_tx_hashes: vec![],
                replacement_uuid: None,
            },
            &endpoints,
        )
        .await;

    println!("{responses:#?}");
}

Credits

alloy-mev's People

Contributors

leruaa avatar igorline avatar zerosnacks avatar

Stargazers

Joshua Cook avatar Sen Yang avatar  avatar go outside helper avatar Ennea8 avatar Zeke Mostov avatar Aliaksei avatar Jiachen Wang avatar  avatar slot1024 avatar 0xrusowsky avatar jpgonzalezra avatar izayl avatar YuKuang avatar advaith avatar  avatar Sigrid Jin (ง'̀-'́)ง oO avatar antonio avatar  avatar David Van Isacker avatar lcfr avatar soltheon avatar Nick avatar Micha Hernandez van Leuffen avatar omar avatar  avatar  avatar highskore avatar  avatar deltartificial avatar Neko-ryder Hirasawa avatar 0xmanny avatar Erhan avatar V.O.T avatar Vasiliy Yorkin avatar HAOYUatHZ avatar Georgios Konstantopoulos avatar Daniel wu avatar Mamy Ratsimbazafy avatar guzus avatar Hilliam T. avatar  avatar  avatar Michail Molfetas avatar  avatar Chi avatar morito avatar Aoi avatar Yadomin avatar Simon Pizonka avatar Kathy avatar ThreeHrSleep avatar Shun Kakinoki avatar  avatar  avatar 0xDmtri avatar Raphael Nembhard avatar s1cs avatar pistomat avatar  avatar  avatar Michael Demarais avatar Nymph avatar Dan Cline avatar Luca Provini avatar tesseract avatar

Watchers

 avatar  avatar

alloy-mev's Issues

unable to use `EthMevProdiferExt` when using `alloy-mev`

hey @leruaa, first of all thanks for building this crate! I'm sure it will be super helpful 🙂

I am trying to use it, but i seem to be unable to properly bring the EthMevProviderExt trait into scope. Despite following your docs and tests, the compiler is unable to link it with FillProvider, therefore giving me a warning for having an unused import (EthMevProviderExt) as well as an error because .endpoints_builder() is not found in FillProvider<...>.

Could you please let me know if i'm doing something wrong? I've set up a dummy repo where i try to replica one of your tests, so that you could see the imports and dependencies.

PS: I also tried forking your repo and running the tests and, as expected, they work.

Thanks in advance,

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.