Many plugins move money through a per-plugin SYSTEM clearing account because they use the legacy Vault economy API (withdraw + deposit, no atomic transfer) — see PAR-158 (the forward fix for ChestShop). When the economic event is really a transfer (A pays B), it lands as two ledger txns bridged by the SYSTEM account, so the explorer shows "paid ChestShop System" / "received from ChestShop System" instead of the real counterparty, double-counts volume, and surfaces the SYSTEM accounts as whales (account #4 = 1.26M postings).
This issue is the read/presentation-layer cleanup only. We explicitly decided not to rewrite the ledger — it stays append-only and auditable.
Classification of the SYSTEM clearing accounts (prod, credits_in vs debits_out):
| account | legs | net | nature |
|---|---|---|---|
| ChestShop System | 1.26M | $0 | transfer (buyer→seller) |
| PostmanPat | 4.8k | $0 | transfer ($23.2M postage) |
| Exams | 73k | $0 | transfer |
| nightcore | 90k | $0 | transfer |
| DemocracyRobbery | 17.5k | $0 | transfer (victim→robber) |
| CustomFishing / DeluxeMenus / DiscordSRV | — | $0 | transfer |
| GriefPreventionUI | 510 | +$369,880 (debits_out=$0) | pure sink — claim blocks burned |
| GriefPrevention / GriefPrevGUI | — | +$21k / +$37k | sink-heavy |
| BountyHunters | 2.1k | +$62k | mix (transfers + unclaimed sink) |
| MobsToEggs / Essentials / DemocracyPost | — | +$31k / +$14k / +$441 | mix |
A blanket "hide SYSTEM legs" would erase $369k of real claim-block spending from players' histories. So the rule is per economic event:
player→SYSTEM leg has a matching SYSTEM→player leg for the same event (same SYSTEM account, equal amount, same message, tight time window) → present as one buyer→seller transfer and hide the SYSTEM legs.SYSTEM→player: exam/fishing/mob rewards = real money entering) or sink (player→SYSTEM: claim blocks = real money leaving) → keep showing as SYSTEM↔player.Account detail (txn list, counterparties, activity calendar), money-flow (the phantom SYSTEM↔PERSONAL arrows), economy stats / volume / velocity (stop double-counting), top earners, /me, search. Exclude the SYSTEM clearing accounts from per-account / "top accounts" / counterparty rollups.
A read-layer transform (DAL view/CTE or a service) that resolves the real counterparty by pairing legs through the sentinel-owned AccountType.SYSTEM accounts. Notes:
(message, amount) group is fine for aggregates/display, but don't assert a 1:1 in any audit/forensic view — show raw there.buyer ↔ seller (no "ChestShop System") in the explorer; claim-block purchases still show player → GriefPreventionUI as a sink.Follow-up to PAR-158 (forward fix) / relates to PAR-157 (account perf) and PAR-134 (read mirror).