Mar 14, 5-6 AM (1)
Mar 14, 6-7 AM (0)
Mar 14, 7-8 AM (1)
Mar 14, 8-9 AM (19)
Mar 14, 9-10 AM (3)
Mar 14, 10-11 AM (0)
Mar 14, 11-12 PM (3)
Mar 14, 12-1 PM (1)
Mar 14, 1-2 PM (20)
Mar 14, 2-3 PM (5)
Mar 14, 3-4 PM (0)
Mar 14, 4-5 PM (0)
Mar 14, 5-6 PM (0)
Mar 14, 6-7 PM (2)
Mar 14, 7-8 PM (4)
Mar 14, 8-9 PM (11)
Mar 14, 9-10 PM (10)
Mar 14, 10-11 PM (20)
Mar 14, 11-12 AM (66)
Mar 15, 12-1 AM (6)
Mar 15, 1-2 AM (23)
Mar 15, 2-3 AM (8)
Mar 15, 3-4 AM (0)
Mar 15, 4-5 AM (1)
Mar 15, 5-6 AM (1)
Mar 15, 6-7 AM (0)
Mar 15, 7-8 AM (0)
Mar 15, 8-9 AM (2)
Mar 15, 9-10 AM (14)
Mar 15, 10-11 AM (1)
Mar 15, 11-12 PM (7)
Mar 15, 12-1 PM (20)
Mar 15, 1-2 PM (19)
Mar 15, 2-3 PM (30)
Mar 15, 3-4 PM (2)
Mar 15, 4-5 PM (4)
Mar 15, 5-6 PM (4)
Mar 15, 6-7 PM (8)
Mar 15, 7-8 PM (8)
Mar 15, 8-9 PM (11)
Mar 15, 9-10 PM (7)
Mar 15, 10-11 PM (28)
Mar 15, 11-12 AM (23)
Mar 16, 12-1 AM (7)
Mar 16, 1-2 AM (19)
Mar 16, 2-3 AM (14)
Mar 16, 3-4 AM (9)
Mar 16, 4-5 AM (0)
Mar 16, 5-6 AM (5)
Mar 16, 6-7 AM (22)
Mar 16, 7-8 AM (32)
Mar 16, 8-9 AM (57)
Mar 16, 9-10 AM (91)
Mar 16, 10-11 AM (62)
Mar 16, 11-12 PM (78)
Mar 16, 12-1 PM (50)
Mar 16, 1-2 PM (60)
Mar 16, 2-3 PM (29)
Mar 16, 3-4 PM (84)
Mar 16, 4-5 PM (48)
Mar 16, 5-6 PM (23)
Mar 16, 6-7 PM (87)
Mar 16, 7-8 PM (29)
Mar 16, 8-9 PM (24)
Mar 16, 9-10 PM (18)
Mar 16, 10-11 PM (35)
Mar 16, 11-12 AM (33)
Mar 17, 12-1 AM (13)
Mar 17, 1-2 AM (14)
Mar 17, 2-3 AM (6)
Mar 17, 3-4 AM (5)
Mar 17, 4-5 AM (7)
Mar 17, 5-6 AM (16)
Mar 17, 6-7 AM (15)
Mar 17, 7-8 AM (37)
Mar 17, 8-9 AM (198)
Mar 17, 9-10 AM (39)
Mar 17, 10-11 AM (37)
Mar 17, 11-12 PM (20)
Mar 17, 12-1 PM (119)
Mar 17, 1-2 PM (110)
Mar 17, 2-3 PM (49)
Mar 17, 3-4 PM (88)
Mar 17, 4-5 PM (28)
Mar 17, 5-6 PM (13)
Mar 17, 6-7 PM (12)
Mar 17, 7-8 PM (30)
Mar 17, 8-9 PM (39)
Mar 17, 9-10 PM (30)
Mar 17, 10-11 PM (37)
Mar 17, 11-12 AM (21)
Mar 18, 12-1 AM (1)
Mar 18, 1-2 AM (11)
Mar 18, 2-3 AM (9)
Mar 18, 3-4 AM (0)
Mar 18, 4-5 AM (6)
Mar 18, 5-6 AM (5)
Mar 18, 6-7 AM (3)
Mar 18, 7-8 AM (12)
Mar 18, 8-9 AM (19)
Mar 18, 9-10 AM (80)
Mar 18, 10-11 AM (87)
Mar 18, 11-12 PM (64)
Mar 18, 12-1 PM (72)
Mar 18, 1-2 PM (49)
Mar 18, 2-3 PM (130)
Mar 18, 3-4 PM (44)
Mar 18, 4-5 PM (26)
Mar 18, 5-6 PM (33)
Mar 18, 6-7 PM (43)
Mar 18, 7-8 PM (39)
Mar 18, 8-9 PM (23)
Mar 18, 9-10 PM (32)
Mar 18, 10-11 PM (40)
Mar 18, 11-12 AM (31)
Mar 19, 12-1 AM (30)
Mar 19, 1-2 AM (13)
Mar 19, 2-3 AM (6)
Mar 19, 3-4 AM (4)
Mar 19, 4-5 AM (4)
Mar 19, 5-6 AM (1)
Mar 19, 6-7 AM (29)
Mar 19, 7-8 AM (58)
Mar 19, 8-9 AM (118)
Mar 19, 9-10 AM (73)
Mar 19, 10-11 AM (199)
Mar 19, 11-12 PM (54)
Mar 19, 12-1 PM (61)
Mar 19, 1-2 PM (48)
Mar 19, 2-3 PM (76)
Mar 19, 3-4 PM (137)
Mar 19, 4-5 PM (29)
Mar 19, 5-6 PM (19)
Mar 19, 6-7 PM (31)
Mar 19, 7-8 PM (19)
Mar 19, 8-9 PM (36)
Mar 19, 9-10 PM (13)
Mar 19, 10-11 PM (41)
Mar 19, 11-12 AM (18)
Mar 20, 12-1 AM (4)
Mar 20, 1-2 AM (4)
Mar 20, 2-3 AM (8)
Mar 20, 3-4 AM (9)
Mar 20, 4-5 AM (10)
Mar 20, 5-6 AM (4)
Mar 20, 6-7 AM (51)
Mar 20, 7-8 AM (27)
Mar 20, 8-9 AM (29)
Mar 20, 9-10 AM (38)
Mar 20, 10-11 AM (33)
Mar 20, 11-12 PM (22)
Mar 20, 12-1 PM (31)
Mar 20, 1-2 PM (91)
Mar 20, 2-3 PM (19)
Mar 20, 3-4 PM (52)
Mar 20, 4-5 PM (24)
Mar 20, 5-6 PM (19)
Mar 20, 6-7 PM (14)
Mar 20, 7-8 PM (15)
Mar 20, 8-9 PM (15)
Mar 20, 9-10 PM (16)
Mar 20, 10-11 PM (22)
Mar 20, 11-12 AM (18)
Mar 21, 12-1 AM (7)
Mar 21, 1-2 AM (2)
Mar 21, 2-3 AM (5)
Mar 21, 3-4 AM (2)
Mar 21, 4-5 AM (1)
Mar 21, 5-6 AM (0)
4,859 commits this week Mar 14, 2026 - Mar 21, 2026
fix(connmanager): guard RemoveConnection against connection ID reuse
OutboundSourcePort causes replacement connections to the same peer to
get the same connection ID. The old connection's cleanup goroutine
would unconditionally delete the map entry, destroying the new
connection's registration. Guard the delete with a pointer comparison
so stale cleanups are no-ops.

Signed-off-by: wcatz <[email protected]>
fix(ledger): skip validation for phase-2 failed transactions
Transactions with isValid=false are consensus-valid on Cardano: the
block producer determined the Plutus script failure, and collateral
is consumed instead of regular inputs. The gouroboros Transaction
interface already handles this via Consumed()/Produced() which return
the correct collateral-based UTxO sets.

Previously dingo ran ValidateTxFunc on all transactions regardless of
the isValid flag, causing phase-1 UTxO validation rules to reject the
block (e.g. bad inputs, value not conserved) because they checked the
regular inputs which were never consumed on-chain.

Gate the ValidateTxFunc call on tx.IsValid() so phase-2 failed TXs
are recorded with their collateral effects without triggering spurious
block validation failures.

Signed-off-by: wcatz <[email protected]>