Annonce du nouveau portefeuille MultiChain PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Annonce du nouveau portefeuille MultiChain

Une étape importante en avant pour les performances et l'évolutivité

Après deux mois de développement et de tests intensifs, nous sommes fiers de publier la dernière version alpha de MultiChain, avec un portefeuille in-node entièrement réécrit. Ce nouveau portefeuille transforme les performances et l'évolutivité de la création, de la réception et du stockage des transactions dans MultiChain.

Avant d'entrer dans les détails, permettez-moi de fournir un certain contexte. Lorsque nous avons commencé à développer MultiChain, nous avons décidé d’utiliser Bitcoin Core, le nœud standard du réseau public de bitcoins, comme point de départ. En termes de programmation, cela signifie que MultiChain est une «fourchette» du logiciel bitcoin. Notre principal raisonnement était que le bitcoin était (et continue d'être) l'écosystème de crypto-monnaie le plus apprécié et le plus testé au combat, d'une manière ou d'une autre.

Sur le plan positif, cette décision nous a aidés à arriver sur le marché rapidement, par rapport au codage d'un nœud de chaîne de blocs à partir de zéro. Malgré les nombreuses différences entre les chaînes de blocs publiques et privées, elles partagent un grand nombre de points communs techniques, notamment le protocole peer-to-peer, la structure des transactions et des blocs, la création et la vérification de signatures numériques, les règles de consensus, la gestion des clés et la nécessité de une API de nœud. Le fork de Bitcoin Core nous a permis de tirer parti de sa maturité et de nous concentrer sur ce que MultiChain ajoute aux chaînes de blocs - la configurabilité, les autorisations et le support des ressources natives. En conséquence, nous avons pu publier le premier alpha en juin 2015, seulement 6 mois après le début du développement.

Cependant, parallèlement à ces avantages, nous avons également dû accepter le fait que certains aspects de Bitcoin Core sont mal architecturés. Bien qu'ils fonctionnent très bien à petite échelle, leurs performances se dégradent considérablement à mesure que l'utilisation augmente. Le réseau public de bitcoins étant toujours limité à quelques transactions par seconde, cela ne sera pas un problème pour la plupart des utilisateurs de Bitcoin Core pendant longtemps. Mais avec des blockchains privées visant des centaines ou des milliers de transactions par seconde, nous savions que, tôt ou tard, ces goulots d'étranglement devraient être supprimés.

Portefeuille de Bitcoin Core

Le «portefeuille» au sein de Bitcoin Core a toujours été le plus crucial de ces points douloureux. Son travail consiste à stocker les transactions qui présentent un intérêt particulier pour le nœud, car elles impliquent une adresse blockchain dont il est propriétaire ou un «montre seulement»Adresse dont il suit l'activité. Par exemple, chaque transaction qui envoie des fonds vers ou depuis un nœud doit être stockée dans le portefeuille de ce nœud. Et chaque fois qu'un nœud crée une transaction, il doit rechercher une ou plusieurs «sorties non dépensées» des transactions de portefeuille précédentes que la nouvelle transaction dépensera.

Alors, quel est le problème avec le portefeuille dont nous avons hérité de Bitcoin Core? En fait, trois choses:

  • Toutes les transactions de portefeuille sont conservées en mémoire. Cela entraîne des temps de démarrage lents et une augmentation rapide de l'utilisation de la mémoire.
  • De nombreuses opérations effectuent une «analyse complète» inefficace de chaque transaction dans le portefeuille, qu'elle soit ancienne ou nouvelle.
  • Chaque transaction dans le portefeuille est stockée dans son intégralité, y compris toutes les «métadonnées» arbitraires qui n'ont aucune signification du point de vue du nœud et sont déjà stockées dans la blockchain sur le disque. C'est très inutile.

La conséquence est qu'avec environ 20,000 200,000 transactions stockées, le portefeuille de Bitcoin Core ralentit considérablement. Après 8 80 environ, il s'arrête pratiquement. Pire encore, puisqu'une blockchain MultiChain autorise jusqu'à XNUMX Mo de métadonnées par transaction (par rapport aux XNUMX octets de Bitcoin), les besoins en mémoire du portefeuille peuvent augmenter rapidement même avec un petit nombre de transactions.

Il est important de préciser que ces lacunes s'appliquent uniquement à Bitcoin Core portefeuille, plutôt que sa capacité générale de traitement des transactions. En d'autres termes, il peut facilement traiter et stocker des millions (voire des milliards) de transactions qui ne se rapportent pas à ses propres adresses, car celles-ci sont conservées sur disque plutôt qu'en mémoire. Par exemple, de nombreux échanges et portefeuilles Bitcoin populaires utilisent Bitcoin Core tel quel, mais stockent leurs propres transactions à l'extérieur plutôt qu'à l'intérieur du nœud.

Le nouveau portefeuille de MultiChain

Nous aurions pu faire la même demande aux utilisateurs de MultiChain, pour stocker leurs propres transactions en dehors du nœud. Cependant, cela ne semblait pas être la bonne solution car cela compliquerait considérablement la configuration et la maintenance pour chacun des participants d'une chaîne. Au lieu de cela, nous avons mordu la balle et réécrit le portefeuille à partir de zéro.

