paint-brush
Analysez près d'un milliard de transactions Bitcoin en moins d'une minute à l'aide de cet outilpar@krieker
1,050 lectures
1,050 lectures

Analysez près d'un milliard de transactions Bitcoin en moins d'une minute à l'aide de cet outil

par Alina Arsamakova5m2023/05/26
Read on Terminal Reader

Trop long; Pour lire

Dans cet article, nous parlerons de l'outil secret d'analyse de blockchain que personne ne connaît et qui permet d'interroger des données utiles à partir de blockchains à la vitesse de l'éclair. Nous donnerons des exemples de requêtes que l'on peut faire pour extraire des données utiles de la blockchain et nous parlerons de l'architecture de l'outil qui permet de faire des analyses à des vitesses aussi élevées.
featured image - Analysez près d'un milliard de transactions Bitcoin en moins d'une minute à l'aide de cet outil
Alina Arsamakova HackerNoon profile picture
0-item
1-item
2-item

L'image principale de cet article a été générée parle générateur d'images AI de HackerNoon via l'invite "hachages de transaction blockchain sur un tableau blanc"



Dans cet article, nous parlerons de l'outil open-source secret que personne ne connaît et qui permet d'interroger des données utiles à partir de blockchains à la vitesse de l'éclair.


Nous donnerons des exemples de requêtes que l'on peut faire pour extraire des données utiles de la blockchain et nous parlerons de l'architecture de l'outil qui permet de faire des analyses à des vitesses aussi élevées.


Avant cela, parlons de la raison pour laquelle vous devez analyser les transactions de la blockchain en premier lieu.


Chaque transaction Bitcoin contient le

  1. adresse de l'expéditeur
  2. adresse du destinataire
  3. montant envoyé


mais aussi


  1. solde de l'expéditeur
  2. combien de temps les pièces sont restées inactives dans le portefeuille de l'expéditeur
  3. solde du destinataire


Et à partir de ce qui précède, vous pouvez extrapoler et obtenir des informations sur


  • Combien de temps l'expéditeur conserve-t-il généralement son Bitcoin avant de l'envoyer
  • Quel est le solde moyen de tous les portefeuilles sur la blockchain
  • Taille moyenne des transactions


et plus de 100 autres analyses différentes.


Comme vous pouvez le voir, les données que nous pouvons obtenir sur le marché du Bitcoin sont beaucoup plus complètes par rapport aux marchés hérités. Et surtout, la personne moyenne peut y avoir accès. En revanche, seuls les fonds spéculatifs et les banques ont accès à de telles données sur les marchés traditionnels.


Ainsi, en analysant les transactions sur la blockchain Bitcoin, on peut mieux comprendre le marché du Bitcoin et prendre de meilleures décisions d'investissement sur la base de ces données.


Outre les applications de l'analyse de la blockchain au trading et à l'investissement, il existe de nombreuses autres façons d'utiliser l'analyse de la blockchain :


  • Déanonymisation des adresses de portefeuille
  • Identifier une activité illicite
  • Conformité


Alors, comment fonctionne cet outil ?


L'architecture de BlockSci

BlockSci vise à résoudre trois points faibles des outils d'analyse de blockchain existants :


  1. mauvaise performance,
  2. capacités limitées
  3. et une interface de programmation lourde.


Les mauvaises performances sont le problème que BlockSci résout le mieux. Par exemple, l'approche de la force brute pour analyser les transactions Bitcoin fonctionnerait également. Vous pouvez exécuter un nœud Bitcoin sur votre ordinateur/serveur et interroger directement votre propre nœud. Mais cette approche est si lente que le traitement de toutes les transactions d'un milliard de bitcoins peut prendre des années.


D'autres outils existants souffrent également de performances médiocres, en particulier lors de l'utilisation de bases de données de graphes à usage général, ce qui les rend des centaines de fois plus lents pour les requêtes séquentielles et considérablement plus lents pour toutes les requêtes, y compris les requêtes de parcours de graphe.


Source : https://www.usenix.org/system/files/sec20-kalodner.pdf


La conception de BlockSci est principalement basée sur le fait que dans les blockchains, les blocs du passé ne peuvent pas être modifiés et que toutes les nouvelles données qui apparaissent sur la blockchain sont uniquement ajoutées.


Cela signifie que les propriétés ACID des bases de données transactionnelles sont inutiles, ce qui fait d'une base de données analytique en mémoire le choix naturel. L'utilisation de la mémoire au lieu du stockage sur disque accélère considérablement le traitement des données, ce qui est exactement ce dont nous avons besoin.


