Nov 24, 11-12 PM (133)
Nov 24, 12-1 PM (88)
Nov 24, 1-2 PM (57)
Nov 24, 2-3 PM (52)
Nov 24, 3-4 PM (34)
Nov 24, 4-5 PM (33)
Nov 24, 5-6 PM (38)
Nov 24, 6-7 PM (22)
Nov 24, 7-8 PM (28)
Nov 24, 8-9 PM (12)
Nov 24, 9-10 PM (29)
Nov 24, 10-11 PM (34)
Nov 24, 11-12 AM (33)
Nov 25, 12-1 AM (8)
Nov 25, 1-2 AM (3)
Nov 25, 2-3 AM (7)
Nov 25, 3-4 AM (6)
Nov 25, 4-5 AM (5)
Nov 25, 5-6 AM (8)
Nov 25, 6-7 AM (20)
Nov 25, 7-8 AM (23)
Nov 25, 8-9 AM (53)
Nov 25, 9-10 AM (52)
Nov 25, 10-11 AM (47)
Nov 25, 11-12 PM (50)
Nov 25, 12-1 PM (76)
Nov 25, 1-2 PM (58)
Nov 25, 2-3 PM (68)
Nov 25, 3-4 PM (43)
Nov 25, 4-5 PM (40)
Nov 25, 5-6 PM (29)
Nov 25, 6-7 PM (32)
Nov 25, 7-8 PM (50)
Nov 25, 8-9 PM (13)
Nov 25, 9-10 PM (30)
Nov 25, 10-11 PM (33)
Nov 25, 11-12 AM (27)
Nov 26, 12-1 AM (10)
Nov 26, 1-2 AM (8)
Nov 26, 2-3 AM (2)
Nov 26, 3-4 AM (4)
Nov 26, 4-5 AM (13)
Nov 26, 5-6 AM (4)
Nov 26, 6-7 AM (4)
Nov 26, 7-8 AM (29)
Nov 26, 8-9 AM (49)
Nov 26, 9-10 AM (84)
Nov 26, 10-11 AM (60)
Nov 26, 11-12 PM (86)
Nov 26, 12-1 PM (72)
Nov 26, 1-2 PM (62)
Nov 26, 2-3 PM (45)
Nov 26, 3-4 PM (58)
Nov 26, 4-5 PM (25)
Nov 26, 5-6 PM (28)
Nov 26, 6-7 PM (14)
Nov 26, 7-8 PM (23)
Nov 26, 8-9 PM (24)
Nov 26, 9-10 PM (18)
Nov 26, 10-11 PM (38)
Nov 26, 11-12 AM (32)
Nov 27, 12-1 AM (4)
Nov 27, 1-2 AM (2)
Nov 27, 2-3 AM (8)
Nov 27, 3-4 AM (5)
Nov 27, 4-5 AM (2)
Nov 27, 5-6 AM (7)
Nov 27, 6-7 AM (11)
Nov 27, 7-8 AM (31)
Nov 27, 8-9 AM (48)
Nov 27, 9-10 AM (42)
Nov 27, 10-11 AM (61)
Nov 27, 11-12 PM (42)
Nov 27, 12-1 PM (125)
Nov 27, 1-2 PM (27)
Nov 27, 2-3 PM (53)
Nov 27, 3-4 PM (50)
Nov 27, 4-5 PM (34)
Nov 27, 5-6 PM (31)
Nov 27, 6-7 PM (24)
Nov 27, 7-8 PM (9)
Nov 27, 8-9 PM (3)
Nov 27, 9-10 PM (7)
Nov 27, 10-11 PM (24)
Nov 27, 11-12 AM (21)
Nov 28, 12-1 AM (3)
Nov 28, 1-2 AM (2)
Nov 28, 2-3 AM (3)
Nov 28, 3-4 AM (11)
Nov 28, 4-5 AM (3)
Nov 28, 5-6 AM (30)
Nov 28, 6-7 AM (10)
Nov 28, 7-8 AM (20)
Nov 28, 8-9 AM (53)
Nov 28, 9-10 AM (52)
Nov 28, 10-11 AM (75)
Nov 28, 11-12 PM (49)
Nov 28, 12-1 PM (34)
Nov 28, 1-2 PM (17)
Nov 28, 2-3 PM (101)
Nov 28, 3-4 PM (23)
Nov 28, 4-5 PM (20)
Nov 28, 5-6 PM (8)
Nov 28, 6-7 PM (29)
Nov 28, 7-8 PM (69)
Nov 28, 8-9 PM (2)
Nov 28, 9-10 PM (6)
Nov 28, 10-11 PM (26)
Nov 28, 11-12 AM (12)
Nov 29, 12-1 AM (9)
Nov 29, 1-2 AM (2)
Nov 29, 2-3 AM (0)
Nov 29, 3-4 AM (3)
Nov 29, 4-5 AM (4)
Nov 29, 5-6 AM (0)
Nov 29, 6-7 AM (1)
Nov 29, 7-8 AM (0)
Nov 29, 8-9 AM (2)
Nov 29, 9-10 AM (2)
Nov 29, 10-11 AM (7)
Nov 29, 11-12 PM (0)
Nov 29, 12-1 PM (2)
Nov 29, 1-2 PM (14)
Nov 29, 2-3 PM (1)
Nov 29, 3-4 PM (10)
Nov 29, 4-5 PM (7)
Nov 29, 5-6 PM (6)
Nov 29, 6-7 PM (6)
Nov 29, 7-8 PM (5)
Nov 29, 8-9 PM (2)
Nov 29, 9-10 PM (0)
Nov 29, 10-11 PM (21)
Nov 29, 11-12 AM (25)
Nov 30, 12-1 AM (2)
Nov 30, 1-2 AM (2)
Nov 30, 2-3 AM (4)
Nov 30, 3-4 AM (4)
Nov 30, 4-5 AM (2)
Nov 30, 5-6 AM (1)
Nov 30, 6-7 AM (0)
Nov 30, 7-8 AM (0)
Nov 30, 8-9 AM (2)
Nov 30, 9-10 AM (4)
Nov 30, 10-11 AM (6)
Nov 30, 11-12 PM (6)
Nov 30, 12-1 PM (34)
Nov 30, 1-2 PM (3)
Nov 30, 2-3 PM (3)
Nov 30, 3-4 PM (5)
Nov 30, 4-5 PM (3)
Nov 30, 5-6 PM (3)
Nov 30, 6-7 PM (3)
Nov 30, 7-8 PM (5)
Nov 30, 8-9 PM (19)
Nov 30, 9-10 PM (5)
Nov 30, 10-11 PM (24)
Nov 30, 11-12 AM (24)
Dec 01, 12-1 AM (5)
Dec 01, 1-2 AM (6)
Dec 01, 2-3 AM (5)
Dec 01, 3-4 AM (28)
Dec 01, 4-5 AM (7)
Dec 01, 5-6 AM (8)
Dec 01, 6-7 AM (12)
Dec 01, 7-8 AM (47)
Dec 01, 8-9 AM (27)
Dec 01, 9-10 AM (17)
Dec 01, 10-11 AM (46)
Dec 01, 11-12 PM (5)
3,967 commits this week Nov 24, 2025 - Dec 01, 2025
Define WithArrivalTime combinator
This commit defines a generic WithArrivalTime combinator to wrap a value
with its arrival time (as a Relative time). This is needed by Peras in
several places, e.g., to evaluate the voting rules.

