Annuncio del nuovo portafoglio MultiChain PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Annuncio del nuovo portafoglio MultiChain

Un importante passo avanti per prestazioni e scalabilità

Dopo due mesi di intenso sviluppo e test, siamo orgogliosi di rilasciare l'ultimo alpha di MultiChain, con un portafoglio in-node completamente riscritto. Questo nuovo portafoglio trasforma le prestazioni e la scalabilità della creazione, ricezione e archiviazione delle transazioni in MultiChain.

Prima di entrare nei dettagli, lasciami fornire un contesto. Quando abbiamo iniziato a sviluppare MultiChain, abbiamo preso la decisione di utilizzare Bitcoin Core, il nodo standard per la rete pubblica di bitcoin, come punto di partenza. In termini di programmazione, ciò significa che MultiChain è un "fork" del software bitcoin. Il nostro ragionamento principale era che il bitcoin era (e continua ad essere) l'ecosistema di criptovaluta più apprezzato e testato in battaglia, in qualche modo.

Tra i lati positivi, questa decisione ci ha aiutato a raggiungere rapidamente il mercato, rispetto alla codifica di un nodo blockchain da zero. Nonostante le molte differenze tra blockchain pubbliche e private, condividono una grande quantità di terreno tecnico comune, tra cui il protocollo peer-to-peer, la struttura delle transazioni e dei blocchi, la creazione e la verifica della firma digitale, le regole di consenso, la gestione delle chiavi e la necessità di un'API del nodo. Il fork di Bitcoin Core ci ha permesso di sfruttare la sua maturità e concentrarci su ciò che MultiChain aggiunge alle blockchain: configurabilità, autorizzazioni e supporto di risorse native. Di conseguenza, siamo riusciti a rilasciare la prima alfa nel giugno 2015, a soli 6 mesi dall'inizio dello sviluppo.

Tuttavia, oltre a questi vantaggi, abbiamo anche dovuto accettare il fatto che alcuni aspetti di Bitcoin Core sono scarsamente progettati. Mentre funzionano bene su piccola scala, le loro prestazioni peggiorano drasticamente con l'aumentare dell'utilizzo. Con la rete pubblica di bitcoin ancora limitata a poche transazioni al secondo, questo non sarà un problema per la maggior parte degli utenti Bitcoin Core per molto tempo. Ma con blockchain private che mirano a centinaia o migliaia di transazioni al secondo, sapevamo che, prima o poi, questi colli di bottiglia avrebbero dovuto essere rimossi.

Portafoglio Bitcoin Core

Il "portafoglio" all'interno di Bitcoin Core è sempre stato il più cruciale di questi punti di dolore. Il suo compito è archiviare le transazioni che sono di particolare rilevanza per il nodo, poiché coinvolgono un indirizzo blockchain di sua proprietà o un "solo orologio"Indirizzo di cui sta monitorando l'attività. Ad esempio, ogni transazione che invia fondi ao da un nodo deve essere archiviata nel portafoglio di quel nodo. E ogni volta che un nodo crea una transazione, deve cercare uno o più "output non spesi" di precedenti transazioni di portafoglio che la nuova transazione spenderà.

Quindi cosa c'è che non va nel portafoglio che abbiamo ereditato da Bitcoin Core? In realtà, tre cose:

  • Tutte le transazioni del portafoglio sono mantenute in memoria. Ciò provoca tempi di avvio lenti e un rapido aumento dell'utilizzo della memoria.
  • Molte operazioni eseguono una "scansione completa" inefficiente di ogni transazione nel portafoglio, vecchia o nuova.
  • Ogni transazione nel portafoglio viene archiviata per intero, inclusi eventuali "metadati" arbitrari che non hanno alcun significato dal punto di vista del nodo e sono già memorizzati nella blockchain su disco. Questo è molto dispendioso.

La conseguenza è che, con circa 20,000 transazioni archiviate, il portafoglio di Bitcoin Core rallenta in modo significativo. Dopo circa 200,000, praticamente si ferma. Ancora peggio, dal momento che una blockchain MultiChain consente fino a 8 MB di metadati per transazione (rispetto agli 80 byte di bitcoin), i requisiti di memoria del portafoglio possono aumentare rapidamente anche con un piccolo numero di transazioni.

È importante chiarire che queste carenze si applicano solo ai Bitcoin Core portafoglio, piuttosto che la sua capacità generale di elaborazione delle transazioni. In altre parole, è in grado di elaborare e archiviare comodamente milioni (o addirittura miliardi) di transazioni che non si riferiscono ai propri indirizzi, dal momento che sono conservate su disco anziché in memoria. Ad esempio, molti scambi e portafogli di bitcoin popolari utilizzano Bitcoin Core così com'è, ma memorizzano le proprie transazioni esternamente anziché all'interno del nodo.

Il nuovo portafoglio di MultiChain

Avremmo potuto fare la stessa richiesta degli utenti MultiChain per archiviare le proprie transazioni al di fuori del nodo. Tuttavia, questa non sembra la soluzione giusta perché complicherebbe notevolmente l'installazione e la manutenzione per ciascuno dei partecipanti di una catena. Quindi, invece, abbiamo morso il proiettile e riscritto il portafoglio da zero.

