Skip to content

Conversation

@nalepae
Copy link
Contributor

@nalepae nalepae commented Jun 21, 2024

Reading:

Peerdas from scratch

Remaining tasks must have:

Features:

  • Backfill: Backfill data columns when checkpoint syncing and when validator custody increases (in progress @kasey). Don't forget to update the earliest available slot.

Misc:

  • E2E: Update for basic Fulu testing (in progress @james-prysm)
  • Subnets: Check why [2025-10-07 14:08:06.74] DEBUG sync: All subnets have enough connected peers minimum=6 topic=/eth2/c7022d55/sync_committee is printed even when not validating.
  • Blobs/Data columns Beacon API: Do not reconstruct (or at least do not reconstruct cells proofs)
  • Batch publishing: Publish data column sidecars using batch publishing instead one by one.
  • Reconstruction: If a data column sidecars reconstruction is in progress or is about to start for a given root, and if some of these sidecars are requested via RPC before the end of the reconstruction, then hold the request and responds only when the reconstruction is done. (Rationale)
  • RPCs and peering: Take into account earliest_available_slot when peering/requesting
  • Initial sync: When retrieving not all sidecars, save them to avoid re-requesting them during the next iteration. (As it is done when fetching origin sidecars.)
  • Retention window: Be sure we request sidecars only for those in the retention window.
  • Metrics: Add PeerDAS specific metrics (In progress @KatyaRyazantseva)
  • Attestations subnets (Not peerdas related): Check why we are subscribed to so many attestations subnets. (It may be normal.)
  • Grandine (not PeerDAS related): See why Prysm cannot peer with Grandine nodes.

Remaining tasks nice to have have:

  • Fanout peers: When managing at least one validator, target 6 fanout peers only a few slots/epochs before proposing a block, not always.
  • custody group count: Penalize peers increasing the earliest available slot without increasing the custody group count, taking correctly into account pruning (weak subjectivity period).
  • KZG library: Replace the cKZG library by the goKZG one. (In progress @nalepae @kevaundray)
  • prysmctl: Implement byRoot and byRange data columns requests.
  • Chaos testing: Indroduce a nasty peer flag that holds AND/OR (both are important) alterate data columns on RPC responses. (In progress 0xPC02)
  • ENR (not peerDAS related) Find why sometimes ENR records are not correctly updated via discovery.
  • Trusted setup: Add a unit test to pull the upstream JSON and compare it against ours to ensure there’s no discrepancy.
  • Blob sidecars beacon API: If 64 <= cgc < 128 and requiring not all the blobs, avoid reconstructing all of them (while respecting the VerifiedRoDataColumnSidecar paradigm. we have an optimization for this
  • KZG: Avoid the power switch.
  • Verification: Implement tests in a different package.
  • Blocks: Implement tests in a different package.
  • Libp2p (Not peerDAS related): Remove all the libp2p fails without this delay comments in tests.
  • ENR seq bootnode (Not peerDAS related) ensure that ENR seq never goes backward on bootnode
  • SSZ by default for validator client for expensive endpoints (Not PeerDAS related), particularly the get and submit block endpoints. get is done ( partially default validator client rest mode to ssz for post block #15645)
  • Block fetcher: Use blockFetcherConfig directly in blockFetcher
  • Rate limiter: Carefully check that the value of rateLimiter.Remaining is non-negative before converting to uint64.
  • ROBlock: In s.pendingBlobsRequestForBlock, use ROBlock instead signed block + root all the way down.
  • FetchDataColumnSidecars: If returning on error, return as well already available sidecars. It may be useful, for example for fetchOriginColumns which implement retries.

Remaining open questions:

  • Subnet unsubscription (not peerDAS related): Handle the same way dynamic (fork epoch) and non dynamic (fork epoch + 1) unsubscriptions.
  • Peer ban: What happens if a peer announces less custody groups via Metadata/ENR than the minimal requirement? Ban?

nalepae and others added 11 commits November 27, 2024 10:11
* Add Support For Discovery Of Column Subnets

* Lint for SubnetsPerNode

* Manu's Review

* Change to a better name
* Add Data Column Subscriber

* Add Data Column Vaidator

* Wire all Handlers In

* Fix Build

* Fix Test

* Fix IP in Test

* Fix IP in Test
* Add RPC Handler

* Add Column Requests

* Update beacon-chain/db/filesystem/blob.go

Co-authored-by: Manu NALEPA <[email protected]>

* Update beacon-chain/p2p/rpc_topic_mappings.go

Co-authored-by: Manu NALEPA <[email protected]>

* Manu's Review

* Manu's Review

* Interface Fixes

* mock manager

---------

Co-authored-by: Manu NALEPA <[email protected]>
* Bump `c-kzg-4844` lib to the `das` branch.

* Implement `MerkleProofKZGCommitments`.

* Implement `das-core.md`.

* Use `peerdas.CustodyColumnSubnets` and `peerdas.CustodyColumns`.

* `CustodyColumnSubnets`: Include `i` in the for loop.

* Remove `computeSubscribedColumnSubnet`.

* Remove `peerdas.CustodyColumns` out of the for loop.
* Remove capital letter from error messages.

* `[4]byte` => `[fieldparams.VersionLength]byte`.

* Prometheus: Remove extra `committee`.

They are probably due to a bad copy/paste.

Note: The name of the probe itself is remaining,
to ensure backward compatibility.

* Implement Proposer RPC for data columns.

* Fix TestProposer_ProposeBlock_OK test.

* Remove default peerDAS activation.

* `validateDataColumn`: Workaround to return a `VerifiedRODataColumn`
* Add new DA check

* Exit early in the event no commitments exist.

* Gazelle

* Fix Mock Broadcaster

* Fix Test Setup

* Update beacon-chain/blockchain/process_block.go

Co-authored-by: Manu NALEPA <[email protected]>

* Manu's Review

* Fix Build

---------

Co-authored-by: Manu NALEPA <[email protected]>
* Update `consensus_spec_version` to `v1.5.0-alpha.1`.

* `CustodyColumns`: Fix and implement spec tests.

* Make deepsource happy.

* `^uint64(0)` => `math.MaxUint64`.

* Fix `TestLoadConfigFile` test.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.