Perché Bitcoin funziona: Per i Neofiti

Questo non è per i Bitcoiners, questo è per i nuovi arrivati con qualche skill tecnico. | Shinobi

Perché Bitcoin funziona: Per i Neofiti
Perché Bitcoin funziona: Per i Neofiti

Questo non è per i Bitcoiners, questo è per i nuovi arrivati con qualche skill tecnico.

Traduzione dell'originale di Shinobi [SHI256] - Pubblicato il 29 gen 2021

Questo non è per i Bitcoiners, questo è per i nuovi  arrivati. Ho tentato di ridurre ai minimi termini un'analisi completa di  Bitcoin/blockchains (e perché non sono magici database nel cloud) che dovrebbe essere digeribile per i  nuovi arrivati relativamente tecnici. Fatene un Bookmark per passarlo in giro se ne avete bisogno.

Bitcoin (e le blockchain in generale) sono un concetto molto  contro intuitivo, anche per le persone che hanno familiarità con i sistemi tecnici distribuiti. Per capire veramente come funzionano questi sistemi, una cosa deve  essere compresa sopra ogni altra: queste cose sono solo database. Sono  database con speciali proprietà crittografiche, ma sono ancora solo database, 1 e 0 su un hard disk da  qualche parte in cui la gente legge e scrive. O avete una copia di quel  database, o vi fidate che qualcun altro mantenga una copia del database e vi permetta di leggere e scrivere su di esso.

La Criptovaluta

Ora passiamo alle speciali proprietà crittografiche utilizzate dalle blockchain: il primo pezzo importante da capire è una funzione hash.

Una funzione di hash prende in input un quantitativo di dati  - di dimensioni arbitrarie - e restituisce come output un altro quantitativo di dati - di dimensioni fisse - unico per quell'input.

Per esempio, inserendo la frase precedente in questo              generatore di hash produce il seguente hash:

86FEB086BB04E438E0EAC9AAE4C3092DC7E2CE453D41420E67555D5BE169D8D2

Quell'hash è un'impronta digitale unica della frase che l'ha  creato, e le probabilità di trovare qualsiasi altro input per quella  funzione hash che crei lo stesso hash è, per tutti gli scopi pratici, matematicamente impossibile. Questo è uno dei blocchi fondamentali utilizzati per fornire le speciali proprietà crittografiche di una blockchain.

Il prossimo pezzo importante della crittografia è un albero di Merkle. Questa è una struttura di dati che fa uso di hash sui singoli pezzi di dati per  creare un hash aggregato di molti hash individuali. L'entità che  costruisce l'albero di Merkle prende ogni singolo pezzo di dati (in questo caso, le singole  transazioni sulla blockchain), e ne crea un hash. Da qui, ogni coppia di  hash viene sottoposta a hash (se c'è un numero dispari di dati, allora l'hash dispari  viene sottoposto a hash con un duplicato di se stesso), e così via fino a  quando si ottiene un unico hash. Questo è il modo in cui le effettive transazioni individuali  in un blocco sono impegnate crittograficamente in un modo che è  impossibile da alterare. Pensatelo come una piramide dove ogni livello fino alla cima ha la metà  degli hash di quello sotto di esso. Cambiare un singolo bit digitale di  informazione in una singola transazione altererebbe l'hash per ogni punto di questo  albero di merkle fino alla cima. Questo permette ad ogni pezzo di dati (transazioni) nell'albero di essere provato come incluso nell'albero con il pezzo di dati  stesso, e tutti gli hash necessari su per l'albero per provare che è una  parte del singolo hash della radice in cima.
Questa prova di inclusione da sola non fornisce alcuna  garanzia sulla validità delle cose incluse nell'albero di Merkle, solo  che i singoli elementi nell'albero erano presenti quando l'albero è stato creato  (cioè spendere monete senza firme valide, creare monete dal nulla, ecc.)

Ogni aggiornamento al database della blockchain è un "blocco" discreto. Questo ci porta all'"intestazione del blocco", che fa anche uso di hash. L'intestazione del blocco è un pezzo di dati di 80 byte che contiene tutte le  informazioni di cui sopra (notate la radice di Merkle? Questo è l'hash  superiore dell'albero di tutte le transazioni nel blocco). La sezione Version è semplicemente un campo rilevante per gli aggiornamenti che sorvoleremo in una vista di alto livello come questa. IlPrevious Block Hash è l'hash dell'intestazione del blocco precedente nella blockchain. Il Timestamp è l'ora e la data in formato UNIX timestamp. Il Difficulty Target è una delle parti dell'intestazione relative al mining di bitcoin. Se ricordate da sopra l'hash della frase nell'esempio di hashing era:

86FEB086BB04E438E0EAC9AAE4C3092DC7E2CE453D41420E67555D5BE169D8D2