In cosa differisce il nuovo portafoglio? Se hai esperienza con i database, le risposte possono essere ovvie:

  • Invece di mantenere in memoria le transazioni del portafoglio, vengono archiviate su disco in un formato adatto, con le transazioni di interesse recuperate quando necessario.
  • Invece di eseguire scansioni complete del portafoglio, le transazioni vengono "indicizzate" in vari modi per consentire di individuare rapidamente quelli che soddisfano determinati criteri.
  • Qualsiasi metadata di transazione superiore a 256 byte non viene archiviato nel portafoglio. Invece, il portafoglio contiene un puntatore alla posizione di quei metadati nella blockchain stessa.

In altre parole, abbiamo ricostruito il portafoglio in-node per essere correttamente guidato dal database (usando Livello DB), piuttosto che fare affidamento su una struttura ingenua in memoria che non può essere cercata in modo efficiente. Non sorprende che la differenza (misurata su un Intel Core i3.4 da 7 GHz) sia piuttosto drammatica:

Velocità effettiva della transazione del portafoglio MultiChain

Utilizzo della memoria

I grafici mostrano che, una volta che il vecchio portafoglio contiene 250,000 transazioni, la sua velocità di invio scende a 3 tx / sec e aggiunge 600 MB all'utilizzo della memoria del nodo. Al contrario, il nuovo portafoglio supporta oltre 100 tx / sec e aggiunge solo 90 MB. A questo punto abbiamo smesso di testare il vecchio portafoglio, ma anche con 6-8 milioni di transazioni archiviate, il nuovo portafoglio continua a inviare oltre 100 tx / sec e raggiunge circa 250 MB di RAM utilizzati (a causa della memorizzazione nella cache del database).

Questi test sono stati eseguiti in condizioni realistiche, con più indirizzi e risorse (e quindi molti output di transazione non spesi) nel portafoglio del nodo. In uno scenario idealizzato (un indirizzo, un asset, pochi UTXO), la velocità di invio sostenuta era superiore a 400 tx / s. In entrambi i casi, nell'ambito di questa riscrittura, abbiamo anche estratto correttamente tutte le funzionalità del portafoglio dietro un'interfaccia interna pulita. Ciò renderà più semplice supportare altri motori di database in futuro, per maggiore robustezza e velocità.

Per ribadire, tutti questi numeri si riferiscono alla velocità con cui un nodo può creare, inviare e archiviare transazioni nel suo portafoglio locale, piuttosto che il suo throughput in termini di elaborazione delle transazioni create da altri. Per un throughput di rete generale, MultiChain può attualmente elaborare da 200 a 800 tx / sec, a seconda dell'hardware su cui è in esecuzione. (Sii scettico su qualsiasi software promettente di blockchain numeri come 100,000 tx / sec su hardware normale, perché il collo di bottiglia è la verifica della firma digitale, che richiede tempo per eseguire. Se i nodi non verificano le singole firme di transazione, una blockchain non può essere utilizzata in tutta fiducia limiti, rendendolo non migliore di un normale database distribuito.)

Per finire, vorrei menzionare la prossima grande funzionalità in arrivo su MultiChain, che ha richiesto questa riscrittura del portafoglio. Questa funzione, chiamata stream, fornisce un'astrazione e un'API di alto livello per l'archiviazione di dati per scopi generici su una blockchain. Puoi pensare a uno stream come a una serie temporale o a un database di valori-chiave, con l'aggiunta dei vantaggi correlati alla blockchain di decentralizzazione, firme digitali, timestamp e immutabilità. Conosciamo molti casi d'uso di blockchain che potrebbero utilizzare questa funzionalità e siamo già al lavoro per costruirla. Guarda questo spazio.

Si prega di inviare eventuali commenti LinkedIn.

Addendum tecnico

A partire da MultiChain alpha 22, puoi verificare quale versione del portafoglio è attualmente in esecuzione esaminando il walletdbversion campo del getinfo or getwalletinfo Chiamate API. Un valore di 1 indica il portafoglio Bitcoin Core originale e 2 indica il nuovo portafoglio MultiChain.

Se esegui la nuova versione di MultiChain su una catena esistente, non passerà immediatamente al nuovo portafoglio. Puoi aggiornare il portafoglio arrestando il nodo e quindi rieseguendolo multichaind con i parametri -walletdbversion=2 –rescan. Puoi effettuare il downgrade in modo simile usando –walletdbversion=1 –rescan.

Per impostazione predefinita, quando avvii un nodo su una nuova catena, utilizzerà automaticamente il nuovo portafoglio. Puoi cambiarlo eseguendo multichaind per la prima volta con il parametro –walletdbversion=1.

Con il nuovo portafoglio, tutto API MultiChain funziona esattamente come prima, ad eccezione delle vecchie API di query delle transazioni getreceivedbyaddress, listreceivedbyaddress ed listtransactions (uso listwallettransactions or listaddresstransactions anziché). Inoltre, il nuovo portafoglio non supporta chiamate API e parametri relativi al meccanismo di "account" Bitcoin Core mal implementato e che sarà presto deprecato, che non è mai stato adeguatamente supportato da MultiChain. Queste chiamate sono disabilitate in modo sicuro con un messaggio di errore.

Fonte: https://www.multichain.com/blog/2016/07/announcing-the-new-multichain-wallet/

Timestamp:

Di più da più giri