open_new_round_if_needed now withholds opening the next round until ROUND_COOLDOWN_SECONDS (default 30) have passed since the previous round's closed_at, returning None in that window instead of a Round. Without this, the next round opened within one scheduler tick (~5s) of the previous payout confirming — not enough time for a player to notice the round they were in actually resolved. Callers updated: the scheduler treats None as "nothing to do this tick", and place_bet raises a "try again shortly" BetError instead of crashing on a None round. Not in the original flowchart — a deliberate UX addition on top of it, documented as such in CLAUDE.md. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2.4 KiB
Guida admin
Come gestire la configurazione operativa di PLM Lottery. Presuppone che il server sia già avviato — vedi running-the-server.md.
Accesso
Il pannello admin è su https://<host>/admin — non è collegato da
nessun link nell'interfaccia utente (né in entrata né in uscita): ci si
arriva solo conoscendo l'URL. Non è protetto da login personale, ma da un
token condiviso (ADMIN_TOKEN, definito in .env).
Apri la pagina, incolla il valore di ADMIN_TOKEN nel campo "Admin token" e
usa i bottoni:
- "Carica configurazione attuale" → mostra
fee_addressebet_amount_sats(in PLM) correnti - "Salva" → aggiorna i valori nel database, effetto immediato, nessun riavvio del server necessario
Cosa si configura
| Campo | Significato |
|---|---|
| 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, mostrato/impostato in PLM (internamente il backend lavora in sats: 1 PLM = 100.000.000 sats). |
ROUND_DURATION_SECONDS (durata del round) e ROUND_COOLDOWN_SECONDS (pausa
tra un round e il successivo, default 30s) non sono qui: sono variabili
d'ambiente in .env, non modificabili a runtime — per cambiarle serve
riavviare il server con il nuovo valore.
Alternative all'interfaccia grafica
Le stesse operazioni si possono fare da terminale o da Swagger UI
(https://<host>/docs, sezione admin), sempre passando ADMIN_TOKEN
nell'header X-Admin-Token:
# leggere la configurazione
curl https://<host>/admin/config -H "X-Admin-Token: <ADMIN_TOKEN>"
# aggiornarla (importi in sats: 10 PLM = 1000000000)
curl -X PUT https://<host>/admin/config \
-H "X-Admin-Token: <ADMIN_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"fee_address": "plm1q...", "bet_amount_sats": 1000000000}'
Limiti noti
- Il token è unico e condiviso: non c'è identità per singolo admin né audit
di chi ha cambiato cosa (oltre alla tabella
audit_loggenerica). - Nessun rate limiting sugli endpoint admin (né su registrazione/bet/ prelievo utente).
- Se un payout fallisce (es. Electrum disconnesso, UTXO insufficienti), il
round resta bloccato in
paying_outsenza retry automatico — richiede intervento manuale.
Per l'elenco completo dei gap noti vedi la sezione "Known gaps / TODO" in
CLAUDE.md.