Prima di tutto ci piacerebbe chiarire dei punti chiave necessari a comprendere l’evoluzione che stiamo vivendo. Bitcoin non è denaro, non è un’azienda, non è un prodotto, non è un servizio sul quale ci si iscrive, ma sopratutto non è una valuta e la blockchain non è un sistema di valuta ma bensì una piattaforma di fiducia.

La valuta è solo la prima applicazione che è stata applicata su questo tipo di sistema. Quel che è veramente importante che passi come messaggio è il concetto di decentralized application alla comunicazione del valore umano.

Cosa vuol dire questo?

Proviamo a pensare a cosa sono i soldi, banalmente possiamo dire che sono solo un’illusione e la ragione per cui non capiamo che è così è perché questo concetto è profondamente radicato nella nostra civiltà.

Il denaro è una delle più antiche tecnologie che l’umanità abbia mai inventato.

Nella storia del denaro che ora si estende per decine di migliaia di anni ci sono stati diversi cambiamenti importanti:

siamo passati dal baratto all’uso di pietre e metalli preziosi, siamo passati dall’uso della moneta sotto forma cartacea alla moneta di plastica e ora alla moneta della rete.

Cosa è bitcoin

Bitcoin introduce una piattaforma su cui è possibile eseguire la valuta come un’applicazione, su una rete senza punti centrali di controllo, un sistema completamente decentralizzato come Internet.
Non è denaro per Internet ma l’Internet dei soldi.

Bitcoin come altre tecnologie non è del tutto nuovo, infatti l’idea centrale in Bitcoin è quella di prendere 5 o 6 tecnologie che esistevano negli anni ’70, ’80, ’90 e unirle insieme per creare qualcosa di completamente nuovo.

Quindi ciò che è veramente rivoluzionario è la sua architettura e le caratteristiche che lo fanno funzionare.

È un sistema costituito da un protocollo di rete peer-to-peer, funzioni crittografiche fondamentali e un sistema di adattamento dinamico della difficoltà, basandosi sostanzialmente sul fatto che alcune economie si verificano su scala globale e che questi aspetti economici influenzano il funzionamento del protocollo di rete.

Cosa è la blockchain

Uno degli aspetti più interessanti in bitcoin è la blockchain e i suoi vari utilizzi che si possono applicare.

La blockchain o catena a blocchi, è un database distribuito append only. All’interno di ogni blocco si hanno una serie di informazioni fra cui le transazioni, il timestamp, la sua firma digitale, la firma digitale del blocco precedente e la firma digitale del prossimo blocco qualora esso non sia l’ultimo.
La firma digitale del blocco successivo è basata sulla firma digitale del blocco corrente.

Tale firma viene generata dalla proof-of-work che in bitcoin viene generata dall’hashcash proof-of-work system. La proof of work è sostanzialmente un dato difficile da produrre ma facile da interpretare, questo per via del fatto che si fa uso dell’algoritmo SHA-256 per generare tale hash.

Quindi se andiamo a cambiare la firma digitale di tale blocco andremo a cambiare qualsiasi cosa nel passato e di conseguenza andremo a rompere tutte le firme digitali dei blocchi precedenti. Questo è un dei principali motivi per il quale la blockchain viene definito un sistema sicuro. Ad esempio nel momento in cui un nodo decide di propagare la sua blockchain alterata il resto dei nodi controlla la propria copia della blockchain e attraverso l’algoritmo di consensus stabiliscono quale sia realmente la copia di blockchain valida.

Consensus & Mining

I blocchi della chain vengono riempiti dai miner che competono per risolvere un problema matematico e ottenere una ricompensa. Questa competizione ha portato ad intensificare le risorse in uso fino al punto di usare un numero ingente di risorse hardware, altamente adatte allo scopo, in giganteschi magazzini che consumano megawatt di elettricità, le mining farm.
Le mining farm non sono di certo un nuovo modo per arricchirsi in maniera rapida anzi in caso di mancanza di competenze i rischi riguardanti le perdite possono essere veramente alti. Come ho già detto bisogna avere le competenze e non poche per via del fatto che ci si trova all’interno di una vera e propria competizione.

Questa competizione garantisce al network un alto tasso di sicurezza per via del fatto che all’interno del network possiamo trovare player onesti o player disonesti.

