Skip to main content

Eden Bundles

The Eden RPC supports sending bundles directly to Eden's network of block builders.

  • Endpoints:
    • Ethereum Mainnet: https://api.edennetwork.io/v1/bundle
    • Goerli Testnet: https://goerli.edennetwork.io/v1/bundle
  • Technical specification

Bundle Submission

If you are already familiar with bundle submission, send your bundles to the endpoint above. The endpoint supports:

{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_sendBundle",
"params": [
{
txs: string[], // List of signed transactions to execute in an atomic bundle
blockNumber: string, // Hex encoded block number for which this bundle is valid on
minTimestamp?: number, // (Optional) The minimum timestamp for which this bundle is valid, in seconds since the unix epoch
maxTimestamp?: number, // (Optional) The maximum timestamp for which this bundle is valid, in seconds since the unix epoch
revertingTxHashes?: string[], // (Optional) List of tx hashes that are allowed to revert
replacementUuid?: string, // (Optional) UUID that can be used to cancel/replace this bundle
}
]
}

About Bundles

Bundles are especially useful for Ethereum users who prefer to bypass the public mempool and optionally bundle multiple transactions together with various inclusion criteria. For example,

  • Searchers looking for fast, and risk free access to blockspace (for example, arbitrage and liquidation bot operators)
  • Users looking for frontrunning protection on their transactions (see also: Eden RPC)
  • Dapps with advanced use cases like account abstraction or gasless transactions (see also: Eden Bundler (ERC-4337))

Transactions submitted as bundles obtain pre-trade "privacy" or "confidentiality" as the transactions are not shared with the public mempool.

As such, for a bundle to be included, there is a sealed-bid auction for transaction inclusion with bids paid in gas, or direct eth transfer to the coinbase address.

Conditional Payments

Using direct payments instead of gas price allows users to make payments conditional on their transaction succeeding, thus avoiding having to pay for failed bids.

Example Bundle

Bundles consist of one or more transactions that are executed in the order they are provided.

Consider a searcher who wants to backrun a transaction from the mempool in the next block. They create a signedBundle consisting of:

  1. Target tx: SIGNED_ORACLE_UPDATE_FROM_PENDING_POOL
  2. Backrun tx: transaction

The signedBundle is then submitted using the next block as the targetBlockMumber.

const signedBundle = flashbotsProvider.signBundle(
[
{
signedTransaction: SIGNED_ORACLE_UPDATE_FROM_PENDING_POOL // serialized signed transaction hex
},
{
signer: wallet, // ethers signer
transaction: transaction // ethers populated transaction object
}
])
const bundleReceipt = await flashbotsProvider.sendRawBundle(
signedBundle, // bundle we signed above
targetBlockNumber // block number at which this bundle is valid
)
)

Quick Start Guide

Quick Start Guide for Searchers