Sync round countdown across clients and enforce the bet cutoff on deadline, not scheduler tick
The round timer relied on each client's own wall clock, so two browsers with skewed local clocks showed different countdowns for the same round; the server now also returns server_time so the frontend can correct for clock skew. Also drop out-of-order /rounds/current responses (multiple independent triggers could resolve late and revert the UI to a stale drawing/result state) and prune per-round bookkeeping maps on round transitions. Separately, place_bet only checked status == "open", leaving a window (up to the scheduler's 5s tick interval) after a round's timer hit zero where a new bet could still be accepted. place_bet now checks the round's own deadline directly (round_accepts_bets), acting as an immediate "yellow light" for new entries while still letting already-broadcast bets confirm before the round closes. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
f27fe6243c
commit
7dcf6d2756
8 files changed
+87
-17
No files matched your search
+1
-1
@@ -38,7 +38,7 @@ business — quelli si toccano solo da qui.
|
||||
|---|---|
|
||||
| **Fee address** | L'indirizzo PLM su cui finisce il 30% di ogni round (fee). Obbligatorio: i payout **non partono** se questo campo è vuoto. |
|
||||
| **Bet amount (PLM)** | Il costo fisso d'ingresso per round. |
|
||||
| **Durata round (secondi)** | Quanto resta aperto un round prima di chiudersi ed estrarre il vincitore. |
|
||||
| **Durata round (secondi)** | Quanto resta aperto un round prima di chiudersi ed estrarre il vincitore. Il taglio per le nuove giocate scatta esattamente allo scadere di questo tempo (verificato ad ogni bet, non dipende dal ciclo dello scheduler) — è un "semaforo giallo": nessuna nuova entrata, ma le bet già trasmesse prima dello scadere hanno comunque tempo di confermarsi prima che il round chiuda ed estragga. |
|
||||
| **Pausa tra un round e il successivo (secondi)** | Cooldown dopo la chiusura di un round, prima che il successivo si apra — dà tempo ai giocatori di vedere l'esito. |
|
||||
| **Durata animazione estrazione (secondi)** | Tempo minimo per cui la dashboard di ogni utente mostra l'animazione "Estrazione in corso" dopo la chiusura del round, prima di rivelare il vincitore. È solo un minimo: l'estrazione reale aspetta un blocco confermato (~2 minuti in media), quindi l'animazione può durare più a lungo di questo valore, mai meno. |
|
||||
| **Importo minimo deposito/prelievo (PLM)** | Soglia minima per un prelievo (i depositi non hanno un controllo minimo lato server, solo un floor consigliato). |
|
||||
|
||||
+13
-8
@@ -35,14 +35,19 @@ Dopo l'accesso vedi, in ordine:
|
||||
|
||||
### Estrazione del vincitore
|
||||
|
||||
Quando il round chiude, **le bet non sono più accettate** e la card del
|
||||
round mostra un'animazione ("Estrazione del vincitore in corso…") al posto
|
||||
del timer — la stessa cosa compare nella dashboard di ogni giocatore, non
|
||||
solo la tua. L'animazione resta visibile per almeno un tempo minimo
|
||||
configurabile dall'admin (default 20s), ma può durare più a lungo: il
|
||||
vincitore viene scelto usando l'hash del primo blocco confermato dopo la
|
||||
chiusura, quindi il tempo reale dipende dalla rete (mediamente ~2 minuti,
|
||||
il block time di PLM).
|
||||
Appena il timer arriva a zero, **nessun nuovo giocatore può più entrare nel
|
||||
round** — è un "semaforo giallo": il conteggio raggiunto lo zero blocca da
|
||||
subito le nuove giocate, ma il round non chiude immediatamente. Se qualcuno
|
||||
aveva già piazzato una bet negli ultimi istanti (transazione trasmessa ma
|
||||
non ancora confermata), il round aspetta che anche quella si confermi prima
|
||||
di procedere, così nessuna giocata già fatta viene persa al confine del
|
||||
round. Solo a quel punto la card mostra un'animazione ("Estrazione del
|
||||
vincitore in corso…") al posto del timer — la stessa cosa compare nella
|
||||
dashboard di ogni giocatore, non solo la tua. L'animazione resta visibile
|
||||
per almeno un tempo minimo configurabile dall'admin (default 20s), ma può
|
||||
durare più a lungo: il vincitore viene scelto usando l'hash del primo
|
||||
blocco confermato dopo la chiusura, quindi il tempo reale dipende dalla
|
||||
rete (mediamente ~2 minuti, il block time di PLM).
|
||||
|
||||
Appena il vincitore è determinato, l'animazione lascia spazio a un
|
||||
messaggio:
|
||||
|
||||
Reference in new issue
Block a user