From 9dab2b3d624ecae08439532157fb8b9805fe9274 Mon Sep 17 00:00:00 2001 From: Kostya Date: Tue, 18 Aug 2026 09:07:57 +0000 Subject: Wire event ledger movements, show winning market by name, seed LMSR subsidy - Event ledger now grows on purchase and shrinks on payout, mirroring the exact amounts moved on the buyer's ledger (it previously had a Ledger object that nothing ever wrote to). - Settlement and event-detail views now show the winning market's display name instead of its raw key; event details are viewable for settled events too (the picker previously excluded anything not ACTIVE). - LMSR events seed their ledger with a SUBSIDY entry for the market maker's worst-case loss (b * ln(outcomes)), reusing the existing cost() function rather than recomputing the formula. --- .../guess/ui/console/command/EventDetailsMenuCommand.java | 12 ++++++++---- .../guess/ui/console/command/SettleEventMenuCommand.java | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) (limited to 'ui-console/src/main/java') diff --git a/ui-console/src/main/java/market/guess/ui/console/command/EventDetailsMenuCommand.java b/ui-console/src/main/java/market/guess/ui/console/command/EventDetailsMenuCommand.java index c9e7585..2ad7a53 100644 --- a/ui-console/src/main/java/market/guess/ui/console/command/EventDetailsMenuCommand.java +++ b/ui-console/src/main/java/market/guess/ui/console/command/EventDetailsMenuCommand.java @@ -34,14 +34,14 @@ public final class EventDetailsMenuCommand implements MenuCommand { } var events = result.getData(); - var active = events.stream().filter(event -> event.status() == EventStatus.ACTIVE).toList(); + var viewable = events.stream().filter(event -> event.status() != EventStatus.DRAFT).toList(); - if (active.isEmpty()) { - io.println("There are currently no active events to trade on."); + if (viewable.isEmpty()) { + io.println("There are currently no events to show."); return; } - var pick = io.readSelect("Pick an event: ", active, event -> "%s".formatted(event.name())); + var pick = io.readSelect("Pick an event: ", viewable, event -> "%s".formatted(event.name())); var result2 = catalog.getEvent(pick.key()); var event = result2.getData(); @@ -52,5 +52,9 @@ public final class EventDetailsMenuCommand implements MenuCommand { io.printState(event.state()); io.printHistory(event.history()); + + if (!event.settledMarket().isBlank()) { + io.println("Winning market: %s".formatted(event.settledMarket())); + } } } diff --git a/ui-console/src/main/java/market/guess/ui/console/command/SettleEventMenuCommand.java b/ui-console/src/main/java/market/guess/ui/console/command/SettleEventMenuCommand.java index 3ab28a7..3457e08 100644 --- a/ui-console/src/main/java/market/guess/ui/console/command/SettleEventMenuCommand.java +++ b/ui-console/src/main/java/market/guess/ui/console/command/SettleEventMenuCommand.java @@ -61,7 +61,7 @@ public final class SettleEventMenuCommand implements MenuCommand { var settleResult = context.settleEvent("Tester", event.summary().key(), winner.key()); if (settleResult.isSuccess()) { io.newLine(); - io.println("Settled. Winning market: %s".formatted(settleResult.getData().winningOption())); + io.println("Settled. Winning market: %s".formatted(settleResult.getData().settledMarket())); return; } io.newLine(); -- cgit v1.2.3