feat(consensus): blobs feature#17
Conversation
Tests that a call to `PrepareProposal` returns a blob inr `PrepareProposalResponse`.
Type `Blob` is a `[]byte` slice, so there's no need for it to be a pointer.
It now returns a different string when the blob is nil, as type `Block` does.
Co-authored-by: Anton Kaliaev <anton.kalyaev@gmail.com> Signed-off-by: Alessandro Sforzin <alesforz@gmail.com>
Regenerated the proto files as well. Moved the proto definition of `BlobID` to the `types.proto` file to fix an import cycle.
Since `BlobID` is not used in the consensus logic yet, this change is harmless. However, it allows us to keep this PR focused solely on `Proposal`-related changes. In a future PR, we’ll handle the proper creation of `BlobID` by implementing blob splitting into multiple parts. Additionally, this PR includes a refactor for improved readability.
Context The RoundState is a data structure keeping track of the status of the consensus algorithm at the current height. Because CometBFT will gossip blobs separately rather than including them into blocks, the RoundState must keep track of them during consensus rounds at any given height. Changes This PR updates the RoundState and RoundStateSimple data structures to include fields handling the blob during rounds of consensus. Note: another PR will take care of updating these new RoundState fields during consensus.
feat(state): Add BlobID type
feat(state): Update `Proposal` with `BlobID`
feat(state): `RoundState` does not need `Valid*` and `Locked*` blob fields.
feat(state): Add `BlobPartMessage` and `HasBlobPartMessage` to consensus state and reactor
feat(abci): Add `Blob` to `ProcessProposalRequest`
feat(state): Split `Blob` into blob parts and send it to internal message queue
feat(state): Add blob-related fields to `PeerRoundState`
feat(consensus): Gossip block parts
feat(e2e): test app update to allow blob testing
feat(blob): Implement basic blob metrics
|
LGTM generally speaking @greg-szabo |
|
Regarding the issues that surfaced on the first review:
I can do a merge from develop into the branch to apply all new updates since the branch was cut. |
|
|
I fixed the code issues and the e2e test bug. The nightly tests I ran locally all checked out. |
|
Thanks @greg-szabo And the govulncheck (go version bump and x/crypto bump)? Then I think we're good to go 🚀 |


The blobs feature allows a blob of bytes to be part of the consensus mechanism without including it in the block store. This blob can contain data interpreted by the application.