@@ -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 ,
@@ -1789,6 +1802,7 @@ test "simple usage" {
17891802 .EPOCH_ZERO ,
17901803 slot_data_provider .rootSlot (),
17911804 & registry ,
1805+ & confirmed_slot ,
17921806 );
17931807 defer vote_collector .deinit (allocator );
17941808
@@ -1799,6 +1813,11 @@ test "simple usage" {
17991813 .ledger = & ledger ,
18001814 .gossip_votes = null ,
18011815 });
1816+
1817+ // Since no votes were sent, slot trackers should remain at their initialized state.
1818+ // NOTE: processed slot is not used here, but required to construct SlotTracker.
1819+ try std .testing .expectEqual (0 , processed_slot .get ());
1820+ try std .testing .expectEqual (0 , confirmed_slot .get ());
18021821}
18031822
18041823test "check trackers" {
@@ -1822,11 +1841,14 @@ test "check trackers" {
18221841
18231842 const root_slot : Slot = 0 ;
18241843
1844+ var processed_slot : sig.replay.trackers.ForkChoiceProcessedSlot = .{};
1845+ var confirmed_slot : sig.replay.trackers.OptimisticallyConfirmedSlot = .{};
1846+
18251847 var slot_tracker : SlotTracker = blk : {
18261848 var state : sig.core.SlotState = .GENESIS ;
18271849 errdefer state .deinit (allocator );
18281850
1829- break :blk try .init (allocator , root_slot , .{
1851+ break :blk try .init (allocator , & processed_slot , & confirmed_slot , root_slot , .{
18301852 .constants = .{
18311853 .parent_slot = root_slot - | 1 ,
18321854 .parent_hash = .ZEROES ,
@@ -1889,7 +1911,7 @@ test "check trackers" {
18891911 defer replay_votes_channel .destroy ();
18901912
18911913 var vote_collector : VoteCollector =
1892- try .init (.EPOCH_ZERO , slot_data_provider .rootSlot (), & registry );
1914+ try .init (.EPOCH_ZERO , slot_data_provider .rootSlot (), & registry , & confirmed_slot );
18931915 defer vote_collector .deinit (allocator );
18941916
18951917 var expected_trackers : std .ArrayListUnmanaged (struct { Slot , TestSlotVoteTracker }) = .empty ;
@@ -2005,6 +2027,11 @@ test "check trackers" {
20052027 expected_trackers .items ,
20062028 actual_trackers .items ,
20072029 );
2030+
2031+ // Votes were processed but no stake was delegated to validators, so
2032+ // optimisitic confirmation was not reached.
2033+ try std .testing .expectEqual (0 , confirmed_slot .get ());
2034+ try std .testing .expectEqual (0 , confirmed_slot .get ());
20082035}
20092036
20102037// tests for OptimisticConfirmationVerifier moved to optimistic_vote_verifier.zig
0 commit comments