Transaction Bundles
How to submit Transaction Bundles
Searchers can post transaction bundles to Ethereum using a familiar format.

FlashBots Compatible

Eden Relay is API-compatible with FlashBots Relay, making it straight-forward for you to submit transactions as a searcher within the FlashBots ecosystem.
We encourage searchers to submit to many endpoints, including Eden Relay. Eden Relay combines, augments and forwards bundles to different client types. The benefits for searchers are:
    Exclusive hashrate
    Smart forwarding
    Bundle merging and augmentation
    Get more bundles included in blocks
    Redundancy for more reliable transaction submission

Request Format

Method: POST
Headers:
1
X-Flashbots-Signature = "0x123...:0xabc..."
2
Content-Type = "application/json"
Copied!
Eden Relay requires all payloads to be signed with an ethereum wallet. See Authentication, below.
Body:
1
{
2
"jsonrpc": "2.0",
3
"id": 1,
4
"method": "eth_sendBundle",
5
"params": [
6
txs, // Array[String], A list of signed transactions to execute in an atomic bundle
7
blockNumber, // String, a hex encoded block number for which this bundle is valid on
8
minTimestamp, // (Optional) Number, the minimum timestamp for which this bundle is valid, in seconds since the unix epoch
9
maxTimestamp, // (Optional) Number, the maximum timestamp for which this bundle is valid, in seconds since the unix epoch
10
revertingTxHashes, // (Optional) Array[String], A list of tx hashes that are allowed to revert
11
]
12
}
Copied!
    txs: Array[String], A list of signed transactions to execute in an atomic bundle
    blockNumber: String, a hex encoded block number for which this bundle is valid on
    minTimestamp, optional: Number, the minimum timestamp for which this bundle is valid, in seconds since the unix epoch
    maxTimestamp, optional: Number, the minimum timestamp for which this bundle is valid, in seconds since the unix epoch
    revertingTxHashes, optional: Array[String], A list of tx hashes that are allowed to revert
Example:
1
{
2
"jsonrpc": "2.0",
3
"id": 1,
4
"method": "eth_sendBundle",
5
"params": [{
6
"txs": [
7
"0x123abc...",
8
"0x456def..."
9
],
10
"blockNumber": "0xb63dcd",
11
"minTimestamp": 0,
12
"maxTimestamp": 1615920932,
13
"revertingTxHashes": ["0xb5c8bd9..."]
14
}]
15
}
Copied!

Authentication

Each request must include a signed payload in the header.
The signature is calculated by taking the EIP-191 hash of the json body encoded as UTF-8 bytes. Here's an example using ethers.js:
1
wallet = ethers.Wallet.createRandom()
2
wallet.signMessage(ethers.utils.id(body))
Copied!
Concatenate the ethereum address of the signer, a colon :, and the signed message. Include the output in the X-Flashbots-Signature HTTP header like so:
1
X-Flashbots-Signature: 0x95c622A2c597a8bdC26D371Dd3D57dA9D26052DF:0xc73d4790fed41954869625c159a4617e3374019839a8ad72de15e41371719d6873c780e00293fcdc100aa505f33dd8480e7b07551483c8c438fe8236972d26ca1c
Copied!
Note: the signer does not have to be related to the signer of your actual transactions.
Last modified 2mo ago