- • Lottery round lifecycle: create, pause, resume, cancel, settle
- • Ticket purchase (Feign-sync
wallet.debit then ticket alloc)
- • DrawEngine: 3 implementations (FULL_CHAIN / VRF_ONLY / BACKEND), mode locked at round creation
- • Physical prize state machine (WAITING_ADDRESS → WAITING_AUDIT → SHIPPED → DELIVERED / FORFEITED)
- • VRF timeout detection (DeadlinePoller @Scheduled) — no auto-fallback, escalates to admin
- • 8 Kafka topics produced, 2 consumed
- Produces:
game.round.created / game.round.sold_out / game.draw.requested
- Produces:
game.draw.completed / game.draw.timeout / game.round.canceled
- Produces:
prize.physical.delivered / prize.physical.forfeited
- Consumes:
chain.vrf.fulfilled — settles draw, writes oneu_draw_result
- Consumes:
game.round.sold_out (self) — triggers DrawEngineRouter
- • MySQL
one_u_game — 8 tables, V1 migration
- • Kafka
kafka:29092 — 8 topics produced, 2 consumed
- • Feign: IWalletService (debit/credit), IChainService (VRF/contract), ISignService (BACKEND commit)
- • Feign: IUserService (getUser), IAdminService (enqueuePhysicalPrize)
- • No direct Redis (rate-limit delegated to gateway)