Jan 15, 2-3 PM (66)
Jan 15, 3-4 PM (28)
Jan 15, 4-5 PM (19)
Jan 15, 5-6 PM (12)
Jan 15, 6-7 PM (9)
Jan 15, 7-8 PM (16)
Jan 15, 8-9 PM (48)
Jan 15, 9-10 PM (7)
Jan 15, 10-11 PM (27)
Jan 15, 11-12 AM (29)
Jan 16, 12-1 AM (9)
Jan 16, 1-2 AM (1)
Jan 16, 2-3 AM (1)
Jan 16, 3-4 AM (5)
Jan 16, 4-5 AM (5)
Jan 16, 5-6 AM (3)
Jan 16, 6-7 AM (2)
Jan 16, 7-8 AM (28)
Jan 16, 8-9 AM (41)
Jan 16, 9-10 AM (25)
Jan 16, 10-11 AM (25)
Jan 16, 11-12 PM (32)
Jan 16, 12-1 PM (25)
Jan 16, 1-2 PM (51)
Jan 16, 2-3 PM (52)
Jan 16, 3-4 PM (26)
Jan 16, 4-5 PM (25)
Jan 16, 5-6 PM (20)
Jan 16, 6-7 PM (11)
Jan 16, 7-8 PM (7)
Jan 16, 8-9 PM (13)
Jan 16, 9-10 PM (8)
Jan 16, 10-11 PM (36)
Jan 16, 11-12 AM (20)
Jan 17, 12-1 AM (10)
Jan 17, 1-2 AM (3)
Jan 17, 2-3 AM (0)
Jan 17, 3-4 AM (0)
Jan 17, 4-5 AM (0)
Jan 17, 5-6 AM (0)
Jan 17, 6-7 AM (1)
Jan 17, 7-8 AM (0)
Jan 17, 8-9 AM (1)
Jan 17, 9-10 AM (0)
Jan 17, 10-11 AM (0)
Jan 17, 11-12 PM (3)
Jan 17, 12-1 PM (6)
Jan 17, 1-2 PM (2)
Jan 17, 2-3 PM (3)
Jan 17, 3-4 PM (7)
Jan 17, 4-5 PM (5)
Jan 17, 5-6 PM (1)
Jan 17, 6-7 PM (0)
Jan 17, 7-8 PM (5)
Jan 17, 8-9 PM (3)
Jan 17, 9-10 PM (6)
Jan 17, 10-11 PM (21)
Jan 17, 11-12 AM (36)
Jan 18, 12-1 AM (5)
Jan 18, 1-2 AM (2)
Jan 18, 2-3 AM (2)
Jan 18, 3-4 AM (8)
Jan 18, 4-5 AM (0)
Jan 18, 5-6 AM (1)
Jan 18, 6-7 AM (1)
Jan 18, 7-8 AM (2)
Jan 18, 8-9 AM (3)
Jan 18, 9-10 AM (1)
Jan 18, 10-11 AM (1)
Jan 18, 11-12 PM (3)
Jan 18, 12-1 PM (3)
Jan 18, 1-2 PM (3)
Jan 18, 2-3 PM (1)
Jan 18, 3-4 PM (5)
Jan 18, 4-5 PM (9)
Jan 18, 5-6 PM (4)
Jan 18, 6-7 PM (5)
Jan 18, 7-8 PM (13)
Jan 18, 8-9 PM (16)
Jan 18, 9-10 PM (12)
Jan 18, 10-11 PM (22)
Jan 18, 11-12 AM (27)
Jan 19, 12-1 AM (2)
Jan 19, 1-2 AM (10)
Jan 19, 2-3 AM (17)
Jan 19, 3-4 AM (16)
Jan 19, 4-5 AM (1)
Jan 19, 5-6 AM (4)
Jan 19, 6-7 AM (1)
Jan 19, 7-8 AM (44)
Jan 19, 8-9 AM (48)
Jan 19, 9-10 AM (27)
Jan 19, 10-11 AM (14)
Jan 19, 11-12 PM (28)
Jan 19, 12-1 PM (43)
Jan 19, 1-2 PM (38)
Jan 19, 2-3 PM (22)
Jan 19, 3-4 PM (28)
Jan 19, 4-5 PM (26)
Jan 19, 5-6 PM (13)
Jan 19, 6-7 PM (29)
Jan 19, 7-8 PM (10)
Jan 19, 8-9 PM (12)
Jan 19, 9-10 PM (10)
Jan 19, 10-11 PM (28)
Jan 19, 11-12 AM (32)
Jan 20, 12-1 AM (8)
Jan 20, 1-2 AM (11)
Jan 20, 2-3 AM (27)
Jan 20, 3-4 AM (5)
Jan 20, 4-5 AM (5)
Jan 20, 5-6 AM (0)
Jan 20, 6-7 AM (6)
Jan 20, 7-8 AM (22)
Jan 20, 8-9 AM (44)
Jan 20, 9-10 AM (37)
Jan 20, 10-11 AM (76)
Jan 20, 11-12 PM (34)
Jan 20, 12-1 PM (81)
Jan 20, 1-2 PM (72)
Jan 20, 2-3 PM (31)
Jan 20, 3-4 PM (32)
Jan 20, 4-5 PM (40)
Jan 20, 5-6 PM (36)
Jan 20, 6-7 PM (11)
Jan 20, 7-8 PM (20)
Jan 20, 8-9 PM (17)
Jan 20, 9-10 PM (16)
Jan 20, 10-11 PM (31)
Jan 20, 11-12 AM (20)
Jan 21, 12-1 AM (4)
Jan 21, 1-2 AM (5)
Jan 21, 2-3 AM (2)
Jan 21, 3-4 AM (4)
Jan 21, 4-5 AM (8)
Jan 21, 5-6 AM (3)
Jan 21, 6-7 AM (6)
Jan 21, 7-8 AM (16)
Jan 21, 8-9 AM (36)
Jan 21, 9-10 AM (58)
Jan 21, 10-11 AM (54)
Jan 21, 11-12 PM (52)
Jan 21, 12-1 PM (42)
Jan 21, 1-2 PM (32)
Jan 21, 2-3 PM (36)
Jan 21, 3-4 PM (26)
Jan 21, 4-5 PM (17)
Jan 21, 5-6 PM (11)
Jan 21, 6-7 PM (13)
Jan 21, 7-8 PM (25)
Jan 21, 8-9 PM (27)
Jan 21, 9-10 PM (6)
Jan 21, 10-11 PM (28)
Jan 21, 11-12 AM (22)
Jan 22, 12-1 AM (9)
Jan 22, 1-2 AM (12)
Jan 22, 2-3 AM (10)
Jan 22, 3-4 AM (6)
Jan 22, 4-5 AM (4)
Jan 22, 5-6 AM (2)
Jan 22, 6-7 AM (10)
Jan 22, 7-8 AM (16)
Jan 22, 8-9 AM (11)
Jan 22, 9-10 AM (19)
Jan 22, 10-11 AM (38)
Jan 22, 11-12 PM (25)
Jan 22, 12-1 PM (22)
Jan 22, 1-2 PM (38)
Jan 22, 2-3 PM (4)
2,894 commits this week Jan 15, 2026 - Jan 22, 2026
Add P2P peer selection with dynamic topology churn
Implements Cardano-style P2P peer selection to make front-running more
difficult through dynamic topology changes. Peers cycle through cold,
warm, and hot states with periodic churn events.

