You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
To allow for subscriptions to rotate quickly and randomly, a backbone is formed to help onboard peers into other topics.
116
118
117
119
This backbone is based on a pure function of the *node* identity and time:
120
+
118
121
- Nodes can be found *without additional discovery overhead*:
119
122
peers on a vertical topic can be found by searching the local peerstore for identities that hash to the desired topic(s),
120
123
assuming the peerstore already has a large enough variety of peers.
@@ -166,6 +169,7 @@ Shard blob samples can be verified with just a 48 byte KZG proof (commitment quo
166
169
against the commitment to blob polynomial, specific to that `(shard, slot)` key.
167
170
168
171
The following validations MUST pass before forwarding the `sample` on the vertical subnet.
172
+
169
173
-_[IGNORE]_ The commitment for the (`sample.shard`, `sample.slot`, `sample.index`) tuple must be known.
170
174
If not known, the client MAY queue the sample if it passes formatting conditions.
171
175
-_[REJECT]_`sample.shard`, `sample.slot` and `sample.index` are hashed into a `sbunet_index` (TODO: define hash) which MUST match the topic `{subnet_index}` parameter.
@@ -214,6 +218,7 @@ Response Content:
214
218
```
215
219
216
220
When the sample is:
221
+
217
222
- Available: respond with a `Success` result code, and the encoded sample.
218
223
- Expected to be available, but not: respond with a `ResourceUnavailable` result code.
219
224
- Not available, but never of interest to the node: respond with an `InvalidRequest` result code.
Copy file name to clipboardExpand all lines: specs/_features/eip7732/beacon-chain.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -70,6 +70,7 @@ This is the beacon chain specification of the enshrined proposer builder separat
70
70
This feature adds new staked consensus participants called *Builders* and new honest validators duties called *payload timeliness attestations*. The slot is divided in **four** intervals. Honest validators gather *signed bids* (a `SignedExecutionPayloadHeader`) from builders and submit their consensus blocks (a `SignedBeaconBlock`) including these bids at the beginning of the slot. At the start of the second interval, honest validators submit attestations just as they do previous to this feature). At the start of the third interval, aggregators aggregate these attestations and the builder broadcasts either a full payload or a message indicating that they are withholding the payload (a `SignedExecutionPayloadEnvelope`). At the start of the fourth interval, some validators selected to be members of the new **Payload Timeliness Committee** (PTC) attest to the presence and timeliness of the builder's payload.
71
71
72
72
At any given slot, the status of the blockchain's head may be either
73
+
73
74
- A block from a previous slot (e.g. the current slot's proposer did not submit its block).
74
75
- An *empty* block from the current slot (e.g. the proposer submitted a timely block, but the builder did not reveal the payload on time).
75
76
- A full block for the current slot (both the proposer and the builder revealed on time).
|`beacon_block`|`SignedBeaconBlock`[modified in EIP-7732]|
118
119
119
120
The new topics along with the type of the `data` field of a gossipsub message are given in this table:
@@ -162,6 +163,7 @@ The following validations MUST pass before forwarding the `signed_execution_payl
162
163
163
164
Let `block` be the block with `envelope.beacon_block_root`.
164
165
Let `header` alias `block.body.signed_execution_payload_header.message` (notice that this can be obtained from the `state.signed_execution_payload_header`)
Copy file name to clipboardExpand all lines: specs/_features/eip7732/validator.md
+3Lines changed: 3 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -81,6 +81,7 @@ Validators are still expected to propose `SignedBeaconBlock` at the beginning of
81
81
#### Constructing the new `signed_execution_payload_header` field in `BeaconBlockBody`
82
82
83
83
To obtain `signed_execution_payload_header`, a block proposer building a block on top of a `state` must take the following actions:
84
+
84
85
* Listen to the `execution_payload_header` gossip global topic and save an accepted `signed_execution_payload_header` from a builder. Proposer MAY obtain these signed messages by other off-protocol means.
85
86
* The `signed_execution_payload_header` must satisfy the verification conditions found in `process_execution_payload_header`, that is
86
87
- The header signature must be valid
@@ -93,6 +94,7 @@ To obtain `signed_execution_payload_header`, a block proposer building a block o
93
94
#### Constructing the new `payload_attestations` field in `BeaconBlockBody`
94
95
95
96
Up to `MAX_PAYLOAD_ATTESTATIONS`, aggregate payload attestations can be included in the block. The validator will have to
97
+
96
98
* Listen to the `payload_attestation_message` gossip global topic
97
99
* The payload attestations added must satisfy the verification conditions found in payload attestation gossip validation and payload attestation processing. This means
98
100
- The `data.beacon_block_root` corresponds to `block.parent_root`.
@@ -116,6 +118,7 @@ If a validator is in the payload attestation committee for the current slot (as
116
118
according to the logic in `get_payload_attestation_message` below and broadcast it not after `SECONDS_PER_SLOT * 3 / INTERVALS_PER_SLOT` seconds since the start of the slot, to the global `payload_attestation_message` pubsub topic.
117
119
118
120
The validator creates `payload_attestation_message` as follows:
121
+
119
122
* If the validator has not seen any beacon block for the assigned slot, do not submit a payload attestation. It will be ignored anyway.
120
123
* Set `data.beacon_block_root` be the HTR of the beacon block seen for the assigned slot
Copy file name to clipboardExpand all lines: specs/altair/light-client/p2p-interface.md
+6Lines changed: 6 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -57,13 +57,16 @@ New global topics are added to provide light clients with the latest updates.
57
57
This topic is used to propagate the latest `LightClientFinalityUpdate` to light clients, allowing them to keep track of the latest `finalized_header`.
58
58
59
59
The following validations MUST pass before forwarding the `finality_update` on the network.
60
+
60
61
-_[IGNORE]_ The `finalized_header.beacon.slot` is greater than that of all previously forwarded `finality_update`s, or it matches the highest previously forwarded slot and also has a `sync_aggregate` indicating supermajority (> 2/3) sync committee participation while the previously forwarded `finality_update` for that slot did not indicate supermajority
61
62
-_[IGNORE]_ The `finality_update` is received after the block at `signature_slot` was given enough time to propagate through the network -- i.e. validate that one-third of `finality_update.signature_slot` has transpired (`SECONDS_PER_SLOT / INTERVALS_PER_SLOT` seconds after the start of the slot, with a `MAXIMUM_GOSSIP_CLOCK_DISPARITY` allowance)
62
63
63
64
For full nodes, the following validations MUST additionally pass before forwarding the `finality_update` on the network.
65
+
64
66
-_[IGNORE]_ The received `finality_update` matches the locally computed one exactly (as defined in [`create_light_client_finality_update`](./full-node.md#create_light_client_finality_update))
65
67
66
68
For light clients, the following validations MUST additionally pass before forwarding the `finality_update` on the network.
69
+
67
70
-_[REJECT]_ The `finality_update` is valid -- i.e. validate that `process_light_client_finality_update` does not indicate errors
68
71
-_[IGNORE]_ The `finality_update` advances the `finalized_header` of the local `LightClientStore` -- i.e. validate that processing `finality_update` increases `store.finalized_header.beacon.slot`
69
72
@@ -85,13 +88,16 @@ Per `context = compute_fork_digest(fork_version, genesis_validators_root)`:
85
88
This topic is used to propagate the latest `LightClientOptimisticUpdate` to light clients, allowing them to keep track of the latest `optimistic_header`.
86
89
87
90
The following validations MUST pass before forwarding the `optimistic_update` on the network.
91
+
88
92
-_[IGNORE]_ The `attested_header.beacon.slot` is greater than that of all previously forwarded `optimistic_update`s
89
93
-_[IGNORE]_ The `optimistic_update` is received after the block at `signature_slot` was given enough time to propagate through the network -- i.e. validate that one-third of `optimistic_update.signature_slot` has transpired (`SECONDS_PER_SLOT / INTERVALS_PER_SLOT` seconds after the start of the slot, with a `MAXIMUM_GOSSIP_CLOCK_DISPARITY` allowance)
90
94
91
95
For full nodes, the following validations MUST additionally pass before forwarding the `optimistic_update` on the network.
96
+
92
97
-_[IGNORE]_ The received `optimistic_update` matches the locally computed one exactly (as defined in [`create_light_client_optimistic_update`](./full-node.md#create_light_client_optimistic_update))
93
98
94
99
For light clients, the following validations MUST additionally pass before forwarding the `optimistic_update` on the network.
100
+
95
101
-_[REJECT]_ The `optimistic_update` is valid -- i.e. validate that `process_light_client_optimistic_update` does not indicate errors
96
102
-_[IGNORE]_ The `optimistic_update` either matches corresponding fields of the most recently forwarded `LightClientFinalityUpdate` (if any), or it advances the `optimistic_header` of the local `LightClientStore` -- i.e. validate that processing `optimistic_update` increases `store.optimistic_header.beacon.slot`
Copy file name to clipboardExpand all lines: specs/altair/p2p-interface.md
+4Lines changed: 4 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -74,6 +74,7 @@ The specification around the creation, validation, and dissemination of messages
74
74
75
75
The derivation of the `message-id` has changed starting with Altair to incorporate the message `topic` along with the message `data`. These are fields of the `Message` Protobuf, and interpreted as empty byte strings if missing.
76
76
The `message-id` MUST be the following 20 byte value computed from the message:
77
+
77
78
* If `message.data` has a valid snappy decompression, set `message-id` to the first 20 bytes of the `SHA256` hash of
78
79
the concatenation of the following data: `MESSAGE_DOMAIN_VALID_SNAPPY`, the length of the topic byte string (encoded as little-endian `uint64`),
79
80
the topic byte string, and the snappy decompressed message data:
@@ -192,12 +193,15 @@ Topic-meshes can be grafted quickly as the nodes are already connected and excha
192
193
193
194
Messages SHOULD NOT be re-broadcast from one fork to the other.
194
195
A node's behavior before the fork and after the fork are as follows:
196
+
195
197
Pre-fork:
198
+
196
199
- Peers who propagate messages on the post-fork topics MAY be scored negatively proportionally to time till fork,
197
200
to account for clock discrepancy.
198
201
- Messages can be IGNORED on the post-fork topics, with a `MAXIMUM_GOSSIP_CLOCK_DISPARITY` margin.
199
202
200
203
Post-fork:
204
+
201
205
- Peers who propagate messages on the pre-fork topics MUST NOT be scored negatively. Lagging IWANT may force them to.
202
206
- Messages on pre and post-fork variants of topics share application-level caches.
203
207
E.g. an attestation on the both the old and new topic is ignored like any duplicate.
Copy file name to clipboardExpand all lines: specs/altair/validator.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -176,6 +176,7 @@ For this reason, *always* get committee assignments via the fields of the `Beaco
176
176
177
177
A validator should plan for future sync committee assignments by noting which sync committee periods they are selected for participation.
178
178
Specifically, a validator should:
179
+
179
180
* Upon (re)syncing the chain and upon sync committee period boundaries, check for assignments in the current and next sync committee periods.
180
181
* If the validator is in the current sync committee period, then they perform the responsibilities below for sync committee rewards.
181
182
* If the validator is in the next sync committee period, they should wait until the next `EPOCHS_PER_SYNC_COMMITTEE_PERIOD` boundary and then perform the responsibilities throughout that period.
validation (including execution node verification of the `block.body.execution_payload`).
88
89
89
90
The following gossip validation from prior specifications MUST NOT be applied if the execution is enabled for the block -- i.e. `is_execution_enabled(state, block.body)`:
91
+
90
92
-[REJECT] The block's parent (defined by `block.parent_root`) passes validation.
Copy file name to clipboardExpand all lines: specs/deneb/beacon-chain.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -50,6 +50,7 @@
50
50
## Introduction
51
51
52
52
Deneb is a consensus-layer upgrade containing a number of features. Including:
53
+
53
54
*[EIP-4788](https://eips.ethereum.org/EIPS/eip-4788): Beacon block root in the EVM
54
55
*[EIP-4844](https://eips.ethereum.org/EIPS/eip-4844): Shard Blob Transactions scale data-availability of Ethereum in a simple, forwards-compatible manner
55
56
*[EIP-7044](https://eips.ethereum.org/EIPS/eip-7044): Perpetually Valid Signed Voluntary Exits
0 commit comments