L'obiettivo di difficoltà (Difficulty Target) in Bitcoin è più o meno un requisito: l'hash dell'intestazione del blocco deve avere un certo numero di zeri sulla parte anteriore dell'hash. Ora, se facciamo finta che la frase  usata per ottenere quell'hash sia un blocco, è chiaro che non ha  assolutamente nessuno zero sul davanti, quindi è inutile come blocco. Immaginate se aggiungessi il numero 1  alla fine della frase. E se potessi cambiarlo in 2 se l'hash non ha  abbastanza zeri, e 3, e così via. Ecco a cosa serve il Nonce. Se fate un  albero Merkle di transazioni e mettete il suo hash radice  nell'intestazione del blocco, e l'hash non ha abbastanza zeri iniziali per soddisfare l'obiettivo di difficoltà,  potete cambiare il Nonce e di conseguenza l'hash. Tutti sulla rete  tengono traccia della difficoltà (e controllano che il nuovo blocco soddisfi o superi il Difficulty Target), e i  minatori competono per generare un blocco con abbastanza zeri iniziali  da essere considerato valido. Ogni 2016 blocchi (circa due settimane) la difficoltà della rete cambia per cercare di mantenere il tempo tra i blocchi su una media di 10 minuti. Il software Bitcoin stima statisticamente la quantità di potenza di calcolo richiesta  ad un certo Difficulty Target per produrre blocchi su una media di 10  minuti, e la confronta con la frequenza con cui i blocchi sono stati creati in base ai loro  Timestamp.

Questo è essenzialmente ciò che è una blockchain: una catena  di intestazioni di blocchi consecutivi con obiettivi di difficoltà che  soddisfano l'attuale requisito di difficoltà della rete, che hanno Timestamp per verificare  che tutti i cambiamenti per l'obiettivo di difficoltà sono stati fatti  accuratamente per ottenere blocchi di 10 minuti (almeno nel caso di Bitcoin, altre blockchain possono puntare a intervalli arbitrari).

Da qui passiamo all'ultimo pezzo di crittografia coinvolto, le firme digitali. Se volete fare un'immersione profonda nel lato matematico delle cose, c'è  un link e fatelo. In caso contrario, cercherò di semplificare il più  possibile per contestualizzare il tutto nella visione generale di alto livello di una blockchain.

Si genera un numero casuale molto grande, che può essere usato con una funzione matematica per ricavare un altro numero grande. Finché si può mantenere il primo numero completamente segreto, si può condividere il secondo con  tutto il mondo. Usando il numero che condividi con il mondo intero,  chiunque può prendere quel numero pubblico e verificare una "firma" che fai con il numero segreto.  Questo viene realizzato con un protocollo per generare le firme con il  numero segreto, e un secondo protocollo per verificare le firme dal numero segreto corrispondente  usando quello pubblico. Un protocollo prende il numero segreto e un  messaggio (una transazione Bitcoin), e   sorvolando su molti dettagli matematici di basso livello,  moltiplica effettivamente il messaggio per il numero segreto per  ottenere una firma. Il secondo protocollo prende una firma prodotta dal primo, e il numero pubblico corrispondente, e con un'operazione matematica equivalente verifica che la firma provenga dal numero segreto corretto senza rivelarlo. Questo è ciò che permette di far  rispettare la proprietà di Bitcoin. Ogni transazione sulla blockchain di  Bitcoin è un insieme di input (monete esistenti) e output (monete create con la transazione) con firme per ogni input della transazione per dimostrare che è legittimamente autorizzata. Se si perdono le chiavi private (i numeri segreti) si perdono le  monete.

  • numero segreto = chiave privata (mantenere il segreto)
  • numero pubblico = chiave pubblica (condividere con il mondo)
  • firma = prova che una chiave privata ha firmato un messaggio, verificabile con la chiave pubblica

Gli incentivi