Key changes:
- Add PeerManager class to track peer states per node
- Add PeerChurn simulation event for periodic state transitions
- Modify tx propagation to only use hot upstream peers in P2P mode
- Add CLI flags: --p2p, --p2p-hot-peers, --p2p-churn-interval,
  --p2p-demotion-prob

The feature is toggleable (off by default) to preserve existing
static topology behavior.
chore(deps): bump actions/setup-go from 6.1.0 to 6.2.0 (#83)
Bumps [actions/setup-go](https://github.com/actions/setup-go) from 6.1.0 to 6.2.0.
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](https://github.com/actions/setup-go/compare/4dc6199c7b1a012772edbd06daecab0f50c9053c...7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5)

---
updated-dependencies:
- dependency-name: actions/setup-go
  dependency-version: 6.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Simplify P2P peer selection to active set model
Replace cold/warm/hot state machine with a simpler active set model:
- Each node maintains a subset of active peers from topology
- Churn probabilistically replaces active peers with inactive ones
- Removes PeerState type and PeerInfo interface
- Renames CLI options: --p2p-hot-peers → --p2p-active-peers,
  --p2p-demotion-prob → --p2p-churn-prob

This mirrors Cardano's peer selection governor behavior with partial,
probabilistic churn rather than wholesale peer set replacement.
chore(deps): bump golang.org/x/crypto from 0.46.0 to 0.47.0 (#200)
Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.46.0 to 0.47.0.
- [Commits](https://github.com/golang/crypto/compare/v0.46.0...v0.47.0)

---
updated-dependencies:
- dependency-name: golang.org/x/crypto
  dependency-version: 0.47.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
chore(deps): bump actions/setup-go from 6.1.0 to 6.2.0 (#201)
Bumps [actions/setup-go](https://github.com/actions/setup-go) from 6.1.0 to 6.2.0.
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](https://github.com/actions/setup-go/compare/v6.1.0...v6.2.0)

---
updated-dependencies:
- dependency-name: actions/setup-go
  dependency-version: 6.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>