6

So far, I only understand flashbot bundles are signed raw transactions with one of them being a bribe to the miner for the mining fee, but :

  • Is the bribing transaction special in the way it is valid for all all block.coinbase being used or is it valid only for a single miner? If yes, how do I build and sign such special formated bribing transactions?
  • In order to determine the gas price for standard/mempool transactions, there’s https://ethgasstation.info/, but how to compute the minimal amount for the bribe being sent to block.coinbase which would allow getting the bundle mined into a reasonable timeframe? I’m asking this in general and without considering competition because I imagine miners won’t accept transaction which doesn’t pay more than gas price and that the price to be paid isn’t flat in the way the amount of gas consumed still matters.
  • Since I’m not running my own node, how I can build such transaction bundles from my signed rawtransaction list, and how to submit them to the flashbots relay without running my own node once they are built into the correct binary format? Something which is not explained by https://github.com/flashbots/pm/blob/main/guides/searcher-onboarding.md
  • If I create my own mining pool, how can I receive flashbot transaction? Is there a place where I need to subscribe?

My interest, here isn’t to create transaction bundles since there’s a single transaction to perform in the case I’m interested in, but to get that transaction being mined first since flashbot transactions are mined at the beginning of the block (frontrunning transactions still using the mempool). And with the point that nobody is using flashbots yet.
Though I understand that I need to create a bundle of at least 2 transactions though since one of them must be for the miner.

2
  • I am trying to serialize the exiting tx from mempool to hex, but I can't. What library are you using for this objective? Sep 14, 2021 at 18:03
  • @MarianoGermanVillarrealKube they are already serialized. You need to get rawtransaction from the mempool. Sep 15, 2021 at 21:23

1 Answer 1

3

The official flashbots searcher onboarding guide is a good source to get started.

  • block.coinbase in Solidity refers to the miner of the current block. You can use the ethers.js flashbots bundle provider to bundle your transactions with a final call to the Flashbots "CheckAndSend" contract. That way, the miner will only be rewarded, if the previous transactions of your bundle were successful. (The miner will not include your bundle, if he doesn't get rewarded.)

  • The flashbots bribe is independent from the current gas price. You're competing with the bribes of other flashbot searchers. Currently MEV geth only allows for the inclusion of one flashbots bundle per block (but this may change soon). Generally speaking, the less alpha, the higher the bribe. Meaning, if you intend to be running widespread simple arbitrage code, consider bribing with 99% of the arbitrage profit, to get your bundles mined at all (hopefully).

  • Unless you have private connections to miners with significant hash rate, you'll probably want to use (and trust) the official flashbots relay, which is also used in the ethers.js flashbots bundle provider. Check this example from its readme:

// Using the map below ships two different bundles, targeting the next two blocks
const blockNumber = await provider.getBlockNumber()
const minTimestamp = (await provider.getBlock(blockNumber)).timestamp
const maxTimestamp = minTimestamp + 120
const bundlePromises = [blockNumber + 1, blockNumber + 2].map((targetBlockNumber) =>
  flashbotsProvider.sendBundle(
    [
      {
        signedTransaction: SIGNED_ORACLE_UPDATE_FROM_PENDING_POOL // serialized signed transaction hex
      },
      {
        signer: wallet, // ethers signer
        transaction: transaction // ethers populated transaction object
      }
    ],
    targetBlockNumber, // block number at which this bundle is valid
    {
      minTimestamp, // optional minimum timestamp at which this bundle is valid (inclusive)
      maxTimestamp, // optional maximum timestamp at which this bundle is valid (inclusive)
      revertingTxHashes: [tx1, tx2] // optional list of transaction hashes allowed to revert. Without specifying here, any revert invalidates the entire bundle.
    }
  )
)
9
  • Generally speaking, the less alpha, the higher the bribe I was meaning what the bribe amount should be if there’s no pending flashbot transactions? it can’t be cheaper than paying it by gas right? I edited my question to reflect this. May 7, 2021 at 22:28
  • Thank you but I know what block.coinbase is. But my question is how I should create the bribe on that point since as far I understand, it needs to be valid for all block.coinbase. May 7, 2021 at 22:32
  • you'll probably want to use (and trust) the official flashbots relay. But every example I saw including yours requires running a full node. May 8, 2021 at 9:17
  • Responding to your comments: 1) The minimum bribe should be the gas used times a gas price that allows for inclusion in the respective block. 2) I don't get what you mean. Maybe you can rephrase your question with more details. 3) No, it doesn't require running a full node. Why would you think that?
    – pwagner
    May 8, 2021 at 13:03
  • I think I understand now, do you mean that paying the bribe is best done through using a contract? May 8, 2021 at 13:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.