You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(txodds): one-screen e2e demo — agents bid & settle a live World Cup edge
One "Start a market" click drives the whole thesis: real World Cup odds -> LLM
edge -> agents bid over CoralOS -> Solana escrow settles, all on one screen.
- coral-agents/seller-worldcup: a SERVICES=txline specialist persona (reuses the
seller image, auto-registers from /agents/*).
- seller: txline `edge` now delivers the de-margined 1X2 market alongside the LLM
value call; a bare fixture id means `edge`; two empty-string-default fixes
(TXLINE_BASE_URL + INFERENCE_MODEL use `||` not `??`, since coral injects "" for
unset options).
- marketplace/start.ts: launches seller-worldcup when TXLINE_API_KEY is set,
forwards the token, passes BUYER_ARG.
- dashboard: WorldCupPanel renders the odds board + the edge call in RoundCard for
txline-edge deliveries.
- docs: DEMO.md + E2E_DEMO.md runbooks.
Verified live on devnet end to end: WANT(txline) -> generalists decline ->
seller-worldcup wins -> DEPOSIT -> real odds + Claude value call -> RELEASE.
Croatia v Ghana: Home 37% / Draw 47% / Away 16%; settled with release tx 4jFAch89.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
description = "Marketplace seller persona — World Cup oracle specialist. Reuses the seller-agent image; sells verified TxODDS World Cup data (the `txline` service) and an LLM value call."
7
+
summary = "A specialist that bids only on World Cup data jobs and delivers an LLM-analysed edge."
8
+
readme = "Bids in the shared market thread when the WANT is a `txline` service, wins because the generalists decline it, fetches de-margined World Cup odds from TxLINE, runs them through the LLM, and settles via escrow. Same image as seller-agent; SERVICES=txline + TXLINE_API_KEY shape it."
9
+
10
+
[agent.license]
11
+
type = "spdx"
12
+
expression = "MIT"
13
+
14
+
[options]
15
+
SELLER_WALLET = { type = "string", description = "Devnet wallet pubkey that receives payments" }
16
+
AGENT_NAME = { type = "string", default = "seller-worldcup", description = "Market identity (matches the registry name)" }
17
+
SERVICES = { type = "string", default = "txline", description = "Inventory — this specialist bids only on txline (World Cup data)" }
18
+
FLOOR_SOL = { type = "f64", default = 0.0005, description = "Cost floor — the LLM may never bid below this (the edge runs a real Claude call)" }
19
+
PERSONA = { type = "string", default = "a World Cup trading specialist who sells verified TxODDS odds and a sharp one-line value call", description = "Bidding persona (LLM system prompt)" }
# Live demo: an agent sells a World Cup edge for devnet SOL
2
+
3
+
This is the "money shot" round — Demo A (the marketplace) settling Demo B (real TxODDS data) in
4
+
**one live round**: the buyer wants a World Cup edge, a specialist seller fetches verified odds, an LLM
5
+
turns them into a value call, and the buyer pays for it through the escrow. **Config only — no agent
6
+
code changes** (the `txline` service is already in the seller image).
7
+
8
+
## The pieces
9
+
10
+
| Piece | What changes | Why |
11
+
|---|---|---|
12
+
|`coral-agents/seller-worldcup/coral-agent.toml`|**new persona** over the seller image, `SERVICES=txline`| a seller that bids on `txline` (auto-registered from `/agents/*`) |
13
+
|`examples/marketplace/start.ts`| add `seller-worldcup` to the session, forward `TXLINE_API_KEY`, pass `BUYER_ARG`| so the persona launches with the token and the buyer's WANT carries the fixture |
14
+
|`.env`|`TXLINE_API_KEY`, `BUYER_SERVICE=txline`, `BUYER_ARG=edge 17588245`| the token (one-time mint) + the WANT the buyer broadcasts |
# Full e2e demo — one page, one button, the whole thesis
2
+
3
+
Goal: a judge clicks **one button** and watches, on **one screen**, the complete loop:
4
+
5
+
> **real World Cup odds → LLM edge → agents bid over CoralOS → Solana escrow settles → release**
6
+
7
+
This reuses the kit's existing marketplace **dashboard** (which already has the button, the live round
8
+
feed, bids, and Explorer-linked settlement) and makes it show the *World Cup* data the round trades.
9
+
10
+
## Why this is small
11
+
12
+
The dashboard already renders a live round from the feed: `WANT → BID → AWARD → DEPOSITED → DELIVERED
13
+
→ RELEASED`, with deposit/release linked to the devnet Explorer. And the round object already carries
14
+
`want.arg` (the fixture id) and `delivered.data` (the seller's edge JSON). Two changes make it the
15
+
World Cup demo:
16
+
17
+
| Change | File | Why |
18
+
|---|---|---|
19
+
|`edge` delivers the de-margined odds, not just the call |`coral-agents/seller-agent/src/service.ts`| so the round's `delivered.data` carries the 1X2 board |
20
+
| RoundCard renders a World Cup panel for `txline-edge`|`examples/marketplace/web/src/components/RoundCard.tsx`| the odds bars + the LLM value call, in the same card as the settlement |
21
+
22
+
No new backend: the feed's **Start** button already runs `start.ts`, which is World-Cup-configured
23
+
(`seller-worldcup` + `BUYER_SERVICE=txline` + `BUYER_ARG=<fixture>` when `TXLINE_API_KEY` is set).
0 commit comments