Peer Discovery in Harmony Network

Il peer discovery è uno dei meccanismi essenziali in una rete decentralizzata per i nuovi nodi di unirsi alla rete. Una rete blockchain è una rete decentralizzata con migliaia di nodi. E non è raro che i nodi si uniscano o escano dalla rete in qualsiasi momento. In questo post, esaminiamo in dettaglio il meccanismo di scoperta dei peer nella rete blockchain Bitcoin ed Ethereum.

Qui, presentiamo il protocollo di scoperta dei pari nella blockchain Harmony basato sul nostro attuale progetto nel white paper.

Scoperta dei peer nella rete BTC

Il modo principale per scoprire i peer nella rete bitcoin è connettersi a un elenco di nodi BTC precedentemente collegati. Tuttavia, per la connessione iniziale, il nodo deve utilizzare un feed DNS noto pubblicamente per recuperare un elenco di indirizzi IP di nodi stabili di lunga durata. Il meccanismo di fallback consiste nell'utilizzare un elenco di indirizzi IP codificati nel software del nodo Bitcoin. Ad esempio, il nome di dominio seed.bitcoinstats.com si risolve in un intero elenco di indirizzi IP. http://bitcoinstats.com/network/dns-servers/ mantiene un elenco di server DNS gestiti da volontari.

Il dominio bitcoinstats.com è registrato da Dynadot, LLC il 15 gennaio 2011. L'esempio seguente elenca alcuni nodi bitcoin noti.

Ogni nodo bitcoin deve gestire un messaggio "getaddr". Il nodo risponderà al messaggio "getaddr" con un 23% di indirizzi IP scelti in modo casuale noti dal nodo in base alla loro recentezza nelle ultime 3 ore. E il massimo è 2.500 indirizzi IP. Teoricamente, un nodo può conoscere tutti gli indirizzi IP di tutti i nodi della rete bitcoin ripetendo l'interrogazione dei suoi vicini. Bitcoin ha già risolto questo problema inviando una sola risposta "getaddr" per connessione.

Il nuovo nodo bitcoin stabilisce innanzitutto una connessione TCP sulla porta 8333. Avvia un processo di "handshake" trasmettendo un messaggio di "versione", che contiene informazioni di identificazione di base, tra cui: protocol_version, servizio locale, nTime, addrYou, addrMe, subversion, startingHeight, ecc. (Github: https://github.com/bitcoin/bitcoin/blob/e74649e95122c9c61aadf607461cf701c3953f88/src/net_processing.cpp#L334). Il nodo peer risponde con "verack" per riconoscere e stabilire una connessione e, facoltativamente, invia il proprio messaggio "versione" per ricambiare la connessione e riconnettersi come peer. Una volta stabilite una o più connessioni, il nuovo nodo invierà un messaggio addr contenente il proprio indirizzo IP ai vicini. I vicini, a loro volta, inoltreranno il messaggio addr ai loro vicini, assicurando che il nodo appena connesso diventi ben noto e meglio connesso.

Scoperta tra pari nella rete ETH

Il peer discovery nella rete Ethereum utilizza un meccanismo simile a quello della rete Bitcoin. Esistono alcuni nodi di avvio codificati nel software del nodo Ethereum, ad esempio https://github.com/ethereum/go-ethereum/blob/master/params/bootnodes.go#L23-L31

L'algoritmo peer discovery in Ethereum si basa sul protocollo Kademlia Distributed Hash Table (DHT). Diversamente dall'originale Kademlia, utilizza solo gli RPC "PING" e "FIND_NODE" del protocollo Kademlia su 256 bit di ID. Ogni nodo mantiene una tabella hash dei nodi vicini usando la metrica XOR. Il protocollo di rilevamento nodi v4 fornisce dettagli sul DHT simile a Kademila che memorizza informazioni sui nodi Ethereum. La struttura di Kademlia è stata scelta perché produce una topologia di basso diametro. Rchain ha un buon articolo wiki sul protocollo di scoperta del nodo ETH qui.

Allo stesso modo, RapidChain afferma di utilizzare il meccanismo di routing di Kademlia per le comunicazioni tra commissioni. Ciò è probabilmente utile per evitare transazioni cross-shard basate su leader o client.

Peer Discovery in Harmony Network

Come con Bitcoin ed Ethereum, la scoperta dei peer è necessaria quando nuovi nodi stanno provando a connettersi alla rete Harmony.

Esistono due scenari. Per la connessione iniziale, il nuovo nodo deve utilizzare DNSfeed per ottenere un elenco di indirizzi IP di nodi noti per unirsi alla rete. Per ricollegarsi, il nodo può utilizzare un elenco di nodi precedentemente collegati per iniziare.

Per connettersi ai peer, i nodi devono fare una "stretta di mano". La stretta di mano è un messaggio PING. Il messaggio ping include la versione del protocollo, l'indirizzo IP del nodo, la chiave pubblica (256 bit di valore hash). Il nodo peer risponde con un messaggio PONG per confermare la connessione con il richiedente e inviare anche un elenco di altri peer. Il nodo peer può anche inviare un messaggio PING per creare una connessione con il nuovo nodo. Una domanda qui è come evitare che ogni nuovo nodo tenti di connettersi allo stesso nodo peer. La risposta è che il nodo peer può rifiutare la connessione dopo aver risposto con il messaggio pong se la connessione peer supera un certo numero, diciamo 20. Alla fine, ogni nodo nella rete manterrà 20 connessioni simultanee ai nodi vicini e formeranno la rete p2p . Un'altra domanda senza risposta qui è come gestire la rete p2p all'interno di un comitato, anziché una rete p2p a livello globale.

Poiché Harmony è una blockchain frammentata, i nuovi nodi verranno inizialmente inseriti in un elenco di nodi attivi dopo aver completato una verifica PoS tramite la catena beacon. Il processo di verifica inizia quando un nuovo nodo crea una transazione per depositare alcune monete sugli account di sistema. La transazione viene instradata alla catena beacon dopo che il nuovo nodo ha stabilito la prima connessione. I nodi della catena Beacon eseguono il consenso e hanno verificato la transazione per approvarla. Una volta approvata la transazione, il nuovo nodo può unirsi alla rete in una lista di attesa. La catena beacon eseguirà VRF / VDF per generare casualità imparziale al fine di effettuare la configurazione del comitato. L'algoritmo di ri-sharding inserirà nuovi nodi in diversi comitati in base alla casualità e alle Regole del cuculo rilegato. Vi è una maggiore probabilità che nuovi nodi si uniscano al comitato con più nodi secondo le Regole del cuculo, in modo da evitare l'attacco ai comitati con un minor numero di nodi.

Per il lancio di testnet, dal momento che ci preoccupiamo principalmente dell'istanza spot offline e di ricongiungerci, potremmo implementare un semplice algoritmo hash per posizionare il nodo nel comitato. Semplificheremo l'intero processo. Useremo un nodo separato per rappresentare la catena beacon. I nodi leader avvia e contatta la catena beacon. Per i primi N nodi che contattano la catena di segnalazione, vengono utilizzati come leader in ciascun comitato.

Diagramma di sequenza

Non vediamo l'ora di impegnarci con la nostra comunità nella progettazione e nella realizzazione. Per domande, contattatemi all'indirizzo leo@harmony.one.

Segui l'avanzamento dello sviluppo di Harmony.one:

  • Sito web
  • Github
  • medio
  • LinkedIn
  • cinguettio
  • Telegramma