# Distributed sample proof computation
Previous work: https://notes.ethereum.org/@dankrad/self-builder-strategies
https://notes.ethereum.org/@fradamt/peerdas-local-block-building
Idea: We want ultrapeers to fill in the sample proofs for self builders so that self builders
* require less bandwidth
* don't need to build sample proofs locally on the critical path
## Sketch
Self builders only use blobs in the public mempool. By them being in the public mempool (and the node having taken part in gossiping them), we are reasonably sure that they are available to all ultrapeers.
When the node builds the block, it first sends out the block itself, and only after having sent the block to all peers sends the blob samples.
Any ultrapeer that gets a block checks if it has all the corresponding blobs, and if so, computes all samples and distributes them
## Optimizations
### (1) Send block header first
We create a new gossipsub topic only to send block headers (including the blob commitment proofs), so these can be gossiped very quickly.
### (2) Ultrapeers pre-compute all proofs as blobs enter the transaction pool
If we assume an average of 16 blobs per block (target), and 250 ms to compute the proof, this would mean 4s of computation per block. At 8 cores, this is 1/24th or 4% of total CPU time, and probably acceptable for ultrapeers to support the network.
In return, they could send out the proofs immediately upon receiving a header/block, and thus reduce the latency by 250-500ms
### (3) Self-builders notify ultrapeers
We add a gossipsub channel where self-builders can send a signed message at the start of the slot before there block, notifying ultrapeers that they would like to send a block without sample proofs.
Ultrapeers then prepare proofs only for those slots where they have been notified.