时间:2019-10-26 点击:980次
IT_M5L1c_Chainside_Contenuto_01
Bentornato in questo modulo
IT_M5L1c_Chainside_Contenuto_02
Dopo aver visto come funziona la rete bitcoin e quali strumenti
possono essere utilizzati per interagire con esso come utente, nella
prossima sezione vedremo più in dettaglio come funziona il processo
di mining.
Innanzitutto, per comprendere il mining, vediamo come viene
effettivamente realizzato un blocco blockchain. Tutte le transazioni
che sono incluse in un blocco sono organizzate in una struttura ad
albero di merkle, in modo che possiamo avere un singolo hash, noto
con la radice di merkle, che funge da impegno per tutte le transazioni
nel blocco. Se anche solo una singola transazione cambia
leggermente, la radice di merkle non sarebbe più valida, quindi
nessuna manipolazione nellalbero può verificarsi senza cambiare
anche la root.
IT_M5L1c_Chainside_Contenuto_03
Abbiamo già visto in che modo il mining è un processo molto costoso,
quindi perché le persone decidono di investire risorse in serie di
transazioni? Bene, ci sono due incentivi principali, il primo è il premio
per il blocco, o la capacità di un minatore di emettere una nuova
moneta e assegnarli a se stesso. Come abbiamo già visto,
inizialmente questa ricompensa era di 50 bitcoin, ma si dimezza ogni
quattro anni, quindi attualmente sono dodici bitcoin bitcoin. La
seconda fonte di entrate sono le commissioni di transazione, che
sono piccole somme che vengono pagate da ogni utente che
desidera che la sua transazione sia inclusa in un blocco. Senza le
commissioni di transazione, un minatore non avrebbe nemmeno un
incentivo a mettere qualsiasi transazione nel suo blocco a parte
loperazione di emissione, ma grazie alla tassa è incentivo ad
includere la transazione e ottiene delle entrate extra che lo aiutano a
pagare le bollette
IT_M5L1c_Chainside_Contenuto_04
La quantità di transazioni che un minatore può includere in un blocco
è deliberatamente limitata. Ciò è dovuto al fatto che i nodi devono
scaricare tutti i blocchi e archiviarli, quindi se la blockchain cresce
troppo velocemente è troppo grande per la maggior parte degli utenti
per conservarli sui loro dispositivi, e se il blocco è troppo grande
potrebbe anche essere un problema per scaricarli senza una
larghezza di banda ad alta capacità. Inizialmente la dimensione del
blocco era impostata su un massimo di un megabyte di dati, ma nel
2017, dopo un aggiornamento di rete, era aumentato a oltre due
megabyte. Ciò significa che se un minatore crea un blocco troppo
grande e ha troppe transazioni, il nodo lo rifiuterà come non valido.
Come conseguenza di ciò, se più persone vogliono effettuare
transazioni sulla blockchain di quanto sia possibile sostenere entro il
limite di dimensioni del blocco, il minatore includerà le transazioni che
pagano più tasse, mentre laltro rimarrà in sospeso in attesa di un
altro minatore per includerli
IT_M5L1c_Chainside_Contenuto_05
La parte più importante di un blocco è lintestazione del blocco.
Lintestazione del blocco è il vero oggetto della prova del processo di
lavoro. In esempi semplificati precedenti abbiamo fatto sembrare che
linput dellhashing fosse lintero blocco, ma in realtà solo
lintestazione verrà sottoposta a hash quando si esegue la prova di
lavoro. Quindi vediamo come è composta lintestazione.
IT_M5L1c_Chainside_Contenuto_06
Prima di tutto abbiamo il numero di versione, si tratta di quattro byte
di dati che vengono utilizzati semplicemente per indicare quale serie
di regole di convalida dei blocchi seguire quando si verifica se il
blocco è effettivamente corretto. Questo numero di versione è molto
buono per scopi di compatibilità con le versioni precedenti, in quanto
è possibile avere alcuni minatori che stanno seguendo un nuovo set
di regole che include laggiornamento di alcuni protocolli, mentre altri
minatori che non sono ancora aggiornati possono ancora seguire le
vecchie regole. Con il numero di versione, un minatore può segnalare
ai nodi completi che eseguiranno il controllo quali regole sta
seguendo, il nuovo o alcuni vecchi, ma devono essere comunque un
insieme di regole accettate e riconosciute dai nodi nel Rete
IT_M5L1c_Chainside_Contenuto_07
La seconda parte dellintestazione del blocco è lhash del blocco
precedente, che utilizza 32 byte. Questo è necessario per mantenere
i collegamenti tra il blocco successivo, garantendo lordine
cronologico e la solidità della blockchain. Lhash è in realtà un doppio
hash, quindi lalgoritmo di hashing sha256 viene utilizzato due volte
come protezione da alcune possibili vulnerabilità remote
IT_M5L1c_Chainside_Contenuto_08
Quindi abbiamo lhash root di merkle, che è il top hash dellalbero
delle transazioni di merkle. Questo elemento è molto importante
poiché solo 32 byte forniscono un impegno per tutte le transazioni
che verranno incluse nel blocco. Una volta impostata la radice di
merkle, non è possibile modificare quale transazione sarà nel blocco,
né il loro ordine. In sostanza, è necessario includere la radice di
merkle nellintestazione per avere un certo limite tra lintestazione del
blocco e tutte le transazioni nel blocco
IT_M5L1c_Chainside_Contenuto_09
Il quarto elemento consiste in quattro byte dedicati al timestamp. Il
timestamp è espresso in unix time e rappresenta il momento in cui il
minatore ha cancellato il blocco. Tuttavia, poiché nessuno, tranne i
minatori in sé, può veramente sapere con certezza quando il blocco è
stato estratto, cè il problema che il minatore potrebbe potenzialmente
mentire e mettere un timestamp sbagliato. Per questi motivi ci sono
alcune regole volte a evitare eccessive manipolazioni di timestamp.
In particolare, un nodo considererà il timestamp solo se è almeno
maggiore del tempo mediano degli undici blocchi precedenti e se non
è più le due ore nel futuro rispetto al loro orologio locale. Come puoi
notare, le regole non sono molto rigide, esiste infatti un livello di
tolleranza di circa tre ore e potenzialmente un blocco potrebbe anche
avere un timestamp inferiore rispetto ad alcuni dei suoi predecessori,
ma questo non è un problema dato che lordine cronologico è fornito
dalla catena di hash, piuttosto che dalla sequenza di timestamp. I
vincoli di timestamp sono stati progettati per essere deliberatamente
sciolti in modo che la mancanza di coordinamento nel tempo a causa
di problemi di rete o di infrastruttura non sia tale da causare problemi
di consenso su quale blocco sia valido e quale no. Il timestamp in
Bitcoin è necessario solo per qualcosa chiamato regolazione della
difficoltà, che vedremo nelle prossime diapositive, e per questo caso
duso non è richiesta molta precisione.
IT_M5L1c_Chainside_Contenuto_10
Il prossimo campo è chiamato nbits, ed è semplicemente quattro byte
che definiscono qual è la difficoltà richiesta dalla prova di lavoro
applicata allintestazione del blocco, o, per dirla in altre parole, con
quanti lo zero fa lhash dellintestazione devo iniziare. Pertanto,
questo valore viene verificato rispetto allhash dellintestazione per
verificare che siano stati soddisfatti i requisiti di prova del lavoro. La
difficoltà viene reimpostata a intervalli regolari per adattarsi ai
cambiamenti nelle condizioni della rete con il processo di
aggiustamento della difficoltà, che analizzeremo in seguito
IT_M5L1c_Chainside_Contenuto_11
Lultimo campo lintestazione del blocco nel nonce. Il nonce come
abbiamo già visto è un numero arbitrario il cui scopo è unicamente
quello di consentire al minatore di cambiare lintestazione del blocco
e cercarne uno che abbia un hash che rispetti il requisito di difficoltà
impostato nel campo nbit. A causa del fatto che il campo nonce ha
una lunghezza di soli quattro byte, spesso non è sufficiente trovare
un hash adatto e dopo aver provato tutti i possibili nonces non sono
ancora soddisfatti i requisiti di prova del lavoro. In questi casi, il
minatore dovrà provare a cambiare qualcosaltro nel blocco per
provare con una nuova serie di nomi, come il timestamp o lordine
nelle transazioni nel blocco per avere una diversa radice di merkle
IT_M5L1c_Chainside_Contenuto_12
Affinché il bitcoin funzioni correttamente, è necessaria una certa
distanza temporale tra i blocchi per avere il tempo di propagare
correttamente le informazioni attraverso la rete. Questa distanza
media è stata fissata a dieci minuti e, poiché ciò sia possibile, la
difficoltà deve essere impostata in modo corretto, assicurandosi che il
minatore con la sua potenza di calcolo necessiterà di circa 10 minuti
a livello globale per trovare un blocco. Quindi, se ipoteticamente
abbiamo 100 minatori ognuno dei quali in grado di provare mille hash
al secondo, significa che per avere un tempo medio di blocco di 10
minuti, il numero atteso di tentativi necessari per trovare un blocco
dovrebbe essere 60 milioni, ovvero 600 secondi 100 volte minatore
1000 hash al secondo. Tuttavia, se il numero di minatori cresce a
10000, il tempo medio di blocco scenderebbe a soli sei secondi, il
che non è sufficiente a garantire unadeguata propagazione della rete
e sarebbe un grosso problema
IT_M5L1c_Chainside_Contenuto_13
La potenza di calcolo globale dedicata al bitcoin mining è anche
definita come hashrate e misurata in hash che tutti i minatori sono in
grado di provare ogni secondo. Questa misura è prevista in crescita,
e in effetti è aumentata per la maggior parte della storia dei bitcoin
come nuovi minatori è entrato nel business e sono stati sviluppati
nuovi hardware più efficienti e, in assenza di contromisure, il tempo di
blocco potrebbe presto diventare estremamente breve
IT_M5L1c_Chainside_Contenuto_14
La contromisura è un meccanismo chiamato adattamento della
difficoltà. Fondamentalmente, ogni anno del 2016, la rete cambia il
parametro di difficoltà nel campo nbits del blockheader, chiedendo ai
minatori una diversa prova dei requisiti del lavoro. Il modo in cui
funziona, è che ogni nodo della rete bitcoin, alla fine del periodo dei
blocchi del 2016, guarda il timestamp del primo blocco nel periodo e
al timestamp dellultimo. La differenza attesa con un tempo di blocco
medio di 10 minuti è di 14 giorni, se tale differenza è più breve o più
lunga, la difficoltà deve essere modificata di conseguenza.
IT_M5L1c_Chainside_Contenuto_15
In questo grafico possiamo vedere come la difficoltà cambia nel
tempo. Possiamo notare due cose: in primo luogo ci sono forti punti
di discontinuità, questo è causato dal fatto che la difficoltà cambia
solo una volta ogni due settimane, il resto del tempo rimane costante,
quindi possiamo vedere che la tendenza generale è per il difficoltà a
crescere, e questo accade perché laumento del prezzo del bitcoin
attira nuovi giocatori per entrare nel business minerario, e gli
sviluppatori di hardware per produrre minatori più efficienti, quindi più
hashrates colpiscono la rete bitcoin, e la difficoltà deve
costantemente aumentare per mantenere la media tempo di blocco a
10 minuti. Possiamo anche notare che quando la difficoltà aumenta, il
periodo di regolazione è leggermente più breve, mentre quando
scende è leggermente più alto. Questo perché quando lhashrate
cresce, ci vogliono meno di 14 giorni per estrarre i blocchi del 2016,
mentre quando scende ci vuole di più, dato che la difficoltà è ancora
alta ma ci sono meno hash al secondo sulla rete.
IT_M5L1c_Chainside_Contenuto_16
Abbiamo detto che il tempo di blocco è in media 10 minuti, ma questo
non significa che sia sempre esattamente 10 minuti. Lestrazione
mineraria è un processo probabilistico, un minatore potrebbe essere
fortunato e trovare un blocco valido dopo solo un minuto, o tutti
potrebbero essere sfortunati e non trovare un blocco per 40 minuti. Il
tempo di blocco segue una distribuzione di poisson, con la maggior
parte dei blocchi che si trovano entro 600 secondi da quella
precedente, e casi più insoliti quando occorrono più di 30 minuti.
IT_M5L1c_Chainside_Contenuto_17
Ora, basandoci su ciò che abbiamo appena appreso, proviamo a
rispondere a questa domanda: supponendo un tempo medio di
blocco di 10 minuti, se lultimo blocco è stato trovato 5 minuti fa,
quando prevedi di trovare il prossimo blocco? Prenditi del tempo per
pensarci
IT_M5L1c_Chainside_Contenuto_18
Un altro importante concetto di estrazione mineraria è il cosiddetto
mining egoistico. Legoistico mining è un cattivo comportamento che
può essere visto come un attacco allintegrità della rete, e funziona
come segue. Un minatore trova un blocco valido, ma non lo pubblica
e lo distribuisce al resto della rete e lo conserva da solo. Quindi il
minatore inizia a lavorare sul blocco successivo prima di chiunque
altro, che se qualcun altro trova anche il vecchio blocco e inizia a
pubblicare, i minatori egoisti trasmettono anche il suo blocco alla rete
assicurandosi che si propaghi più velocemente. Facendo questo, il
minatore egoista ha guadagnato un po di tempo in più per estrarre il
blocco successivo rispetto agli altri minatori, ottenendo un vantaggio
competitivo. Questo vantaggio competitivo si realizza quando i
minatori egoisti trovano due blocchi prima che il resto della rete ne
trovi uno, il che è più probabile che accada per i grandi minatori.
Quindi, il problema con i minatori egoisti è che dà più vantaggio ai
grandi minatori che a quello piccolo, creando quindi una creatività per
la centralizzazione del settore minerario, il che è male perché la
sicurezza della blockchain deriva in gran parte dal fatto che lattività
mineraria è decentralizzata e il minatore non colludono. Mentre il
mining egoistico era abbastanza popolare nei primi anni di bitcoin,
non è più una pratica molto utilizzata poiché la latenza della rete è
molto più bassa, che è qualcosa di necessario per sfruttare questo
trucco
IT_M5L1c_Chainside_Contenuto_19
Proviamo ora a rispondere ad unaltra domanda, questa volta relativa
allestrazione egoistica. Supponiamo che un minatore egoista che ha
un terzo dellintera rete di hashrate stia operando insieme a minatori
onesti. A meno di dieci minuti uno dei minatori onesti trova una
soluzione allaltezza del blocco n meno uno. Il minatore egoista, a t
zero, trova il blocco del nido e lo tiene nascosto. Qual è il tempo
previsto in cui un minatore onesto troverà un blocco in competizione
in altezza n?
IT_M5L1c_Chainside_Contenuto_20
Uno dei problemi a cui naturalmente fa parte un minatore è lelevata
varianza delle entrate. Quindi, se ad esempio un minatore ha un
millesimo del tasso di hash globale, si prevede di trovare un blocco
ogni circa 7 giorni in media. Il problema è che si tratta di un dato
medio, se è sfortunato potrebbe facilmente rimanere poche settimane
senza trovare alcun blocco, il che significa che non ci sono introiti
mentre le spese energetiche sono costanti, il che può causare
problemi di flusso di cassa. Una soluzione a questo è lidea dei pool
minerari, in cui essenzialmente molti minatori possono collaborare
per trovare il blocco nest e quindi condividere il premio dalla
transazione di emissione. Quindi se 100 minatori in un pool riescono
a estrarre con successo un blocco con una transazione di emissione
di 50 bitcoin, riceveranno mezzo bitcoin ciascuno, ma come
funziona? Bene, prima di tutto la piscina ha bisogno di avere un
operatore di piscina, che sarà quello incaricato di raccogliere la
ricompensa e dividerla tra i membri del pool. Quindi ogni partecipante
al pool deve bloccare i blocchi con una transazione di emissione, che
a volte è anche chiamata coinbase, che invia bitcoin allindirizzo del
gestore del pool. Ma come fa loperatore della piscina a sapere
quanto dare a ciascun membro?
IT_M5L1c_Chainside_Contenuto_21
A scopo di test, esistono due reti bitcoin alternative, che hanno regole
di mining leggermente diverse e in cui le monete non hanno
assolutamente valore. Per prima cosa abbiamo la rete di testnet
bitcoin, cioè una blockchain con regole quasi identiche alla
blockchain di Bitcoin. Si differenzia solo per come viene regolata la
difficoltà e occasionalmente alcuni aggiornamenti alla rete Bitcoin
sono implementati in testnet in anticipo. Lobiettivo del testnet è di
mantenere bassa la difficoltà di estrazione, in modo che tutti possano
provare a estrarre le monete del testnet, quindi è stata implementata
una regola che se non viene trovato alcun blocco per 20 minuti, la
difficoltà scende a uno. Inoltre anche la codifica degli indirizzi
differisce, più su quella successiva.
Poi abbiamo il regtest, che è semplicemente una versione privata di
Bitcoin da eseguire localmente con la difficoltà di mining sempre
impostata su uno, quindi in pratica puoi estrarre tutte le monete che
desideri
IT_M5L1c_Chainside_Contenuto_22
Fermati un momento e prova a rispondere a questa semplice
domanda.
IT_M5L1c_Chainside_Contenuto_23
La lezione è terminata, grazie.