Possible monitoring design in case of using MEV-boost for MEV extraction.
MEV-Boost is used by validators to delegate block building to third-party software. It polls relays and fetches from them variants of the suggested payload and the value that could be extracted by using this payload. The payload with the maximum value is selected and included to a block.
Relays are used by MEV-Boost to get built blocks. In the monitoring design we assume that relays provide a method, which returns the list of payloads and values that were suggested to a validator for a slot. The method has not yet been implemented, but we are discussing the possibility.
The monitoring service inspects the operation of the validators and collects data on how many value were extracted from each block, a source of the payload, a recipient of value and other metrics.
The service regularly checks the availability of the white-listed relays, fetches suggested payloads from them and stores this information to a database. The inspector service then compares these payloads with what is included in the block by the validators.
The service fetches the finalized epochs one by one and inspects them:
The service fetches information about the slot, inspects it and return the result and collected data. The service does the following inspections:
Service inspects whether a block is proposed in the slot.
The service calculates transaction_root
based on the list of transactions in the block and looks for such a root in the list of payloads suggested for this slot by relays.
If a match is found, we can say that the payload is suggested by one of the relays from the white-list. Otherwise we expect that the relays are not available and the local payload is used. Or the validator intentionally uses a different payload for its own purposes.
The service inspects:
fee_recipient
and Lido MEV Vault addresses.We need to separate balance changes by block rewards from third-party transactions, such as withdrawals. This will probably require a node with the trace module enabled or a third-party API such as Etherscan.
For the Lido MEV Vault, we can track withdrawals by event, but for builder it's more difficult to do so.
The service inspects the fee_recipient
address and expects one of the following values:
Builder address is expected in the case of using a payload from MEV-Boost. In this case, the block must include a transaction to transfer the validator reward to the Lido MEV Vault address.
Lido MEV Vault address is expected in the following cases:
Unknown address is expected in the following cases:
The results of the inspection are stored in the database and used for further analysis, visualization and alerts.
As a result, the following data are collected for each slot:
Based on this data, the following analysis can be done:
In some cases, it is not immediately possible to detect obvious malicious behavior of a validator, since it's always possible that all relays are unavailable and the validator has to build a block using a local payload. But in large samples it's visible if validators of one of the node operators have regular misbehavior.
A summary table of possible conclusions based on the collected data.
Tx | Known payload | Unknown payload | ||
---|---|---|---|---|
FR | Lido vault | + | 😵💫 Could be a misconfiguration of the builder | |
− | 🧐 Builder don't charge a commission | 🧐 Local payload or unknown source is used | ||
Another | + | 👍 Most expected option | 🧐 Unknown source is used | |
− | 😱 Rewards collect to the wrong address |
The table contains many assumptions and does not take all data into account. For example, payment in a transaction may be less than promised; monitoring may not have all of suggested payloads for a slot; payloads with a larger value may be suggested.
The real analysis will require more detailed investigations.