Skip to content
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

Release v1.5.0-beta.1 #4097

Merged
merged 37 commits into from
Jan 24, 2025
Merged
Changes from 1 commit
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
902c74e
Simplify/optimize process_registry_updates
jtraglia Jan 13, 2025
fd87b46
Merge pull request #4081 from jtraglia/simplify-registry-updates
jtraglia Jan 15, 2025
eba62db
Fix various nits
jtraglia Jan 15, 2025
b13aff0
Merge pull request #4082 from jtraglia/fix-nits
jtraglia Jan 15, 2025
8d35951
Document Electra fork-digest for BeaconBlocksByRange/Root v2
nflaig Jan 16, 2025
17997c1
Merge pull request #4083 from nflaig/electra-fork-digest
jtraglia Jan 16, 2025
a9c5952
Add v1 to req/resp messages in phase0
jtraglia Jan 16, 2025
7d54cd0
For BlobSidecars, put ByRange before ByRoot
jtraglia Jan 16, 2025
155d15e
For DataColumnSidecars, put ByRange before ByRoot
jtraglia Jan 16, 2025
b1c70a9
Merge pull request #4084 from jtraglia/consistent-msg-order
jtraglia Jan 16, 2025
c85f58a
Add test for pending deposits with same pubkey and different withdraw…
debjit-bw Jan 18, 2025
6db8238
Add tests for deposit transitions with same pubkey and different with…
debjit-bw Jan 18, 2025
5c2d551
fmt and revert test for pending deposits with same pubkey and differe…
debjit-bw Jan 18, 2025
fe877aa
Merge branch 'dev' into electra-test
debjit-bw Jan 18, 2025
70be586
predefined indices which have the same pubkey
debjit-bw Jan 20, 2025
a079dbf
Rename indexes to indices
jtraglia Jan 20, 2025
13d9aa1
Add extra assert to ensure withdrawal creds are different
jtraglia Jan 20, 2025
b18c0f6
Add tests for execution payload processing with incorrect blob commit…
debjit-bw Jan 20, 2025
bd59b13
Merge branch 'dev' into ef-assignment
debjit-bw Jan 20, 2025
c3e2efe
remove invalid test
debjit-bw Jan 20, 2025
188a2ff
Merge pull request #4085 from debjit-bw/electra-test
jtraglia Jan 20, 2025
bc80f26
Merge branch 'dev' into ef-assignment
debjit-bw Jan 20, 2025
d9c9c66
add back test with comments
debjit-bw Jan 20, 2025
02f6719
Delete double space in comment
jtraglia Jan 20, 2025
19583b7
Add blocks with several withdrawal requests
ensi321 Jan 21, 2025
ad63ae7
Fix lint
mkalinin Jan 21, 2025
b7c4e27
Merge pull request #4090 from ensi321/multiple-withdrawal-requests
jtraglia Jan 21, 2025
bd212e7
Pin codespell version
jtraglia Jan 21, 2025
e79ef81
Merge pull request #4092 from jtraglia/pin-codespell
jtraglia Jan 21, 2025
5525cc9
Update Fulu configs
jimmygchen Jan 22, 2025
b73f3bd
Merge pull request #4095 from jimmygchen/fulu-config-udpate
jtraglia Jan 22, 2025
b1de7ef
Move dependencies to pyproject.toml (#4093)
jtraglia Jan 22, 2025
1d9577a
Bump version to 1.5.0-beta.1
jtraglia Jan 22, 2025
bdfd5f0
Merge pull request #4098 from ethereum/version-bump
jtraglia Jan 22, 2025
b87fbac
Add document with release instructions (#4065)
jtraglia Jan 22, 2025
526d550
Merge pull request #4087 from debjit-bw/ef-assignment
jtraglia Jan 24, 2025
f17311c
Replace pip with uv pip (#4100)
jtraglia Jan 24, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
For BlobSidecars, put ByRange before ByRoot
jtraglia committed Jan 16, 2025
commit 7d54cd061315af9e3174a1acf73e0ab8d577ede1
128 changes: 64 additions & 64 deletions specs/deneb/p2p-interface.md
Original file line number Diff line number Diff line change
@@ -30,9 +30,9 @@
- [Messages](#messages)
- [BeaconBlocksByRange v2](#beaconblocksbyrange-v2)
- [BeaconBlocksByRoot v2](#beaconblocksbyroot-v2)
- [BlobSidecarsByRange v1](#blobsidecarsbyrange-v1)
- [BlobSidecarsByRoot v1](#blobsidecarsbyroot-v1)
- [Blob retrieval via local execution layer client](#blob-retrieval-via-local-execution-layer-client)
- [BlobSidecarsByRange v1](#blobsidecarsbyrange-v1)
- [Design decision rationale](#design-decision-rationale)
- [Why are blobs relayed as a sidecar, separate from beacon blocks?](#why-are-blobs-relayed-as-a-sidecar-separate-from-beacon-blocks)

@@ -271,69 +271,6 @@ No more than `MAX_REQUEST_BLOCKS_DENEB` may be requested at a time.
Clients SHOULD include a block in the response as soon as it passes the gossip validation rules.
Clients SHOULD NOT respond with blocks that fail the beacon chain state transition.

##### BlobSidecarsByRoot v1

**Protocol ID:** `/eth2/beacon_chain/req/blob_sidecars_by_root/1/`

*[New in Deneb:EIP4844]*

Request Content:

```
(
List[BlobIdentifier, MAX_REQUEST_BLOB_SIDECARS]
)
```

Response Content:

```
(
List[BlobSidecar, MAX_REQUEST_BLOB_SIDECARS]
)
```

Requests sidecars by block root and index.
The response is a list of `BlobSidecar` whose length is less than or equal to the number of requests.
It may be less in the case that the responding peer is missing blocks or sidecars.

Before consuming the next response chunk, the response reader SHOULD verify the blob sidecar is well-formatted, has valid inclusion proof, and is correct w.r.t. the expected KZG commitments through `verify_blob_kzg_proof`.

No more than `MAX_REQUEST_BLOB_SIDECARS` may be requested at a time.

`BlobSidecarsByRoot` is primarily used to recover recent blobs (e.g. when receiving a block with a transaction whose corresponding blob is missing).

The response MUST consist of zero or more `response_chunk`.
Each _successful_ `response_chunk` MUST contain a single `BlobSidecar` payload.

Clients MUST support requesting sidecars since `minimum_request_epoch`, where `minimum_request_epoch = max(finalized_epoch, current_epoch - MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS, DENEB_FORK_EPOCH)`. If any root in the request content references a block earlier than `minimum_request_epoch`, peers MAY respond with error code `3: ResourceUnavailable` or not include the blob sidecar in the response.

Clients MUST respond with at least one sidecar, if they have it.
Clients MAY limit the number of blocks and sidecars in the response.

Clients SHOULD include a sidecar in the response as soon as it passes the gossip validation rules.
Clients SHOULD NOT respond with sidecars related to blocks that fail gossip validation rules.
Clients SHOULD NOT respond with sidecars related to blocks that fail the beacon chain state transition

For each `response_chunk`, a `ForkDigest`-context based on `compute_fork_version(compute_epoch_at_slot(blob_sidecar.signed_block_header.message.slot))` is used to select the fork namespace of the Response type.

Per `context = compute_fork_digest(fork_version, genesis_validators_root)`:

[0]: # (eth2spec: skip)

| `fork_version` | Chunk SSZ type |
|--------------------------------|---------------------|
| `DENEB_FORK_VERSION` and later | `deneb.BlobSidecar` |

###### Blob retrieval via local execution layer client

In addition to `BlobSidecarsByRoot` requests, recent blobs MAY be retrieved by querying the Execution Layer (i.e. via `engine_getBlobsV1`).
Implementers are encouraged to leverage this method to increase the likelihood of incorporating and attesting to the last block when its proposer is not able to publish blobs on time.

When clients use the local execution layer to retrieve blobs, they MUST behave as if the corresponding `blob_sidecar` had been received via gossip. In particular they MUST:
* publish the corresponding `blob_sidecar` on the `blob_sidecar_{subnet_id}` subnet.
* update gossip rule related data structures (i.e. update the anti-equivocation cache).

##### BlobSidecarsByRange v1

**Protocol ID:** `/eth2/beacon_chain/req/blob_sidecars_by_range/1/`
@@ -418,6 +355,69 @@ Per `context = compute_fork_digest(fork_version, genesis_validators_root)`:
|--------------------------------|---------------------|
| `DENEB_FORK_VERSION` and later | `deneb.BlobSidecar` |

##### BlobSidecarsByRoot v1

**Protocol ID:** `/eth2/beacon_chain/req/blob_sidecars_by_root/1/`

*[New in Deneb:EIP4844]*

Request Content:

```
(
List[BlobIdentifier, MAX_REQUEST_BLOB_SIDECARS]
)
```

Response Content:

```
(
List[BlobSidecar, MAX_REQUEST_BLOB_SIDECARS]
)
```

Requests sidecars by block root and index.
The response is a list of `BlobSidecar` whose length is less than or equal to the number of requests.
It may be less in the case that the responding peer is missing blocks or sidecars.

Before consuming the next response chunk, the response reader SHOULD verify the blob sidecar is well-formatted, has valid inclusion proof, and is correct w.r.t. the expected KZG commitments through `verify_blob_kzg_proof`.

No more than `MAX_REQUEST_BLOB_SIDECARS` may be requested at a time.

`BlobSidecarsByRoot` is primarily used to recover recent blobs (e.g. when receiving a block with a transaction whose corresponding blob is missing).

The response MUST consist of zero or more `response_chunk`.
Each _successful_ `response_chunk` MUST contain a single `BlobSidecar` payload.

Clients MUST support requesting sidecars since `minimum_request_epoch`, where `minimum_request_epoch = max(finalized_epoch, current_epoch - MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS, DENEB_FORK_EPOCH)`. If any root in the request content references a block earlier than `minimum_request_epoch`, peers MAY respond with error code `3: ResourceUnavailable` or not include the blob sidecar in the response.

Clients MUST respond with at least one sidecar, if they have it.
Clients MAY limit the number of blocks and sidecars in the response.

Clients SHOULD include a sidecar in the response as soon as it passes the gossip validation rules.
Clients SHOULD NOT respond with sidecars related to blocks that fail gossip validation rules.
Clients SHOULD NOT respond with sidecars related to blocks that fail the beacon chain state transition

For each `response_chunk`, a `ForkDigest`-context based on `compute_fork_version(compute_epoch_at_slot(blob_sidecar.signed_block_header.message.slot))` is used to select the fork namespace of the Response type.

Per `context = compute_fork_digest(fork_version, genesis_validators_root)`:

[0]: # (eth2spec: skip)

| `fork_version` | Chunk SSZ type |
|--------------------------------|---------------------|
| `DENEB_FORK_VERSION` and later | `deneb.BlobSidecar` |

###### Blob retrieval via local execution layer client

In addition to `BlobSidecarsByRoot` requests, recent blobs MAY be retrieved by querying the Execution Layer (i.e. via `engine_getBlobsV1`).
Implementers are encouraged to leverage this method to increase the likelihood of incorporating and attesting to the last block when its proposer is not able to publish blobs on time.

When clients use the local execution layer to retrieve blobs, they MUST behave as if the corresponding `blob_sidecar` had been received via gossip. In particular they MUST:
* publish the corresponding `blob_sidecar` on the `blob_sidecar_{subnet_id}` subnet.
* update gossip rule related data structures (i.e. update the anti-equivocation cache).

## Design decision rationale

### Why are blobs relayed as a sidecar, separate from beacon blocks?
20 changes: 10 additions & 10 deletions specs/electra/p2p-interface.md
Original file line number Diff line number Diff line change
@@ -23,8 +23,8 @@
- [Messages](#messages)
- [BeaconBlocksByRange v2](#beaconblocksbyrange-v2)
- [BeaconBlocksByRoot v2](#beaconblocksbyroot-v2)
- [BlobSidecarsByRoot v1](#blobsidecarsbyroot-v1)
- [BlobSidecarsByRange v1](#blobsidecarsbyrange-v1)
- [BlobSidecarsByRoot v1](#blobsidecarsbyroot-v1)

<!-- END doctoc generated TOC please keep comment here to allow auto update -->
<!-- /TOC -->
@@ -150,17 +150,18 @@ Per `context = compute_fork_digest(fork_version, genesis_validators_root)`:
| `DENEB_FORK_VERSION` | `deneb.SignedBeaconBlock` |
| `ELECTRA_FORK_VERSION` | `electra.SignedBeaconBlock` |

##### BlobSidecarsByRoot v1
##### BlobSidecarsByRange v1

**Protocol ID:** `/eth2/beacon_chain/req/blob_sidecars_by_root/1/`
**Protocol ID:** `/eth2/beacon_chain/req/blob_sidecars_by_range/1/`

*[Modified in Electra:EIP7691]*

Request Content:

```
(
List[BlobIdentifier, MAX_REQUEST_BLOB_SIDECARS_ELECTRA]
start_slot: Slot
count: uint64
)
```

@@ -174,20 +175,19 @@ Response Content:

*Updated validation*

No more than `MAX_REQUEST_BLOB_SIDECARS_ELECTRA` may be requested at a time.
Clients MUST respond with at least the blob sidecars of the first blob-carrying block that exists in the range, if they have it, and no more than `MAX_REQUEST_BLOB_SIDECARS_ELECTRA` sidecars.

##### BlobSidecarsByRange v1
##### BlobSidecarsByRoot v1

**Protocol ID:** `/eth2/beacon_chain/req/blob_sidecars_by_range/1/`
**Protocol ID:** `/eth2/beacon_chain/req/blob_sidecars_by_root/1/`

*[Modified in Electra:EIP7691]*

Request Content:

```
(
start_slot: Slot
count: uint64
List[BlobIdentifier, MAX_REQUEST_BLOB_SIDECARS_ELECTRA]
)
```

@@ -201,4 +201,4 @@ Response Content:

*Updated validation*

Clients MUST respond with at least the blob sidecars of the first blob-carrying block that exists in the range, if they have it, and no more than `MAX_REQUEST_BLOB_SIDECARS_ELECTRA` sidecars.
No more than `MAX_REQUEST_BLOB_SIDECARS_ELECTRA` may be requested at a time.