Jun 09, 3-4 AM (3)
Jun 09, 4-5 AM (26)
Jun 09, 5-6 AM (5)
Jun 09, 6-7 AM (23)
Jun 09, 7-8 AM (51)
Jun 09, 8-9 AM (35)
Jun 09, 9-10 AM (45)
Jun 09, 10-11 AM (51)
Jun 09, 11-12 PM (46)
Jun 09, 12-1 PM (86)
Jun 09, 1-2 PM (84)
Jun 09, 2-3 PM (36)
Jun 09, 3-4 PM (38)
Jun 09, 4-5 PM (16)
Jun 09, 5-6 PM (18)
Jun 09, 6-7 PM (18)
Jun 09, 7-8 PM (19)
Jun 09, 8-9 PM (16)
Jun 09, 9-10 PM (16)
Jun 09, 10-11 PM (28)
Jun 09, 11-12 AM (10)
Jun 10, 12-1 AM (11)
Jun 10, 1-2 AM (16)
Jun 10, 2-3 AM (11)
Jun 10, 3-4 AM (19)
Jun 10, 4-5 AM (5)
Jun 10, 5-6 AM (2)
Jun 10, 6-7 AM (46)
Jun 10, 7-8 AM (82)
Jun 10, 8-9 AM (18)
Jun 10, 9-10 AM (59)
Jun 10, 10-11 AM (46)
Jun 10, 11-12 PM (134)
Jun 10, 12-1 PM (49)
Jun 10, 1-2 PM (33)
Jun 10, 2-3 PM (32)
Jun 10, 3-4 PM (28)
Jun 10, 4-5 PM (36)
Jun 10, 5-6 PM (12)
Jun 10, 6-7 PM (12)
Jun 10, 7-8 PM (38)
Jun 10, 8-9 PM (11)
Jun 10, 9-10 PM (10)
Jun 10, 10-11 PM (20)
Jun 10, 11-12 AM (7)
Jun 11, 12-1 AM (10)
Jun 11, 1-2 AM (2)
Jun 11, 2-3 AM (0)
Jun 11, 3-4 AM (2)
Jun 11, 4-5 AM (8)
Jun 11, 5-6 AM (12)
Jun 11, 6-7 AM (34)
Jun 11, 7-8 AM (106)
Jun 11, 8-9 AM (37)
Jun 11, 9-10 AM (20)
Jun 11, 10-11 AM (105)
Jun 11, 11-12 PM (25)
Jun 11, 12-1 PM (38)
Jun 11, 1-2 PM (38)
Jun 11, 2-3 PM (15)
Jun 11, 3-4 PM (20)
Jun 11, 4-5 PM (5)
Jun 11, 5-6 PM (7)
Jun 11, 6-7 PM (26)
Jun 11, 7-8 PM (90)
Jun 11, 8-9 PM (11)
Jun 11, 9-10 PM (5)
Jun 11, 10-11 PM (25)
Jun 11, 11-12 AM (5)
Jun 12, 12-1 AM (8)
Jun 12, 1-2 AM (2)
Jun 12, 2-3 AM (2)
Jun 12, 3-4 AM (4)
Jun 12, 4-5 AM (7)
Jun 12, 5-6 AM (15)
Jun 12, 6-7 AM (46)
Jun 12, 7-8 AM (19)
Jun 12, 8-9 AM (28)
Jun 12, 9-10 AM (22)
Jun 12, 10-11 AM (29)
Jun 12, 11-12 PM (42)
Jun 12, 12-1 PM (24)
Jun 12, 1-2 PM (26)
Jun 12, 2-3 PM (22)
Jun 12, 3-4 PM (38)
Jun 12, 4-5 PM (23)
Jun 12, 5-6 PM (19)
Jun 12, 6-7 PM (26)
Jun 12, 7-8 PM (12)
Jun 12, 8-9 PM (17)
Jun 12, 9-10 PM (5)
Jun 12, 10-11 PM (30)
Jun 12, 11-12 AM (6)
Jun 13, 12-1 AM (6)
Jun 13, 1-2 AM (2)
Jun 13, 2-3 AM (0)
Jun 13, 3-4 AM (3)
Jun 13, 4-5 AM (0)
Jun 13, 5-6 AM (3)
Jun 13, 6-7 AM (7)
Jun 13, 7-8 AM (5)
Jun 13, 8-9 AM (6)
Jun 13, 9-10 AM (14)
Jun 13, 10-11 AM (12)
Jun 13, 11-12 PM (2)
Jun 13, 12-1 PM (23)
Jun 13, 1-2 PM (21)
Jun 13, 2-3 PM (8)
Jun 13, 3-4 PM (1)
Jun 13, 4-5 PM (4)
Jun 13, 5-6 PM (4)
Jun 13, 6-7 PM (3)
Jun 13, 7-8 PM (3)
Jun 13, 8-9 PM (7)
Jun 13, 9-10 PM (16)
Jun 13, 10-11 PM (19)
Jun 13, 11-12 AM (24)
Jun 14, 12-1 AM (18)
Jun 14, 1-2 AM (0)
Jun 14, 2-3 AM (0)
Jun 14, 3-4 AM (0)
Jun 14, 4-5 AM (2)
Jun 14, 5-6 AM (0)
Jun 14, 6-7 AM (2)
Jun 14, 7-8 AM (3)
Jun 14, 8-9 AM (0)
Jun 14, 9-10 AM (1)
Jun 14, 10-11 AM (2)
Jun 14, 11-12 PM (10)
Jun 14, 12-1 PM (8)
Jun 14, 1-2 PM (4)
Jun 14, 2-3 PM (8)
Jun 14, 3-4 PM (2)
Jun 14, 4-5 PM (1)
Jun 14, 5-6 PM (1)
Jun 14, 6-7 PM (0)
Jun 14, 7-8 PM (11)
Jun 14, 8-9 PM (1)
Jun 14, 9-10 PM (13)
Jun 14, 10-11 PM (29)
Jun 14, 11-12 AM (23)
Jun 15, 12-1 AM (8)
Jun 15, 1-2 AM (10)
Jun 15, 2-3 AM (4)
Jun 15, 3-4 AM (4)
Jun 15, 4-5 AM (1)
Jun 15, 5-6 AM (3)
Jun 15, 6-7 AM (3)
Jun 15, 7-8 AM (41)
Jun 15, 8-9 AM (24)
Jun 15, 9-10 AM (11)
Jun 15, 10-11 AM (34)
Jun 15, 11-12 PM (25)
Jun 15, 12-1 PM (40)
Jun 15, 1-2 PM (26)
Jun 15, 2-3 PM (20)
Jun 15, 3-4 PM (24)
Jun 15, 4-5 PM (21)
Jun 15, 5-6 PM (13)
Jun 15, 6-7 PM (13)
Jun 15, 7-8 PM (7)
Jun 15, 8-9 PM (26)
Jun 15, 9-10 PM (20)
Jun 15, 10-11 PM (22)
Jun 15, 11-12 AM (39)
Jun 16, 12-1 AM (7)
Jun 16, 1-2 AM (5)
Jun 16, 2-3 AM (1)
Jun 16, 3-4 AM (1)
3,309 commits this week Jun 09, 2026 - Jun 16, 2026
feat(tray/notifications): multi-target monitoring + native dispatch
Adds a fyne-free notifications engine that consumes ConnectionManager
events, derives one rule per (kind, param) from a multi-target
SetupPlan (Wallets/DReps/Pools/MonitorEverything), and emits Requests
through a tumbling-window rate limiter that connection alerts bypass.
A Dispatch goroutine in setupTray turns each Request into a native
fyne notification — replacing the inline dispatchNotification. Rule
bodies render through Cardano-aware template helpers (trunc / ada /
outAddr / outAda / field) shared with the Telegram output via
internal/cardanofmt.