Analizziamo ora, per quali motivi al giorno d’oggi, all’interno del network abbiamo più player onesti che player disonesti.
I miners sono in competizione uno con l’altro per ottenere i reward che bitcoin cede ad ogni miner durante la creazione di un nuovo blocco. Attualmente il reward all’interno del network è di 12.5 BTC e vengono assegnati in base alle regole del consensus.
Ogni 10 minuti viene generato un nuovo blocco, nel momento in cui si deve generare un nuovo blocco i miners controllano la mempool, all’interno della quale scelgono le transazioni con fee più alta sia per ottenere un payout più alto ( fee+reward ) sia perché le fee determinano la necessità da parte di chi invia la transazione di riceverla nel più breve tempo possibile.

Una volta che vengono scelte le transazioni viene verificato che rispettino una serie di regole che sono fra le 30 e le 40 regole, una volta che abbiamo stabilito che le transazioni selezionate rispettano queste regole le andremo ad inserire in un blocco, che anch’esso deve rispettare una serie di regole determinate all’interno dell’algoritmo di consensus.

Quando un miner sta costruendo un blocco, la prima transazione che inserisce in quel blocco è una transazione che gli paga e si tratta di una transazione unica perché la maggior parte delle transazioni hanno input e output ma la transazione riguardante il block reward non ha nessun input. Quindi, ciò significa che ogni miner metterà un segno di spunta all’inizio del blocco che dice di pagarlo dal nulla 12.5 bitcoin e questi 12.5 bitcoin sono nuovi e non sono mai esistiti prima.

Perché 12.5 btc? perché un miner non si assegna 20 o più bitcoin?
Questo non avviene perché quando costruiscono il blocco candidato lo riempiono di transazioni, mettono la prima transazione per ricevere il reward, ottengono l’header, cercano il nonce, trovano l’hash del blocco e propagano questo blocco a tutti gli altri miner che convalidano le regole di consensus sui blocchi e una delle regole di consenso è che puoi ricevere solo la tua ricompensa alla tariffa corretta in base al blocco in cui ci troviamo.

Il “nonce” in un blocco bitcoin è un campo a 32 bit (4 byte) il cui valore è impostato in modo che l’hash del blocco conterrà una serie di zeri iniziali.

Qualsiasi modifica ai dati del blocco (come il nonce) renderà l’hash del blocco completamente diverso. Poiché si ritiene impossibile prevedere quale combinazione di bit avrà il giusto hash, vengono provati molti valori nonce diversi e l’hash viene ricalcolato per ogni valore fino a quando non viene trovato un hash contenente il numero di zeri richiesti. (attualmente 18)

Le regole di validazione sono definite dal software, quindi se vogliamo sapere quali sono le regole di validazione attuali bisognerà leggere il codice di bitcoin che è scritto in C++ e che contiene al suo interno funzioni che fanno operazioni come: definire se il blocco è valido e se le transazioni sono valide.

I fork

Cosa succede se due miner elaborano lo stesso blocco in maniera diversa?

Ammettiamo di trovarci al blocco 10 e per quanto ne sappiamo questo è l’ultimo blocco della rete. Siamo connessi alla rete e qualcuno ci invia un messaggio che dice che è stato trovato il blocco 11 così possiamo verificare, confermare e aggiungere quel blocco alla catena.

Sappiamo che la rete bitcoin è distribuita in tutto il mondo e sappiamo anche che tanti miner stanno lavorando su questo problema in diversi posti del mondo. Ammettiamo che un miner in Italia trova un blocco e dopo 200 millisecondi un miner in Cina trova un blocco. Così il miner italiano ha iniziato la costruzione del blocco candidato 12 e allo stesso tempo il miner cinese ha iniziato a costruire il blocco 12 e i miners iniziano a costruire questo blocco appena ricevono conferme sul blocco precedente.

Il miner cinese e il miner italiano hanno iniziato a eseguire hashing il più rapidamente possibile, hanno costruito il blocco candidato, il quale viene riempito con delle transazioni, viene calcolato l’header e hanno iniziato a lanciare numeri casuali per riempire la funzione di hash necessaria ad ottenere la proof-of-work.

Il miner italiano trova il nonce che dà loro la proof-of-work e pochi millisecondi dopo il miner cinese trova la proof-of-work. In questo momento se andiamo a vedere il blocco creato dal miner italiano e dal miner cinese ci accorgeremo che ha un nonce leggermente diverso. Questo avviene perché potrebbe esserci un timestamp diverso, potrebbe essere diverso di un paio di secondi ad esempio gli orologi non sono perfettamente sincronizzati, potrebbero aver ricevuto transazioni in un ordine diverso forse vedono prima le transazioni italiane e poi la transazioni provenienti da altri paesi che sono arrivate alcuni millisecondi più tardi quindi l’ordine in cui li hanno aggiunti all’interno del blocco risulta diverso.

