Nota: Questa pagina è seriamente obsoleta e in gran parte non mantenuta; a causa di incidenti passati di edit-warring non è stata soggetta a molta peer review.

Un nodo completo di Bitcoin potrebbe essere modificato per scalare a tassi di transazione molto più alti di quelli che si vedono oggi, assumendo che detto nodo sia eseguito su un server di fascia alta piuttosto che su un desktop. Bitcoin è stato progettato per supportare client leggeri che elaborano solo piccole parti della catena a blocchi (vedi la verifica semplificata dei pagamenti qui sotto per maggiori dettagli su questo).

Si prega di notare che questa pagina esiste per dare calcoli sulla scalabilità di un nodo Bitcoin completo e delle transazioni sulla catena a blocchi senza considerare la sicurezza della rete e la decentralizzazione. Non ha lo scopo di discutere la scalabilità di protocolli alternativi o cercare di riassumere i dibattiti filosofici. Create pagine alternative se volete farlo.

Nota per i lettori

Quando i tecnici sentono parlare di come funziona il bitcoin spesso si fermano alla parola “inondazione” e dicono “Oh-mio-dio! non può scalare!”. Lo scopo di questo articolo è di prendere un esempio estremo, il tasso di transazione di picco di Visa, e mostrare che bitcoin potrebbe tecnicamente raggiungere quel tipo di tasso senza alcun tipo di ragionamento discutibile, cambiamenti nel design del nucleo, o overlay inesistenti. Come tale, è semplicemente un esempio estremo, non un piano per come il bitcoin crescerà per affrontare esigenze più ampie (come sistema decentralizzato è il pubblico che usa il bitcoin che deciderà come il bitcoin cresce), è solo un argomento che mostra che il design del nucleo del bitcoin può scalare molto meglio di quanto una persona intelligente possa immaginare all’inizio.

Dan critica giustamente l’analisi presentata qui, sottolineando che operare su questa scala ridurrebbe significativamente la natura decentralizzata di bitcoin: se devi avere molti terabyte di spazio su disco per eseguire un nodo “a convalida completa” allora meno persone lo faranno, e tutti quelli che non lo fanno dovranno fidarsi di quelli che lo fanno per essere onesti. Dan sembra (dalle sue slide) essersi spinto troppo oltre con questo argomento: sembra suggerire che questo significa che i bitcoin saranno controllati dal tipo di banche centrali che sono comuni oggi. La sua analisi fallisce per due ragioni (e la seconda è colpa di questa pagina che è un po’ fuorviante):

In primo luogo, anche alla scala astronomica qui presentata la capacità richiesta è ben all’interno del regno dei privati (ricchi), e certamente lo sarebbe in qualche momento futuro quando quel tipo di capacità fosse richiesto. Un sistema che mette i privati, o almeno piccoli gruppi di privati, alla pari con le banche centrali difficilmente potrebbe essere chiamato centralizzato, anche se sarebbe meno decentralizzato del bitcoin che abbiamo oggi. Il sistema non potrebbe nemmeno arrivare a questo tipo di scala senza che gli utenti bitcoin si accordino collettivamente per aumentare la dimensione massima del blocco, quindi non è un risultato che può accadere senza il consenso degli utenti bitcoin.

In secondo luogo, e più importante, il presunto scaling descritto qui tratta di Bitcoin che sostituisce il visto. Questo è un cattivo paragone perché il bitcoin da solo non è un perfetto sostituto del visto per ragioni completamente estranee allo scaling: Bitcoin non offre transazioni istantanee, credito, o vari meccanismi antifrode (che alcune persone vogliono, anche se non tutti lo vogliono), per esempio. Bitcoin è un sostituto più completo per assegni, bonifici, vaglia, monete d’oro, CD, conti di risparmio, ecc. e se ampiamente adottato probabilmente sostituirà gli usi delle carte di credito che sarebbero meglio serviti da queste altre cose se funzionassero meglio online.

Gli utenti di Bitcoin a volte sorvolano su questo fatto troppo rapidamente perché la gente è troppo veloce a chiamarlo un difetto ma questo è ingiusto. Nessun sistema è ideale per tutti gli usi e Bitcoin ha uno spettro di qualità più ampio della maggior parte degli strumenti monetari. Se la comunità bitcoin non è disposta a sottolineare che alcune cose sarebbero meglio fatte da altri sistemi, allora diventa facile fare argomenti di paglia: Se ammettiamo che il bitcoin potrebbe essere usato come cera per pavimenti e come guarnizione per il deserto, qualcuno farà sempre notare che non è la migliore cera per pavimenti o la migliore guarnizione per il deserto.

È banale costruire sistemi di elaborazione dei pagamenti e di credito _sopra_ il bitcoin, sia quelli classici (come Visa stessa!) che quelli “decentralizzati” come Lightning. Questi sistemi potrebbero gestire volumi di transazioni più elevati con costi inferiori, e saldare frequentemente al bitcoin che li sostiene. Questi potrebbero usare altre tecniche con diversi compromessi rispetto al bitcoin, ma essere comunque sostenuti e denominati dal bitcoin e quindi godere ancora della sua mancanza di controllo centrale. Vediamo gli inizi di questo oggi con lo scambio di bitcoin e i servizi di portafoglio che permettono pagamenti istantanei tra i membri.

Questi servizi otterrebbero il beneficio della stabile valuta bitcoin resistente all’inflazione, gli utenti otterrebbero i benefici delle transazioni istantanee, del credito e dell’anti-frode, bitcoin in generale godrebbe di una migliore scalabilità dal volume delle transazioni scaricate senza compromettere la sua natura decentralizzata. In un mondo in cui il bitcoin fosse ampiamente utilizzato, i sistemi di elaborazione dei pagamenti avrebbero probabilmente prezzi più bassi perché avrebbero bisogno di competere con le transazioni in bitcoin grezzo, ma potrebbero anche permettersi prezzi più bassi perché il frequente regolamento di bitcoin (e le transazioni di deposito a garanzia di bitcoin a fiducia zero) ridurrebbero il loro rischio. Questo è doppiamente vero perché bitcoin potrebbe plausibilmente scalare per sostituirli interamente, anche se non sarebbe l’idea migliore a causa della conseguente riduzione della decentralizzazione.

Obiettivi di scalabilità

VISA gestisce in media circa 2.000 transazioni al secondo (tps), quindi chiama un tasso di picco giornaliero di 4.000 tps. Ha una capacità di picco di circa 56.000 transazioni al secondo, ma in realtà non usano mai più di un terzo di questa anche durante i periodi di picco dello shopping.

PayPal, al contrario, ha gestito circa 10 milioni di transazioni al giorno per una media di 115 tps alla fine del 2014.

Prendiamo 4.000 tps come obiettivo di partenza. Ovviamente se vogliamo che Bitcoin sia scalabile per tutte le transazioni economiche nel mondo, compreso il contante, dovrebbe essere molto più alto di questo, forse più nell’ordine di qualche centinaio di migliaia di tps. E la necessità di essere in grado di resistere agli attacchi DoS (che VISA non deve affrontare) implica che vorremmo scalare ben oltre i picchi standard. Tuttavia, scegliere un obiettivo ci permette di fare alcuni calcoli di base anche se è un po’ arbitrario.

Oggi la rete Bitcoin è limitata a una velocità sostenuta di 7 tps a causa del protocollo bitcoin che limita le dimensioni dei blocchi a 1MB.

CPU

Il protocollo ha due parti. I nodi inviano messaggi “inv” ad altri nodi dicendo loro che hanno una nuova transazione. Se il nodo ricevente non ha quella transazione, la richiede con un getdata.

Il grande costo è la crittografia e le ricerche nella catena dei blocchi coinvolte nella verifica della transazione. Verificare una transazione significa un po’ di hashing e alcune verifiche della firma ECDSA. RIPEMD-160 funziona a 106 megabyte/sec (chiamalo 100 per semplicità) e SHA256 è circa lo stesso. Quindi l’hashing di 1 megabyte dovrebbe richiedere circa 10 millisecondi e l’hashing di 1 kilobyte richiederebbe 0,01 millisecondi – abbastanza veloce da poterlo ignorare.

Bitcoin è attualmente in grado (con un paio di semplici ottimizzazioni che sono prototipate ma non ancora unite) di eseguire circa 8000 verifiche di firma al secondo su un processore quad core Intel Core i7-2670QM 2.2Ghz. Il numero medio di input per transazione è di circa 2, quindi dobbiamo dimezzare il tasso. Questo significa che 4000 tps sono facilmente raggiungibili dal punto di vista della CPU con una singola CPU abbastanza mainstream.

Come possiamo vedere, questo significa che finché i nodi Bitcoin sono autorizzati a massimizzare almeno 4 core delle macchine su cui girano, non esauriremo la capacità della CPU per il controllo delle firme a meno che Bitcoin non stia gestendo 100 volte più traffico di PayPal. Alla fine del 2015 la rete sta gestendo 1,5 transazioni/secondo, quindi anche assumendo un’enorme crescita di popolarità non raggiungeremo questo livello per molto tempo.

Ovviamente Bitcoin fa altre cose oltre al controllo delle firme, più ovviamente, la gestione del database. Noi usiamo LevelDB che fa la maggior parte del lavoro pesante su un thread separato, ed è capace di carichi di lettura/scrittura molto alti. Nel complesso l’uso della CPU di Bitcoin è dominato da ECDSA.

Network

Assumiamo un tasso medio di 2000tps, quindi solo VISA. Le dimensioni delle transazioni variano da circa 0,2 kilobyte a più di 1 kilobyte, ma la media è di mezzo kilobyte oggi.

Questo significa che è necessario tenere il passo con circa 8 megabit/secondo di dati di transazione (2000tps * 512 byte) / 1024 byte in un kilobyte / 1024 kilobyte in un megabyte = 0,97 megabyte al secondo * 8 = 7,8 megabit/secondo.

Questo tipo di larghezza di banda è già comune anche per le connessioni residenziali oggi, ed è certamente all’estremità bassa di ciò che i fornitori di colocation si aspettano di fornirvi.

Quando i blocchi sono risolti, il protocollo attuale invierà nuovamente le transazioni, anche se un peer lo ha già visto al momento della trasmissione. Risolvere questo per rendere i blocchi solo liste di hash risolverebbe il problema e renderebbe trascurabile la larghezza di banda necessaria per la trasmissione dei blocchi. Quindi, anche se questa ottimizzazione non è completamente implementata oggi, non consideriamo qui la larghezza di banda per la trasmissione dei blocchi.

Storage

A tassi di transazione molto alti ogni blocco può essere più di mezzo gigabyte di dimensione.

Non è richiesto per la maggior parte dei nodi di validazione completa di memorizzare l’intera catena. Nel documento di Satoshi descrive il “pruning”, un modo per cancellare i dati non necessari sulle transazioni che sono completamente spese. Questo riduce la quantità di dati che è necessaria per un nodo a piena validazione per essere solo la dimensione dell’attuale dimensione dell’output non speso, più alcuni dati aggiuntivi che sono necessari per gestire i ri-org. A partire da ottobre 2012 (blocco 203258) ci sono state 7.979.231 transazioni, tuttavia la dimensione del set di output non speso è inferiore a 100MiB, che è abbastanza piccolo da stare facilmente nella RAM anche per computer piuttosto vecchi.

Solo un piccolo numero di nodi di archiviazione ha bisogno di memorizzare l’intera catena che risale al blocco genesi. Questi nodi possono essere usati per avviare nuovi nodi completamente convalidanti da zero, ma non sono altrimenti necessari.

Il principale fattore limitante delle prestazioni di Bitcoin sono le ricerche su disco una volta che l’insieme di output delle transazioni non utilizzate smette di stare in memoria. Una volta che i dischi rigidi saranno eliminati a favore degli SSD, è possibile che l’accesso all’insieme UTXO non diventi mai un serio collo di bottiglia.

Ottimizzazioni

La descrizione di cui sopra si applica al software attuale con solo piccole ottimizzazioni (del tipo che può essere fatto da un uomo in poche settimane).

Tuttavia c’è il potenziale per ottimizzazioni ancora maggiori da fare in futuro, al costo di qualche complessità aggiuntiva.

CPU

Esistono algoritmi per accelerare la verifica in batch sulle firme a curva ellittica. È possibile verificare le loro firme simultaneamente per un’accelerazione di 2x. Questa è un’implementazione un po’ più complessa.

Verifica di pagamento semplificata

È possibile costruire un’implementazione di Bitcoin che non verifica tutto, ma invece si basa o sulla connessione a un nodo fidato, o mette la sua fede in un’alta difficoltà come proxy per la prova di validità. bitcoinj è un’implementazione di questa modalità.

Nella modalità SPV (Simplified Payment Verification), che prende il nome dalla sezione del documento di Satoshi che la descrive, i clienti si connettono ad un nodo completo arbitrario e scaricano solo le intestazioni dei blocchi. Verificano che le intestazioni della catena si colleghino correttamente e che la difficoltà sia abbastanza alta. Poi richiedono transazioni che corrispondono a particolari schemi dal nodo remoto (cioè, pagamenti ai vostri indirizzi), che fornisce copie di quelle transazioni insieme a un ramo Merkle che le collega al blocco in cui sono apparse. Questo sfrutta la struttura ad albero di Merkle per consentire la prova di inclusione senza aver bisogno dell’intero contenuto del blocco.

Come ulteriore ottimizzazione, le intestazioni di blocco che sono sepolte sufficientemente in profondità possono essere gettate via dopo un po’ di tempo (ad esempio, è necessario memorizzare solo fino a 2016 intestazioni).

Il livello di difficoltà richiesto per ottenere fiducia che il nodo remoto non vi stia fornendo transazioni fittizie dipende dal vostro modello di minaccia. Se vi state connettendo a un nodo che è noto per essere affidabile, la difficoltà non ha importanza. Se volete scegliere un nodo casuale, il costo per un attaccante di estrarre una sequenza di blocchi contenente una transazione fittizia dovrebbe essere più alto del valore da ottenere frodandovi. Cambiando la profondità con cui il blocco deve essere sepolto, è possibile scambiare il tempo di conferma con il costo di un attacco.

I programmi che implementano questo approccio possono avere un overhead di memoria/rete fisso nel caso nullo di nessun utilizzo, e un utilizzo delle risorse proporzionale alle transazioni ricevute/inviate.

Vedi anche: Thin Client Security.

Lavori correlati

Ci sono alcune proposte per ottimizzare la scalabilità di Bitcoin. Alcune di queste richiedono un’alt-chain / hard fork.

  • Compressione definitiva della blockchain – l’idea che la blockchain possa essere compressa per ottenere “nodi lite senza fiducia”
  • Il documento Finite Blockchain che descrive la divisione della blockchain in tre strutture dati, ognuna più adatta al suo scopo. Le tre strutture di dati sono una blockchain finita (mantenere N blocchi nel passato), un “albero dei conti” che mantiene il saldo del conto per ogni indirizzo con un saldo non nullo, e una “catena di prova” che è una versione ridotta (sempre crescente) della blockchain.
  • Lightning Network, un protocollo alternativo per la liquidazione delle transazioni in cui i nodi istituiscono canali di micropagamenti tra loro e si sistemano sulla catena dei blocchi occasionalmente. Gli utenti ordinari interagiscono principalmente o solo con i canali di pagamento e usano la blockchain solo per i grandi trasferimenti e la conservazione a freddo.

admin

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

lg