β Here are all the usages of the HotShot Consensus struct outside crates/hotshot/:
sequencer/src/catchup.rs β 3 writes to HotShot Consensus
Imports hotshot_types::consensus::Consensus directly. Three functions take &Arc<RwLock<Consensus>> and write to it:
βββββββββββββ¬ββββββ¬ββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β Line β R/W β Function β What it does β βββββββββββββΌββββββΌββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 1643-1650 β W β add_fee_accounts_to_state() β Writes fee account proofs into validated_state_map β βββββββββββββΌββββββΌββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 1700-1707 β W β add_v2_reward_accounts_to_state() β Writes v2 reward account proofs into validated_state_map β βββββββββββββΌββββββΌββββββββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 1757-1764 β W β add_v1_reward_accounts_to_state() β Writes v1 reward account proofs into validated_state_map β βββββββββββββ΄ββββββ΄ββββββββββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
These are the only writes to HotShot Consensus from outside crates/hotshot/.
sequencer/src/api.rs β ~20 reads via double-indirection
The sequencer's Consensus<N, P> is SystemContextHandle, so access goes: handle.read().await β SystemContextHandle β .consensus() β Arc<RwLock> β .read().await
ββββββββββββββββββββββββββ¬ββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β Lines β R/W β What's read β ββββββββββββββββββββββββββΌββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 436-443 β R β current_proposal_participation() β ββββββββββββββββββββββββββΌββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 448-455 β R β previous_proposal_participation() β ββββββββββββββββββββββββββΌββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 460-467 β R β current_vote_participation() β ββββββββββββββββββββββββββΌββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 472-479 β R β previous_vote_participation() β ββββββββββββββββββββββββββΌββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 869-876 β R β Gets consensus() Arc, then calls add_fee_accounts_to_state (β write) β ββββββββββββββββββββββββββΌββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 963-970 β R β Gets consensus() Arc, then calls add_v2_reward_accounts_to_state (β write) β ββββββββββββββββββββββββββΌββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 1010-1017 β R β Gets consensus() Arc, then calls add_v1_reward_accounts_to_state (β write) β ββββββββββββββββββββββββββΌββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 1062-1065 β R β decided_state() for fee merkle tree β ββββββββββββββββββββββββββΌββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 1082-1085 β R β decided_state() for blocks frontier β ββββββββββββββββββββββββββΌββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 1100 β R β decided_state() for chain config β ββββββββββββββββββββββββββΌββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 1112-1119 β R β undecided_leaves() for leaf chain β ββββββββββββββββββββββββββΌββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 1161-1164 β R β decided_state() for v2 reward tree β ββββββββββββββββββββββββββΌββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 1183-1186 β R β decided_state() for v1 reward tree β ββββββββββββββββββββββββββΌββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 329-332 β R β cur_epoch() for highest epoch β ββββββββββββββββββββββββββΌββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 343-346 β R β membership_coordinator β ββββββββββββββββββββββββββΌββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 356, 386 β R β cur_epoch() for stake table endpoints β ββββββββββββββββββββββββββΌββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 399-402 β R β membership_coordinator for reward per epoch β ββββββββββββββββββββββββββΌββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 421-424 β R β membership_coordinator for authenticated validator map β ββββββββββββββββββββββββββΌββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 3470, 3542, 3624, 3631 β R β Tests: decided_state(), decided_leaf() β ββββββββββββββββββββββββββ΄ββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
sequencer/src/state_signature.rs β 1 read (via SystemContextHandle)
βββββββββββ¬ββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β Line β R/W β What's read β βββββββββββΌββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 110-113 β R β consensus_state.read().await β reads epoch_height and membership_coordinator β βββββββββββ΄ββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Note: this reads the SystemContextHandle, not the inner Consensus struct directly. It accesses consensus.epoch_height and consensus.membership_coordinator which are fields on the handle.
sequencer/src/proposal_fetcher.rs β 1 write + 2 reads (via handle β inner Consensus)
βββββββββββ¬ββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β Line β R/W β What's accessed β βββββββββββΌββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 134 β R β handle.consensus.read().await.event_stream() (reads handle, not inner Consensus) β βββββββββββΌββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 188 β R β handle.consensus.read().await.request_proposal() (reads handle) β βββββββββββΌββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 200-204 β W β handle.consensus() β consensus.write().await β writes leaf into validated_state_map via update_leaf() β βββββββββββ΄ββββββ΄ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
sequencer/src/request_response/data_source.rs β 3 writes + 1 read
ββββββββ¬ββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β Line β R/W β What's accessed β ββββββββΌββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 99 β W β Passes consensus.consensus() to add_fee_accounts_to_state() β ββββββββΌββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 115 β R β consensus.consensus().read().await.undecided_leaves() β ββββββββΌββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 243 β W β Passes to add_v2_reward_accounts_to_state() β ββββββββΌββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€ β 288 β W β Passes to add_v1_reward_accounts_to_state() β ββββββββ΄ββββββ΄ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
sequencer/src/request_response/recipient_source.rs β 1 read
βββββββββ¬ββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββ β Line β R/W β What's accessed β βββββββββΌββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββ€ β 34-37 β R β consensus.consensus().read().await.cur_epoch() β βββββββββ΄ββββββ΄βββββββββββββββββββββββββββββββββββββββββββββββββ
Summary outside crates/hotshot/
ββββββββββββββββββββββββββββββββββββββββββββββββββββββ¬ββββββββ¬ββββββββββββββββββββββββββββββ β File β Reads β Writes β ββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββΌββββββββββββββββββββββββββββββ€ β sequencer/src/api.rs β ~20 β 3 (via catchup helpers) β ββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββΌββββββββββββββββββββββββββββββ€ β sequencer/src/catchup.rs β 0 β 3 (direct Consensus writes) β ββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββΌββββββββββββββββββββββββββββββ€ β sequencer/src/proposal_fetcher.rs β 2 β 1 β ββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββΌββββββββββββββββββββββββββββββ€ β sequencer/src/request_response/data_source.rs β 1 β 3 (via catchup helpers) β ββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββΌββββββββββββββββββββββββββββββ€ β sequencer/src/request_response/recipient_source.rs β 1 β 0 β ββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββΌββββββββββββββββββββββββββββββ€ β sequencer/src/state_signature.rs β 1 β 0 β ββββββββββββββββββββββββββββββββββββββββββββββββββββββ΄ββββββββ΄ββββββββββββββββββββββββββββββ
The external writes are concentrated in the catchup/state-repair path (inserting fetched merkle proofs into validated_state_map) and the proposal fetcher (inserting fetched leaves). The reads are predominantly for API serving β participation stats, decided state, undecided leaves, and epoch/membership info.