protecting and empowering the Ethereum community against frontrunning and censorship
The zeromev system consists of four main components authored in C# .NET Core.
|extractor service||records the arrival time of pending transactions|
|classifier service||detects, classifies and quantifies instances of MEV|
|api server||provides compact MEV data to the web client|
|web client||single page application drawing data from the api server and third parties|
See here to review changes to our data and methodology over time.
We recommend reading our data sources & limitations document.
The extractor service is designed to run locally on full Ethereum nodes which it connects to via both RPC and Websockets.
As soon as a pending transaction is seen for the first time through the websocket subscription, it is timestamped and recorded in a centralized database along with the location id of the server.
The extractor service also captures data from the Flashbots blocks api which is stored in compressed form in the same database.
Our systems currently run the extractor service alongside the official Ethereum protocol implementation geth in three geographically distributed locations (Europe, Asia and the US). An additional server connects to Infura and is hosted close to their servers.
Arrival timestamps have been captured since block 13358564 (Oct-05-2021). Transactions are tracked for a maximum of 14 days from first seen to block inclusion time.
The classifier service is designed to extract MEV data and write it in compressed form ready for the web client as well as in summary form for analysis.
The classifier keeps track of tick level price data for each Ethereum token parsed from Uniswap v2/v3 swap details exported by mev-inspect-py.
Arbitrages and liquidations are sourced directly from Flashbots mev-inspect-py running against erigon full archive nodes, but with dollar exchange rates for these instances recalculated using the exchange rate data above at block granularity. As such they may differ in results from those found in the mev-inspect-py mev summary table and mev-explore.
Sandwiches are recreated internally using methods modified from the mev-inspect-py code and with sandwich profits recalculated according to zeromev’s research Estimating Sandwich Attack Profits And User Losses as mev-inspect-py has outstanding issues in this area. Sandwich dollar exchange rates are calculated at tick granularity using the method above.
Because of zeromev’s reliance on mev-inspect-py for detection, much of the information from the mev-explore data & metrics page applies here.
The classifier also sources token details from ethplorer.
The output of the classifier is compressed json written to a database.
The api service takes data from both the extractor and classifier databases for a given block and serves it in json format to the web client.
The web client is a single page application written in Blazor WASM. It sources data from the zeromev api server, infura, etherscan and ethplorer.
Our credit and thanks go to the following organizations technologies that support the zeromev site and it’s systems