En quoi le nouveau portefeuille diffère-t-il? Si vous avez une expérience avec les bases de données, les réponses peuvent être évidentes:

  • Plutôt que de conserver les transactions du portefeuille en mémoire, elles sont stockées sur disque dans un format approprié, les transactions d'intérêt étant récupérées si nécessaire.
  • Au lieu d'effectuer des analyses de portefeuille complètes, les transactions sont «indexées» de diverses manières pour permettre à celles qui remplissent des critères particuliers d'être rapidement localisées.
  • Tout élément de métadonnées de transaction supérieur à 256 octets n'est pas stocké dans le portefeuille. Au lieu de cela, le portefeuille contient un pointeur vers la position de ces métadonnées dans la blockchain elle-même.

En d'autres termes, nous avons reconstruit le portefeuille in-node pour qu'il soit correctement piloté par la base de données (en utilisant NiveauDB), plutôt que de s'appuyer sur une structure en mémoire naïve qui ne peut pas être recherchée efficacement. Sans surprise, la différence (telle que mesurée sur un Intel Core i3.4 à 7 GHz) est plutôt spectaculaire:

Débit de transaction du portefeuille MultiChain

Utilisation de la mémoire

Les graphiques montrent que, une fois que l'ancien portefeuille contient 250,000 3 transactions, son taux d'envoi tombe à 600 tx / sec et ajoute 100 Mo à l'utilisation de la mémoire du nœud. En revanche, le nouveau portefeuille supporte plus de 90 tx / sec et n'ajoute que 6 Mo. Nous avons arrêté de tester l'ancien portefeuille à ce stade, mais même avec 8-100 millions de transactions stockées, le nouveau portefeuille continue d'envoyer plus de 250 tx / sec, et il atteint environ XNUMX Mo de RAM utilisés (en raison de la mise en cache de la base de données).

Ces tests ont été effectués dans des conditions réalistes, avec plusieurs adresses et actifs (et donc de nombreuses sorties de transaction non dépensées) dans le portefeuille du nœud. Dans un scénario idéal (une adresse, un actif, quelques UTXO), le taux d'envoi soutenu était supérieur à 400 tx / s. Quoi qu'il en soit, dans le cadre de cette réécriture, nous avons également correctement résumé toutes les fonctionnalités du portefeuille derrière une interface interne propre. Cela facilitera la prise en charge d'autres moteurs de base de données à l'avenir, pour encore plus de robustesse et de vitesse.

Pour réitérer, tous ces chiffres se réfèrent à la vitesse à laquelle un nœud peut créer, envoyer et stocker des transactions dans son portefeuille local, plutôt que son débit en termes de traitement des transactions créées par d'autres. Pour le débit réseau général, MultiChain peut actuellement traiter 200 à 800 tx / sec, selon le matériel sur lequel il fonctionne. (Soyez sceptique vis-à-vis de tout logiciel de blockchain promettant des nombres tels que 100,000 XNUMX tx / sec sur du matériel normal, car le goulot d'étranglement est la vérification de signature numérique, qui prend du temps réel à effectuer. Si les nœuds ne vérifient pas les signatures de transaction individuelles, une blockchain ne peut pas être utilisée avec confiance limites, ce qui ne la rend pas meilleure qu'une base de données distribuée régulière.)

Pour terminer, je voudrais mentionner la prochaine fonctionnalité majeure à venir à MultiChain, qui a nécessité cette réécriture de portefeuille. Cette fonctionnalité, appelée flux, fournit une abstraction et une API de haut niveau pour le stockage de données à usage général sur une chaîne de blocs. Vous pouvez considérer un flux comme une base de données de séries chronologiques ou de valeurs-clés, avec les avantages supplémentaires liés à la blockchain de la décentralisation, des signatures numériques, de l'horodatage et de l'immuabilité. Nous connaissons de nombreux cas d'utilisation de la blockchain qui pourraient utiliser cette fonctionnalité, et nous travaillons déjà dur pour la construire. Surveillez cet endroit.

Veuillez poster vos commentaires sur LinkedIn.

Addendum technique

À partir de MultiChain alpha 22, vous pouvez vérifier quelle version du portefeuille fonctionne actuellement en examinant le walletdbversion domaine de getinfo or getwalletinfo Appels API. Une valeur de 1 signifie le portefeuille Bitcoin Core d'origine, et 2 signifie le nouveau portefeuille MultiChain.

Si vous exécutez la nouvelle version de MultiChain sur une chaîne existante, il ne basculera pas immédiatement vers le nouveau portefeuille. Vous pouvez mettre à niveau le portefeuille en arrêtant le nœud puis en relançant multichaind avec les paramètres -walletdbversion=2 –rescan. Vous pouvez rétrograder de manière similaire en utilisant –walletdbversion=1 –rescan.

Par défaut, lorsque vous démarrez un nœud sur une nouvelle chaîne, il utilise automatiquement le nouveau portefeuille. Vous pouvez changer cela en exécutant multichaind pour la première fois avec le paramètre –walletdbversion=1.

Avec le nouveau portefeuille, tout API MultiChain fonctionne exactement de la même manière qu'auparavant, à l'exception des anciennes API de requête de transaction getreceivedbyaddress, listreceivedbyaddress ainsi que listtransactions (utilisation listwallettransactions or listaddresstransactions au lieu). En outre, le nouveau portefeuille ne prend pas en charge les appels d'API et les paramètres relatifs au mécanisme de «comptes» mal implémenté et bientôt obsolète de Bitcoin Core, qui n'a jamais été correctement pris en charge par MultiChain. Ces appels sont désactivés en toute sécurité avec un message d'erreur.

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

Horodatage:

Plus de Multichain