Dopo aver calcolato la distribuzione teorica dei tempi di produzione dei blocchi :
https://bitcointalksearch.org/topic/m.16858506 mi sono un po' appassionato alla cosa e stavo cercando di verificare come nella storia della blockchain siano andate effettivamente le cose.
Cosa voglio fare? In sostanza aggiornare i dati di questo post -->
https://www.reddit.com/r/Bitcoin/comments/1vkp1x/what_is_the_longest_time_between_blocks_in_the/ di due anni fa, dove si dà questa tabella:
21445-21446 23574
74637-74638 24676
19725-19726 24907
15047-15048 25376
19564-19565 25996
21388-21389 28124
20348-20349 29325
20363-20364 30013
20431-20432 30425
16489-16490 30682
27-28 30884
19721-19722 37536
21437-21438 38219
19723-19724 47127
20188-20189 60203
16591-16592 73782
14-15 87157
16563-16564 90390
15323-15324 90532
0-1 463160
A sinistra il numero dei blocchi, nella colonna di destra l'intervallo di tempo tra le apparizioni di due blocchi consecutivi (in secondi).
Ovviamente i dati riguardanti blocchi così vecchi sono poco significativi, nei primi tempi non c'era quasi nessuno che minava, ecc.
Il più delle volte il retarget ha aumentato la difficoltà poichè la capacità computazionale della rete è stata quasi sempre tale da permettere di minare un blocco in media in meno di 10 minuti. Se si va qui ->
http://www.wolframalpha.com/input/?i=seconds+between+January+3,+2009+and+November+21,+2016 si può notare che la blockchain ha una vita (in secondi) di 2.487x10^8s, mentre ha una vita in blocchi di 439943. Quindi il valor medio reale finora è 248,7 milioni di secondi / 439944 = 565 secondi, tempo medio reale per minare un blocco finora, ovvero ben 35 secondi di media in meno rispetto al valor medio prefissato.
Ora che dati guardare? Il timestamp dei blocchi non è per niente affidabile, i miner possono scriverci quello che vogliono, quindi il meglio che si possa fare è affidarsi a un servizio esterno che sia sempre o quasi up e che registri in modo autonomo il tempo di arrivo di ogni blocco (non esiste un tempo univoco in un sistema decentralizzato - per questo esiste la blockchain - ma almeno l'intervallo di tempo tra due arrivi in un punto preciso della rete ha più senso del timestamp dell'header dei blocchi).
Ho scritto allora un piccolo script in python che funziona appoggiandosi alla API di blockcypher -->
https://www.blockcypher.com/dev/bitcoin/ Ho iniziato a scansionare i blocchi dal numero
336257, perchè è da quel momento che verosimilmente blockcypher ha iniziato a registrare il tempo effettivo di arrivo (il numero 336257 corrisponde al
28 dicembre 2014, ore 6.06.50, prima di quella data ci sono solo i classici valori dell'header del blocco).
Al momento ho scansionato
26000 blocchi (6 mesi circa, fino al
22 giugno 2015), questi sono i 20 più lenti:
blocco secondi
338698 6493 --> corrisponde a 1 ora e 48 minuti e 13 secondi
346929 5300 --> corrisponde a 1 ora e 28 minuti e 20 secondi
355724 5081 --> corrisponde a 1 ora e 24 minuti e 41 secondi
360879 4804
343509 4796
345547 4748
357081 4725
336778 4640
340450 4588
359663 4420
352793 4407
358362 4404
357685 4400
336525 4371
342012 4290
343173 4271
351642 4262
352180 4245
340200 4179
350125 4127 --> corrisponde a 1 ora e 08 minuti e 47 secondi
In particolare solo lo 0,19% ha superato l'ora, contro lo 0,25% previsto dalla teoria.
L' 1,585% ha superato i 40 minuti, contro il 1,83% previsto dalla teoria.
Ricordo infatti che la distribuzione teorica era:
P(di minare un blocco entro t secondi) = 1 - e^(-1/600*t); facendo due calcoli si ottiene:
(minuti) secondi probabilità
- 1 0,001665279
- 10 0,016528546
- 20 0,0327839
- 30 0,048770575
1 60 0,095162582
2 120 0,181269247
3 180 0,259181779
4 240 0,329679954
5 300 0,39346934
6 360 0,451188364
7 420 0,503414696
8 480 0,550671036
9 540 0,59343034
10 600 0,632120559
20 1200 0,864664717
40 2400 0,981684361
60 3600 0,997521248 120 7200 0,999993856
Perchè ne ho scansionati così pochi?
Il problema è che c'è un limite di 200 richieste/ora e 2000 richieste/giorno al loro server
Per poter fare la scansione degli oltre 100k blocchi che mi mancano ad arrivare a oggi (gli ultimi 2 anni) mi ci vorrebbero almeno 50 giorni! Se però pago un bel po' di soldi mi aumentano il limite, peccato, mi sarebbe piaciuto verificare la distribuzione dei tempi.
Qualcuno conosce delle API fornite da qualche servizio affidabile che permettano quindi un'interrogazione "esterna" (ovviamente in questo caso non ha senso lavorare con la mia personale blockchain in locale, in quanto non vi sono presenti i dati che mi interessano) di queste dimensioni senza far pagare nulla o quasi nulla?