01
Banks
Yellowstone tags every update with a node-local bank_id, so two versions of one slot can be told apart. The head cache buffers each (slot, bank_id) separately, shows the first bank to freeze to processed readers (at the default minimum), and switches to whichever bank a confirmed or finalized status names.
Tower BFT streams send no bank ID, so Superbank uses bank_id = slot and a fork drops the whole slot. Bank IDs never cross a subscription: the ingestor's stream numbers banks independently, and a head-cache reconnect clears everything.
02
Commitment
Superbank only sees Yellowstone's processed, confirmed and finalized statuses. Under Alpenglow, Agave reports confirmed and finalized together when votor roots a block that has a fast- or slow-finalization certificate.
Under Tower BFT, confirmed comes shortly after a supermajority votes, and finalized about 32 slots later at the root. So under Alpenglow the head cache holds finalized data for most of its window, and HEAD_CACHE_MIN_COMMITMENT=confirmed behaves like finalized.
03
Footers & sources
Alpenglow blocks end with a footer (SIMD-0307). The ingestor writes the finalized winner's bank_id, bank_hash, producer time and user agent into blocks_metadata, and getBlock returns them with footer: true.
The Alpenglow genesis certificate marks slot G, the last Tower BFT block; getAgGenesisCert proxies it from a trusted Agave node. Jetstreamer, and Fumarole when given a bound, stop at G or at an attested preactivation slot; Yellowstone gRPC and unbounded Fumarole carry on live.