Wizard step 3 is rebuilt with three editable target sections plus an
exclusive Monitor Everything toggle, with cross-template validation
hints. SetRules atomically swaps the engine's rule set on
reconfigure (draining stale pre-swap Requests) so changes take
effect without a restart.

Filter persistence lives on TrayConfig (not the sidecar engine's
filter.cardano block) so multi-target plans don't get AND-combined
on transaction events. ToEngineConfig scrubs legacy knobs and a
one-time migration in SetupPlanFromEngineConfig preserves them
across upgrade.

Removes tray/adder_config.go (dead code; setup/codec.go is the live
SetupPlan→YAML path).

Closes #685
Closes #686

Signed-off-by: Ales Verbic <[email protected]>
feat(tray/notifications): multi-target monitoring + native dispatch
Adds a fyne-free notifications engine that consumes ConnectionManager
events, derives one rule per (kind, param) from a multi-target
SetupPlan (Wallets/DReps/Pools/MonitorEverything), and emits Requests
through a tumbling-window rate limiter that connection alerts bypass.
A Dispatch goroutine in setupTray turns each Request into a native
fyne notification — replacing the inline dispatchNotification. Rule
bodies render through Cardano-aware template helpers (trunc / ada /
outAddr / outAda / field) shared with the Telegram output via
internal/cardanofmt.

