Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
9723f39
feat(core): add MysticetiCompress protocol variant with basic wiring
polinikita Mar 19, 2026
b0bd2a3
feat(core): add unprovable_certificate field to BlockHeader
polinikita Mar 19, 2026
874fde2
feat(core): add unprovable_certificate field to BlockHeader for Mysti…
polinikita Mar 19, 2026
3b1bc0c
feat(core): non-leader reference compression and unprovable_certificate
polinikita Mar 19, 2026
fe4d4bb
refactor(core): generalize dual DAG logic for MysticetiCompress
polinikita Mar 19, 2026
d63c403
refactor(core): use uses_dual_dag() helper for protocol checks
polinikita Mar 19, 2026
e357c3d
feat(core): add unprovable_certificate dependency tracking for Mystic…
polinikita Mar 19, 2026
67ae40f
feat(core): add Bluestreak protocol
polinikita Mar 19, 2026
1616407
fix(core): default Bluestreak dissemination to pull
polinikita Mar 19, 2026
40e9a3c
perf(core): make Bluestreak clean transitions incremental
polinikita Mar 20, 2026
27e052c
fix(core): audit fixes for Bluestreak protocol
polinikita Mar 20, 2026
e7f6a52
perf(core): make utilization timers non-overlapping
polinikita Mar 20, 2026
9c90082
perf(core): use BTreeSet::range() for certified round lookups
polinikita Mar 20, 2026
bb33413
perf(core): add decided-cache fast path in Bluestreak commit
polinikita Mar 20, 2026
f3c2195
fix(core): remove round filter from Bluestreak leader block references
polinikita Mar 20, 2026
3cd2657
fix(core): only re-emit Commits from decided cache in Bluestreak
polinikita Mar 20, 2026
b5c1746
style(core): fix rustfmt formatting in dag_state.rs
polinikita Mar 20, 2026
8f0665c
feat(monitoring): average core timers across validators and reorder c…
polinikita Mar 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion crates/orchestrator/src/benchmark.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ pub struct BenchmarkParametersGeneric<N, C> {
/// paying for data sent between the nodes.
pub use_internal_ip_address: bool,
// Consensus protocol to deploy
// (starfish | starfish-speed | starfish-bls | mysticeti | cordial-miners)
// (starfish | starfish-speed | starfish-bls | mysticeti |
// cordial-miners | bluestreak)
pub consensus_protocol: String,
/// number Byzantine nodes
pub byzantine_nodes: usize,
Expand Down
2 changes: 1 addition & 1 deletion crates/orchestrator/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ pub enum Operation {

/// Consensus to deploy. Available options:
/// starfish | starfish-speed | starfish-bls | mysticeti |
/// cordial-miners
/// cordial-miners | bluestreak
#[clap(long, value_name = "STRING", default_value = "starfish", global = true)]
consensus: String,

Expand Down
4 changes: 0 additions & 4 deletions crates/orchestrator/src/measurements.rs
Original file line number Diff line number Diff line change
Expand Up @@ -926,10 +926,6 @@ utilization_timer{proc="Committer::indirect_decide"} 693165
utilization_timer{proc="Core::add_blocks"} 5694911
utilization_timer{proc="Core::run_block_handler"} 198119
utilization_timer{proc="Core::try_new_block"} 1285400
utilization_timer{proc="Core::try_new_block::build block"} 674913
utilization_timer{proc="Core::try_new_block::encoding"} 31602
utilization_timer{proc="Core::try_new_block::serialize block"} 11766
utilization_timer{proc="Core::try_new_block::writing to disk"} 188706
utilization_timer{proc="Core::try_new_commit"} 6288004
utilization_timer{proc="Network: verify blocks"} 41800099
utilization_timer{proc="Syncer::try_new_commit"} 8128094
Expand Down
9 changes: 6 additions & 3 deletions crates/starfish-core/src/broadcaster.rs
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,8 @@ impl BroadcasterParameters {
ConsensusProtocol::Starfish
| ConsensusProtocol::StarfishSpeed
| ConsensusProtocol::StarfishBls
| ConsensusProtocol::CordialMiners => Self {
| ConsensusProtocol::CordialMiners
| ConsensusProtocol::Bluestreak => Self {
batch_own_block_size: committee_size,
batch_other_block_size: committee_size * committee_size,
batch_shard_size: committee_size * committee_size,
Expand Down Expand Up @@ -417,7 +418,8 @@ where
}
ConsensusProtocol::Mysticeti
| ConsensusProtocol::CordialMiners
| ConsensusProtocol::SailfishPlusPlus => {
| ConsensusProtocol::SailfishPlusPlus
| ConsensusProtocol::Bluestreak => {
let all_blocks = self.inner.dag_state.get_storage_blocks(&block_references);

let mut blocks = Vec::new();
Expand Down Expand Up @@ -821,7 +823,8 @@ fn push_transport_format(consensus_protocol: ConsensusProtocol) -> PushOtherBloc
| ConsensusProtocol::StarfishBls => PushOtherBlocksFormat::HeadersAndShards,
ConsensusProtocol::CordialMiners
| ConsensusProtocol::Mysticeti
| ConsensusProtocol::SailfishPlusPlus => PushOtherBlocksFormat::FullBlocks,
| ConsensusProtocol::SailfishPlusPlus
| ConsensusProtocol::Bluestreak => PushOtherBlocksFormat::FullBlocks,
}
}

Expand Down
11 changes: 10 additions & 1 deletion crates/starfish-core/src/consensus/linearizer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ impl Linearizer {
let mut to_commit = Vec::new();
let leader_block_ref = *leader_block.reference();
let min_round = leader_block_ref.round.saturating_sub(MAX_TRAVERSAL_DEPTH);
let follow_unprovable = dag_state.consensus_protocol == ConsensusProtocol::Bluestreak;

assert!(self.committed.insert(leader_block_ref));
let mut current_level = vec![leader_block];
Expand All @@ -115,6 +116,13 @@ impl Linearizer {
next_refs.push(*reference);
}
}
if follow_unprovable {
if let Some(cert_ref) = x.unprovable_certificate() {
if cert_ref.round >= min_round && self.committed.insert(*cert_ref) {
next_refs.push(*cert_ref);
}
}
}
}
if next_refs.is_empty() {
break;
Expand Down Expand Up @@ -259,7 +267,8 @@ impl Linearizer {
}
ConsensusProtocol::Mysticeti
| ConsensusProtocol::CordialMiners
| ConsensusProtocol::SailfishPlusPlus => {
| ConsensusProtocol::SailfishPlusPlus
| ConsensusProtocol::Bluestreak => {
self.collect_subdag_ancestors(dag_state, leader_block)
}
};
Expand Down
Loading
Loading