Notably, we store a raw Relative time instead of a (arguably more apt)
SlotNo or PerasRoundNo to defer as much as possible having to deal with
the case where making this translation (timestamp -> slot/round) is not
possible due to the HFC time translation horizon. Instead, the client
will need to perform this translation in a context where such a failure
cannot occur or can be more easily dealt with.

Co-authored-by: Agustin Mista <[email protected]>
Co-authored-by: Alexander Esgen <[email protected]>
Co-authored-by: Georgy Lukyanov <[email protected]>
Co-authored-by: Thomas BAGREL <[email protected]>
Co-authored-by: Nicolas BACQUEY <[email protected]>
Store most recent cert in the PerasCertDB
This commit adds a method to the PerasCertDB API to retrieve the latest
certificate seen. This is certificate needed to implement the Peras voting
and must be kept around even after garbage collection. Because of this,
we extend the internal state of the PerasCertDB to store this special
certificate on the side, and (potentially) update it after new
certificates are added to the database.

Co-authored-by: Agustin Mista <[email protected]>
Co-authored-by: Alexander Esgen <[email protected]>
Co-authored-by: Georgy Lukyanov <[email protected]>
Co-authored-by: Thomas BAGREL <[email protected]>
Co-authored-by: Nicolas BACQUEY <[email protected]>
Wrap validated Peras certificates with arrival time
This commit wraps the existing ValidatedPerasCerts stored in the
PerasCertDB with their corresponding arrival time. In addition, it
adapts tests to use either a randomly generated arrival time, or (when
appropriate) one generated by a monotonically increasing SystemTime.

Co-authored-by: Agustin Mista <[email protected]>
Co-authored-by: Alexander Esgen <[email protected]>
Co-authored-by: Georgy Lukyanov <[email protected]>
Co-authored-by: Thomas BAGREL <[email protected]>
Co-authored-by: Nicolas BACQUEY <[email protected]>
Tweak HasPerasCertX typeclasses
This commit simplifies the interface of the HasPerasCertX typeclasses,
removing the StandardHash superclass constraint, and splitting them into
several smaller typeclasses.

Co-authored-by: Agustin Mista <[email protected]>
Co-authored-by: Alexander Esgen <[email protected]>
Co-authored-by: Georgy Lukyanov <[email protected]>
Co-authored-by: Thomas BAGREL <[email protected]>
Co-authored-by: Nicolas BACQUEY <[email protected]>