Wizard step 3 is rebuilt with three editable target sections plus an
exclusive Monitor Everything toggle, with cross-template validation
hints. SetRules atomically swaps the engine's rule set on
reconfigure (draining stale pre-swap Requests) so changes take
effect without a restart.

Filter persistence lives on TrayConfig (not the sidecar engine's
filter.cardano block) so multi-target plans don't get AND-combined
on transaction events. ToEngineConfig scrubs legacy knobs and a
one-time migration in SetupPlanFromEngineConfig preserves them
across upgrade.

Removes tray/adder_config.go (dead code; setup/codec.go is the live
SetupPlan→YAML path).

Closes #685
Closes #686

Signed-off-by: Ales Verbic <[email protected]>
test(ledger): drive real treasury-withdrawal enactment with donation
Add an integration test that exercises the actual Conway enactment path
rather than a modelled treasury: it seeds a ratified treasury-withdrawal
proposal plus a registered reward account, then runs governance.ProcessEpoch
followed by applyEpochDonations exactly as processEpochRollover sequences
them. It asserts the withdrawal is applied against the pre-donation treasury
(1000 - 400) and the donation is added afterwards (+300 = 900), and that the
withdrawal credits the reward account, closing the #2374 acceptance criterion
that a withdrawal is checked against the treasury value the ledger uses at the
boundary.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Signed-off-by: Chris Guiney <[email protected]>
refactor(ledger): remove mempool DTO from provider interface (#2563)
* refactor(ledger): Made changes to decouple mempool provider transaction view

Signed-off-by: Akhil Repala <[email protected]>

* refactor(ledger): Added a new test where it verifies the adapted mempool source feeds pending transaction CBOR into block construction

Signed-off-by: Akhil Repala <[email protected]>

* refactor(ledger): removed the added test

Signed-off-by: Akhil Repala <[email protected]>

---------

Signed-off-by: Akhil Repala <[email protected]>
feat(ledger): apply Conway treasury donations to treasury at epoch boundary
Conway transaction donations were never tracked, so the treasury (NetworkState)
drifted from the value the ledger would compute, which can make a future
treasury-withdrawal enactment validate against stale local state.

Wire the donation accumulator (added in the previous commit) into the ledger:

- Block processing (delta.apply) sums the Donation() of each valid transaction
  in a block and records it via AddNetworkDonation, keyed by block slot and
  tagged with the current epoch. Invalid (phase-2 failed) transactions do not
  contribute, since their body is not applied.
- The epoch rollover (processEpochRollover) moves the ending epoch's donations
  into the treasury via applyEpochDonations, after governance.ProcessEpoch.
  Ordering donations after enacted withdrawals matches the Conway EPOCH rule:
  a withdrawal is checked against the pre-donation treasury, and the donation
  is reflected for subsequent epochs.
- Chain rollback drops the donation rows after the rollback slot alongside the
  NetworkState rows, so treasury/reserves are restored and re-application
  re-derives the same total.

Tests cover the donation-to-treasury application, the no-donation no-op, and
the acceptance scenario: a treasury withdrawal followed by a donation at the
boundary, then a rollback restoring the prior treasury. DATABASE.md and
ARCHITECTURE.md document the new network_donation table/model.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Signed-off-by: Chris Guiney <[email protected]>
feat(database): add NetworkDonation accumulator
Conway transaction donations need to accumulate during an epoch and move into
the treasury at the epoch boundary, but dingo does not track them. Add the
storage layer for that accumulator:

- NetworkDonation model (slot, epoch, amount), keyed by slot so a rollback can
  drop rows by slot like NetworkState. Amount is a plain integer column so SUM
  aggregates directly across all three backends.
- Store methods AddNetworkDonation (idempotent per slot),
  SumNetworkDonationsForEpoch, and DeleteNetworkDonationsAfterSlot, implemented
  for sqlite/postgres/mysql, plus the Database rollback wrapper.

Wiring into block processing, the epoch boundary, and rollback follows in
subsequent commits.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Signed-off-by: Chris Guiney <[email protected]>