Skip to content

chore(consensus): remove Mysticeti and make Starfish the sole consensus protocol#11280

Closed
polinikita wants to merge 8 commits intodevelopfrom
starfish/chore/remove-mysticeti
Closed

chore(consensus): remove Mysticeti and make Starfish the sole consensus protocol#11280
polinikita wants to merge 8 commits intodevelopfrom
starfish/chore/remove-mysticeti

Conversation

@polinikita
Copy link
Copy Markdown
Member

Description of change

Starfish is now enabled on all networks (Devnet, Testnet, Mainnet), which makes the legacy Mysticeti implementation dead code. This PR removes Mysticeti end-to-end:

  • Delete the entire consensus/ directory (consensus/core, consensus/config, consensus/simtests) and drop the consensus-core / consensus-config workspace dependencies.
  • Remove mysticeti_adapter, mysticeti_manager, MysticetiConsensusHandler, LazyMysticetiClient, and the ProtocolManager::Mysticeti variant. ConsensusManager now delegates directly to StarfishManager — no more runtime protocol selection, no more CONSENSUS_PROTOCOL env var, no more pick_protocol().
  • Remove the ConsensusChoice enum and its accessors from iota-protocol-config. Migrate all remaining consensus_core:: / consensus_config:: imports to starfish_core / starfish_config.
  • Update iota-aws-orchestrator: drop the Mysticeti and SwapEachEpoch variants, strip the CONSENSUS_PROTOCOL=... export from the validator setup script.
  • CI: delete the Mysticeti simtest job from nightly.yml, drop the consensusProtocol input from _rust_tests.yml, remove the leftover CONSENSUS_PROTOCOL forwarding from simtest-run.sh, _rust.yml, docker-compose, and run.sh.
  • Dev tools: delete the legacy consensus-overview Grafana dashboard (Starfish has its own), simplify the private-network run.sh, fuzz/benchmark scripts, and Python stress runners to a single-protocol flow. dual-run.sh no longer alternates between protocols.
  • Docs: rewrite consensus.mdx, about-iota.mdx, iota-architecture.mdx, epochs.mdx, iota-compared.mdx, and research-papers.mdx to describe Starfish as the current protocol and keep Mysticeti as historical context only. Update the consensus quiz answers.
  • Misc: rename test_iota_and_mysticeti_committee_are_same*_consensus_committee_are_same, change starfish tonic client user_agent from mysticeti to starfish, remove mentions of Mysticeti from comments throughout the tree.

Net effect: 134 files changed, 210 insertions, 51,101 deletions.

Residuals intentionally left in place

  • crates/iota-protocol-config/src/snapshots/*.snap — historical serialized protocol configs, must stay frozen.
  • The max_accumulated_txn_cost_per_object_in_mysticeti_commit field in iota-protocol-config and its call sites — renaming the field changes protocol config serialization and requires regenerating all snapshot files + bumping the protocol version. Deferred to a follow-up.
  • crates/iota-open-rpc/spec/openrpc.json — auto-generated; mirrors the field name above.
  • Historical references to Mysticeti in docs (predecessor context, HammerHead lineage) are intentional.

Links to any relevant issues

Fixes #11075

How the change has been tested

  • Basic tests (linting, compilation, formatting, unit/integration tests)
  • Patch-specific tests (correctness, functionality coverage)
  • I have added tests that prove my fix is effective or that my feature works
  • I have checked that new and existing unit tests pass locally with my changes

This commit removes the Mysticeti consensus protocol implementation
as it has been fully replaced by the Starfish protocol on all networks.

Changes:
- Delete entire consensus/ directory (config, core, simtests crates)
- Remove consensus-config and consensus-core dependencies from workspace
- Update all source files to use starfish_config and starfish_core
- Remove mysticeti_adapter and mysticeti_manager modules
- Remove MysticetiConsensusHandler in favor of StarfishConsensusHandler
- Simplify ConsensusManager to only support Starfish protocol
- Remove ConsensusChoice enum from protocol config
- Remove Mysticeti CI job from nightly workflow
- Remove CONSENSUS_PROTOCOL environment variable support
- Update imports in test files to use starfish_core types
- Update epoch_start_iota_system_state.rs to use Starfish committee

Resolves: #11075
- Simplify ConsensusProtocol enum to only support Starfish
- Remove Mysticeti and SwapEachEpoch variants
- Update protocol setup to always use Starfish
…nsus

Update the consensus_protocol parameter comment to clarify that only
Starfish is currently supported, removing outdated reference to
switching between Mysticeti and Starfish.
This function was only used by the Mysticeti consensus protocol
which has been removed. It is no longer needed.
… fuzzer

- Delete legacy consensus-overview Grafana dashboard (replaced by starfish-overview)
- Strip -p/PROTOCOL flag from run.sh, run-all-benchmark.sh, run-all-fuzz.sh, dual-run.sh
- Simplify fuzzer stress runners to a single run (drop paired Mysticeti/Starfish loop)
- Update READMEs and fuzzer docs to drop Mysticeti references
…lters

- Drop consensus-{config,core} filter entries from .github/crates-filters.yml
- Simplify split-cluster-sync-check.sh to assume Starfish (only remaining protocol)
- Rename test_iota_and_mysticeti_committee_are_same to *_consensus_committee_are_same
- Replace Mysticeti references in code comments (tonic_network, universal_committer,
  commit_consumer, checkpoint_executor, protocol-config) with neutral wording
- Change starfish tonic client user_agent from "mysticeti" to "starfish"
Rewrite consensus-related documentation to reflect Starfish as the
production protocol on all IOTA networks. Mysticeti is kept only as
historical context (Starfish's predecessor) where relevant.

- consensus.mdx: replace Mysticeti-first narrative with Starfish-first;
  keep 'Improvements over Mysticeti' as a historical subsection
- about-iota.mdx, iota-architecture.mdx, epochs.mdx, iota-compared.mdx:
  update the protocol the validators run to Starfish
- research-papers.mdx: update relevance notes for Mysticeti, Starfish,
  and HammerHead entries to reflect current production state
- consensus quiz: update answers to reference Starfish
@github-actions github-actions Bot added documentation Improvements or additions to documentation ci Issues related to our CI pipeline labels Apr 22, 2026
@iota-ci iota-ci added consensus Issues related to the Core Consensus team core-protocol labels Apr 22, 2026
@polinikita
Copy link
Copy Markdown
Member Author

Superseded by 4 focused PRs for easier review. Tracking issue remains #11075.

@polinikita polinikita closed this Apr 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci Issues related to our CI pipeline consensus Issues related to the Core Consensus team core-protocol documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Remove Mysticeti

2 participants