-
Notifications
You must be signed in to change notification settings - Fork 989
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
Apply proposer boost to first block in case of equivocation #3352
Conversation
I haven't read the attack yet and I'm not an expert in this field, but it's quite cleaner to set @adiasg what do you think? |
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.
While other existing solutions may provide a better long term fix, this patch is way better than status quo
I agree with setting the |
I added a test case today to verify the modification. What's the status of this PR? Do we need a security analysis to verify if clients can update it uncoordinatedly or not? |
This change does not need coordination. If a malicious proposer makes multiple proposals, it may cause attesters from that slot to be split between those blocks - but as long as the next proposer is honest, everyone's fork choice will converge again. For a prolonged attack, the attacker needs to control many proposers in a range of slots. Additionally, exploiting this requires the attacker to bear some slashing. |
@hwwhww I agree with Aditya that this is safe to roll out gradually. Thank you for writing the test 😊 I also think the idempotence concern from my OP is taken care of by the current impl: if the same block is re-applied to fork choice then it won't set the proposer boost again, but the proposer boost should already be set to this block from the first time it was applied. |
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 adjustment looks good to me. What do you think about bringing it to ACDC so we can merge it properly?
Any reason to not merge this PR? All clients have this logic incorporated for multiple months, spec should reflect reality unless there's a strong security consideration This was brough up on ACDC 115, with notes ethereum/pm#844 (comment)
|
@dapplion I agree we should merge! |
Implement spec changes to fork choice; this only affects equivocation when multiple blocks are signed for the same slot. Regular operation is not changed. - ethereum/consensus-specs#3352
* implement EIP-7514 for Deneb: Add Max Epoch Churn Limit Cap activations per epoch according to EIP-7514: - https://eips.ethereum.org/EIPS/eip-7514 - ethereum/consensus-specs#3499 * apply proposer boost to first block in case of equivocation Implement spec changes to fork choice; this only affects equivocation when multiple blocks are signed for the same slot. Regular operation is not changed. - ethereum/consensus-specs#3352 * bump test vectors to v1.4.0-beta.2-hotfix --------- Co-authored-by: tersec <[email protected]>
This PR modifies
on_block
so that it awards the proposer boost to the first block processed rather than the last block processed. This would cleanly mitigate the RPC unbundling attack described in this post: https://lighthouse-blog.sigmaprime.io/mev-unbundling-rpc.htmlBecause clients already exhibit a variety of behaviours in this case due to their attestation strategy and handling of RPC blocks, we might be able to roll this change out without a hard fork. If some clients implement the change while others do not, the worst case is that views may be split in the case of an equivocation, which can happen anyway.
Alternatives:
TODO:
on_block
should be idempotent if called again with the same block