This article has been translated from English to Italian.

Come funziona il mining di Bitcoin?

Nella lezione precedente, hai imparato cos'è un miner di Bitcoin, come memorizza le nuove transazioni nel suo pool di memoria e quindi avvia il processo di "mining" creando un blocco candidato.

Se quello che ho appena scritto ti sembra una lingua straniera, ti consiglio vivamente di iniziare con la prima lezione della mia Guida per principianti al mining di Bitcoin.

Se sei ancora con me, diamo un'occhiata più da vicino al blocco candidato...

Proprio come tu puoi essere diviso in due parti fondamentali, una testa e un corpo, un blocco candidato può essere suddiviso in due parti:

  1. Intestazione blocco (area gialla)
  2. Corpo del blocco (area grigia)
    Block Header and Body

Se osserviamo più da vicino un blocco candidato, in realtà NON contiene solo transazioni.

Candidate Block Anatomy

Quando un miner crea un blocco candidato, questo include un"header del blocco"(area gialla).

Il "corpo" del blocco (area grigia) contiene le transazioni.

Oltre a contenere una serie di transazioni, un blocco candidato contiene anche alcuni metadati che forniscono un "riassunto" del blocco.

I metadati sono semplicemente dati che forniscono informazioni su altri dati. In questo caso, i metadati forniscono informazioni sul blocco stesso. Queste informazioni sono note come "intestazione del blocco".

All'interno dell'intestazione del blocco ci sono diversi dati.

Ai fini di questa lezione, semplificherò ciò che è contenuto nell'intestazione del blocco.

Timestamp

Il primo dato all'interno dell'intestazione del blocco è il"Timestamp".

Il timestamp indica quando è stato creato il blocco.

Timestamp

Hash del blocco precedente

Il dato successivo è chiamato "Blocco precedente" o più specificamente"Hash del blocco precedente".

Il Previous Block Hash è l'hash del blocco precedente nella blockchain.

Previous Block Hash

Per capire cosa significa, dobbiamo dare un'occhiata al file.

Look inside blockchain

Ora che stiamo guardando all'interno del file, possiamo vedere che i dati sono strutturati in un modo specifico.

Look inside the file and see blockchainstructure

Visualizziamolo come la blockchain.

Il blocco candidato che il miner ha creato deve essere aggiunto sopra il blocco più recente.

Block must bee added on top of the most recent block

Supponiamo che il blocco più recente sia quello colorato in blu.

Most recent block in blockchain

Poiché il Block Hash del blocco colorato in blu è il blocco più recente nel file (la "blockchain"), allora quello è il blocco su cui il miner vuole costruire.

Pensa al Block Hash come a un numero ID generato appositamente per un blocco.

Quindi ciò che il minatore farà è aggiungere questo come"Hash blocco precedente" nell'intestazione del blocco del PROPRIO blocco candidato.

Block hash added as Previous Block Hash of Candidate Block

Hash del "Riepilogo transazione"

Il prossimo dato è quello che chiamerò Hash del "Riepilogo transazione".

Come suggerisce il nome, fornisce un "riepilogo" di tutte le transazioni nel blocco espresse come una stringa di caratteri.

Senza entrare nei dettagli, ciò che accade è che tutte le transazioni nel blocco (evidenziate in rosso) vengono inserite in una funzione hash e sottoposte a hash in un certo ordine, ottenendo un unico hash.

Merkle Root

Questo hash viene utilizzato come hash del "Riepilogo transazione".Merkle Root Example

Ciò che questo hash fornisce èun'impronta digitaleunica basata su tutte le transazioni incluse in un blocco.

Questo aiuta a garantire che le transazioni non siano state manomesse.

Questo hash del "Riepilogo transazione" è in realtà noto come"Radice di Merkle". 🤓

