# blob builder
high-level goal(s):
* transform raw blobs into form necessary for DAS
* serve data/proofs via API
* disseminate data/proofs into a DHT
* simulate reconstruction
libraries:
* [`ethereum-consensus`](https://github.com/ralexstokes/ethereum-consensus)
* [`beacon-api-client`](https://github.com/ralexstokes/beacon-api-client/tree/main)
* [`c-kzg-4844`](https://github.com/ethereum/c-kzg-4844)
* [`blst`](https://github.com/supranational/blst)
pieces:
1. retrieve blobs from CL via [`blob_sidecars`](https://ethereum.github.io/beacon-APIs/#/Beacon/getBlobSidecars) beacon API
2. erasure code blobs
3. generate KZG commitments to encoded blobs
4. generate KZG proofs for blob rows/columns/samples
5. serve KZG commitments and proofs
6. DHT
7. reconstruction
pieces in code:
1. retrieve the blobs
* connect to beacon node w/ [`BeaconApiClient`](https://github.com/ralexstokes/beacon-api-client/blob/d838d930f80fdfcadfe32147bcb2e805aec074bc/src/api_client.rs#L60)
* manage slot times w/ [`ethereum_consensus::Clock`](https://github.com/ralexstokes/ethereum-consensus/blob/2bcb97563bb8dcb15802d1a280b58f21577ea3e2/ethereum-consensus/src/clock.rs#L43)
* retrieve blobs for each slot via `BeaconApiClient::get_blob_sidecars`
* hand off blobs to (2)
* (optional) archive raw blobs to database
2. erasure code blobs
* FFT stuff
* reverse bit order (RBO)
* roots of unity
* blob field elements are treated as polynomial evaluations at specific root of unity in RBO
* polynomial interpolation to recover polynomial from evaluations
3. generate KZG commitments
4. generate KZG proofs