Parlons de la synchronisation des portefeuilles numériques avec le réseau Bitcoin. Nous décrivons les principales approches, les principes de leur travail et leur complexité. Le matériel peut être utile non seulement aux développeurs, mais aussi aux utilisateurs ordinaires pour se familiariser avec les fonctionnalités des portefeuilles numériques et les aspects du travail en toute sécurité avec les portefeuilles.
Sur la base des informations contenues dans cet article, l'une des conférences du cours en ligne sur la blockchain «
Synchronisation des portefeuilles avec le réseau Bitcoin » a été enregistrée.
Caractéristiques de base du portefeuille
Commençons par les fonctionnalités de base d'un portefeuille numérique:
- sauvegarde des clés privées;
- acceptation du paiement;
- affichage de l'équilibre;
- afficher l'historique des transactions;
- envoi de paiements.
Pour sauvegarder des clés privées, vous n'avez besoin que du module responsable du stockage et de la gestion des clés. Cependant, dans le cas des quatre fonctions restantes, vous devrez certainement travailler avec le réseau Bitcoin. En effet, pour lire et écrire une base de données de transactions commune, vous devez au moins devenir l'un des nœuds de ce réseau et suivre les spécifications de traitement et d'échange de données qu'il contient. Ainsi, il est nécessaire d'avoir des données sur toutes les transactions auxquelles les adresses d'un certain portefeuille ont participé. Des données sur l'état actuel du réseau seront également nécessaires pour préparer une nouvelle transaction et effectuer un paiement.
La chose la plus importante qu'un utilisateur de portefeuille numérique doit savoir de manière fiable lorsqu'il accepte et envoie des paiements est le statut de leurs transactions. De toute évidence, la transaction est considérée comme incomplète si la transaction a été envoyée, mais n'a pas reçu de confirmation complète. En conséquence, le destinataire ne peut pas accepter le paiement afin, par exemple, de retourner la marchandise ou de fournir le service.
Les difficultés de travailler dans un réseau distribué
Travailler avec un réseau distribué est un sujet assez compliqué, qui rencontre généralement les problèmes suivants. L'un d'eux consiste dans la méthode de vérification des données reçues d'un réseau distribué, et le second consiste à optimiser le stockage des données de ces données. Ces exigences sont quelque peu contradictoires, car une plus grande quantité de données stockées permet une vérification plus complète des nouvelles transactions et des nouveaux blocs. Il n'y a pas de solution idéale à ces problèmes, il est impossible de traiter des transactions à la fois de manière fiable et avec des ressources minimales, vous devez donc rechercher un certain équilibre, un compromis de simplicité et de sécurité.
Un autre problème est le suivant. Pour obtenir l'historique des transactions à une adresse spécifique sur un nœud de réseau complet, vous devez parcourir toute la chaîne de blocs (de la genèse au dernier connu), ce qui est assez long, car il s'agit d'une grande quantité de données et la force brute est une approche peu efficace. Par conséquent, vous pouvez utiliser certaines approches pour optimiser les requêtes. Pour cela, des modules complémentaires spéciaux sont utilisés sur un nœud de réseau normal, ce qui aide à indexer la chaîne de blocs et à mettre en cache certaines données pour accélérer la recherche de mesures populaires. Par ce principe, tout explorateur de blockchain fonctionne, par exemple blockchain.info, qui renvoie rapidement des données sur presque toutes les adresses, sur toute transaction, etc.
Ainsi, il existe plusieurs approches fondamentalement différentes pour la mise en œuvre de l'interaction et de la synchronisation d'un portefeuille numérique avec un réseau distribué. Regardons-les.
Approches de synchronisation de portefeuille avec un réseau de paiement
Il existe trois approches principales. Le premier suppose que le portefeuille lui-même est un nœud complet du réseau Bitcoin. La seconde approche utilise le soi-disant nœud de confiance. En fait, c'est un hôte étrange, mais l'utilisateur du portefeuille lui fait confiance. Et la troisième approche implique une interaction directe avec d'autres nœuds de réseau, mais dans une version allégée, en utilisant la méthodologie de vérification de paiement simplifiée (SPV). Cette technique vous permet de vérifier la validité des transactions avec un degré de fiabilité assez élevé, mais pas de recourir au lancement d'un nœud de réseau complet. Examinons de plus près chacune de ces approches de synchronisation.

