Skip to content

Latest commit

 

History

History
81 lines (57 loc) · 2.49 KB

README.md

File metadata and controls

81 lines (57 loc) · 2.49 KB

mev-bundle-submitter

npm version

This npm package submits given bundles to all known builders in the Ethereum builder space.

Installation

Using npm, do the following:

npm install --save mev-bundle-submitter

Example

You can find a usage guide in tester.js. Simply replace the placeholders with your bloxroute token, the Ethereum Mainnet Json RPC provider with your URL or API key from Chainnodes, your bundle transactions (raw transaction strings) with your own and a current or near future block number.

Configuration

The only required argument in the constructor is provider. So the below is a minimal example:

import { ethers } from "ethers";
import { MEVBundleSubmitter } from "mev-bundle-submitter";

const submitter = new MEVBundleSubmitter({
  provider: new ethers.providers.JsonRpcProvider(
    "https://mainnet.chainnodes.org/api_key"
  ),
});

If the optional parameter bloxrouteAuth is set, submitToAll will also send to BloXroute.

If the optional parameter authSigner is set, it will be used to sign the bundles (instead of a random Wallet).

A full example can be seen below:

import { ethers, Wallet } from "ethers";
import { MEVBundleSubmitter } from "mev-bundle-submitter";

const submitter = new MEVBundleSubmitter({
  bloxrouteAuth: "BloxRoute_Token",
  provider: new ethers.providers.JsonRpcProvider(
    "https://mainnet.chainnodes.org/api_key"
  ),
  authSigner: new Wallet("0xprivate_key"),
});

Usage

After creating the instance MEVBundleSubmitter, you can call submitToAll as many times as you wish.

The only required parameter is bundle, which includes raw transactions and a block number to submit for.

Optionally you can set exclude, to exclude an array of builders, and customBuilders to add a list of custom builders.

A full list of included builders can be seen by calling MEVBundleSubmitter.allBuilders or checking the index.js.

Full example:

const instanceOfFlashbotsBundleProvider = await FlashbotsBundleProvider.create(...);

const response = await submitter.submitToAll({
  bundle: {
    transactions: ["0xmempooltx", "0xraw_tx"],
    blockNumber: BigInt("15000000"),
  },
  exclude: ["beaver", "rsync"],
  customBuilders: {
    my_custom_builder1: instanceOfFlashbotsBundleProvider,
    my_custom_builder2: { url: "https://a-good-builder.com/bundles" }
  }
});