Starfish consensus protocol #10
polinikita
started this conversation in
Featured Ideas
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Abstract
We propose Starfish, a DAG-based consensus protocol enhancing Mysticeti. Starfish decouples block headers from transaction data, enabling push-based header dissemination, and encodes transaction data into Reed-Solomon shards for efficient reconstruction. These mechanisms improve liveness, reduce communication complexity to linear, and lower storage overhead, even in Byzantine environments.
Motivation
Starfish addresses three limitations in Mysticeti:
Liveness. Because of Byzantine behaviour, slow or deadlocked network connection and/or slow computational capability, some
validators, hereafter called slow validators, can share its own block to only a few selected peers in time. Blocks that reference
blocks of slow validators can stay suspended in the block managers for a long time depending on the depth of the missing
causal history. In Mysticeti, the blocks of the recent DAG are fetched by explicit requesting the missing parents of a given suspended block.
This slow synchronization of the recent DAG can trigger liveness issues in Mysticeti. Starfish allows for faster synchronization
of the recent DAG.
Communication complexity. For n=3f+1, we can observe in the network with f slow validators situations when each block of a slow validator, while being disseminated to f not-slow validators, will be requested from these validators by other validators.
This may lead to impractical quadratic communication complexity O(n^2). Starfish keeps the communication complexity linear
for all circumstances by using Reed-Solomon codes and using shards in dissemination of other blocks.
Storage overhead. Now each validator store the whole transaction data associated with a block. With Starfish, we can
store block headers with only one shard of transaction data, reducing the size of the consensus database.
Specification
Starfish requires implementation of a new crate as it contains many new components in consensus and modifies existing modules.
Below, we sum up the most important changes compared to the current version of Mysticeti:
The commitment could be a Merkle tree on the encoded shards. For own blocks, send full transaction data; for blocks of other validators, send shards together with proofs.
of the computed transaction commitment, b) be able to decode the transaction data from locally available shards, c) create
new blocks
Validates incoming block headers independently. If transaction data is received, verifies its commitment against the header to ensure correctness.
Handles transaction data retrieval and reconstruction. Requests missing data from the block author first (full data with sharding) or from nodes acknowledging the data (shards). Once reconstructed, data is forwarded to the DagState for storage and future serving.
Generates blocks with separate headers and transaction data. The data commitment should be computed based on the encoded transaction data by using some commitment scheme that allow for proofs, e.g. Merkle tree. Includes in a block header pending data acknowledgments.
In addition, it should track for which blocks, a validator has transaction data (pending acknowledgments). Another important structure should provide information about who knows which block headers to disseminate only those block headers
that are indeed needed.
Tracks data acknowledgments for past blocks, including only quorum-acknowledged data in new commits.
Broadcast own blocks with their transaction data and block headers potentially missing by peers.
Separates storage for headers and shards and own transaction data. Triggers data storage upon availability to minimize overhead.
Includes references to headers traversed by the Linearizer for data acknowledgment collection. Lists data blocks with a quorum of acknowledgments with optional bitmaps of acknowledging nodes to optimize data retrieval.
Starfish can be enabled via protocol parameters.
For theoretical details, see eprint.iacr.org/2025/567.
Rationale
Starfish’s design is driven by the need to enhance Mysticeti’s performance in bad network conditions and/or adversarial environment. Key decisions include:
Backwards Compatibility
Starfish introduces backwards incompatibilities with Mysticeti consensus crate:
Mitigation:
iotaledger/iota/crates/starfish
and enable Starfish with protocol parameters.iotaledger/iota/consensus
at a later pointTest Cases
The new consensus crate will need to be extensively tested. In particular, all exising modules, e.g. block verifier, will require modifications in existing tests.
All new modules (e.g. encoder/decoder) will require testing of typical possible scenarios.
To ensure that the new consensus serves its purposes, there should be tests mimicking slow validators that fail to properly disseminate their blocks and this behaviour should not affect the liveness of the consensus.
Reference Implementation
A prototype implementation is available at github.com/iotaledger/starfish. It includes:
This draft aids consensus developers and will be refined for production.
Beta Was this translation helpful? Give feedback.
All reactions