@@ -969,8 +969,13 @@ test "trackNewVotesAndNotifyConfirmations filter" {
969969 var prng_state : std.Random.DefaultPrng = .init (std .testing .random_seed );
970970 const prng = prng_state .random ();
971971
972+ var processed_slot : sig.replay.trackers.ForkChoiceProcessedSlot = .{};
973+ var confirmed_slot : sig.replay.trackers.OptimisticallyConfirmedSlot = .{};
974+
972975 var slot_tracker : SlotTracker = try .init (
973976 allocator ,
977+ & processed_slot ,
978+ & confirmed_slot ,
974979 0 ,
975980 try slotTrackerElementGenesis (allocator , .DEFAULT ),
976981 );
@@ -1047,6 +1052,7 @@ test "trackNewVotesAndNotifyConfirmations filter" {
10471052 & new_optimistic_confirmed_slots ,
10481053 is_gossip_vote ,
10491054 & latest_vote_slot_per_validator ,
1055+ & confirmed_slot ,
10501056 );
10511057 }
10521058 diff .sortAsc ();
@@ -1096,10 +1102,14 @@ test "trackNewVotesAndNotifyConfirmations filter" {
10961102 & new_optimistic_confirmed_slots ,
10971103 is_gossip_vote ,
10981104 & latest_vote_slot_per_validator ,
1105+ & confirmed_slot ,
10991106 );
11001107 }
11011108 diff .sortAsc ();
11021109 try std .testing .expectEqualSlices (Slot , diff .map .keys (), &.{ 7 , 8 });
1110+
1111+ // No stake delegated, so optimistic confirmation should not be reached.
1112+ try std .testing .expectEqual (0 , confirmed_slot .get ());
11031113}
11041114
11051115const ThresholdReachedResults = std .bit_set .IntegerBitSet (THRESHOLDS_TO_CHECK .len );
@@ -1735,7 +1745,10 @@ test "simple usage" {
17351745 var registry : sig .prometheus .Registry (.{}) = .init (allocator );
17361746 defer registry .deinit ();
17371747
1738- var slot_tracker : SlotTracker = try .init (allocator , 0 , .{
1748+ var processed_slot : sig.replay.trackers.ForkChoiceProcessedSlot = .{};
1749+ var confirmed_slot : sig.replay.trackers.OptimisticallyConfirmedSlot = .{};
1750+
1751+ var slot_tracker : SlotTracker = try .init (allocator , & processed_slot , & confirmed_slot , 0 , .{
17391752 .constants = .{
17401753 .parent_slot = 0 ,
17411754 .parent_hash = .ZEROES ,
@@ -1785,11 +1798,7 @@ test "simple usage" {
17851798 const replay_votes_channel : * sig .sync .Channel (vote_parser .ParsedVote ) = try .create (allocator );
17861799 defer replay_votes_channel .destroy ();
17871800
1788- var vote_collector : VoteCollector = try .init (
1789- .EPOCH_ZERO ,
1790- slot_data_provider .rootSlot (),
1791- & registry ,
1792- );
1801+ var vote_collector : VoteCollector = try .init (.EPOCH_ZERO , slot_data_provider .rootSlot (), & registry , & confirmed_slot );
17931802 defer vote_collector .deinit (allocator );
17941803
17951804 try vote_collector .collectAndProcessVotes (allocator , .FOR_TESTS , .{
@@ -1799,6 +1808,11 @@ test "simple usage" {
17991808 .ledger = & ledger ,
18001809 .gossip_votes = null ,
18011810 });
1811+
1812+ // Since no votes were sent, slot trackers should remain at their initialized state.
1813+ // NOTE: processed slot is not used here, but required to construct SlotTracker.
1814+ try std .testing .expectEqual (0 , processed_slot .get ());
1815+ try std .testing .expectEqual (0 , confirmed_slot .get ());
18021816}
18031817
18041818test "check trackers" {
@@ -1822,11 +1836,14 @@ test "check trackers" {
18221836
18231837 const root_slot : Slot = 0 ;
18241838
1839+ var processed_slot : sig.replay.trackers.ForkChoiceProcessedSlot = .{};
1840+ var confirmed_slot : sig.replay.trackers.OptimisticallyConfirmedSlot = .{};
1841+
18251842 var slot_tracker : SlotTracker = blk : {
18261843 var state : sig.core.SlotState = .GENESIS ;
18271844 errdefer state .deinit (allocator );
18281845
1829- break :blk try .init (allocator , root_slot , .{
1846+ break :blk try .init (allocator , & processed_slot , & confirmed_slot , root_slot , .{
18301847 .constants = .{
18311848 .parent_slot = root_slot - | 1 ,
18321849 .parent_hash = .ZEROES ,
@@ -1889,7 +1906,7 @@ test "check trackers" {
18891906 defer replay_votes_channel .destroy ();
18901907
18911908 var vote_collector : VoteCollector =
1892- try .init (.EPOCH_ZERO , slot_data_provider .rootSlot (), & registry );
1909+ try .init (.EPOCH_ZERO , slot_data_provider .rootSlot (), & registry , & confirmed_slot );
18931910 defer vote_collector .deinit (allocator );
18941911
18951912 var expected_trackers : std .ArrayListUnmanaged (struct { Slot , TestSlotVoteTracker }) = .empty ;
@@ -2005,6 +2022,11 @@ test "check trackers" {
20052022 expected_trackers .items ,
20062023 actual_trackers .items ,
20072024 );
2025+
2026+ // Votes were processed but no stake was delegated to validators, so
2027+ // optimisitic confirmation was not reached.
2028+ try std .testing .expectEqual (0 , confirmed_slot .get ());
2029+ try std .testing .expectEqual (0 , confirmed_slot .get ());
20082030}
20092031
20102032// tests for OptimisticConfirmationVerifier moved to optimistic_vote_verifier.zig
0 commit comments