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
EIP-7547: Inclusion Lists #3617
base: dev
Are you sure you want to change the base?
EIP-7547: Inclusion Lists #3617
Conversation
Co-authored-by: terence <terence@prysmaticlabs.com>
Co-authored-by: terence <terence@prysmaticlabs.com>
Co-authored-by: terence <terence@prysmaticlabs.com>
Co-authored-by: terence <terence@prysmaticlabs.com>
Co-authored-by: terence <terence@prysmaticlabs.com>
e25d0f3
to
6dc2894
Compare
- _[REJECT]_ The slot `message.signedSummary.message.slot` is the current slot. | ||
- _[REJECT]_ The `signature` is valid for the current proposer `message.signedSummary.message.proposer_index`. | ||
- _[REJECT]_ The `message.signedSummary.message.parent_hash` is not the current head. | ||
- _[REJECT]_ The inclusion list transactions `message.transactions` length is within upperbound `MAX_TRANSACTIONS_PER_INCLUSION_LIST`. |
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 feels more like an EL responsibility
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.
ill remove the parent hash one. i think the other stuff feels like CL side verification, no ?
|
||
```python | ||
class SignedInclusionList(Container): | ||
message: InclusionList |
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.
Wondering about the usefulness of having a signed container for InclusionList
.
The DoS potential here if we propagate an InclusionList
instead of a SignedInclusionList
is that an attacker can send multiple valid spam objects by changing the transactions
field in the InclusionList
.
However, given that as a node, I need to have just seen a valid InclusionList
object for a slot, I can safely ignore new InclusionList
objects that have the same SignedInclusionListSummary
and not process or forward them over the network
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.
no strong opinion on this, will ask potuz
children = [ | ||
root for (root, block) in blocks.items() | ||
if block.parent_root == block_root | ||
and is_inclusion_list_available(root) |
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 doesn't work since you may have grand children that are valid
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.
Could you make this work by doing the following:
- as you add something to forkchoice, include an "IL available bool", store this bool along with the block
- if the bool is true, iterate back to the justified root flipping all to true
is_inclusion_list_available
here just checks this bool is true
Effectively tracking the latest seen block with an available IL which I think is what we want
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 doesn't really work because we may have to reorg back to a head for witch we haven't seen an IL. Without reconstructing it we always rely on external sources
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.
Could you make this work by doing the following:
- as you add something to forkchoice, include an "IL available bool", store this bool along with the block
- if the bool is true, iterate back to the justified root flipping all to true
is_inclusion_list_available
here just checks this bool is trueEffectively tracking the latest seen block with an available IL which I think is what we want
Not sure if this was after or before the Discord discussion, but just in case and to leave it documented, this doesn't work either since you may be turning for true a node where no one has seen the IL except the child's builder. In this case this node should never be taken for head or the EL should be able to reconstruct the IL.
IL POC Spec - see https://notes.ethereum.org/@mikeneuder/il-poc-spec.
Pulling from many sources including: https://github.com/hwwhww/consensus-specs/pull/2/files and bca66b0 into one upstream PR.
Core elements
slot N
IL must appear anywhere in either theslot N
orslot N+1
payloads.slot N
beacon block has no reference to theslot N
IL summary.Details
For the key files:
beacon-chain.md
,fork-choice.md
,p2p-networking.md
, &validator.md
, we present extended details to highlight the critical changes.beacon-chain.md
Overview: Add the inclusion list data to the execution layer block, the state transition, and the block processing.
Itemized:
MAX_TRANSACTIONS_PER_INCLUSION_LIST
InclusionListSummaryEntry
InclusionListSummary
SignedInclusionListSummary
InclusionList
ExecutionPayload
ExecutionPayloadHeader
BeaconState
NewInclusionListRequest
for engine APIverify_and_notify_new_inclusion_list
.process_execution_payload
to verify signature over IL.verify_inclusion_list_summary_signature
as helper.fork-choice.md
Overview: Add inclusion list verification handling.
Itemized:
on_inclusion_list
handler to be called upon receipt of a new inclusion list. It updates the store if the IL is valid.is_inclusion_list_available
.p2p-networking.md
Overview: Create the inclusion list topic for the p2p network.
Itemized:
SignedInclusionList
object which is an envelope for the full IL.inclusion_list
topic and associated validation rules.validator.md
Overview: Define the new validator behavior and engine APIs for fetching and validating inclusion lists from the EL.
Itemized:
engine_getInclusionListV1
engine API interface, which requests a new IL constructed by the EL and returns aSignedInclusionList
.