En fait, BlockSci charge toute la blockchain en mémoire pour effectuer des calculs et évite l'approche de traitement distribué. Ceci est motivé par le fait que les données de la blockchain sont structurées en graphes et donc difficiles à partitionner efficacement.


La conjecture de son concepteur était que l'utilisation d'une base de données transactionnelle distribuée traditionnelle pour l'analyse de la blockchain a un COÛT infini (Configuration qui surpasse un seul thread), en ce sens qu'aucun niveau de parallélisme ne peut surpasser une implémentation optimisée à un seul thread.


Il applique également plusieurs techniques telles que la conversion des pointeurs de hachage en pointeurs réels et la déduplication des données d'adresse, pour augmenter encore plus la vitesse et réduire la taille des données.


Pour importer des données depuis le nœud, BlockSci utilise son propre importateur hautes performances qui lit directement les données brutes sur le disque et NON à partir de l'interface JSON-RPC intégrée. Même dans ce cas, il faut généralement 24 heures pour importer et indexer toutes les données du nœud. Une fois les données analysées, les analyses réelles sont rapides.


La façon dont les blockchains sont stockées sur des disques n'est pas facile à analyser. Ils sont faits pour faire d'autres choses comme vérifier des transactions et trouver des données dans un grand réseau. Ils sont également conçus pour économiser de l'espace en mémoire en conservant les blocs dans un format de base sur le disque. Mais nous devons modifier les données pour les adapter à la mémoire, donc BlockSci a un analyseur qui peut gérer cette étape. Il a été vérifié que cet analyseur est bien optimisé.


Une autre façon dont l'outil atteint des vitesses aussi élevées est «l'optimisation du filtre de floraison». Le filtre bloom est une structure de données probabiliste qui permet de tester l'appartenance à un ensemble. Dans le contexte de la blockchain , il stocke toutes les adresses vues et garantit l'exactitude des recherches pour les adresses existantes tout en minimisant le nombre de requêtes de base de données pour celles qui n'existent pas. Ceci est réalisé sur la base du fait qu'environ 88% des entrées dépensent des sorties créées dans les 4000 derniers blocs et que seulement 8,6% des adresses Bitcoin sont utilisées plus d'une fois.


La dernière optimisation la plus importante qui permet à BlockSci d'atteindre des vitesses d'analyse élevées est la structure de mise en page des données qui offre à la fois des vitesses d'analyse élevées et ne pèse pas trop sur la mémoire.


La disposition des données de BlockSci divise les données disponibles en trois catégories et les combine dans un schéma hybride. Le graphique de transaction principal est requis pour la plupart des analyses et toujours chargé en mémoire, stocké dans un format basé sur les lignes. Les scripts et les données supplémentaires nécessaires uniquement pour un sous-ensemble d'analyses sont stockés dans un format hybride (partiellement basé sur des colonnes, partiellement basé sur des lignes) et chargés à la demande. Les index permettant de rechercher des transactions individuelles ou des adresses par hachage sont stockés dans une base de données distincte sur disque.


De plus, il utilise des encodages de taille fixe pour les champs de données lorsque cela est possible, optimise la disposition de la mémoire pour la localité de référence, relie les sorties aux entrées pour une traversée efficace et partage le mappage de la mémoire et le parallélisme.



Enfin, voici la requête qui trouve toutes les transactions avec des frais > 0,1 Bitcoins en moins d'une minute.


 chain.blocks.txes.where(lambda tx: tx.fee > 10**7).to_list()


Résumé

BlockSci est un outil d'analyse de blockchain qui permet une interrogation ultra-rapide de données utiles à partir de blockchains. En analysant les transactions Bitcoin, on peut mieux comprendre le marché et prendre de meilleures décisions d'investissement.


L'architecture de BlockSci est basée sur le fait que les données de la blockchain sont structurées en graphes et difficiles à partitionner efficacement, de sorte qu'il charge toute la blockchain en mémoire pour effectuer des calculs. Il applique plusieurs techniques pour augmenter la vitesse, notamment la conversion des pointeurs de hachage en pointeurs réels, la déduplication des données d'adresse et l'utilisation de l'optimisation du filtre de floraison. La structure de mise en page des données offre à la fois des vitesses d'analyse élevées et ne sollicite pas trop la mémoire.