-
Notifications
You must be signed in to change notification settings - Fork 741
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
base: unstable
Are you sure you want to change the base?
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 |
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 |
|
Be great to have #6403 merged first, as there will be some more conflicts that needs to be resolved, and a bit easier in this order. We also need to prioritise block publishing, could do it in this PR. |
# Conflicts: # beacon_node/beacon_chain/src/data_availability_checker.rs # beacon_node/beacon_chain/src/data_availability_checker/overflow_lru_cache.rs # beacon_node/execution_layer/src/engine_api.rs # beacon_node/execution_layer/src/engine_api/json_structures.rs # beacon_node/network/src/network_beacon_processor/gossip_methods.rs # beacon_node/network/src/network_beacon_processor/mod.rs # beacon_node/network/src/network_beacon_processor/sync_methods.rs
Remaining TODOs
|
63427e9
to
0a2c6f7
Compare
beacon_node/beacon_chain/src/data_availability_checker/overflow_lru_cache.rs
Show resolved
Hide resolved
beacon_node/beacon_chain/src/data_availability_checker/overflow_lru_cache.rs
Show resolved
Hide resolved
# Conflicts: # Cargo.lock
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 |
Issue Addressed
Built on top of #5829, an optimization came up by @michaelsproul, to fetches 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