Quindi cosa succede? Tutto cambia completamente, la signature dell’header è diversa e di conseguenza anche l’esito della proof-of-work.

Quindi ora ci troviamo a lavorare sullo stesso blocco ma ci troviamo con risultati leggermente diversi forse solo di pochi bit ma diversi.

Abbiamo detto che il miner italiano trova un blocco, 100ms  più tardi il miner cinese trova un blocco ma entrambi si trovano su lati opposti del pianeta.

Quando creano il blocco candidato entrambi iniziano a propagarlo alla rete e ogni nodo riceve il blocco e dice ok ne è stato trovato uno nuovo, dopo averlo convalidato continua a propagarlo. Ora, quello che succede è che tutti i nodi più vicini all’Italia vedono prima il blocco minato in italia e presumono che ora questo è l’ultimo blocco. Tutti i nodi più vicini alla Cina vedono il blocco cinese e presumono che questo sia l’ultimo blocco. Quindi in termini di bitcoin questo è chiamato fork, entrambi questi blocchi sono validi hanno tutte le regole di consenso ed hanno una proof-of-work validata da tutti. In questo momento all’interno della chain ci troviamo difronte a una biforcazione ma solo una di queste due può sopravvivere. Quindi cosa succede dopo?

Non c’è meccanismo di voto in bitcoin, non si ottengono nodi che dicono hey penso che quello italiano sia quello giusto o il contrario, quindi il voto avviene attraverso l’applicazione di hash power.

L’hashpower garantirà alla chain di diventare più lunga e di conseguenza di apparire come quella valida.
I miner presenti nella chain italiana si accorgono che la chain cinese è più lunga automaticamente andranno a convergere verso quella chain perché la chain che vale è quella con più proof-of-work.

Il network bitcoin ad oggi soffre di alcuni problemi di scalabilità, infatti il numero di transazioni massimo per secondo è fra 1 e 3 transazioni con picchi massimi di 4 transazioni per secondo. Il team di sviluppo ha iniziato ad affrontare questo problema introducendo Segwit.

Cosa è SegWit e perché è importante per il lightning network

In breve possiamo dire che SegWit apporta un fix alla malleabilità delle transazioni (Transaction malleability ).

Transaction malleability è un flusso all’interno del software Bitcoin che consente di cambiare l’ID di una transazione prima che essa venga salvata all’interno di un blocco da parte dei miner.
E’ veramente difficile integrare Lightning Network con questo tipo di flusso e per comprendere al meglio questo problema dobbiamo comprendere come gli ID delle transazioni vengono creati.

Gli ID delle transazioni sono basati sul contenuto della transazione stessa, quando prendiamo il contenuto della transazione e lo diamo a una funzione di hashing otteniamo l’ID.

Ora che abbiamo appreso che l’ID si basa sul contenuto di questa transazione, possiamo parlare di come possiamo cambiare questo ID.

Ad esempio, un nodo malintenzionato prende una transazione, ne modifica la firma solo leggermente e improvvisamente questa transazione ha un nuovo ID completamente diverso, questo perché l’ID è basato sul contenuto e la firma è parte del contenuto.

Ora è più facile capire in che modo SegWit risolve questo problema, perché l’intera idea con SegWit è quella di rimuovere la firma dalla transazione, in modo da non dare più la possibilità ad un nodo malintenzionato di cambiarla e di conseguenza di cambiare l’ID della transazione.

Ecco come SegWit risolve la malleabilità delle transazioni ed è il motivo per cui è importante per il Lightning Network.

L’idea del lightning network è quello di stabilire un canale di pagamento tra due parti in modo da non dover registrare ogni singola transazione sulla blockchain pubblica.

Per fare questo lavoro abbiamo bisogno di finanziare questo canale di pagamento.

Ad esempio, io sono il tuo datore di lavoro, blocco un bitcoin su questo canale e pago 0.1btc ogni minuto che lavori per me, fino ad un totale di 10 minuti. Queste transazioni non vengono registrate subito sulla blockchain pubblica, ma quando il canale viene chiuso, viene registrata la transazione complessiva.

La rete bitcoin sa che committi 1btc su questo canale e ora ti appartiene perché ricevi 0.1btc ogni minuto per 10 minuti.

Per finanziare il canale di pagamento c’è bisogno di inviare una transazione di finanziamento. Questa transazione ha un ID specifico a cui si riferisce il canale, e modificando l’ID, l’intero concetto di Lightning Network non è più valido.

Vi lasciamo ora alla visione di un video che mostra la nuova versione RC1 del Lightning Network funzionante sul network bitcoin

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *