-
Notifications
You must be signed in to change notification settings - Fork 747
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
Improving blob propagation post-PeerDAS with Decentralized Blob Building #6268
Conversation
Some early testing results:
Bandwidth-limited fullnode (
This shows EL inbound traffic (fetch blos from peers) isn't too bad for MAX 6 blobs Next steps:
|
This was originally intended experimental but it's been pretty stable, 800 epochs on devnet and 100% participation, and I think we can merge this. |
dbf4bb8
to
01b91cb
Compare
Bring the attack to prod |
@jimmygchen Any issues with the kzg libraries? |
🙈 Trying to not mention the flag I use for testing. Luckily Just realized we need the |
beacon_node/network/src/network_beacon_processor/sync_methods.rs
Outdated
Show resolved
Hide resolved
Nope all good so far! I was just flagging the potential challenges that I could imagine when we increase blob count, but I haven't actually run into any issues yet. Will keep you updated, thanks |
|
I'm observing a few things from testing: The node sometimes end up publishing all blobs, if the pending component is not found in availability cache after the block has been made available ( lighthouse/beacon_node/beacon_chain/src/fetch_blobs.rs Lines 153 to 165 in 0f32b73
The evidence is that we also see a blob processing error DuplicateFullyImported when trying to process the already imported blobs:
Possible solution:
UPDATE: I think a better solution would be gossip verifying the blobs prior to publishing - this is consistent with our blob publishing logic and if the blob has already been observed, then we would get |
…ache to detect duplicates before publishing.
…to das-fetch-blobs # Conflicts: # beacon_node/network/src/network_beacon_processor/mod.rs
@dapplion @michaelsproul
I'll deploy this to some testnet nodes. |
Some findings from mainnet testing from a small sample size:
|
@mergify queue |
✅ The pull request has been merged automaticallyThe pull request has been merged automatically at 5f053b0 |
One more thing I was thinking about - we may not want to always fetch blobs on rpc response, as it only makes sense / works if we're close to the head slot, but I guess lighthouse/beacon_node/network/src/network_beacon_processor/sync_methods.rs Lines 192 to 199 in 8060e86
|
Issue Addressed
Built on top of #5829, an optimization came up by @michaelsproul, to fetch blobs from the EL to reduce the delay to block import.
This PR goes further to publish the blobs to the network, which helps improve the resiliency of the network, by having nodes with more resources contribute to blob propagation. This experimental solution is an attempt to solve the self building proposer bandwidth issue discussed on R&D Discord and described in @dankrad's post here.
The benefits of this proposals are:
Proposed Changes
fetch_blobs_and_publish
is triggered after a node has processed a gossip / rpc block and is still missing blob components. Once the node fetches the blob from EL, it then publishes the remaining blobs that hasn't seen on gossip to the network.Next steps:
Challenges:
c-kzg-4844
andrust-eth-kzg
) may struggle with constructing large number of cells and proofs at once due to the current memory allocation approach.eth/68
) hence doesn't incur the same gossip amplification cost (8x) on the CL.TODO before merging
engine_getBlobsV1
ethereum/consensus-specs#3864engine_getBlobsV1
ethereum/execution-apis#559Reference:
unstable
Get blobs from the EL's blob pool #5829