We are now testing a frequently requested feature - bundle cancellations!
Bundles can be cancelled explicitly through a new method - eth_cancelBundle
, or they can be replaced via eth_sendBundle
.
If you wish to be able to cancel your bundle, provide a uuid with your eth_sendBundle
request via the new optional userUuid
field. When you pass the same uuid to the eth_cancelBundle
call, your bundle will be cancelled. If you send us a new bundle via eht_sendBundle
with the same uuid, the new bundle will replace your previous one.
Connect to our builder on Goerli at https://relay-goerli.flashbots.net/ or on Sepolia at https://bundle-relay-sepolia.flashbots.net and try it out.
All feedback welcome. userUuid
is not final!
New eth_sendBundle
optional field userUuid
The new field should be a uuid-formatted string. While you should keep the userUuid
secret, just knowing the uuid (or knowing how to generate the same uuid) is not enough to cancel it.
{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_sendBundle",
"params": [
{
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
userUuid, // (Optional) uuid-formatted String, used to replace previous bundles
minTimestamp, // (Optional) Number, the minimum timestamp for which this bundle is valid, in seconds since the unix epoch
maxTimestamp, // (Optional) Number, the maximum 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
}
]
}
New eth_cancelBundle
call
The call accepts a list of userUuid
s to be cancelled.
{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_cancelBundle",
"params": [
{
userUuid // uuid-formatted String, all bundles provided with that uuid will be cancelled
}
]
}
Guarantees
This is a best-effort feature.
However, we will try to make either true:
- the block sent to relays will not contain cancelled bundles, or
- the block will contain the cancelled bundle, but no transactions or bundles more recent than the bundle cancellation
The bundle is considered cancelled once either the eth_sendBundle
or eth_cancelBundle
returns 200
.
In case of degraded service performance, we will try to not include any cancellable (providing userUuid
) bundles.
Technical notes
- The uuid should be unique with regards to the block number. Sending a bundle with the same uuid for multiple blocks will result in replacing all but the last one.
- Cancelling a bundle before
eth_sendBundle
returns is undefined behavior, there be dragons - This feature is greatly improved by relay-level cancellations, see https://collective.flashbots.net/t/announcing-mev-boost-relay-v0-11-0-notable-feature-block-submission-cancellations/604 - the blocks not containing previously cancelled transactions will be replaced at the relay regardless of profit