Top Ethereum Bot Gas Auctions - More MEV
0x10D2
Draft

Intro

This is really more like “notes” and less like proper “analysis”. Please take it as such. At this point, I thought posting something was > posting nothing. I am doing other work and not intending to make some great analysis happen here for public consumption. The usual disclaimers; this post is not rigorous. It may have errors or misunderstandings, etc. It is mostly to give a flavour of gas auctions as they stand today.

I think there is a perception that since Flashbots “why would you have gas auctions?”. They are still a very popular activity with top bots often ranking highly on the etherscan gas guzzlers report.

Of course, The “Flashboys 2.0” paper (Daian et al) is the seminal work in this space.

Let’s dive in…

Why gas auctions?

As @mikedemarais asks here..

My (entirely non-comprehensive!) comments in turn:

@0x9212ce55 covers why they don’t like Flashbots auctions in some detail.

Flashbots is an important and great part of the ecosystem. They are doing great and important work. Flashbots has already gone a huge way towards making the Ethereum ecosystem stronger and better. That said, there are still other means to transact on Ethereum today.

That lightly touches on “why gas auctions”.

What” are gas auctions? Simply put, from the Flashboys 2.0 paper:

In Ethereum, the PGA game we observe consists of transactions issued with the same (account, nonce) pair, expressing a bid to a miner, where the miner is paid gas fees ... We call this interaction of issuing repeated bids a priority gas auction, or PGA.

Please see the original work for any clarification.

What will we look at?

There are various ways you could look at gas info, I’ve just focussed on maxPriorityFeePerGas with type 2 transactions. This post focuses on type 2 transactions. (One could also look at the maxFeePerGas but I’ll not plot for now). These plots are all from 1 day of pending transaction and block data. I have looked at a lot more than 1d of transactions and 1d is representative.

It is worth mentioning that all is not necessarily what it appears as. Recall that this is all a distributed set of nodes with their local view of the distributed transaction data. The pending transaction data in “this node” is not the same as the data where the block was mined, or where your nodes may be located. A more comprehensive analysis and dataset needs to have a much better distributed node set, good clock sync, etc.

My recording node is certainly not optimally setup for the peer-to-peer network. For the top competitors, theirs surely are. You can see that participants must have different views/ ordering/ etc that make their actions rational, but may appear odd in these plots.

After junk filtering, here are the top 5 bot addresses by pending transaction count in my recording node.

Top contracts based on pending transactions in my recording node
Top contracts based on pending transactions in my recording node

For each of these 5 bots, we find times when they update the same EOA/nonce many times in the transaction pool. Then we see who else is cycling at the same time. Note that for the plots in these analyses, we do not looking at the transaction content to see what competing for specifically.

How to read these plots:

  • Title: “Target contract” address which is the subject of the plot, the EOA for that contract, time duration of the episode.
  • Legend:
    • [Contract address] [EOA] nonce, #updates in this period
    • The “+” rows are the same, but identifying the "winning transaction” which lands @ block. (“target” | “fighter” | “alt nonce”) are who won. The “target” is the contract/ EOA pair in the title. The (poorly labelled) “alt nonce” is the same contract with an EOA/nonce which is not the target EOA (seen in the title) for a given plot. A “fighter” is a contract/EOA competitor contract.

Some Examples

Example 1: Normal/Simple

Here is what a normal, simple competition looks like. Start by “focussing on contract [0x000...2D4] and the top EOA (by EOA/nonce update) for that contract in this period [0x5EB..c82]. This episode lasts ~3.8 seconds. The target contract wins in block 14333596 after 19 updates. The second most involved bot updated 16x.

Most look like this.
Most look like this.

A similar simple example a few minutes ~90 blocks earlier with the same competitors. These are reasonably low-tip conclusions in both simple examples.

Or this
Or this

Example 2: Odd auction pauses

An odd but recurring pause pattern seems to happen, for reasons unknown. I might guess this occurs when the overall fee is relatively high (>1k in this plot, up to 3k).

These two contracts are clearly cycling with one another, so perhaps this is simply dominated by one bots behaviour and the other follows, so the “pattern” is really due to one bot. Unsure.

Common accelerate, pause, go, pause
Common accelerate, pause, go, pause

Example 3: One party continues well after block completion time

In my node, it looks like one party continues to bid after the other party has won/ block is done. Recall that we all have different localised views in our nodes and who knows what the other parties saw. It is reasonable to conclude the ‘blue dots bids’ were rational to them, on data which was delayed relative to the miner. (Or, perhaps, I misunderstand something.)

Bidding after it is lost (they didn't see it yet)
Bidding after it is lost (they didn't see it yet)

Relatedly this one looks like the block was completed, but both competitors kept sending transaction with higher bids. Same story as above, who knows what each party saw in their nodes.

They would have paid more gas
They would have paid more gas

Example 4: Other winners

Here are some examples where, for the given target contract/ EOA, other EOAs (which I’ve poorly named “alt nonce” in the legend) from the same contract owner act and win transactions in the same block.

You can also see winners from other bots during the same block.They are almost surely going after different opportunities in several of those cases. Recall that I’ve not done content inspection for these plots (i.e.; are they both bidding for swap ABC:XYZ).

IMO these were interesting because they show how active these bots can be when considering multiple opportunities/ EOAs in the same pre-block period.

Other winners
Other winners

A busy example, clearly going after multiple opportunities that should land in the same block.

Busy other winners
Busy other winners

Another busy example

Busy period
Busy period

This plot is ‘too busy’ but shows 1 bot dominating several independent transactions/ opportunities. Again, these are surely several different swaps/ transactions each with their own competition and conclusion

Lots of winning for one party
Lots of winning for one party

A comparison of bot tip distributions

Here is a plot showing the (log) distribution of the top bots ‘tip’ rates. This plot is dominated by higher transaction count bots, but you can get the sense for the distributions.

(log) gas max priority fee per gas distribution by contract
(log) gas max priority fee per gas distribution by contract

There were several other plots but none were that great, so I chose just this 1 mediocre plot to share.

An aside: Etherscan is cool:

When a transaction is pending with multiple transactions per EOA/nonce, they will show you this:

Etherscan
Etherscan

Which will link to each shown below. Note the consecutive “max” and “max priority” values.

Pending #1

Etherscan
Etherscan

Pending #2

Etherscan
Etherscan

Pending #3

Etherscan
Etherscan

You can see the increasing values as the auctions happen (although typically it is very fast and code is much easier to see). Etherscan is cool.

Concluding

There are plenty more interesting things one could continue to do:

  • A study on all-in-costs with reverts for lost auctions.
  • A study with proper content inspection (what exact transactions are they competing for).
  • More nodes/ better P2P network setup,
  • etc.

That, however, is the end of this post-tangent. I hope that this at least provides some light entertainment, chart-porn and a glimpse into the current state of gas auctions on Ethereum. I sense this could have merely been a tweet-thread, but alas - the post is typed…

Any thoughts, complaints, clear errors or misunderstandings, please ping me @totlsota on twitter.

Ethereum Address
0x10D2e3d5D76154C985eD15241BC885E284c88829
Content Digest
Vy8-41kYphcFt40rh8SpFsDojwlwGBGkWCafqD4nTak