Travailler avec un hôte complet
Dans le premier cas, tout est assez simple. Votre portefeuille dispose d'un module qui stocke l'intégralité de la blockchain et d'un module qui communique avec les autres nœuds du réseau Bitcoin. Par conséquent, vous pouvez toujours vérifier une nouvelle transaction entrante: respecte-t-elle vraiment les règles du protocole, engage-t-elle le double des dépenses, etc.
L'inconvénient de cette approche est la nécessité d'allouer une grande quantité d'espace disque pour stocker la chaîne de blocs complète, afin de maintenir le nœud du réseau en fonctionnement ininterrompu et des mises à jour logicielles en temps opportun.
Cette méthode est utilisée par les utilisateurs ordinaires qui acceptent et envoient régulièrement des paiements en grande quantité, ce qui nécessite un haut niveau de fiabilité. De plus, tous les principaux services qui offrent la possibilité d'un stockage centralisé des bitcoins et d'un accès en ligne au portefeuille utilisent nécessairement cette approche. Parce qu'il y a des exigences élevées en matière de sécurité, ainsi que pour un travail indépendant avec Bitcoin.
Il est important de comprendre que l'utilisateur d'un stockage bitcoin centralisé dépend entièrement de ce service et du bon fonctionnement du nœud de réseau utilisé par ce service. En fait, si des pièces sont stockées sur un tel service, elles n'appartiennent pas à l'utilisateur mais au service.
Notez que l'utilisation de cette approche est l'une des plus simples et des plus fiables, même pour l'utilisateur moyen. Pour ce faire, il vous suffit de prendre le code source ou les binaires prêts à l'emploi, par exemple, Bitcoin Core et d'exécuter le logiciel. Un inconvénient important ne peut être considéré que par les exigences de l'ordinateur.
Travaillez avec un hôte de confiance
La différence entre cette approche et la précédente est la séparation de la logique du portefeuille et de la logique de vérification des transactions. Il existe un nœud de réseau Bitcoin de confiance. En gros, il s'agit du nœud de réseau Bitcoin complet le plus courant, auquel l'utilisateur lui confie la vérification de ses transactions. Par exemple, il peut s'agir d'un hôte pris en charge par son ami, et l'utilisateur peut lui confier la vérification de leurs transactions.
Très souvent, cette approche est utilisée dans les portefeuilles numériques mobiles. Supposons qu'une entreprise qui développe un portefeuille mobile prend en charge les sites de confiance et promet qu'elle garantisse une vérification correcte des transactions. Dans ce cas, les utilisateurs font confiance à l'entreprise pour le développeur d'un portefeuille numérique, en fait, croient aux promesses. Mais en même temps, il vaut la peine de comprendre que l'utilisateur peut stocker indépendamment ses clés privées et assurer des transactions sur son appareil. Néanmoins, l'utilisateur ne vérifie pas l'état de la confirmation de transaction, mais demande au nœud de confiance.
Quels sont les avantages et les inconvénients de cette approche? Comme dans le cas précédent, bien qu'indirectement, vous pouvez influencer la vérification des transactions sur le réseau Bitcoin, car l'utilisateur a toujours un nœud de réseau approuvé. L'avantage est qu'il est libéré de devoir stocker une copie complète de la blockchain sur son appareil. Néanmoins, la dépendance à l'égard d'un nœud de confiance est un inconvénient, car en cas de défaillance, l'utilisateur ne peut pas toujours basculer sur un autre nœud de confiance. Étant donné que la vérification des transactions a lieu sur un serveur distant, vous devez vous assurer de la fiabilité du canal de transfert de données entre le portefeuille et le serveur sur lequel la vérification a lieu. Avec cette approche, des menaces telles que «l'homme au milieu» apparaissent.
Lorsqu'un hôte de confiance est utilisé, les clés privées sont stockées séparément des adresses de portefeuille. Dans ce cas, le nœud lui-même ne peut pas connaître de manière fiable les modifications auxquelles les adresses qu'il doit suivre. Cela signifie que le portefeuille numérique doit de temps à autre informer le nœud de confiance de la liste des adresses qui l'intéressent.
L'inconvénient de cette approche est la dépendance du portefeuille numérique sur le nœud de confiance, notamment en termes d'accès aux données pertinentes du système de paiement. Dès que l'utilisateur perd l'accès au nœud de confiance ou que le nœud refuse le service, l'utilisateur perd la connexion avec le réseau. En conséquence, l'utilisateur perd la capacité de recevoir et d'envoyer des paiements. Pour réduire le risque de perdre l'accès à un site de confiance, vous pouvez sélectionner plusieurs sites de confiance. Cela signifie que dans des conditions normales, l'utilisateur se connecte et travaille avec un nœud de confiance, mais si l'accès est perdu, le portefeuille numérique se connecte automatiquement à un autre nœud de confiance. En fait, à chaque connexion, le portefeuille sélectionne au hasard un nœud dans la liste des nœuds de confiance.
Cette méthode est principalement utilisée par les portefeuilles mobiles, car elle vous permet de vérifier les transactions et de simplifier le fonctionnement de l'application mobile. Mycelium et Coinomi sont des exemples de tels portefeuilles mobiles Bitcoin. Distributed Lab a également développé et maintient un portefeuille appelé Bitxfy, où cette approche est appliquée.
Travailler avec un hôte SPV
La troisième approche courante pour synchroniser un portefeuille numérique avec un réseau Bitcoin est un nœud de réseau léger. Il s'agit d'une vérification de paiement simplifiée (SPV). Dans cette approche, vous n'aurez peut-être pas besoin d'exécuter vos nœuds complets ou de sélectionner ceux de confiance. On suppose que le portefeuille numérique communique directement avec les autres nœuds du réseau: en fait, il sélectionne plusieurs dizaines de nœuds complets d'autres personnes et maintient une connexion avec eux. La différence est que le nœud léger communique avec d'autres nœuds sur un pied d'égalité, échangeant des messages P2P avec eux, mais ne stockant pas l'historique complet des transactions. Ici, afin de vérifier les transactions entrantes, la technique SPV est utilisée. En fait, un nœud léger n'effectue qu'une partie des contrôles les plus importants de ceux qui effectuent un nœud de réseau complet.
Comment fonctionne le travail dans ce cas? Au lieu de recevoir des blocs, comme le fait un nœud complet, un nœud SPV ne reçoit que des en-têtes de bloc, qui sont beaucoup plus petits (80 octets). L'en-tête contient les données nécessaires pour vérifier la confirmation d'une transaction spécifique dans ce bloc. Plus précisément, dans l'en-tête du bloc, il y a un champ Racine Merkle où la valeur de hachage de toutes les transactions dans le bloc est calculée, calculée selon le schéma de l'arbre Merkle.

