-
Notifications
You must be signed in to change notification settings - Fork 746
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
Get blobs from the EL's blob pool #5829
Conversation
Should also consider re-publishing blobs from the EL on gossip in order to speed up propagation network-wide! |
Really nice! This makes a lot of sense and can definitely improve status quo before peerdas.
Some options:
|
My latest commit with IPC doesn't work (yet), but here's a summary of performance using HTTP:
In total this puts the latency for all blobs to be fetched and processed at 20+30+30 = 80ms total for 6-blob blocks. Compared to gossip, the additional cost is <= 50ms, because the DA processing is required for gossip blobs too, and they require KZG inclusion proof verification rather than construction. |
What's taking so long? Could be that it's verifying the kzg proof? If yes that can be skipped as you have just created it in the same process |
Notes regarding future compatibility of this feature with PeerDAS: PeerDAS importability condition is to have seen and validated its custody columns. If a node can get all block's blobs from the EL pool (and they are valid) it is guaranteed that it can recompute its custody columns. Therefore, if a node has seen all block's blobs it can "optimistically" consider that block as an available head before importing the columns. At that moment it can choose to either:
There's no consensus safety degradation from this optimistic behavior. Only that the node is announcing to its peers "I have imported block X, with my custody columns being Y". Then its peers can request via ReqResp said columns which the peer does not have yet. The node should make sure to compute or receive the columns before |
Finally got a chance to update the Reth prototype & this PR to match new spec: Seems to be working |
Closing in favour of: |
Proposed Changes
This PR implements an experimental optimisation to fetch blobs via JSON-RPC from the EL. If a blob has already been seen in the public mempool, then it is often unnecessary to wait for it to arrive on P2P gossip. This PR uses a new JSON-RPC method (
engine_getBlobsV1
) which allows the CL to load the blobs quickly from the EL's blob pool.Spec here:
engine_getBlobsV1
ethereum/execution-apis#559This PR works in tandem with my changes to Reth:
engine_getBlobsV1
paradigmxyz/reth#9723TODO before merging: