Proposer MEV-Protect

Register exclusively with a bloXroute relay in return for a guaranteed 80% of block value

Currently on Ethereum, proposers either take the most favorable block they are given by the relays, or offer a self-made block. By default, there is generally nothing stopping builders from keeping as much block value as they can for themselves, as long as other builders provide less favorable blocks. To overcome this, bloXroute relays offer the option for proposers to refuse blocks that offer less than 80% of the block value to the proposer. This means that the validator will only be served blocks where the validator is entitled to over 80% of block profit. In addition to this, these blocks must include a 2% payment to the relay the block is submitted to.

This feature can only be activated when using a subset of relays that will guarantee to reject blocks that don't meet the 80% rule. Currently the bloXroute relays are the only relays that offer that but we expect other relays to follow. This feature is based on the paper discussed in the paper "Decentralizing Monopolistic Power in DeFi" by Sarit Markovich. If the validator registers with any non-supporting relay then a builder will not be forced to pay at least 80% of the block value if the builder can make the winning block with 50% payment.

The more validators opt to use the Proposer MEV-Protect feature, the more builders and relays will support it as well.

Validators

In order to utilize this feature, a validator must only register with a subset of relays that offer this feature, currently just bloXroute relays. Once you have ensured that your validator is not registering with any non supporting relay, add a query parameter proposer_mev_protect=true to the relay URLs you use to connect with bloXroute relays. These are the URLs that are passed in with the -relays flag. For example:

https://0x8b5d2e73e2a3a55c6c87b8b6eb92e0149a125c852751db1422fa951e42a09b82c142c3ea98d0d9930b056a3bc9896b8f@bloxroute.max-profit.blxrbdn.com?proposer_mev_protect=true&id=validator-name would be one of the bloXroute relays getting passed into -relays flag in mev-boost.

Builders

As a builder, in order to submit blocks for slots protected by MEV-Protect, there are a couple of steps that must be taken.

Tracking which slots are protected by MEV-Protect

When querying the validator data from the relay endpoint

/relay/v1/builder/validators

the builder receives a JSON array of GetValidatorRelayResponse objects.

type GetValidatorRelayResponse []struct {
	Slot  uint64 `json:"slot,string"`
	Entry struct {
		Message struct {
			FeeRecipient string `json:"fee_recipient"`
			GasLimit     uint64 `json:"gas_limit,string"`
			Timestamp    uint64 `json:"timestamp,string"`
			Pubkey       string `json:"pubkey"`
		} `json:"message"`
		Signature string `json:"signature"`
	} `json:"entry"`
	ComplianceList      string `json:"compliance_list"`
	EnforcedProfitRatio uint64 `json:"enforced_profit_ratio"`
}

The enforced_profit_ratio 64-bit unsigned integer represents the percent of the block value required to be given to the proposer in the block.

Building MEV-Protect compliant blocks

In order for a block to be valid as an MEV-Protect block, it must meet the proposer profit threshold for that block which is 80%, as represented enforced_profit_ratio. Note that slots not protected by MEV-Protect will have an enforced_profit_ratio value of 0. The enforced_profit_ratio 64-bit unsigned integer represents the percent of the block value required to be given to the proposer in the block. The block value is determined by the amount of Ether received by the coinbase of the block, either through gas fees or direct payments.

The builder must also send a payment to the relay of at least 2% of the total block profit. For any bloXroute relays, the recipient address of this payment should be:

0x367DB1AD831E4284ab1381EE6EeC81Eae6BD94a0

Submitting MEV-Protect compliant blocks

When submitting a block to a bloXroute relay, for a slot protected by MEV-Protect, you must signal that the block is an MEV-Protect block in order to maintain optimistic relaying.

  • When submitting via HTTP: attach a proposer-mev-protect header, with the value set to true.

  • When submitting via websocket: attach a proposer-mev-protect header, with the value set to true.

  • When submitting via gRPC*: you must set the ProposerMevProtect field of the SubmitBlockRequest struct to true.

*Note: the code required to use gRPC with bloXroute relays is publicly available at https://github.com/bloXroute-Labs/relay-grpc

Last updated