BITCOIN IN ITALIANO

BLOG


Mappa della rete Bitcoin

Traduzione dell'originale di Gloria Zhao - Pubblicato il 22 lug 2020

Una "mappa" per aiutarti a navigare attraverso l'ampia varietà di nodi, software e partecipanti alla rete Bitcoin.

La rete Bitcoin è spesso descritta come peer-to-peer (P2P), distribuita o decentralizzata di nodi. Ma cos'è un nodo e cosa fa? È un server o può essere un client ... o entrambi? Data la miriade di software Bitcoin, cosa "conta" come nodo? In che modo tutti i partecipanti a Bitcoin - utenti, minatori, nodi, portafogli - interagiscono tra loro?

Questo articolo disegna una mappa della rete Bitcoin che chiarisce queste definizioni e incapsula parte della complessità. Inizieremo classificando i diversi tipi di nodi in base alla loro funzionalità server / client e descrivendo le connessioni P2P che si formano tra di loro. Invece di fornire statistiche sull'intera rete, questo articolo è principalmente interessato a enumerare il diverso insieme di possibilità nella rete.

La risposta breve

In primo luogo, i vertici sono nodi nella rete P2P e i bordi sono le loro connessioni P2P. Esistono molti tipi diversi di nodi che possono essere classificati in base alla loro capacità di servire altri colleghi e clienti; i nodi possono agire come server, client o entrambi in un dato momento.

Nodo = un partecipante sulla rete P2P che implementa il protocollo P2P Bitcoin. Un nodo non è necessario per eseguire alcun software specifico fintanto che segue questo protocollo.

Connessione P2P = una connessione di rete stabilita direttamente tra due nodi che comunicano utilizzando il protocollo Bitcoin P2P. Spesso usiamo "peer" per riferirci ad altri nodi con cui un nodo ha una connessione P2P.

Tipi di nodi

In senso lato, i nodi rientrano in una delle quattro categorie in base a quanto stato mantengono e ai servizi che possono fornire.

Full Node (Fully Validating Node) = un nodo in grado di convalidare transazioni e blocchi. Invece di cercare ogni volta attraverso il database dei blocchi, i nodi completi mantengono un certo stato, ad esempio un set UTXO (output di transazione non speso o "monete").

Pertanto, i nodi Bitcoin non necessitano necessariamente di una copia completa della blockchain per la convalida, a condizione che mantengano alcuni metadati di blocco e un set UTXO aggiornato. I nodi di eliminazione implementano questo comportamento esatto: scaricano ed elaborano i blocchi per creare i database necessari per la convalida, quindi eliminano i vecchi blocchi per risparmiare spazio su disco. Dal momento che hanno tutte le informazioni e possono convalidare tutti i nuovi blocchi e transazioni, sono full node.

Archive Node = un nodo che ha una copia dell'intera cronologia della blockchain. Questi nodi sono in grado di convalidare le transazioni e i blocchi in entrata, nonché di interrogare i dati di blocchi e transazioni da qualsiasi punto della cronologia, compresi quelli che non sono più rilevanti per la convalida (da cui la denominazione "archivio"). È fondamentale che i nodi di archivio esistano, poiché i nuovi nodi devono recuperare il ritardo sull'intera cronologia per diventare full node. Possono farlo solo scaricando la cronologia, un blocco alla volta, dai nodi di archivio.

Mining Node = un nodo che produce nuovi blocchi. Ciò implica mantenere un mempool di transazioni non confermate, convalidare nuove transazioni e risolvere il puzzle hash Proof-of-Work (cioè trovare il nonce) per costruire un blocco. I nodi di mining spesso utilizzano hardware aggiuntivo per aiutarli a risolvere il rompicapo (ad es.ASIC) o partecipare a pool di mining. Tecnicamente, ci sono anche nodi non completi che si uniscono a un pool di mining, si connettono a un full node che gestisce il pool e aiutano a risolvere la PoW su un blocco senza eseguire alcuna convalida (quindi ci sono nodi minerari ma non completi).

Light Client = termine generico per un nodo che non mantiene lo stato completo necessario per la convalida completa e si fida invece di altri full node per farlo. Un client leggero può conservare una quantità limitata di dati per verificare le proprie transazioni, ma non convalidare completamente tutti i blocchi. All'interno di Bitcoin Core, "client leggero" viene spesso utilizzato come sinonimo di nodi SPV (Simplified Payment Verification) e non deve essere confuso con Pruning Nodes. In alcuni contesti, questi non sono chiamati "nodi" perché non fanno la maggior parte delle cose che normalmente fanno i full node.

Altri concetti per i nodi

I nodi possono anche avere caratteristiche aggiuntive che influiscono sulla loro partecipazione alla rete, ma non si escludono a vicenda o in nessuna delle quattro categorie precedenti. A causa della natura decentralizzata e del focus sull'accessibilità nell'ecosistema Bitcoin, fintanto che un nodo implementa il protocollo P2P e obbedisce alle regole di consenso, i dettagli di implementazione e la decisione di adottare funzionalità sono a discrezione dell'operatore del nodo.

