From e872fdb936c6e27125a0773d20f35c1a373ef844 Mon Sep 17 00:00:00 2001 From: Enrico Del Fante Date: Fri, 2 Aug 2024 14:19:26 +0200 Subject: [PATCH 01/21] engine_getBlobV1_clarifications --- specs/deneb/p2p-interface.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/specs/deneb/p2p-interface.md b/specs/deneb/p2p-interface.md index 41e2fa9d3f..ef5985f7f8 100644 --- a/specs/deneb/p2p-interface.md +++ b/specs/deneb/p2p-interface.md @@ -184,6 +184,7 @@ The following validations MUST pass before forwarding the `blob_sidecar` on the - _[REJECT]_ The sidecar's inclusion proof is valid as verified by `verify_blob_sidecar_inclusion_proof(blob_sidecar)`. - _[REJECT]_ The sidecar's blob is valid as verified by `verify_blob_kzg_proof(blob_sidecar.blob, blob_sidecar.kzg_commitment, blob_sidecar.kzg_proof)`. - _[IGNORE]_ The sidecar is the first sidecar for the tuple `(block_header.slot, block_header.proposer_index, blob_sidecar.index)` with valid header signature, sidecar inclusion proof, and kzg proof. +*Note:* If client obtains the blob via `engine_getBlobV1` or any other method before receiving the corresponding sidecar via this topic, it MUST NOT consider the tuple as "seen" (i.e. it MUST participate in the dissemination of the blob_sidecar even if it already obtained the blob) - _[REJECT]_ The sidecar is proposed by the expected `proposer_index` for the block's slot in the context of the current shuffling (defined by `block_header.parent_root`/`block_header.slot`). If the `proposer_index` cannot immediately be verified against the expected shuffling, the sidecar MAY be queued for later processing while proposers for the block's branch are calculated -- in such a case _do not_ `REJECT`, instead `IGNORE` this message. @@ -295,7 +296,7 @@ Before consuming the next response chunk, the response reader SHOULD verify the 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). +`BlobSidecarsByRoot` is primarily used to recover recent blobs (e.g. when receiving a block with a transaction whose corresponding blob is missing). In addition, it is possible to retrieve recent blobs by quering the Execution Layer via `engine_getBlobV1` engine API method. The response MUST consist of zero or more `response_chunk`. Each _successful_ `response_chunk` MUST contain a single `BlobSidecar` payload. From 09966cd07071740e67d2851ab37aed6efa4176ed Mon Sep 17 00:00:00 2001 From: Enrico Del Fante Date: Fri, 2 Aug 2024 14:23:19 +0200 Subject: [PATCH 02/21] fix method name --- specs/deneb/p2p-interface.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/specs/deneb/p2p-interface.md b/specs/deneb/p2p-interface.md index ef5985f7f8..cde726e2f4 100644 --- a/specs/deneb/p2p-interface.md +++ b/specs/deneb/p2p-interface.md @@ -184,7 +184,7 @@ The following validations MUST pass before forwarding the `blob_sidecar` on the - _[REJECT]_ The sidecar's inclusion proof is valid as verified by `verify_blob_sidecar_inclusion_proof(blob_sidecar)`. - _[REJECT]_ The sidecar's blob is valid as verified by `verify_blob_kzg_proof(blob_sidecar.blob, blob_sidecar.kzg_commitment, blob_sidecar.kzg_proof)`. - _[IGNORE]_ The sidecar is the first sidecar for the tuple `(block_header.slot, block_header.proposer_index, blob_sidecar.index)` with valid header signature, sidecar inclusion proof, and kzg proof. -*Note:* If client obtains the blob via `engine_getBlobV1` or any other method before receiving the corresponding sidecar via this topic, it MUST NOT consider the tuple as "seen" (i.e. it MUST participate in the dissemination of the blob_sidecar even if it already obtained the blob) +*Note:* If client obtains the blob via `engine_getBlobsV1` or any other method before receiving the corresponding sidecar via this topic, it MUST NOT consider the tuple as "seen" (i.e. it MUST participate in the dissemination of the blob_sidecar even if it already obtained the blob) - _[REJECT]_ The sidecar is proposed by the expected `proposer_index` for the block's slot in the context of the current shuffling (defined by `block_header.parent_root`/`block_header.slot`). If the `proposer_index` cannot immediately be verified against the expected shuffling, the sidecar MAY be queued for later processing while proposers for the block's branch are calculated -- in such a case _do not_ `REJECT`, instead `IGNORE` this message. @@ -296,7 +296,7 @@ Before consuming the next response chunk, the response reader SHOULD verify the 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). In addition, it is possible to retrieve recent blobs by quering the Execution Layer via `engine_getBlobV1` engine API method. +`BlobSidecarsByRoot` is primarily used to recover recent blobs (e.g. when receiving a block with a transaction whose corresponding blob is missing). In addition, it is possible to retrieve recent blobs by quering the Execution Layer via `engine_getBlobsV1` engine API method. The response MUST consist of zero or more `response_chunk`. Each _successful_ `response_chunk` MUST contain a single `BlobSidecar` payload. From 6f219159e577f834f8c8e6a08d9c3920062f46ae Mon Sep 17 00:00:00 2001 From: Enrico Del Fante Date: Fri, 2 Aug 2024 17:04:04 +0200 Subject: [PATCH 03/21] typo --- specs/deneb/p2p-interface.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specs/deneb/p2p-interface.md b/specs/deneb/p2p-interface.md index cde726e2f4..da95e5786c 100644 --- a/specs/deneb/p2p-interface.md +++ b/specs/deneb/p2p-interface.md @@ -296,7 +296,7 @@ Before consuming the next response chunk, the response reader SHOULD verify the 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). In addition, it is possible to retrieve recent blobs by quering the Execution Layer via `engine_getBlobsV1` engine API method. +`BlobSidecarsByRoot` is primarily used to recover recent blobs (e.g. when receiving a block with a transaction whose corresponding blob is missing). In addition, it is possible to retrieve recent blobs by querying the Execution Layer via `engine_getBlobsV1` engine API method. The response MUST consist of zero or more `response_chunk`. Each _successful_ `response_chunk` MUST contain a single `BlobSidecar` payload. From f1d23ebb8520b0d60d07af2e1ed80e0480c11131 Mon Sep 17 00:00:00 2001 From: Enrico Del Fante Date: Wed, 2 Oct 2024 12:14:50 +0200 Subject: [PATCH 04/21] update --- specs/deneb/p2p-interface.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/specs/deneb/p2p-interface.md b/specs/deneb/p2p-interface.md index da95e5786c..394dab31bc 100644 --- a/specs/deneb/p2p-interface.md +++ b/specs/deneb/p2p-interface.md @@ -296,7 +296,7 @@ Before consuming the next response chunk, the response reader SHOULD verify the 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). In addition, it is possible to retrieve recent blobs by querying the Execution Layer via `engine_getBlobsV1` engine API method. +`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. @@ -310,6 +310,14 @@ Clients SHOULD include a sidecar in the response as soon as it passes the gossip 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 +###### Usage of `engine_getBlobsV1` engine API method +In addition to `BlobSidecarsByRoot` requests, recent blobs recovery MAY also be done by querying the Execution Layer via `engine_getBlobsV1`. +Implementers are encouraged to leverege this method to encrease the likelyhood of incorporating and attesting to the last block when its proposer is not able to publish blobs on time. + +Client MAY use this method when serving `BlobSidecarsByRoot` requests. + +Client MUST publish the corresponding `blob_sidecar` whenever succesfully recovers blobs via `engine_getBlobsV1`. + ##### BlobSidecarsByRange v1 **Protocol ID:** `/eth2/beacon_chain/req/blob_sidecars_by_range/1/` From 37d6d37ce4346474bdfecf7bbd54a637db5ac6cd Mon Sep 17 00:00:00 2001 From: Enrico Del Fante Date: Wed, 2 Oct 2024 12:17:09 +0200 Subject: [PATCH 05/21] fix typos --- specs/deneb/p2p-interface.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/specs/deneb/p2p-interface.md b/specs/deneb/p2p-interface.md index 394dab31bc..0189643de2 100644 --- a/specs/deneb/p2p-interface.md +++ b/specs/deneb/p2p-interface.md @@ -312,11 +312,11 @@ Clients SHOULD NOT respond with sidecars related to blocks that fail the beacon ###### Usage of `engine_getBlobsV1` engine API method In addition to `BlobSidecarsByRoot` requests, recent blobs recovery MAY also be done by querying the Execution Layer via `engine_getBlobsV1`. -Implementers are encouraged to leverege this method to encrease the likelyhood of incorporating and attesting to the last block when its proposer is not able to publish blobs on time. +Implementers are encouraged to leverege this method to encrease the likelihood of incorporating and attesting to the last block when its proposer is not able to publish blobs on time. Client MAY use this method when serving `BlobSidecarsByRoot` requests. -Client MUST publish the corresponding `blob_sidecar` whenever succesfully recovers blobs via `engine_getBlobsV1`. +Client MUST publish the corresponding `blob_sidecar` whenever successfully recovers blobs via `engine_getBlobsV1`. ##### BlobSidecarsByRange v1 From 2acf362f81fad2664d22fa42f9b17033c5d7499f Mon Sep 17 00:00:00 2001 From: Enrico Del Fante Date: Wed, 2 Oct 2024 12:22:48 +0200 Subject: [PATCH 06/21] fix toc --- specs/deneb/p2p-interface.md | 1 + 1 file changed, 1 insertion(+) diff --git a/specs/deneb/p2p-interface.md b/specs/deneb/p2p-interface.md index 0189643de2..44471d9e6b 100644 --- a/specs/deneb/p2p-interface.md +++ b/specs/deneb/p2p-interface.md @@ -34,6 +34,7 @@ The specification of these changes continues in the same format as the network s - [BeaconBlocksByRange v2](#beaconblocksbyrange-v2) - [BeaconBlocksByRoot v2](#beaconblocksbyroot-v2) - [BlobSidecarsByRoot v1](#blobsidecarsbyroot-v1) + - [Usage of `engine_getBlobsV1` engine API method](#usage-of-engine_getblobsv1-engine-api-method) - [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) From 918a394ce1679e63bbe82332142b89441e4c3914 Mon Sep 17 00:00:00 2001 From: Enrico Del Fante Date: Wed, 2 Oct 2024 12:28:03 +0200 Subject: [PATCH 07/21] remove usage in RPC serving sentence --- specs/deneb/p2p-interface.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/specs/deneb/p2p-interface.md b/specs/deneb/p2p-interface.md index 44471d9e6b..3cd85bf09e 100644 --- a/specs/deneb/p2p-interface.md +++ b/specs/deneb/p2p-interface.md @@ -315,8 +315,6 @@ Clients SHOULD NOT respond with sidecars related to blocks that fail the beacon In addition to `BlobSidecarsByRoot` requests, recent blobs recovery MAY also be done by querying the Execution Layer via `engine_getBlobsV1`. Implementers are encouraged to leverege this method to encrease the likelihood of incorporating and attesting to the last block when its proposer is not able to publish blobs on time. -Client MAY use this method when serving `BlobSidecarsByRoot` requests. - Client MUST publish the corresponding `blob_sidecar` whenever successfully recovers blobs via `engine_getBlobsV1`. ##### BlobSidecarsByRange v1 From 63ad07b450d304b3972042b8255e552b7dd9ca0d Mon Sep 17 00:00:00 2001 From: Enrico Del Fante Date: Wed, 2 Oct 2024 12:29:44 +0200 Subject: [PATCH 08/21] typos --- specs/deneb/p2p-interface.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specs/deneb/p2p-interface.md b/specs/deneb/p2p-interface.md index 3cd85bf09e..f9b5681998 100644 --- a/specs/deneb/p2p-interface.md +++ b/specs/deneb/p2p-interface.md @@ -313,7 +313,7 @@ Clients SHOULD NOT respond with sidecars related to blocks that fail the beacon ###### Usage of `engine_getBlobsV1` engine API method In addition to `BlobSidecarsByRoot` requests, recent blobs recovery MAY also be done by querying the Execution Layer via `engine_getBlobsV1`. -Implementers are encouraged to leverege this method to encrease the likelihood of incorporating and attesting to the last block when its proposer is not able to publish blobs on time. +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. Client MUST publish the corresponding `blob_sidecar` whenever successfully recovers blobs via `engine_getBlobsV1`. From 4531fe629c2bcc5f9e06604a90492c1573dce6e9 Mon Sep 17 00:00:00 2001 From: Enrico Del Fante Date: Wed, 2 Oct 2024 12:33:42 +0200 Subject: [PATCH 09/21] remove explicit reference to engine method --- specs/deneb/p2p-interface.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/specs/deneb/p2p-interface.md b/specs/deneb/p2p-interface.md index f9b5681998..0c4658f0f2 100644 --- a/specs/deneb/p2p-interface.md +++ b/specs/deneb/p2p-interface.md @@ -34,7 +34,7 @@ The specification of these changes continues in the same format as the network s - [BeaconBlocksByRange v2](#beaconblocksbyrange-v2) - [BeaconBlocksByRoot v2](#beaconblocksbyroot-v2) - [BlobSidecarsByRoot v1](#blobsidecarsbyroot-v1) - - [Usage of `engine_getBlobsV1` engine API method](#usage-of-engine_getblobsv1-engine-api-method) + - [Blobs recovery via local execution layer client](#blobs-recovery-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) @@ -311,11 +311,11 @@ Clients SHOULD include a sidecar in the response as soon as it passes the gossip 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 -###### Usage of `engine_getBlobsV1` engine API method -In addition to `BlobSidecarsByRoot` requests, recent blobs recovery MAY also be done by querying the Execution Layer via `engine_getBlobsV1`. +###### Blobs recovery via local execution layer client +In addition to `BlobSidecarsByRoot` requests, recent blobs recovery MAY also be done 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. -Client MUST publish the corresponding `blob_sidecar` whenever successfully recovers blobs via `engine_getBlobsV1`. +Client MUST publish the corresponding `blob_sidecar` whenever successfully recovers blobs via local execution layer client. ##### BlobSidecarsByRange v1 From 97db65eef3d0bec0620d19f552453fcb5e73463a Mon Sep 17 00:00:00 2001 From: Enrico Del Fante Date: Wed, 2 Oct 2024 12:37:17 +0200 Subject: [PATCH 10/21] remove another reference --- specs/deneb/p2p-interface.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specs/deneb/p2p-interface.md b/specs/deneb/p2p-interface.md index 0c4658f0f2..3992828e3b 100644 --- a/specs/deneb/p2p-interface.md +++ b/specs/deneb/p2p-interface.md @@ -185,7 +185,7 @@ The following validations MUST pass before forwarding the `blob_sidecar` on the - _[REJECT]_ The sidecar's inclusion proof is valid as verified by `verify_blob_sidecar_inclusion_proof(blob_sidecar)`. - _[REJECT]_ The sidecar's blob is valid as verified by `verify_blob_kzg_proof(blob_sidecar.blob, blob_sidecar.kzg_commitment, blob_sidecar.kzg_proof)`. - _[IGNORE]_ The sidecar is the first sidecar for the tuple `(block_header.slot, block_header.proposer_index, blob_sidecar.index)` with valid header signature, sidecar inclusion proof, and kzg proof. -*Note:* If client obtains the blob via `engine_getBlobsV1` or any other method before receiving the corresponding sidecar via this topic, it MUST NOT consider the tuple as "seen" (i.e. it MUST participate in the dissemination of the blob_sidecar even if it already obtained the blob) +*Note:* If client obtains the blob via local execution layer client or any other method before receiving the corresponding sidecar via this topic, it MUST NOT consider the tuple as "seen" (i.e. it MUST participate in the dissemination of the blob_sidecar even if it already obtained the blob) - _[REJECT]_ The sidecar is proposed by the expected `proposer_index` for the block's slot in the context of the current shuffling (defined by `block_header.parent_root`/`block_header.slot`). If the `proposer_index` cannot immediately be verified against the expected shuffling, the sidecar MAY be queued for later processing while proposers for the block's branch are calculated -- in such a case _do not_ `REJECT`, instead `IGNORE` this message. From edd7377b5f9e9b87cf4db279b97b7240bcdf21b7 Mon Sep 17 00:00:00 2001 From: Enrico Del Fante Date: Thu, 3 Oct 2024 10:59:01 +0200 Subject: [PATCH 11/21] apply suggestions --- specs/deneb/p2p-interface.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/specs/deneb/p2p-interface.md b/specs/deneb/p2p-interface.md index 3992828e3b..19943d5347 100644 --- a/specs/deneb/p2p-interface.md +++ b/specs/deneb/p2p-interface.md @@ -185,7 +185,6 @@ The following validations MUST pass before forwarding the `blob_sidecar` on the - _[REJECT]_ The sidecar's inclusion proof is valid as verified by `verify_blob_sidecar_inclusion_proof(blob_sidecar)`. - _[REJECT]_ The sidecar's blob is valid as verified by `verify_blob_kzg_proof(blob_sidecar.blob, blob_sidecar.kzg_commitment, blob_sidecar.kzg_proof)`. - _[IGNORE]_ The sidecar is the first sidecar for the tuple `(block_header.slot, block_header.proposer_index, blob_sidecar.index)` with valid header signature, sidecar inclusion proof, and kzg proof. -*Note:* If client obtains the blob via local execution layer client or any other method before receiving the corresponding sidecar via this topic, it MUST NOT consider the tuple as "seen" (i.e. it MUST participate in the dissemination of the blob_sidecar even if it already obtained the blob) - _[REJECT]_ The sidecar is proposed by the expected `proposer_index` for the block's slot in the context of the current shuffling (defined by `block_header.parent_root`/`block_header.slot`). If the `proposer_index` cannot immediately be verified against the expected shuffling, the sidecar MAY be queued for later processing while proposers for the block's branch are calculated -- in such a case _do not_ `REJECT`, instead `IGNORE` this message. @@ -315,7 +314,7 @@ Clients SHOULD NOT respond with sidecars related to blocks that fail the beacon In addition to `BlobSidecarsByRoot` requests, recent blobs recovery MAY also be done 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. -Client MUST publish the corresponding `blob_sidecar` whenever successfully recovers blobs via local execution layer client. +Clients MUST publish the corresponding `blob_sidecar` on the `blob_sidecar_{subnet_id}` subnet whenever it successfully recovers blobs via local execution layer client. In such case, clients MUST also consider the `blob_sidecar` as "seen" with regards to blob subnet gossip rules. ##### BlobSidecarsByRange v1 From 2612f7f278ffa2d0ed405683c767a7e000f746cb Mon Sep 17 00:00:00 2001 From: Enrico Del Fante Date: Thu, 3 Oct 2024 17:20:37 +0200 Subject: [PATCH 12/21] rephrasing --- specs/deneb/p2p-interface.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specs/deneb/p2p-interface.md b/specs/deneb/p2p-interface.md index 19943d5347..d68eb5e327 100644 --- a/specs/deneb/p2p-interface.md +++ b/specs/deneb/p2p-interface.md @@ -314,7 +314,7 @@ Clients SHOULD NOT respond with sidecars related to blocks that fail the beacon In addition to `BlobSidecarsByRoot` requests, recent blobs recovery MAY also be done 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. -Clients MUST publish the corresponding `blob_sidecar` on the `blob_sidecar_{subnet_id}` subnet whenever it successfully recovers blobs via local execution layer client. In such case, clients MUST also consider the `blob_sidecar` as "seen" with regards to blob subnet gossip rules. +Clients MUST publish the corresponding `blob_sidecar` on the `blob_sidecar_{subnet_id}` subnet whenever it successfully recovers blobs via local execution layer client. In such case, clients MUST also treat the `blob_sidecar` as if it had been received via gossip (ie update the anti-equivocation cache) ##### BlobSidecarsByRange v1 From a96065c618f802d7fe018f1505fd7482c57b4c1f Mon Sep 17 00:00:00 2001 From: Enrico Del Fante Date: Thu, 3 Oct 2024 17:49:48 +0200 Subject: [PATCH 13/21] clarification --- specs/deneb/p2p-interface.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/specs/deneb/p2p-interface.md b/specs/deneb/p2p-interface.md index d68eb5e327..69a8188558 100644 --- a/specs/deneb/p2p-interface.md +++ b/specs/deneb/p2p-interface.md @@ -314,7 +314,9 @@ Clients SHOULD NOT respond with sidecars related to blocks that fail the beacon In addition to `BlobSidecarsByRoot` requests, recent blobs recovery MAY also be done 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. -Clients MUST publish the corresponding `blob_sidecar` on the `blob_sidecar_{subnet_id}` subnet whenever it successfully recovers blobs via local execution layer client. In such case, clients MUST also treat the `blob_sidecar` as if it had been received via gossip (ie update the anti-equivocation cache) +When clients uses local execution layer to retrieve blobs relative to the current slot 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 (ie update the anti-equivocation cache). ##### BlobSidecarsByRange v1 From 5b93d6a0418600384ff4ca270f2fb92e2251e220 Mon Sep 17 00:00:00 2001 From: Enrico Del Fante Date: Thu, 3 Oct 2024 17:52:56 +0200 Subject: [PATCH 14/21] improvement --- specs/deneb/p2p-interface.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specs/deneb/p2p-interface.md b/specs/deneb/p2p-interface.md index 69a8188558..95d0e33ed1 100644 --- a/specs/deneb/p2p-interface.md +++ b/specs/deneb/p2p-interface.md @@ -314,7 +314,7 @@ Clients SHOULD NOT respond with sidecars related to blocks that fail the beacon In addition to `BlobSidecarsByRoot` requests, recent blobs recovery MAY also be done 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 uses local execution layer to retrieve blobs relative to the current slot they MUST behave as if the corresponding `blob_sidecar` had been received via gossip. In particular they MUST: +When clients uses local execution layer to recover missing blobs relative to the current slot, 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 (ie update the anti-equivocation cache). From 7c31b3ee7a8963fca527972be39a7ce43e3f1fe9 Mon Sep 17 00:00:00 2001 From: Enrico Del Fante Date: Fri, 4 Oct 2024 14:13:04 +0200 Subject: [PATCH 15/21] Update specs/deneb/p2p-interface.md Co-authored-by: Mehdi AOUADI --- specs/deneb/p2p-interface.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specs/deneb/p2p-interface.md b/specs/deneb/p2p-interface.md index 95d0e33ed1..c7ea310584 100644 --- a/specs/deneb/p2p-interface.md +++ b/specs/deneb/p2p-interface.md @@ -314,7 +314,7 @@ Clients SHOULD NOT respond with sidecars related to blocks that fail the beacon In addition to `BlobSidecarsByRoot` requests, recent blobs recovery MAY also be done 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 uses local execution layer to recover missing blobs relative to the current slot, they MUST behave as if the corresponding `blob_sidecar` had been received via gossip. In particular they MUST: +When clients use local execution layer to recover missing blobs relative to the current slot, 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 (ie update the anti-equivocation cache). From 5b55e95984710ef0f270e1210a5602fa1b5251ba Mon Sep 17 00:00:00 2001 From: Enrico Del Fante Date: Wed, 16 Oct 2024 18:24:19 +0200 Subject: [PATCH 16/21] Update specs/deneb/p2p-interface.md Co-authored-by: Justin Traglia <95511699+jtraglia@users.noreply.github.com> --- specs/deneb/p2p-interface.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/specs/deneb/p2p-interface.md b/specs/deneb/p2p-interface.md index c7ea310584..05920d0099 100644 --- a/specs/deneb/p2p-interface.md +++ b/specs/deneb/p2p-interface.md @@ -310,7 +310,8 @@ Clients SHOULD include a sidecar in the response as soon as it passes the gossip 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 -###### Blobs recovery via local execution layer client +###### Blob retrieval via local execution layer client + In addition to `BlobSidecarsByRoot` requests, recent blobs recovery MAY also be done 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. From 71b995cdd9d47f36c9405285866a79a3deadd739 Mon Sep 17 00:00:00 2001 From: Enrico Del Fante Date: Wed, 16 Oct 2024 18:24:37 +0200 Subject: [PATCH 17/21] Update specs/deneb/p2p-interface.md Co-authored-by: Justin Traglia <95511699+jtraglia@users.noreply.github.com> --- specs/deneb/p2p-interface.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specs/deneb/p2p-interface.md b/specs/deneb/p2p-interface.md index 05920d0099..ec63c2f4b7 100644 --- a/specs/deneb/p2p-interface.md +++ b/specs/deneb/p2p-interface.md @@ -312,7 +312,7 @@ Clients SHOULD NOT respond with sidecars related to blocks that fail the beacon ###### Blob retrieval via local execution layer client -In addition to `BlobSidecarsByRoot` requests, recent blobs recovery MAY also be done by querying the Execution Layer (i.e. via `engine_getBlobsV1`) +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 local execution layer to recover missing blobs relative to the current slot, they MUST behave as if the corresponding `blob_sidecar` had been received via gossip. In particular they MUST: From cb837f27c30dcc2101fe312c5195fc4362bbf302 Mon Sep 17 00:00:00 2001 From: Enrico Del Fante Date: Wed, 16 Oct 2024 18:24:59 +0200 Subject: [PATCH 18/21] Update specs/deneb/p2p-interface.md Co-authored-by: Justin Traglia <95511699+jtraglia@users.noreply.github.com> --- specs/deneb/p2p-interface.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specs/deneb/p2p-interface.md b/specs/deneb/p2p-interface.md index ec63c2f4b7..8cebccb006 100644 --- a/specs/deneb/p2p-interface.md +++ b/specs/deneb/p2p-interface.md @@ -317,7 +317,7 @@ Implementers are encouraged to leverage this method to increase the likelihood o When clients use local execution layer to recover missing blobs relative to the current slot, 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 (ie update the anti-equivocation cache). +- update gossip rule related data structures (i.e. update the anti-equivocation cache). ##### BlobSidecarsByRange v1 From 6c99b0bbf4293d63694112c5a22b0d1331be7a2d Mon Sep 17 00:00:00 2001 From: Enrico Del Fante Date: Wed, 16 Oct 2024 18:26:59 +0200 Subject: [PATCH 19/21] Update p2p-interface.md --- specs/deneb/p2p-interface.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/specs/deneb/p2p-interface.md b/specs/deneb/p2p-interface.md index 8cebccb006..a03532a146 100644 --- a/specs/deneb/p2p-interface.md +++ b/specs/deneb/p2p-interface.md @@ -316,8 +316,8 @@ In addition to `BlobSidecarsByRoot` requests, recent blobs MAY be retrieved by q 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 local execution layer to recover missing blobs relative to the current slot, 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). +* 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 From 1767c344930eaa4e9f8df935c568a6016bf6ed5f Mon Sep 17 00:00:00 2001 From: Enrico Del Fante Date: Wed, 16 Oct 2024 18:27:42 +0200 Subject: [PATCH 20/21] Update specs/deneb/p2p-interface.md Co-authored-by: Justin Traglia <95511699+jtraglia@users.noreply.github.com> --- specs/deneb/p2p-interface.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specs/deneb/p2p-interface.md b/specs/deneb/p2p-interface.md index a03532a146..6b6d2ea505 100644 --- a/specs/deneb/p2p-interface.md +++ b/specs/deneb/p2p-interface.md @@ -315,7 +315,7 @@ Clients SHOULD NOT respond with sidecars related to blocks that fail the beacon 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 local execution layer to recover missing blobs relative to the current slot, they MUST behave as if the corresponding `blob_sidecar` had been received via gossip. In particular they MUST: +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). From 9787a61c881ec104b06db6c94092b6cbd5495fcd Mon Sep 17 00:00:00 2001 From: Enrico Del Fante Date: Wed, 16 Oct 2024 18:27:56 +0200 Subject: [PATCH 21/21] Update specs/deneb/p2p-interface.md Co-authored-by: Justin Traglia <95511699+jtraglia@users.noreply.github.com> --- specs/deneb/p2p-interface.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specs/deneb/p2p-interface.md b/specs/deneb/p2p-interface.md index 6b6d2ea505..aa63ebe87e 100644 --- a/specs/deneb/p2p-interface.md +++ b/specs/deneb/p2p-interface.md @@ -34,7 +34,7 @@ The specification of these changes continues in the same format as the network s - [BeaconBlocksByRange v2](#beaconblocksbyrange-v2) - [BeaconBlocksByRoot v2](#beaconblocksbyroot-v2) - [BlobSidecarsByRoot v1](#blobsidecarsbyroot-v1) - - [Blobs recovery via local execution layer client](#blobs-recovery-via-local-execution-layer-client) + - [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)