#14 Mempool – Una lista di attesa
La rete P2P Bitcoin (articolo #12) formata dai nodi mantiene cara ed al sicuro la copia di tutte le transazioni effettuate in Bitcoin all’interno della blockchain (articolo #5). Come scritto negli articoli precedenti, ogni nodo mantiene una copia della blockchain e i miners, che costituiscono a loro volta dei nodi, si preoccupano di confermare la transazione. Ma in che modo viene aggiornata la blockchain?
Ogni wallet è collegato ad un nodo. Ogniqualvolta un wallet effettua una transazione, il nodo trasmette la transazione a tutta la rete. Infatti, ogni nodo è collegato a circa 10 nodi in maniera casuale e, quando la transazione viene autorizzata, il nodo manda i dettagli della transazione a tutti i nodi collegati. Ogni nodo verifica la transazione, ovvero verifica che la richiesta di spostare bitcoin da quel wallet non sia falsa. Si verifica che i bitcoin appartengano realmente a quell’indirizzo e, attraverso la chiave pubblica, si verifica anche che sia il proprietario a richiedere la transazione e non qualcun altro. Questo metodo di verifica avviene attraverso la criptografia asimmetrica, che tratteremo in un altro articolo. Ad ogni modo, una volta che la transazione è verificata, i dettagli della transazione vengono trasmessi al nodo successivo, che effettua nuovamente la verifica. Questo avviene perchè, tra un passaggio e un altro, la transazione potrebbe essere stata modificata da un nodo malintenzionato o hackers della rete, e non ci si può fidare e trasmettere una transazione senza verifica. Da qui nasce un motto famoso nella community Bitcoin che dice: “don’t trust, verify” (non fidarti, verifica), rivolgendosi a tutti i nodi che ricevono la transazione. Tutte le transazioni in sospeso vanno a creare una lista di transazioni non confermate, chiamata mempool. La mempool non è altro che una lista di tutte le richieste di trasferimento di bitcoin da un wallet ad un altro che sono ancora in attesa di conferma da parte dei miners.
![Don't Trust Verify](https://parlarebitcoin.com/wp-content/uploads/2020/06/Dont-Trust-Verify-1024x307.png)
Ogni nodo ha una mempool che viene aggiornata solo quando i miners confermano le transazioni. Infatti, una volta che la transazione viene confermata dai miners, anche il blocco che contiene tutte le transazioni confermate viene distribuito a tutti i nodi (allo stesso modo in cui viene distribuita la transazione da confermare). In questo modo tutti i nodi aggiornano sia la mempool che la copia delle blockchain che detengono.
La mempool non è unica per tutti i nodi. Infatti alcuni nodi potrebbero avere una mempool leggermente diversa da altri perché i tempi di distribuzione possono variare da nodo a nodo, e perché un nodo direttamente collegato ad un miner è aggiornato più velocemente rispetto ad uno non collegato al miner, così come il nodo che ha generato la transazione detiene per primo quella transazione che potrebbe non essere presente nella mempool di un altro nodo. Ad ogni modo, ciò che conta è che ogni nodo, prima o poi, deterrà una copia aggiornata della blockchain con tutte le transazioni confermate. Grazie ad essa, il nodo è in grado di eliminare dalla propria mempool le transazioni che sono state confermate.
La mempool è quindi la lista delle prossime transazioni da confermare per i miners. I miners attingono dalla mempool e confermano le transazioni che sono ancora in fase pendente. Se la mempool fosse vuota, il miner non avrebbe alcun lavoro da svolgere. Come detto nell’articolo #11, il miner riceve una ricompensa per il lavoro che svolge, che consiste nella conferma delle transazioni, ricompensata con l’emissione di nuovi bitcoin (fino al raggiungimento del limite stabilito di 21 Milioni).
Ho un amico sviluppatore, anch’esso appassionato di Bitcoin, che ha sviluppato un sito web in grado di monitorare la mempool di diversi nodi Bitcoin e di dare quindi una buona approssimazione delle lista di attesa delle prossime transazioni. Questo ci permette di comprendere meglio il meccanismo e di monitorare sempre la mempool di Bitcoin per verificare quanto tempo potrebbe impiegare la nostra transazione per essere approvata. Il sito è mempool.space e rappresenta graficamente la blockchain e la mempool.
Sulla destra della pagina si trovano tutti i blocchi confermati, mentre sulla sinistra si trovano tutte le transazioni, o gli ipotetici blocchi (perché ancora non sappiamo la composizione del prossimo blocco) che sono in fase di conferma (del rapporto tra transazioni, blocchi e composizione dei blocchi parleremo meglio negli articoli successivi). Nella barra in basso troviamo il numero di transazioni non confermate (Unconfirmed transactions: 3.989) e la dimensione della mempool in bytes (Mempool size: 4 MB).
Bitcoin è una rete trasparente e dà la possibilità a chiunque di monitorare lo status della rete, attraverso la verifica non solo delle transazioni già confermate sul web, ma anche di quelle che sono ancora in fase di approvazione. Di rilevante importanza è la possibilità di avere una stima accurata del tempo necessario per la conferma della transazione, che ad oggi risulta invece essere un problema per alcune transazioni effettuate attraverso l’ormai zoppicante sistema bancario.