Initial Block Download (IBD): uno stato temporaneo in cui il nodo non è ancora raggiunto all'altezza del blocco corrente ed è in fase di download della blockchain. Un full node che segnala che conserva una copia completa della cronologia della blockchain potrebbe essere ancora in IBD e quindi essere limitato nei servizi che può fornire (cioè non sarà in grado di dirti di transazioni che non hanno ancora visto). L'RPC getblockchaininfo restituisce se un nodo è in IBD.

Block Only Mode: una modalità non temporanea in cui il nodo completo convalida solo i blocchi e le transazioni in essi contenuti. Non convalida alcuna transazione non confermata (a parte la sua), non mantiene un mempool e chiede ai suoi pari di non inoltrare le transazioni ad esso.

Bitcoin Core: esegue il software open source originariamente creato da Satoshi Nakamoto e attualmente mantenuto da vari contributori, trovato su bitcoincore.org o dal codice sorgente. Sappiamo che Bitcoin Core non è l'unico software esistente nella rete Bitcoin P2P; alcuni nodi eseguono patch personalizzate che implementano comportamenti specifici e alcuni potrebbero utilizzare versioni precedenti di Bitcoin Core che non comprendono i messaggi di protocollo di nuova introduzione. È importante essere consapevoli di quali nuove funzionalità richiedono la piena cooperazione di rete, non aspettarsi che i nodi si comportino correttamente o onestamente e tenere conto che gli operatori dei nodi sono riluttanti o lenti ad aggiornare il proprio software.

Dannoso: qualsiasi tipo di comportamento che danneggia intenzionalmente la rete (esclusi bug, complicazioni di rete o altri comportamenti non intenzionali). Bitcoin presuppone un ambiente altamente contraddittorio inclusa la possibilità di attacchi Denial of Service, attacchi sybil / eclipse destinati a una doppia spesa, nodi di spionaggio che cercano di deanonimizzare gli indirizzi, ecc.

Nodo come Server

Abbiamo visto che ogni singolo nodo dipende dai suoi pari per inviare le informazioni di cui ha bisogno. Inoltre, i nodi in genere servono un numero di utenti e software client tramite interfacce non P2P come RPC, HTTP / REST e una GUI.

Alcuni esempi di client non nodo che possono utilizzare un nodo come server:

Sebbene queste connessioni non siano viste dai peer di un nodo sulla rete P2P, costituiscono una parte significativa della funzionalità Bitcoin. Gli sviluppatori di Bitcoin Core considerano molto questi partecipanti quando sviluppano nuove funzionalità o decidono quali funzionalità supportare.

Tipi di connessioni P2P

Le connessioni P2P in Bitcoin "parlano tutte la stessa lingua" in quanto utilizzano il protocollo P2P per comunicare, ma sono diverse nei loro contenuti di conversazione. L'implementazione di Bitcoin Core cerca di bilanciare stabilità (che preferisce connessioni statiche) e accessibilità (che incoraggia ad accettare connessioni da nuovi nodi) facilitando la scoperta tra pari e gestendo le connessioni con attenzione. Bitcoin Core distingue tra tre tipi principali di connessioni in base a come vengono avviate, il che spesso informa la natura della relazione peer-to-peer.

In uscita (outbound) = connessione automatica che il tuo nodo ha avviato tramite il rilevamento peer. La scoperta dei nodi implica ottenere un elenco di indirizzi IP dei nodi stabiliti con cui iniziare, quindi un processo continuo e dinamico di pubblicità del proprio indirizzo e tentare di connettersi agli indirizzi di cui si sente parlare. A seconda di ciò di cui ha bisogno il tuo nodo (ad es. In IBD), può dare la priorità alle connessioni in grado di fornire servizi specifici (ad es. Servire blocchi e transazioni precedenti).

In entrata (Inbound) = connessione automatica avviata dal tuo peer (per il tuo peer, questa connessione è in uscita). Per sicurezza, il traffico in entrata è disabilitato per impostazione predefinita ed è necessario configurare alcune impostazioni di rete e firewall per abilitarlo.

Manuale = connessione effettuata manualmente (ad es. Tramite CLI o RPC) invece che automaticamente. Potresti creare una connessione manuale perché c'è un particolare nodo gestito da qualcuno di cui ti fidi o stai testando il software e devi avere il controllo sulle connessioni.

Altri concetti per le connessioni P2P

Diversità nelle connessioni in uscita (Outbound)

Le connessioni in uscita possono essere suddivise in ulteriori categorie in base alle informazioni ricevute e alla durata della connessione.