Le schéma d'arbre Merkle vous permet de vérifier si la valeur de hachage d'une transaction particulière est incluse dans la racine Merkle, sans avoir toutes les autres transactions dans le bloc. Ainsi, ayant une transaction, un en-tête de bloc et une branche Merkle pour cette transaction (vous pouvez la demander à partir d'un nœud complet), un portefeuille numérique peut s'assurer que la transaction a bien été confirmée dans un bloc spécifique.
Pourquoi cela ne peut-il pas être considéré comme une vérification complète des transactions? Bien sûr, l'utilisateur gagne en indépendance par rapport à des nœuds de réseau spécifiques et peut communiquer directement avec un réseau distribué. Pour ce faire, il n'a pas besoin de stocker l'intégralité de la blockchain. Mais l'inconvénient est que le client léger ne vérifie pas complètement la transaction indépendamment, car vous ne disposez pas de toutes les données nécessaires pour cela (par exemple, des pièces non dépensées). Il vérifie uniquement le fait de la validation de la transaction par les validateurs - c'est-à-dire qu'il s'assure que cette transaction a été entièrement vérifiée par les autres nœuds et propriétaires de la majorité de la puissance de calcul du réseau (mineurs). Dans ce cas, la fiabilité revient à nouveau à croire que la majeure partie de la puissance de traitement est utilisée pour un fonctionnement équitable. En d'autres termes, vous ne vérifiez pas la transaction vous-même, mais faites confiance à la majorité.
Une caractéristique de l'utilisation de portefeuilles numériques qui implémentent l'approche de nœud SPV est la nécessité de maintenir une connexion réseau avec un grand nombre de nœuds de réseau complets indépendants. Cela est nécessaire pour minimiser la probabilité que le nœud se connecte et ne reçoive des données que des nœuds de l'attaquant. L'attaquant peut alors imposer à l'utilisateur un autre état (faux) de l'historique des transactions. En conséquence, la victime peut accepter le paiement de la transaction, ce qui, selon la version de l'attaquant, est confirmé, bien qu'en fait non. Pour augmenter les chances de recevoir des données actuelles sur l'état réel du réseau, l'utilisateur doit maximiser le nombre de nœuds indépendants pour la communication. Plus il y en a, moins ils sont susceptibles de comploter contre l'utilisateur.
Comme vous l'avez déjà compris, les nœuds SPV exigent un fonctionnement stable de la connexion réseau, néanmoins ils sont souvent utilisés même dans les applications mobiles. Cette approche de synchronisation avec le réseau de paiement est assez répandue et est utilisée dans un certain nombre de portefeuilles Bitcoin populaires. Parmi eux, Bitcoin Wallet, Electrum, ainsi que Bread Wallet.
Foire aux questions
"Où puis-je trouver des nœuds complets auxquels vous pouvez faire confiance?"Il est déjà assez difficile de savoir à quels nœuds vous pouvez faire confiance. C'est une question de préférence personnelle. Il existe des services qui fournissent des informations fiables, tels que Blockchain.info, rarement quiconque leur fait confiance, surtout lorsqu'il s'agit de grandes quantités. Il faut être très prudent dans le choix d'un nœud de confiance, car il est un intermédiaire entre l'utilisateur et le réseau de paiement. Une fois que Blockchain.info s'est écrasé pendant deux jours en raison de problèmes avec le fournisseur DNS, les portefeuilles qui ont utilisé Blockchain.info comme nœud de confiance n'ont pas pu se synchroniser avec le réseau Bitcoin et au moins fonctionner d'une manière ou d'une autre.
- Quelles garanties donne l'équipe portefeuille et quelle est sa responsabilité?Ce problème est plus juridique que technique. Tout logiciel officiellement distribué a des «conditions d'utilisation», qui indiquent ce que vous pouvez présenter aux développeurs en cas de problèmes dans leur logiciel. Les «conditions d'utilisation» diffèrent selon les applications. Comme toujours, l'utilisateur répond à la question de savoir s'il fait confiance aux développeurs ou non, avant de commencer à utiliser son produit.
- Qui décide s'il s'agit d'un nœud de confiance?Seul l'utilisateur qui possède le portefeuille. La valeur des sites de confiance est de simplifier considérablement le portefeuille. Vous sélectionnez un nœud spécifique auquel vous faites confiance pour la vérification des transactions. Il prend à sa charge toute la charge des opérations de vérification et vous faites confiance aux données d'état du réseau qu'il vous transmet. C'est une question de confiance personnelle et plus encore.
- Combien de sites de confiance peuvent être?Vous pouvez sélectionner n'importe quel nombre de nœuds approuvés pour minimiser le risque de perdre l'accès au réseau. Par exemple, trois nœuds. Si vous rencontrez des problèmes d'accès au premier, vous vous connectez au second et continuez à travailler avec lui exactement de la même manière.
- Qu'arrivera-t-il aux pièces si les serveurs sur lesquels elles sont stockées sont totalement ou partiellement détruits par le tremblement de terre?Ici, il faut dire non pas sur les pièces, mais sur le stockage des clés utilisées pour accéder à ces pièces. Considérez deux options pour une situation. Si le serveur qui a fourni l'accès au réseau Bitcoin est détruit. Que cela ne vous affectera en aucune façon. Vous perdrez temporairement l'accès à la base de données distribuée, mais vous aurez toujours des clés qui vous permettront de dépenser ces pièces. Si le serveur sur lequel vos clés étaient stockées est détruit, alors que vous n'avez pas de copie de sauvegarde de ces clés, vous ne pourrez pas accéder à vos pièces.
- Est-il sûr de mettre un portefeuille, de mettre des pièces dessus, d'écrire une phrase de départ sur du papier et de le supprimer?En fait, oui. Vous devez enregistrer la phrase de départ - c'est un minimum suffisant. La blockchain stocke des informations sur les pièces qui sont stockées à quelles adresses. Vous devez enregistrer vos clés privées pour accéder à ces pièces. Dans votre cas, c'est une phrase de départ.
- Est-il possible de mettre localement un add-on sur la blockchain afin de pouvoir analyser les données sur la blockchain?Vous pouvez ajouter n'importe quel logiciel qui analysera la blockchain. Il peut s'agir d'un logiciel écrit par l'utilisateur lui-même ou d'une solution clé en main. Tout dépend de vos objectifs. Si vous souhaitez optimiser les requêtes pour rechercher des transactions spécifiques liées à des adresses spécifiques, comme le fait l'explorateur de blockchain, vous pouvez utiliser un logiciel qui indexera la blockchain et mettra en cache certaines données. Un exemple d'un tel logiciel est BitCore (pris en charge par BitPay). BitCore est open source et vous pouvez simplement l'utiliser avec votre site complet.