Tutte le transazioni sulla rete Bitcoin consumano "input" (monete non spese) e creano output (le nuove monete non spese create quando una transazione è confermata). I minatori sono autorizzati a creare transazioni speciali  che mettono in circolazione nuovi Bitcoin. (Questo è l'ultimo inciso per dire che altri sistemi possono fare altre cose, sto parlando di Bitcoin da qui in poi) Oltre  a rivendicare nuove monete messe in circolazione, i minatori sono  autorizzati a rivendicare commissioni dalle transazioni per la loro elaborazione. Le commissioni sono  decise dall'entità che firma una transazione quando viene creata. Ogni  input di transazione valida esistente ha un numero di satoshi (l'unità di base del Bitcoin)  associato ad esso. Una transazione può creare un numero arbitrario di  output con valori di satoshi non superiori a quelli degli input. Le transazioni possono creare un  insieme di output con un valore aggregato che è inferiore a quello degli  input. La differenza di questi importi (commissioni di transazione) può essere rivendicata dai  minatori del blocco in cui le transazioni sono contenute, oltre alla  nuova quantità di monete messe in circolazione. I minatori svolgono il ruolo di mettere in  circolazione nuovi bitcoin ad un costo, guadagnando anche commissioni  per l'elaborazione delle transazioni includendole nei loro blocchi.

Il funzionamento dell'hardware necessario per trovare  intestazioni di blocco valide ha i costi dell'hardware stesso e  dell'elettricità necessaria per farlo funzionare. Più persone fanno funzionare l'hardware di estrazione, più  difficile (e più costoso) sarà estrarre bitcoin in relazione a quanto è  redditizio. Questo è il motivo per              cui la gente si riferisce a Bitcoin come "immutabile". Ogni  blocco che aggiorna il database è parte di una catena di hash collegati  insieme con un costo dimostrabile per creare ogni nuovo collegamento. Quel costo significa che  per tornare indietro e modificare i blocchi precedenti nel database, bisogna rifare il lavoro e spendere il doppio dell'energia. Ogni persona con una copia della  blockchain che osserva gli aggiornamenti (altri minatori, utenti che  convalidano i fondi che ricevono, aziende, ecc.) considererà sempre la versione della blockchain con il maggior "costo" cumulativo affondato in essa lo stato valido del database, finché ogni transazione nella blockchain non viola alcuna regola. Una brevissima lista di esempi (anche se per nulla esaustiva):

  • I minatori non possono reclamare più monete della somma della nuova emissione attuale per blocco + le commissioni dei minatori da tutte le transazioni in un blocco.
  • Una transazione non è valida senza firme corrette e verificabili per ogni suo ingresso.
  • Un blocco non è valido se il 100% delle transazioni al suo interno non sono valide.
  • Un blocco non è valido se supera la blocksize (un limite alla dimensione degli aggiornamenti del database).

Dato che tutti guardano e verificano, i minatori possono reclamare le loro entrate solo se forniscono una prova del costo sostenuto attraverso una valida intestazione di blocco e seguono tutte le regole della blockchain. Solo  allora i partecipanti al mercato considereranno una transazione come  avvenuta e onoreranno l'altro lato              dell'interazione economica.

Il quadro più ampio

Quindi cosa diavolo è Bitcoin? È un database. Un database che rappresenta denaro con una fornitura predeterminata e un programma di inflazione. Un database che memorizza queste cose in un modo che permette la verifica della sua integrità. Come fai a sapere di possedere effettivamente la capacità di spendere vero Bitcoin se non hai verificato la validità di ogni singola transazione fino al momento in cui ogni satoshi di valore che ti è stato inviato è stato messo in              circolazione dai minatori? Come fate a verificare quella  catena di transazioni se non verificate tutte le transazioni nella  blockchain? Ricorda, un blocco non è valido se una singola transazione non valida è in esso.  Qualsiasi blocco costruito su un blocco non valido è anch'esso non  valido.

In definitiva Bitcoin è solo una macchina della "verità", e  ho messo la verità tra virgolette per un motivo. Cosa prova la verità?  L'intestazione di un blocco prova che un certo numero approssimativo di hash sono stati fatti su di esso, spendendo energia, per soddisfare l'obiettivo di difficoltà.  L'albero di merkle prova l'insieme di transazioni che una specifica intestazione di  blocco ha impegnato. Ciò che queste cose non provano da sole è che tutto  nella blockchain sia valido secondo le regole. Per provarlo, gli utenti devono effettivamente scaricare e verificare linearmente che ogni transazione in ogni blocco segua tutte le regole (oltre a verificare le intestazioni di blocco e gli alberi  di merkle che si impegnano nelle transazioni).

Qui sta il paradosso del Bitcoin e delle blockchain. La  crittografia incentiva la blockchain ad andare avanti, permette di  garantire che i trasferimenti di proprietà siano legittimamente autorizzati, ma non garantisce da sola l'integrità del sistema globale monetariamente. L'unica cosa che lo garantisce sono gli utenti del sistema che verificano completamente la totalità della  blockchain rispetto alle regole quando interagiscono con essa. Dovrebbe  essere intuitivo perché questo può presentare problemi al sistema nel suo complesso se la maggior parte delle persone non può verificare la blockchain perché è troppo grande. Qual è la differenza tra questo e un database bancario o AWS? Se un utente non può  verificare la blockchain da solo, deve fidarsi ciecamente di qualsiasi  entità lo stia facendo per suo conto. Se verificare la blockchain diventa proibitivo,  allora è possibile che un gruppo abbastanza piccolo finisca per essere  gli unici verificatori per essere in grado di cambiare le regole che stanno seguendo senza che  gli utenti se ne accorgano.

Bitcoin e la blockchain che lo alimenta possono realizzare  cose rivoluzionarie nell'estendere l'accesso a un bene e una rete per  trasferirlo che non può essere spenta o chiusa a persone indesiderabili. Ma può realizzare queste  cose solo se è pratico per gli utenti scaricare e convalidare completamente la blockchain storica. Se gli utenti non possono farlo, allora fondamentalmente non è  diverso dal cloud o dalle banche di una volta. Se non puoi verificare la  blockchain, sei soggetto ai ciechi capricci di chiunque lo stia facendo per te. Proprio  come JP Morgan o Twitter.

- Shinobi [SHI256]