flowchart LR A["Il round precedente\nsi e' chiuso\n(pagamento vincitore confermato)"] --> B{"Lotteria in pausa\nmanutenzione?"} B -- "Si'" --> B_WAIT["Si attende"] B_WAIT --> B B -- "No" --> C["Breve attesa\n'di raffreddamento'\n(cosi' i giocatori vedono\nil risultato precedente)"] C --> D["Si apre un nuovo round\n(stato: APERTO)\ncon un limite di tempo\nper scommettere"] subgraph OPEN["FASE 1 - Round aperto (accetta scommesse)"] direction TB D --> F["Un giocatore\npiazza una scommessa"] F --> G{"E' arrivata prima\ndella scadenza\ndel round?"} G -- "Si'" --> H["Accettata:\ngiocatore aggiunto\nai partecipanti"] G -- "No, troppo tardi" --> F2["Rifiutata:\nil round non e' piu'\nin tempo per accettarla"] H --> F F2 --> F end D -.->|"scade il tempo"| I subgraph CLOSING["FASE 2 - Chiusura"] direction TB I["Il round raggiunge la sua scadenza\n(indipendentemente dalle scommesse\ngia' in corso, che restano valide):\nda questo momento nessuna\nnuova scommessa e' accettata"] --> J{"Ci sono scommesse\ngia' inviate ma non\nancora confermate?"} J -- "Si'" --> J_WAIT["Si attende qualche secondo\ne si ricontrolla"] J_WAIT --> J J -- "No, tutte confermate" --> K["Il round si chiude:\nsi fotografa lo stato\nattuale della blockchain"] end subgraph DRAWING["FASE 3 - Estrazione vincitore"] direction TB K --> L{"C'e' almeno\nun partecipante?"} L -- "No" --> M["Round concluso\nsenza vincitore"] L -- "Si'" --> N["Si attende il primo\nnuovo blocco dopo\nla chiusura del round"] N --> O["L'hash del blocco\nsceglie il vincitore\nin modo casuale e verificabile\n(stessa probabilita' per tutti)"] end subgraph PAYING["FASE 4 - Pagamento"] direction TB O --> P["Si calcola\nil montepremi totale"] P --> Q["Si divide:\n70% al vincitore\n30% alla piattaforma"] Q --> R["Si prepara e firma\nla transazione di pagamento"] R --> S["La transazione\nviene inviata"] S --> T{"Confermata\nsulla rete?"} T -- "No, troppo tempo" --> T2["Si aumenta la\ncommissione e si reinvia"] T2 --> S T -- "Si'" --> U["Vincitore registrato\nnel registro di controllo"] end U --> V["Round CHIUSO\n(il ciclo ricomincia\ndall'inizio per\nil round successivo)"] M --> V