Ricorda, una piccola modifica ai dati cambierà totalmente l'hash. Ciò significa che se qualcuno dovesse tentare di alterare una transazione nel blocco in futuro, causerebbe la modifica dell'hash del "Riepilogo transazioni" che sarebbe totalmente diverso dal valore originale presente nell'intestazione del blocco.Merkle Root as Fingerprint

In pratica, modificando la transazione si creerebbe un'impronta digitale completamente diversa che non corrisponderebbe a quella originale.

Questo cambiamento permetterebbe a tutti di sapere immediatamente che una o più transazioni sono state manomesse.

Hash del blocco

Finora, l'intestazione del blocco contiene tre dati:

  1. Timestamp
  2. Hash blocco precedente
  3. Hash "Riepilogo transazione"

Il passo successivo consiste nell'inserire questi dati dell'intestazione del blocco in una funzione hash.

Questo produrrà un numero casuale chiamato"Hash del blocco".

(Anche se un nome più accurato sarebbe " Hash dell'intestazione del blocco", poiché è l'hash solo dell'intestazione del blocco, non dell'intero blocco).

Proprio come il precedente hash del blocco menzionato in precedenza, pensa all'hash del blocco come a un numero ID generato in modo personalizzato che verrà assegnato al blocco candidato.

Run block header through hash function
Perché il miner fa questo?

Affinché il miner possa aggiungere il suo blocco alla blockchain, deve trovare un hash di blocco che soddisfi un determinato requisito.

Se NON riesce a soddisfare questo requisito, il blocco NON sarà considerato valido e il miner non potrà aggiungerlo alla blockchain.

Più specificamente, il Block Hash deve essere un numero che inizia con un certo numero di zeri.

Quanti zeri esattamente?

Varia. Il software del sistema Bitcoin determina il numero minimo di zeri con cui deve iniziare l'hash del blocco.

In origine, il requisito era solo un piccolo numero di zeri, ma con l'aumentare del numero di minatori, il software Bitcoin ha iniziato a richiedere un numero maggiore di zeri.

Bitcoin mining process without nonce

Un minatore deve generare un output (il "Block Hash") che soddisfi la soglia di output impostata dal software Bitcoin.

Questa "soglia" specifica semplicemente il numero di zeri con cui deve iniziare il Block Hash.

È come la danza del "limbo".

Bitcoin mining is like a limbo dance

Più bassa è la soglia, più zeri sono richiesti.

Più zeri sono richiesti, maggiore è la difficoltà nel trovare un hash di blocco "corretto".

Questo perché più zeri iniziali significano meno soluzioni possibili, il che significa che è necessario più tempo per "trovare" un Block Hash corretto.

Trovare un valore che inizia con tre zeri come"000123..."è molto più difficile che cercare di trovare un valore con sei zeri come"000000123...".

Ecco un esempio recente di un Block Hash effettivamente valido:

0000000000000000000586b367c292dfd274bf2e67575cf8b4d00735fc1df6ff

Nota con quanti zeri inizia.

Il "certo numero di zeri" deriva da quella che viene chiamata"difficoltà di mining". Questa viene automaticamente aumentata o diminuita dal software che gestisce la rete Bitcoin. La difficoltà cambia in base al numero di miner. Più computer ci sono che fanno mining, maggiore è la difficoltà e più zeri sono necessari all'inizio, rendendo più difficile trovare il nonce vincente.

Un hash di blocco può essere interpretato come un numero molto grandee deve essere inferiore a una certa soglia. Questo è il motivo per cui gli hash di blocco iniziano con una serie di zeri seguiti da una stringa alfanumerica. Alcuni blocchi hanno fino a venti zeri iniziali, mentre i blocchi precedenti ne hanno solo otto. Il numero di zeri richiesti dimostra approssimativamente la difficoltà del mining al momento della pubblicazione del blocco.

Cosa succede se l'hash del blocco non inizia con il numero di zeri richiesto?

In tal caso il blocco NON può essere aggiunto al file (la "blockchain").

Fortunatamente, il minatore può fare più tentativi.

Ma se un miner eseguiva nuovamente la funzione hash solo sull'intestazione del blocco contenente solo il timestamp, l'hash del blocco precedente e l'hash del "riassunto della transazione", otterrebbe sempre lo stesso risultato.

Il minatore deve modificare i dati in qualche modo prima di provare a eseguire nuovamente l'hash dell'intestazione del blocco.

Bitcoin fornisce un modo!

Il nonce

Nell'intestazione del blocco c'è un campo extra chiamato"nonce"(riquadro azzurro)

Block header contains a nonce

C'è una parte speciale dell'intestazione del blocco che i minatori possono popolare con un numero arbitrario.

Il minatore è libero di inserire qualsiasi numero desideri.

Il nonce è completamente separato dalle transazioni nel blocco. Il suo unico scopo è quello di consentire ai miner di riempirlo con un numero e di cambiarlo se il Block Hash non soddisfa il requisito di iniziare con un certo numero di zeri.

Utilizzando un nonce, un miner può manipolare l'output della funzione hash per "indovinare" l'output desiderato.

Poiché gli altri dati nell'intestazione del blocco non possono essere modificati, l'unico dato che può essere alterato è il nonce.

Quindi, se il primo tentativo di hashing del Block Header fallisce, il miner cambia il valore del nonce.

Puoi pensare a questo processo come se cercassi di trovare la combinazione di un lucchetto a combinazione.

Combination Lock

Non ci sono scorciatoie possibili quando si cerca di trovare la combinazione di numeri che lo sblocca. Devi provare ogni combinazione possibile finché a un certo punto, per caso, trovi quella giusta.

Devi provare più e più volte finché non ti capita la combinazione giusta!

E proprio come è estremamente facile e veloce verificare che una combinazione di blocco sia quella corretta (o si sblocca o non si sblocca), è estremamente facile e veloce per il miner, e per gli altri nodi successivi, verificare che il nonce sia effettivamente quello giusto.

Il miner è anche in competizione con altri miner. Il primo miner che trova un nonce che risulta in un Block Hash valido ottiene il diritto di aggiungere il suo blocco nella blockchain e viene ricompensato per averlo fatto.

Ad esempio, supponiamo che l'hash del blocco debba iniziare con almeno quattro zeri.

L'unico modo per trovare un hash di blocco con il numero richiesto di zeri iniziali è scegliere casualmente un valore nonce ed eseguire l'intestazione del blocco attraverso la funzione hash.

In questo scenario, il minatore inizia con "0" per il valore nonce (riquadro azzurro).

Nonce is 0

Se ciò non produce il risultato desiderato, l'unica cosa che il minatore può fare è riprovare con un nonce diverso.

Il minatore cambia il nonce, poi ricomincia finché non riesce a trovare un hash di blocco con almeno il numero minimo richiesto di zeri. In questo caso, quattro zeri.

Ricorda, anche se hai apportato solo una piccola modifica, con una funzione hash, anche il più piccolo cambiamento produrrà risultati completamente diversi.

Quindi il primo tentativo del miner è stato quello di utilizzare il numero "0" nel nonce. Quindi esegue l'intestazione del blocco attraverso la funzione hash e vede se l'hash del blocco inizia con quattro zeri.

Come puoi vedere, il Bloch Hash inizia solo con due zeri, quindi NON soddisfa i criteri necessari per aggiungere il blocco alla blockchain.

Se l'output non è valido, il miner continua a provare con valori nonce diversi.

Poiché il valore "0" non ha funzionato, il minatore può cambiare il valore del Noncein "1"(riquadro azzurro) e quindi eseguire nuovamente l'intestazione del blocco attraverso la funzione hash.

Nonce changed to 1

Come puoi vedere, l'hash del blocco inizia senza zeri, quindi neanche questo funziona.

Poiché il valore "1" non ha funzionato, il miner può cambiare il valore del Noncein "2"(riquadro azzurro) e quindi eseguire nuovamente la funzione hash sull'intestazione del blocco.

Nonce changed to 2

In questo caso, il Block Hash inizia finalmente con quattro zeri e soddisfa i criteri.

È un risultato di hash del blocco riuscito! 🎉

Come puoi vedere, è imprevedibile quale nonce produrrà un Block Hash con il numero corretto di zeri, quindi il miner deve continuare a provare diversi nonce per trovare il valore giusto.

I miner possono minare per lunghi periodi di tempo senza alcuna garanzia di trovare mai un nonce corretto. La maggior parte non lo troverà mai!

Il nonce viene utilizzato come contatore, il cui valore viene costantemente incrementato fino a quando non viene trovato il blocco hash corretto o fino a quando non lo trova un altro miner.

È come un gioco a indovinare i numeri!

Stai semplicemente cercando di trovare un hash che inizi con un certo numero di zeri cambiando il valore del nonce.

I miner lo fanno ripetutamente… SPERANDO che il risultato produca un hash di blocco che soddisfi i criteri.

Più potenti sono i loro computer, più "ipotesi" possono fare.

Questo processo di "ipotesi" è noto come mining.

Il miner "vincente" viene ricompensato con un numero prestabilito di bitcoin (più le commissioni di transazione) chiamato"block reward".

Un miner vince il premio del blocco all'incirca ogni 10 minuti.

Premio di blocco

Poiché i miner impiegano molto tempo ed energie per "indovinare" il nonce corretto e confermare le transazioni sulla blockchain di Bitcoin, il software Bitcoin li ricompensa per il loro sforzo con:

  1. Bitcoin appena creati Quando un miner conferma le transazioni, queste vengono raggruppate in un blocco e aggiunte alla blockchain di Bitcoin. Per ogni nuovo blocco che viene aggiunto alla blockchain, vengono pagati nuovi bitcoin al miner. Questo è noto come sussidio di blocco. La quantità specifica di bitcoin si basa su un programma di emissione determinato dal protocollo al momento della creazione del blocco. A partire dal 20 aprile 2024, la nuova emissione è di 3,125 BTC per blocco, in seguito all'ultimo halving. Il prossimo halving è previsto intorno al 2 aprile 2028, quando la ricompensa per blocco scenderà a 1,5625 BTC per blocco.
  2. Commissioni di transazione. Quando le persone effettuano transazioni con bitcoin, pagano una commissione ai miner per incentivare ulteriormente la conferma della transazione. Quando un miner conferma un gruppo di transazioni, raccoglie anche tutte le commissioni di ogni singola transazione.

Il mining è un processo monotono e ripetitivo:

Bitcoin Mining Process

Prendi un Block Header con il nonce, hashalo, vedi se l'hash inizia con un certo numero di zeri e, in caso contrario, ripeti il processo con un nonce diverso.

Mi viene sonno solo a pensarci. 😴

Quindi, quando leggi o senti che il mining implica la "risoluzione di complessi problemi matematici", ora sai che non è una descrizione corretta.

Non c'è nulla di complesso nel mining! Il processo in sé è piuttosto semplice. Si tratta semplicemente di indovinare un numero corretto il più velocemente possibile o quanto basta per essere il PRIMO miner a indovinare, in modo che il proprio blocco candidato sia quello che viene aggiunto alla blockchain. Tutto qui!

Il "tasso di hash" indica la "capacità di indovinare" di un computer di mining. Più hash riesci a indovinare al secondo, più alto è il tuo tasso di hash. Ad esempio, 1 trilione (1.000.000.000) di ipotesi al secondo equivale a un tasso di hash di 1 terrahash (TH/s).

Solo perché il processo è semplice, non significa che sia facile. Ecco perché si chiama "mining". Stai cercando di "scavare" il numero corretto, il che richiede un grande sforzo, simile al vero mining nel mondo reale.

Ora che il miner ha trovato un nonce per poter generare un Block Hash che soddisfi i requisiti (inizia con almeno 4 zeri), il blocco viene aggiunto alla copia del file del miner (la "blockchain").

Ricordi che il blocco blu era il blocco più recente nella blockchain del miner? Ora non lo è più.

Poiché il miner è stato in grado di indovinare il nonce corretto, è stato in grado di aggiungere il suo blocco alla blockchain (colorato in verde).

Block added to blockchain

Quindi, da un punto di vista generale, il file sul computer del minatore è stato aggiornato (indicato in verde).

Miner's blockchain updated

E poi, il nodo trasmetterà questo blocco ai nodi vicini a cui è direttamente connesso.

I nodi lo controlleranno, lo verificheranno e si assicureranno che l'intestazione del blocco produca un hash del blocco che soddisfi i criteri. In questo caso, l'hash del blocco doveva iniziare con quattro zeri.Bitcoin miner propogates new block

Questi nodi aggiorneranno il loro file (la "blockchain") aggiungendo il blocco al file.

Il loro file verrà aggiornato e ora sarà la stessa versione di quello del minatore vincente (fileverde ).

Tutte le transazioni nel loro mempool che fanno parte di questo blocco vincente passano dallostato "fresco"(o "non confermato") aquello "confermato"e vengono ora aggiunte in modo permanente al file.

Tutte le transazioni in conflitto verranno eliminate.

Grazie al processo di mining, solo la transazione viola entrerà nella blockchain.Blockchain synced across network

Poi questi nodi passeranno il blocco ad altri nodi.Nodes will pass on the block to other nodes.

Una volta che il nuovo blocco è accettato dalla maggioranza dei miner, tutti i miner ricominciano e creano un nuovo blocco candidato e il processo di mining si ripete.

Il mining funge da meccanismo di smistamento per le transazioni attraverso una rete di computer, in cui i blocchi "minati" hanno l'ultima parola su ciò che appartiene alla blockchain.

Il Block Hash di questo blocco appena creato verrà ora utilizzato dai miner per il "Previous Block Hash" nei loro blocchi candidati.

Newly created block will now be used by miners

Il Block Hash funge da"catena".

I miner devono ora includere l'hash del blocco precedente nel nuovo blocco che stanno creando.

Miner include new block hash in new block

Ad esempio, questo significa che per minare il blocco 101, i minatori devono conoscere l'hash del blocco 100.

Finché il blocco 101 non è stato minato, il blocco 102 non può essere minato.

Questo obbliga i minatori a concentrarsi sul blocco 101 che a sua volta include l'hash del blocco 100. Nessun minatore può saltare avanti.

Ma invece di avere un "numero di blocco" per ogni blocco, ogni blocco fa riferimento al blocco precedente tramite il suo hash di blocco.

Ciò implica che ogni blocco è collegato agli altri e questo è ciò che crea una"catena di blocchi"nota come blockchain.

Questa "catena di blocchi" è tenuta insieme non dai numeri dei blocchi, ma dagli hash dei blocchi.

Perché non puoi imbrogliare Bitcoin

Supponiamo che tutti stiano lavorando sul blocco 101.

Ma un miner vuole modificare una transazione nel blocco 80.

Dovrebbe apportare le modifiche e rifare tutti i calcoli per i blocchi 80-100 E anche il blocco 101.

Sono 21 blocchi di elaborazione costosa!

Non solo, ma il miner dovrebbe fare tutto prima che gli altri miner della rete Bitcoin finiscano il blocco corrente (blocco 101) su cui stanno lavorando. Questo è praticamente impossibile.

È molto difficile farla franca manomettendo transazioni che fanno già parte della blockchain.

Questo è ciò che si intende quando le blockchain sono descritte come immutabili.

Proof-of-Work (PoW)

Il processo di mining è spesso indicato come"Proof-of-Work"o PoW.

Il PoW è noto come il"meccanismo di consenso" che Bitcoin utilizza per far sì che tutti i nodi concordino sulla copia "ufficiale" della blockchain di Bitcoin. È così che Bitcoin è in grado di raggiungere un consenso senza la necessità di risolvere le controversie o l'intervento di un'autorità centrale.

Il termine "proof-of-work" si riferisce semplicemente al fatto che ci vuole "lavoro" per trovare un hash di blocco al di sotto di una certa soglia. E una volta fatto, chiunque può verificarlo, il che fornisce la "prova".

Il processo di "indovinare un nonce" e quindi eseguire l'intestazione del blocco attraverso la funzione hash viene utilizzato come un modo per dimostrare che hai eseguito una quantità richiesta di "lavoro" sul tuo blocco.

Il primo miner che produce un hash valido può aggiungere un nuovo blocco alla blockchain e riceve una ricompensa in bitcoin.

Se un'ondata di minatori si unisce alla rete Bitcoin, il PoW si adeguerà per rendere più difficile trovare un hash di blocco valido. Se questa maggiore difficoltà scoraggia troppi minatori e questi smettono di minare, la difficoltà verrà ridotta per rendere più facile il mining.

Questo processo, noto come regolazione della difficoltà, avviene all'incirca ogni due settimane e garantisce che nuovi blocchi vengano aggiunti alla blockchain all'incirca ogni 10 minuti, indipendentemente dal numero di miner che entrano o escono dalla rete.

Gli aggiustamenti della difficoltà vengono effettuati in base alla velocità con cui i miner creano nuovi blocchi.

Regolando la difficoltà del mining, Bitcoin può garantire che i nuovi bitcoin vengano creati a una velocità predeterminata, indipendentemente dalla quantità di potenza di calcolo che partecipa alla rete.

La regolazione della difficoltà è importante perché garantisce che i miner non possano estrarre troppi bitcoin troppo velocemente.

L'hardware informatico specializzato e l'elettricità necessari per il mining fanno sì che attaccare la rete sia proibitivamente costoso. Questo garantisce la sicurezza e l'integrità della blockchain di Bitcoin.

Chiunque abbia abbastanza potenza di calcolo per attaccare la rete è meglio che si dedichi al mining onestamente e guadagni il premio del blocco (nuovi bitcoin più le commissioni di transazione).

Vuoi saperne di più sugli aspetti tecnici di Bitcoin? learnmeabitoin.com fornisce un'ottima guida facile da seguire per aiutare le persone a capire come funziona Bitcoin.

Sommario

Congratulazioni! Ora sai come funziona il "mining" in Bitcoin!

  • I minatori cercano un hash accettabile che sarà il "Block Hash" scegliendo un nonce, eseguendo la funzione hash e controllando l'output.
  • Se l'hash non ha la giusta quantità di zeri iniziali, i miner cambiano il nonce, eseguono la funzione hash e controllano di nuovo.
  • Quando un miner ha finalmente la fortuna di trovare un nonce che funziona e "vince", il blocco viene inviato ad altri nodi (inclusi altri miner) nella rete Bitcoin, ognuno dei quali può quindi eseguire la funzione hash con il nonce del miner vincente e verificare che funzioni.
  • Se la soluzione è accettata dalla maggioranza dei nodi, il blocco viene aggiunto alla blockchain e il minatore vincente riceve la ricompensa del blocco.
  • Tutti i miner si "resettano" e iniziano a lavorare su un nuovo blocco candidato, utilizzando l'hash del blocco appena estratto come riferimento nel loro Block Header (come "Previous Block Header").
  • Questo processo in cui i miner cercano di "indovinare" o trovare un nonce corretto è noto come "Proof-of-Work" (PoW).

Ora che abbiamo imparato qualcosa sui miner e sul mining, aggiorniamo la nostra mappa del sistema Bitcoin:

Bitcoin as a System (Mining Added)