Bitcoin Forum
May 04, 2024, 02:58:57 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: API per ricavare statistiche da una blockchain "esterna"  (Read 1342 times)
arulbero (OP)
Legendary
*
Offline Offline

Activity: 1915
Merit: 2074


View Profile
November 22, 2016, 07:40:58 PM
Last edit: December 04, 2016, 03:25:17 PM by arulbero
 #1

Dopo aver calcolato la distribuzione teorica dei tempi di produzione dei blocchi :  
https://bitcointalk.org/index.php?topic=1665779.msg16858506#msg16858506 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:

Quote
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  Angry

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?

1714791537
Hero Member
*
Offline Offline

Posts: 1714791537

View Profile Personal Message (Offline)

Ignore
1714791537
Reply with quote  #2

1714791537
Report to moderator
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1714791537
Hero Member
*
Offline Offline

Posts: 1714791537

View Profile Personal Message (Offline)

Ignore
1714791537
Reply with quote  #2

1714791537
Report to moderator
1714791537
Hero Member
*
Offline Offline

Posts: 1714791537

View Profile Personal Message (Offline)

Ignore
1714791537
Reply with quote  #2

1714791537
Report to moderator
1714791537
Hero Member
*
Offline Offline

Posts: 1714791537

View Profile Personal Message (Offline)

Ignore
1714791537
Reply with quote  #2

1714791537
Report to moderator
gbianchi
Legendary
*
Offline Offline

Activity: 3094
Merit: 2645



View Profile
January 04, 2017, 01:36:34 AM
 #2

suppongo che il limite sia per ip.

fai 10 thread che lavorano da 10 ip e ci metti 5 giorni,

oppure 20 thread che fanno le query da 20 ip...


GUIDA PER NUOVI UTENTI https://bitcointalk.org/index.php?topic=1241459.0
DO NOT HOLD YOUR BTC ON THIRD PARTY EXCHANGES – BE YOUR OWN BANK https://bitcointalk.org/index.php?topic=945881.0
BITCOIN... WHAT IS IT ? https://bitcointalk.org/index.php?topic=2107660.0
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!