spaghettiwires calc

Testa o croce, a distanza

Scrivi la domanda, scegli quando atterra la moneta e manda il link a chi deve decidere con te. Finché è in aria nessuno può sapere come cadrà, nemmeno noi: il risultato arriva da drand, una rete di organizzazioni indipendenti che pubblica un numero casuale ogni 30 secondi.

[[ mode === 'flip' ? t.form_title_another : t.form_title ]]

Meglio dire cosa vuol dire testa e cosa croce. [[ questionLeft ]]

Quando atterra

[[ plannedText ]]

Il link vale come prova solo se arriva agli altri prima che la moneta atterri. Per questo c'è qualche minuto di margine.

[[ mode === 'flip' ? t.badge_flip : t.badge_minute ]]

[[ t.q_open + question + t.q_close ]]

[[ fmt(t.share_preview, { text: shareText }) ]]

[[ t.verify_title ]] [[ t.verify_badge_ok ]] [[ t.verify_badge_bad ]]
[[ t.verify_round ]]
[[ round ]] · [[ whenText(at) ]]
randomness
[[ beacon.randomness ]]
[[ t.verify_question ]]
[[ question ? t.q_open + question + t.q_close : t.verify_no_question ]]
[[ t.verify_digest ]]
[[ digest.slice(0, -1) ]][[ lastDigit ]]
[[ t.verify_result ]]
[[ fmt(t.verify_rule, { digit: lastDigit, parity: parseInt(lastDigit, 16) % 2 ? t.odd : t.even, side: sideName }) ]]
[[ t.verify_signature ]]
[[ t['verify_sig_' + signature] ]]

Come funziona

Lanciare una moneta in videochiamata non convince nessuno: chi la lancia può ripetere finché non gli piace il risultato. Qui la moneta la lancia una rete esterna, a un'ora decisa prima, e il risultato si ricalcola da capo con dati pubblici.

Da dove viene il risultato

drand è il servizio di numeri casuali della League of Entropy, un gruppo di organizzazioni indipendenti tra cui Cloudflare, Protocol Labs, l'EPFL e diverse università. Dal 2020 pubblica un numero ogni 30 secondi, firmato insieme dai nodi della rete: per produrlo serve la collaborazione di molti di loro, e nessuno da solo può prevederlo o sceglierlo. Ogni numero resta consultabile per sempre, e la firma si può controllare con la chiave pubblica della rete. È quello che fa questa pagina, nel tuo browser.

Perché il link va condiviso prima

Il link contiene la domanda e l'ora dell'atterraggio. Se lo ricevi mentre la moneta è ancora in aria, chi l'ha creato non poteva sapere come sarebbe caduta. Se te lo mandano dopo, invece, non prova niente: chiunque può creare un link con un orario passato, dopo aver visto il risultato.

  • La prova è l'orario del messaggio in chat: se il link è arrivato prima dell'ora di atterraggio, il lancio è valido.
  • Se qualcuno ti manda un lancio già atterrato, chiedigli di farne uno nuovo.
  • Quando condividi dal bottone, il testo del messaggio dice già che la moneta è in aria e quando atterra. L'anteprima del link, invece, è quella generica della pagina.

Il calcolo, per chi vuole rifarlo

t è l'ora di atterraggio in secondi Unix (UTC), sempre un minuto intero. Il round di drand di quell'istante dà la firma e il numero casuale:

round = (t − 1595431050) / 30 + 1

randomness = sha256(signature)

digest = sha256(randomness + domanda)

ultima cifra di digest pari → testa, dispari → croce

La domanda entra nel calcolo così com'è scritta nel link: due domande diverse alla stessa ora danno lanci indipendenti, la stessa domanda alla stessa ora dà sempre lo stesso risultato. Nel riquadro "Verifica" sotto la moneta trovi tutti i valori, con il link al dato originale di drand.

Non hai un account?