Valid tickets for "AS Roma vs Inter" — no refresh loop, no setInterval fetch
| entity | ticket | payload | owner | expires @ | time left |
|---|
Rows appear from watchEntityEvents (eth_subscribe over wss). The countdown runs on watchBlockNumber; when expiresAt passes, the ticket is struck out and disappears — the chain emits no "expired" event, so expiry is derived, not pushed.