onflow / onflow/flow-go

[LN Decentralization E] Proof of Collection Finality

Open
#8,024 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Epic Preserve Protocol S-BFT
Dominant language
Go
Stars
575
Forks
217
Avg merge
4d 20h
Merged PRs (30d)
9

Description

A collection guarantee is an assertion about collection c . From the protocol perspective, a collection guarantee must prove two aspects: (i) the cluster block that embodies collection c was finalized and (ii) which collectors promised to provide the collection data to other nodes in the network (they will be slashed if c goes missing).

We currently trust the collectors to only send finalized collections to consensus but for BFT, finalization would need to be verified by all consensus nodes.

Details

Groups of collectors (known as ‘collector clusters’) use a mini-version of HotStuff to agree on which transactions to include in their collections. This ensures robust data availability and mitigates resource exhaustion attacks by preventing individual collectors from including garbage or repetitive transactions. As long as the fraction of Byzantine collectors in each cluster is less than one-third, malicious collections proposed by permissionless collectors will not be finalized by the cluster consensus, and the proposing collector will eventually be slashed.

Important terminology:

  • collection is a batch of transactions

    Note that it does not contain any signatures of other evidence for its validity.

  • Cluster blocks are produced by each cluster consensus. Essentially, a cluster block’s payload is a collection. In other words, the cluster block header carries the information about who proposed the block, votes for the parent collection, signatures, etc.

  • A Collection Guarantee is a cryptographic proof about collection c

    • the cluster block that embodies collection c was finalized
    • which collectors promised to provide the collection data to other nodes in the network (they will be slashed if c goes missing).

The Flow protocol mandates that collectors may only send finalized collections to the consensus nodes for inclusion in blocks. However, we have a shortcut in our implementation assumes only honest collectors and hence never checks whether collections are finalized. However, a single byzantine collector could submit collection guarantees to consensus nodes lying that they are finalized, when intact they are not.

Before admitting permissionless collectors, this shortcut must be removed by adding proofs of collection finality.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with model/flow/collection.go, model/cluster/block.go, and model/flow/collectionGuarantee.go to understand the collection, cluster-block, and guarantee structures. Trace where collection guarantees are admitted by consensus and determine how finalized-collection evidence can be verified; done means consensus nodes reject guarantees without valid collection-finality proofs.

Written by the indexing model from the issue text.

Assessment

Tech stack
go
Domain
blockchain, distributed-systems
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.