Le connessioni in uscita Full Relay si aspettano di comunicare tutto, inclusi blocchi, transazioni e indirizzi (utilizzati per trovare peer, simili agli indirizzi IP e da non confondere con gli indirizzi del portafoglio utilizzati nelle transazioni). Le connessioni in uscita Block-Only-Relay prevedono solo di ricevere blocchi. Da non confondere con la modalità solo blocchi; è del tutto normale che i nodi completi stabiliscano connessioni Block-Only-Relay a 1–2 peer e connessioni Full-Relay a tutti gli altri.

One-Shot e Feelers sono connessioni in uscita temporanee utilizzate nella scoperta dei nodi. Le connessioni One-Shot vengono utilizzate per sollecitare un elenco di utenti che possono essere utilizzati per trovare nuovi colleghi. I tastatori vengono utilizzati per verificare se un addr corrisponde a un nodo reale.

Differenze individuali

Come abbiamo visto, ogni nodo può fornire servizi diversi ed essere alla ricerca di informazioni specifiche dai suoi pari. Ogni connessione inizia con un handshake di versione in cui i nodi inviano informazioni su se stessi (ad es. La migliore altezza del blocco) e negoziano di cosa parlare (ad es. Interessati solo ai blocchi). Le connessioni possono anche cambiare tramite messaggi successivi, come un messaggio di filtro delle tariffe per comunicare che sono interessati solo a ricevere transazioni inoltrate con una tariffa minima.

Scoraggiamento, disconnessione e divieto

I nodi Bitcoin Core tengono traccia di quali peer si comportano in un modo che indica che potrebbero essere dannosi o eseguire software malfunzionante. In risposta a tale comportamento, un nodo potrebbe scegliere di scoraggiare (segnare il suo comportamento scorretto e forse disconnettersi a favore di nuovi pari), disconnettere o bandire il pari.

Autorizzazioni e whitelist

I nodi mantengono anche un elenco di autorizzazioni di cui dispone ogni peer, come servizi particolari che è autorizzato a richiedere o tolleranza per comportamenti scorretti che normalmente sarebbero penalizzati. I servizi vengono negoziati per ogni connessione durante l'handshake della versione. Consentire comportamenti scorretti viene spesso aggiunto manualmente per client leggeri personali e personalizzati e nodi gestiti da persone che si fidano l'uno dell'altro. In relazione, i nodi possono anche inserire nella whitelist indirizzi IP particolari.

Importanza dell'asimmetria

Nota che ogni singola connessione è bidirezionale ma asimmetrica: il peer che inizia può capire che la connessione è un [full-relay] in uscita, block-only-relay, feeler o one-shot, ma il peer ricevente vede solo una connessione in entrata con alcune regole stabilite. Ciò nasconde le informazioni attraverso l'ambiguità sul fatto che il comportamento di un nodo riveli i suoi meccanismi interni o rifletta semplicemente la natura della connessione.

Ad esempio, se un nodo sa che il suo peer è in modalità blocksonly (cioè rifiuta tutti i messaggi di transazione in entrata), è ovvio che tutte le transazioni inviate da quel peer corrispondono ai suoi indirizzi di wallet. Invece, il nodo ricevente vede solo una connessione in entrata con l'inoltro della transazione disattivato. Ciò potrebbe significare modalità blocco solo, connessione solo blocco relè o un'idiosincrasia della connessione.

Mappa "completa"

Ogni nodo ha informazioni limitate sulla rete nel suo insieme. I nodi in realtà vedono solo i propri pari e questi potrebbero mentire sul tipo di nodo che sono. Tutti i pari potrebbero anche essere la stessa persona in caso di un attacco di eclissi. Questo è un vantaggio per la privacy e la sicurezza perché si applica anche agli avversari; avere informazioni limitate rende più difficili gli attacchi mirati. È possibile raccogliere informazioni approssimative sul numero di nodi presenti nella rete creando molte connessioni temporanee, ma queste informazioni sono tutt'altro che complete.

Ad esempio, se un nodo partecipa o meno a un pool di mining non è immediatamente evidente sulla rete. Con una conoscenza approssimativa di quali nodi fanno parte dei pool di mining e osservando quanti blocchi estraggono, alcuni siti Web sono in grado di generare analisi sulle proporzioni della potenza di calcolo. Tuttavia, possono essere fuorvianti in quanto è del tutto possibile che gruppi di nodi o anche più pool di mining siano gestiti da un'unica entità.

Conclusione

Si spera che questo post abbia aiutato a chiarire cosa intendono le persone quando dicono "nodo" e "rete P2P" e a collegare i punti su come tutti i partecipanti alla rete interagiscono tra loro. Spero che fornisca anche alcune informazioni e "cibo per grep" su come Bitcoin Core implementa le connessioni peer-to-peer per proteggere la privacy e consentire ai nuovi nodi di partecipare. Grazie per averlo letto! :)

21 milioni di ringraziamenti a John Newbery e Amiti Uttarwar per essere stati molto generosi con il loro tempo aiutandomi a comprendere e documentare queste informazioni.

- Gloria Zhao