-
Notifications
You must be signed in to change notification settings - Fork 271
Milestone 2 spec #34
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Milestone 2 spec #34
Conversation
| - consensus client must implement [blind transaction signing](https://hackmd.io/@paulhauner/H1XifIQ_t#Change-1-Blind-Transaction-Signing) | ||
| - consensus client must implement [proposal promises](https://hackmd.io/@paulhauner/H1XifIQ_t#Change-2-Proposal-Promises) | ||
| - in event of mev-boost crash, consensus client must be able to bypass the middleware to reach a local or remote execution client | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
consensus client must implement consensus_getfeerecipientsv1 no?
|
|
||
| - `payloadHeader`: [`SignedMEVPayloadHeader`](#signedmevpayloadheader) - the invalid payload header signed by the offending relay. | ||
| - `payload`: [`ExecutionPayloadV1`](https://github.com/ethereum/consensus-specs/blob/v1.1.6/specs/merge/beacon-chain.md#executionpayload) - the invalid payload revealed to the network. | ||
| - `block`: [`SignedBlindedBeaconBlock`](#signedblindedbeaconblock) - the invalid beacon block signed and proposed by the validator. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe I'm missing something... What is SignedBlindedBeaconBlock useful for?
|
Hi!
|
| mev_boost->relays: relay_getValidatorStatusV1 | ||
| ``` | ||
|
|
||
| 1. on startup, mev-boost requests a list of [`AuthenticatedFeeRecipient`](#authenticatedfeerecipient) from the consensus client using a new [`consensus_getFeeRecipientsV1`](#consensus_getfeerecipientsv1) method. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
IMO this should be an mev-boost endpoint which consensus clients must POST to, something like builder_updateFeeRecipientsV1. I don't think this API should be made bidirectional if possible. Other endpoints in the builder API should respond with a specific status code if it doesn't yet have a suggested fee recipient. If a consensus client ever receives a payload header from mev-boost with an incorrect suggested_fee_recipient, they can update it with another call to builder_updateFeeRecipientsV1
Missed this when I was reviewing! but had similar thoughts here: #34 (comment) |
| 4. mev-boost must verify the signature and the merkle proof of the [`SignedMEVPayloadHeader`](#signedmevpayloadheader) received to ensure the signature matches the BLS key associated with the IP of the relay, has a matching `payloadId`, and has a valid fee recipient payment. | ||
| 5. upon receiving a [`builder_getPayloadHeaderV1`](#builder_getpayloadheaderv1) request from the BN, mev-boost must return the [`ExecutionPayloadHeaderV1`](https://github.com/ethereum/consensus-specs/blob/v1.1.6/specs/merge/beacon-chain.md#executionpayloadheader) with the highest associated `feeRecipientBalance` and terminate the polling cycle. If no eligible payload is received from a relay, mev-boost must request and return a payload from the local execution client using [`engine_getPayloadV1`](#engine_getpayloadv1). | ||
| 6. the BN must use the [`ExecutionPayloadHeaderV1`](https://github.com/ethereum/consensus-specs/blob/v1.1.6/specs/merge/beacon-chain.md#executionpayloadheader) received to assemble and sign a [`SignedBlindedBeaconBlock`](#signedblindedbeaconblock) and return it to mev-boost using [`builder_proposeBlindedBlockV1`](#builder_proposeblindedblockv1). | ||
| 7. mev-boost must forward the [`SignedBlindedBeaconBlock`](#signedblindedbeaconblock) to all connected relays and attach the matching [`SignedMEVPayloadHeader`](#signedmevpayloadheader) using [`relay_proposeBlindedBlockV1`](#relay_proposeblindedblockv1) to inform the network of which relay created this payload. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This seems like a big hole in the security of the validation/reputation system. If we want to be able to determine when a malicious relay delays or withholds sending its ExecutionPayloadV1, we have to rely on mev-boost delivering the SignedMEVPayloadHeaders to all relays in a timely manner. Timing then becomes a huge edge case, since it will be impossible to tell if the relay is delayed vs the validator is delayed, or if either party lies.
|
@thegostep could you remove the changes to README and milestone1 from this PR, to make it more focused? (I could also update it if you'd prefer) |
Codecov Report
@@ Coverage Diff @@
## main #34 +/- ##
=======================================
Coverage ? 59.48%
=======================================
Files ? 8
Lines ? 701
Branches ? 0
=======================================
Hits ? 417
Misses ? 221
Partials ? 63
Flags with carried forward coverage won't be shown. Click here to find out more. Continue to review full report at Codecov.
|
|
As a heads-up - we're planning to close this PR and move the discussions into issues. This will go into future versions v0.3+ |
No description provided.