Prima ti ignorano, poi ridono di te, poi ti combattono, poi vinci tu. - Mahatma Gandhi.
Un'implementazione di Bitcoin è un codice che i singoli individui possono eseguire sui
propri computer per trasformarli in nodi Bitcoin.
L'implementazione di riferimento è il codice open-source noto come Bitcoin Core,
che può essere scaricato da
https://bitcoincore.org/en/download/
I nodi Bitcoin interconnessi costituiscono la rete Bitcoin:
La funzione di un nodo è quella di verificare in modo indipendente la validità delle transazioni, rifiutando quelle che non seguono le regole di Bitcoin.
Una transazione Bitcoin consiste in un messaggio firmato digitalmente che istruisce il trasferimento di una certa quantità di unità monetarie.
Le firme digitali sono generate da una Chiave Privata e dalla
corrispondente
Chiave Pubblica.
Una Chiave Privata è un numero casuale compreso tra 0 e 2^256 (approssimativamente il
numero di atomi nell'universo conosciuto), quindi la sua entropia è di 256 bit.
La Chiave Pubblica è derivata dalla Chiave Privata attraverso una funzione unidirezionale,
il che significa che è impossibile ottenere una Chiave Privata da una Chiave Pubblica.
Una Chiave Privata può criptare dati che solo la corrispondente Chiave Pubblica
può decriptare, e viceversa.
La firma digitale di un messaggio prevede la crittografia del
messaggio con la Chiave Privata
e l'aggiunta di un testo che include il messaggio originale (non criptato) e la
Chiave Pubblica.
La verifica che il proprietario della Chiave Privata abbia autorizzato il messaggio si
ottiene
decifrando il messaggio con la Chiave Pubblica e confermando che il messaggio risultante
corrisponde all'originale.
Gli Indirizzi Bitcoin sono Chiavi Pubbliche codificate,
progettate per essere più leggibili
e resistenti agli errori di battitura.
La generazione e l'archiviazione delle Chiavi Private, insieme alle corrispondenti
Chiavi Pubbliche e Indirizzi,
sono processi semplici che possono essere facilitati da programmi
chiamati Portafogli.
I nodi mantengono un mempool, che è un elenco di richieste di
transazioni, e memorizzano una copia di
il libro mastro distribuito noto come Blockchain, contenente transazioni
confermate.
Ogni nodo ottiene i salidi correnti, denominati set UTXO,
dalla propria copia della Blockchain.
Nel caso di transazioni in conflitto, la validità dovrebbe essere determinata
dall'ordine cronologico.
Ma i nodi non possono dimostrare matematicamente l'ordine di sollecitazione e,
poiché le richieste di transazione si propagano come pettegolezzi tra i nodi e possono
essere pubblicate da qualsiasi nodo,
diversi nodi ricevono questi comandi in momenti diversi e in un ordine cronologico
variabile.
Pertanto, se i nodi differiscono su quale versione della transazione debba essere
riconosciuta come valida,
si verifica una doppia spesa, con la conseguente coesistenza
di diversi sistemi monetari.
L'innovazione chiave di Bitcoin per risolvere questo problema è il meccanismo noto
come Prova di Lavoro.
Questo meccanismo permette di fare a meno di un'autorità centrale ruotando in modo
probabilistico il potere di eseguire le richieste di transazione. I diversi nodi minerari
guadagnano tale potere in base alla loro forza computazionale relativa.
Funziona come una lotteria decentralizzata continua in cui i partecipanti acquisiscono "biglietti" utilizzando una risorsa impossibile da falsificare: l'energia.
I sistemi alternativi alla Prova di Lavoro si basano su risorse interne al proprio sistema,
il che li rende insicuri. Questi sistemi vengono verificati attraverso dati che
possono
essere falsificati a basso costo e sono vulnerabili a attacchi in cui una singola
entità controlla clandestinamente la maggior parte dei nodi.
Di conseguenza, questi sistemi richiedono un'autorità per impiegare le risorse umane, generando
burocrazia e privilegi.
I meccanismi di consenso che non implicano lavoro coinvolgono invece la governance.
Una volta che una richiesta di transazione è inclusa in un blocco di dati che viene
verificato, copiato e propagato in modo indipendente da ogni nodo, viene considerata
eseguita.
Tuttavia, è possibile la coesistenza di due blocchi concorrenti per alcuni minuti.
Questo problema è
risolto quando viene creato un nuovo blocco, poiché ogni nuovo blocco deve essere
collegato all'ultimo blocco precedente,
e i nodi seguono la catena con il maggior lavoro cumulativo, tipicamente la catena più
lunga.
Di conseguenza, la probabilità che un blocco venga scartato diminuisce con la sua
profondità nella catena e ogni blocco successivo aumenta la probabilità di immutabilità,
chiamata conferma.
Le transazioni nei blocchi scartati ritornano nell'elenco delle richieste di transazione
se non sono incluse nei nuovi blocchi.
Il creatore di ogni blocco riceve una ricompensa, composta dalle commissioni di
transazione
e da un sussidio attraverso una transazione chiamata coinbase.
Ogni richiesta di transazione indica la tariffa da pagare per prioritizzare la sua
esecuzione.
Il sussidio consiste in nuove unità di bitcoin, la cui emissione viene dimezzata
ogni 210.000 blocchi (circa 4 anni). Ciò comporta un'inflazione monetaria
inflazione monetaria decrescente fino a raggiungere un massimo di 21 milioni di bitcoin.
L'integrità delle informazioni contenute nel record a blocchi è facilmente verificabile
grazie all'uso di
funzioni hash crittografiche. Queste funzioni unidirezionali
trasformano qualsiasi dato digitale in ingresso in dati di dimensioni fisse chiamati
hash.
Gli hash sono completamente diversi l'uno dall'altro, anche con lievi differenze nei
dati di input.
In Bitcoin, la funzione hash più utilizzata è SHA256, che produce un hash a 256 bit.
Ad esempio, l'identificatore (ID) della transazione è il doppio hash SHA256 dei dati della transazione e
l'identificatore del blocco è il doppio hash SHA256 dei dati contenuti nell'intestazione del blocco.
I dati contenuti nell'intestazione del blocco:
1. # L'hash dell'ID del blocco precedente.
2. # L'hash combinato di tutti gli
hash delle transazioni, noto come la Radice di un Albero di Merkle.
3. N° Nonce e hash obiettivo.
4. T Timestamp.
Ogni blocco è composto dall'intestazione e dalle transazioni con i rispettivi hash:
1.
L'hash dell'ID del blocco precedente:
Forma una catena in cui l'hash di ogni nuovo blocco include l'intera cronologia delle
transazioni.
Qualsiasi alterazione di un blocco invalida il blocco stesso e tutti i blocchi
successivi.
Come una zanzara nell'ambra, più un blocco è profondo nella catena, più diventa
inamovibile.
2. La radice di un albero di Merkle:
Fornisce un modo semplice per verificare l'integrità delle transazioni.
3. Nonce e obiettivo di hash:
Nonce:
Per minare un blocco, si deve trovare un nonce che, combinato con il resto dei dati
dell'intestazione del blocco, dia come risultato un hash (ID del blocco) inferiore a
una soglia specificata, nota come obiettivo dell'hash.
Ad esempio, se l'obiettivo è ottenere un hash che inizia con 00 da dati contenenti il
testo "bitcoin", si potrebbero fare dei tentativi con "bitcoin-1", "bitcoin-2" e così via fino a quando non
si troverà un nonce efficace.
Provalo qui!.
In questo esempio, il nonce sarebbe 53.
L'ID del blocco è quindi una prova di lavoro facilmente verificabile.
I minatori
utilizzano l'energia spesa per proporre le transazioni, mentre l'esecuzione effettiva
delle transazioni avviene in modo decentralizzato attraverso i nodi.
Obiettivo dell'hash:
La sua funzione è quella di mantenere un tasso medio di produzione di blocchi di
10 minuti. Ciò garantisce una propagazione e una convalida dei blocchi relativamente
rapida, riducendo i blocchi orfani e scoraggiando gli incentivi alla centralizzazione
del mining. Il progetto impedisce ai grandi minatori di ottenere vantaggi
significativi costruendo sui propri blocchi.
Inoltre, un flusso di dati minimo minimizza i costi operativi dei nodi e facilita la
replica delle informazioni.
4. Timestamp:
È l'ora approssimativa in cui ogni blocco è stato estratto dal rispettivo miner.
Ogni 2016 blocchi, la rete calcola la differenza di tempo tra il primo e l'ultimo
timestamp per regolare l'obiettivo di hash in base alle variazioni della potenza di
estrazione totale.
L'obiettivo di hash può essere moltiplicato o diviso per un massimo di 4 per limitare
l'impatto di alcuni attacchi di doppia spesa.
I timestamp non sono esatti e non aumentano necessariamente di tempo da un blocco all'altro. Per essere accettato da un nodo, un timestamp deve essere successivo alla mediana degli 11 timestamp precedenti e prima di due ore nel futuro secondo l'ora corrente del nodo.
Grazie a questo meccanismo, per la prima volta nella storia, l'inflazione di un bene monetario è prevedibile.
La tecnologia Bitcoin utilizza l'elettricità per evitare di consumare risorse umane. Libera il tempo umano.
Quando possiamo assicurare una rete finanziaria tramite l'informatica piuttosto chevtramite contabili, regolatori, investigatori, poliziotti e avvocati, passiamo da un sistema manuale, locale e di sicurezza inconsistente a uno automatizzato, globale e molto più sicuro. — Nick Szabo.
I minatori di Bitcoin utilizzano l'energia in modo simile a come i pompieri usano l'acqua per spegnere un incendio.
Il mining di Bitcoin si orienta verso fonti di energia che sbloccano energia
inutilizzata, che
altrimenti andrebbe sprecata. I minatori di Bitcoin forniscono un carico altamente
flessibile e interrompibile, in grado di operare ovunque.
A lungo termine, con l'aumentare della concorrenza e la diminuzione della redditività
mineraria, solo l'uso di energia in eccesso rimarrà economicamente conveniente.
La tecnologia Bitcoin consente di decentralizzare il controllo su un sistema monetario,
riducendo al minimo la governance finanziaria. Bitcoin funziona in base a regole senza governanti.
Chiedersi "chi controlla Bitcoin?" è simile a chiedere "chi controlla una lingua?".
I cypherpunk ripudiano la governance, quindi la sua assenza è sempre stata l'obiettivo.
Questa assenza aumenta l'immutabilità della sicurezza della rete e la
credibilità della sua politica monetaria.
"Sì: stai un po' indietro, mi stai togliendo la luce del sole". - La risposta del filosofo Diogene all'offerta di Alessandro Magno di concedergli qualsiasi desiderio.
In Bitcoin, il consenso emerge quando diversi computer eseguono simultaneamente
lo stesso protocollo. Massimizzando il ruolo del protocollo di consenso,
il consenso sociale viene spietatamente minimizzato.
Il design centrale di Bitcoin è immutabile, solo quelle innovazioni tecnologiche
che migliorano la sicurezza sono giustificate per essere gradualmente incluse
nel suo codice. Avanzare lentamente è un dogma.
La natura di Bitcoin è tale che una volta rilasciata la versione 0.1, il design fondamentale è stato fissato per il resto della sua vita. - Satoshi Nakamoto.
Dobbiamo trattare il software di Bitcoin con lo stesso rispetto con cui trattiamo il software dei reattori nucleari. - Hugo Nguyen.
Questa roba è difficile. Questa roba è sottile. Se siete frustrati dalla lentezza di Bitcoin, lasciate che vi dica che Bitcoin si muove troppo velocemente. La crittografia è difficile e spaventosa, e dobbiamo assicurarci di muoverci lentamente. - Andrew Poelstra.
Gli aggiornamenti di sicurezza di Bitcoin seguono un processo meticoloso:
1. Ricerca: Anche se l'implementazione di nuove funzionalità
in Bitcoin è incredibilmente lenta (per buone ragioni), il ritmo della ricerca è travolgente.
- Andrew Poelstra.
2. Proposta: Gli aggiornamenti vengono proposti per la revisione
tra pari, il brainstorming, l'implementazione
su sidechains/test-nets e lo sviluppo iterativo.
3. Consenso: Se le proposte generano interesse e c'è un consenso
schiacciante
tra i partecipanti alla rete, e i contributori software più attivi le accettano
all'unanimità, gli aggiornamenti vengono implementati e testati.
4. Implementazione Open Source: Gli aggiornamenti vengono
implementati come codice open source, consentendo
agli utenti di verificarli in modo indipendente.
5. Applicazione: Gli aggiornamenti vengono
applicati dai nodi. Ogni operatore di nodo
deve installare manualmente gli aggiornamenti se sceglie di adottarli.
Il termine "fork" si riferisce a un cambio nelle regole di consenso:
- Soft Fork: rende più rigide le regole del consenso. I blocchi considerati validi dai
nodi che eseguono la vecchia versione possono essere considerati non validi da quelli che
eseguono la nuova versione. Non richiede un aggiornamento simultaneo dell'intera rete.
- Hard Fork: Rilassa le regole di consenso. I blocchi considerati non validi dai nodi
che eseguono la vecchia versione possono essere considerati validi da quelli che eseguono
la nuova versione. Richiede l'aggiornamento di tutti i nodi, il che lo rende una soluzione
di ultima istanza contro un problema estremo di sicurezza della blockchain.
Maggiore è il rischio procedurale e il costo mentale, minori sono gli incentivi per l'aggiornamento.
Nell'eventualità di un fallimento catastrofico e generale della tecnologia di Bitcoin, sviluppatori influenti, che si spera condividano principi comuni, potrebbero contribuire a distribuire codice che migri le regole di base di Bitcoin in una nuova tecnologia. Questo scenario, spesso definito "l'opzione nucleare", suggerisce che in tali circostanze il concetto di Bitcoin probabilmente resisterebbe nonostante i cambiamenti nella tecnologia.
Se SHA-256 si rompesse completamente, penso che potremmo trovare un accordo su quale fosse la catena di blocchi onesta prima che iniziassero i problemi, bloccarla e continuare da lì con una nuova funzione hash. - Satoshi Nakamoto.
Il grande risultato della tecnologia Bitcoin è l'applicazione automatica dei diritti di proprietà in un sistema monetario.