Rejoignez-Nous sur

Le Bitcoin Mempool: où les transactions prennent leur envol

linkedin new

News

Le Bitcoin Mempool: où les transactions prennent leur envol

mtSh7vxezjTYIGXG5hQbtbkKPfo2 0gj3e1y
Photo de profil de l'auteur

@EvanazeEvan Azevedo

Je suis généraliste et amoureux des sciences

L’une des forces de Bitcoin et ce qui le rend unique dans le monde de la finance est sa transparence radicale. Les données de la blockchain sont comme une fenêtre, vous pouvez voir à travers.

Mais si les données de la blockchain sont une fenêtre, elles ressemblent souvent moins à celle de votre appartement (solennellement pendant une pandémie, peut-être), et plus comme ceci:

mtSh7vxezjTYIGXG5hQbtbkKPfo2 wfr3eja

Dans les données blockchain, les agents impliqués sont obscurcis. Il n'y a aucune agence centrale qui sait qui publie quelle transaction, mais les données sont toutes là pour que tout le monde puisse les voir, et elle essaie souvent de raconter une histoire.

Notre objectif dans cet article de blog est d'utiliser les données de la blockchain et de découvrir une de ces histoires: l'histoire de millions de dollars de monnaie numérique en vol entre expéditeur (s) et destinataire (s).

Nous visons à utiliser la transparence de la blockchain à notre avantage et à observer nos contreparties effectuer des transactions importantes avant même qu'ils ne soient terminés. C'est une capacité incroyablement puissante, et nous pouvons tirer parti de certaines compétences en matière de cerveau et de clavier pour le faire presque gratuitement.

Dans cet article, nous aborderons certains des mêmes sujets que l'un de mes précédents des postes, à savoir les portefeuilles d'entrée et de sortie et BitMEX. Nous allons également en apprendre davantage sur des sujets tels que le mempool, ce qu'est un portefeuille numérique, comment écouter des données en streaming en direct à l'aide d'un petit ordinateur et creuser des données (un peu) brutes de la blockchain à l'aide d'Amberdata.

L'API d'Amberdata unifie les données, les métriques et les taux de référence du réseau de chaînes de blocs et du marché de la crypto-monnaie en un seul point d'intégration, ce qui en fait un outil idéal pour la science des données. Il y a beaucoup de sujets à couvrir ici, alors commençons!

Qu'est-ce que le Bitcoin Mempool?

Lorsqu'une nouvelle transaction est soumise au réseau Bitcoin, elle doit d'abord être vérifiée par chaque nœud du réseau. Une fois la transaction vérifiée, elle est ajoutée au «mempool» du nœud, ou à la liste des transactions en attente. Lorsqu'un nouveau bloc est créé, un mineur remplit le bloc avec des transactions du mempool et extrait le bloc, faisant de la transaction une partie de la blockchain.

C'est ce que nous voulons dire lorsque nous disons que nous pouvons observer les transactions «en vol» dans le mempool: nous pouvons voir les transactions et leurs informations avant le transfert de fonds. Si je suis un commerçant de crypto-monnaie, je pourrais vouloir utiliser ces informations à mon avantage pour identifier comment les entités envoient de l'argent sur la blockchain – ce qui est impossible à faire sur la plupart des marchés traditionnels. Cela semble facile, non? C'est là que les données de la blockchain deviennent un peu délicates, comme ce vitrail.

Qu'est-ce qu'un portefeuille Bitcoin?

Si vous souhaitez acheter et éventuellement échanger de la crypto-monnaie, vous pouvez configurer un portefeuille numérique avec l'un des nombreux fournisseurs de portefeuille. Ce portefeuille contient une «clé secrète» prouvant que vous êtes propriétaire d'une certaine quantité de crypto-monnaie sur le réseau. Pour qu'un ami ou un échange puisse déposer une crypto-monnaie dans votre portefeuille, vous devez lui donner une adresse à laquelle l'envoyer. Cependant, cela se complique car la plupart des portefeuilles numériques modernes créent une nouvelle adresse pour chaque transfert par mesure de sécurité. La plupart des bourses centralisées telles que Coinbase ont également adopté cette mesure de sécurité.

Bien que cela soit excellent pour vous en tant qu'utilisateur, car cela protège vos actifs numériques contre le vol, il est beaucoup plus difficile pour les mineurs de données comme moi d'identifier qui envoie à qui. Bien que ce ne soit pas toujours le cas, cela commence à ressembler de plus en plus à chaque transaction entre de nouveaux utilisateurs, ce qui n'est pas utile. Si vous lisez mon article sur les portefeuilles BitMEX, vous saurez comment nous avons résolu ce problème pour les portefeuilles sur l'échange BitMEX, mais je vais le résumer ici.

BitMEX est l'un des échanges Bitcoin les plus liquides, ce qui signifie qu'il possède l'un des volumes les plus élevés de trading de Bitcoin et de crypto-monnaie. Heureusement pour nous, toutes les adresses BitMEX commencent par «3BMEX» ou «3BitMEX», ce qui les rend très faciles à identifier. Ce genre de choses n'est pas facilement annoncé par la bourse elle-même, mais selon certaines bonnes sources et en vérifiant avec les données, il semble que cela semble toujours être le cas.

Obtenir les données

Le volume de données de transaction pour un grand réseau comme Bitcoin est constant et important, donc afin d'obtenir une image précise de son activité, c'est une bonne idée de le regarder en direct et d'analyser les signaux sur lesquels nous voulons nous concentrer. Notre principale source de données sera Amberdata Transactions en attente Websocket, disponible avec une clé API Amberdata de niveau gratuit. Ils ont un guide utile pour démarrer à la recherche de preuves de transferts de jetons importants appelés Mouvement d'actifs en temps réel, mais comme j'exécute cette analyse en Python, j'ai pensé que ma méthode pourrait également être utile.

Étant donné que nous aurons besoin de plusieurs jours de données pour trouver quelque chose d'intéressant, je choisis d'utiliser un appareil plus petit pour économiser de l'énergie et garder ma chambre un peu plus fraîche. Mon appareil est un Raspberry Pi 3B mis à niveau vers la dernière version de Raspberry Pi OS 10: Buster. Cette version est installée avec Python 3.7 dont nous aurons besoin pour exécuter le script de collecte de données. En parlant de collecte de données, nous arrivons maintenant à la vedette du spectacle du point de vue technique: les websockets.

Que sont les WebSockets?

Les Websockets sont un moyen d'obtenir des données en streaming à partir d'une API. Les deux outils les plus utiles pour l'ingestion de données en direct dans Python sont les Websockets package et asyncio dans la bibliothèque Python standard. Websockets est activement maintenu et je le recommande sur websocket-client car il applique de bonnes pratiques de programmation, y compris l'utilisation d'asyncio.

Si vous n'êtes pas familier avec asyncio, c'est un package pour le multithreading avec quelques fonctionnalités spéciales qui seront très utiles pour écouter des données en streaming. Ce guider by Real Python est idéal pour se familiariser avec asyncio. Voici à quoi ressemble ma fonction de collecte de données en utilisant la bibliothèque websockets:

Bref, en démarrant notre fonction avec

async def

nous pouvons appeler la fonction et reprendre notre programme sans attendre son retour. Nous utilisons cette même méthodologie en utilisant

await websocket.send(message)

La forme générale du programme consiste à ouvrir un client et à envoyer au serveur websocket un message indiquant que nous voulons écouter le

pending_transaction

websocket pour les nouveaux événements. Une fois la connexion établie, on démarre une boucle infinie avec

while True

et écoutez les nouveaux événements avec

response = await asyncio.wait_for(websocket.recv(), timeout=25)

.

Au fur et à mesure que les données arrivent, nous traitons les données avec une fonction appelée

on_response()

qui cherche essentiellement à voir si la transaction en attente est suffisamment grande – supérieure à notre seuil – et la consigne dans notre fichier de données si c'est le cas. En particulier, nous enregistrons l'horodatage du moment où la transaction en attente est apparue dans le mempool, la valeur de la transaction en attente, la provenance de la transaction et les destinataires de la transaction, le hachage de la transaction, et si cette transaction est activée, vers / depuis ou non lié à l'échange BitMEX. Si vous n'êtes pas familier avec les données de la blockchain, le hachage de transaction n'est qu'un identifiant unique qui nous permet de trouver cette transaction particulière à tout moment, que nous utiliserons plus tard lorsque nous vérifierons que les transactions ont été effectuées.

Lorsque nous enregistrons la transaction, nous voulons vérifier si l'expéditeur ou les destinataires font partie de notre échange d'intérêts, nous avons donc une idée de si l'argent se négocie sur, depuis ou dans l'échange. Cela tend en fait à être un indicateur décent de la santé du marché de la crypto-monnaie. Plus les gens mettent de l'argent sur un échange, plus ils sont optimistes et vice-versa. Afin d'y parvenir pour les portefeuilles BitMEX, nous pouvons simplement analyser les adresses pour «3BMEX» ou «3BitMEX», comme mentionné ci-dessus. Mais je voulais aller plus loin et utiliser ce qu'on appelle un filtre de floraison.

Filtre Bloom

Un filtre de floraison est une structure de données efficace pour interroger une liste d'éléments. Il peut répondre à la question "Cet objet ne figure-t-il pas dans la liste des éléments?" avec certitude, mais donne une réponse avec une certaine marge d'erreur lorsque vous lui demandez «cet objet est-il dans la liste des articles?». Cela le rend utile pour les applications plus légères lorsque vous avez jusqu'à des millions ou plus d'éléments à rechercher. Afin de profiter de cela, j'ai utilisé ma liste d'adresses du billet de blog BitMEX pour faire des références croisées chaque fois que nous avons enregistré une nouvelle transaction importante.

Vous n'avez peut-être pas un algorithme aussi intéressant pour identifier les adresses d'échange sur d'autres bourses, auquel cas vous pouvez conserver une liste des adresses d'échange que vous rencontrez et utiliser le filtre de floraison pour vérifier les nouvelles transactions pour les adresses d'échange au fur et à mesure qu'elles arrivent. et fait, vous voudrez probablement aussi un troisième processus – éventuellement avec une machine différente ou après que les données ont été collectées – pour revérifier les transactions pour vous assurer que le filtre de floraison n'en a manqué aucune.

Commencer

Nous ferons également bon usage du programme tmux écrit en C pour les machines Linux. C'est un programme très utile et est devenu une partie standard de mon flux de travail depuis que je l'ai appris pour ce billet de blog. Tmux démarre une session serveur qui permet à vos sessions shell de rester actives même après votre départ, sinon l'ordinateur s'endort régulièrement. Son utilisation principale ici est de maintenir la session Python en vie et d'écouter le websocket indéfiniment, mais il existe de nombreuses autres utilisations pour tmux telles que la création d'un environnement de développement personnalisé, et bien plus encore.

Si vous souhaitez suivre ou essayer cette analyse vous-même, vous avez d'abord besoin d'une clé API Amberdata pour accéder au websocket. Le code complet de cet article de blog, ainsi que les autres articles de blog de cette série sont disponibles ici, et pour cet article, nous nous concentrerons sur le référentiel txn-mempool. Je me suis assuré qu'il y avait un minimum de packages à installer, vous devriez donc être en mesure de commencer à collecter des données avec uniquement la version 3.7 de Python et le gestionnaire d'environnement virtuel de votre choix. Maintenant que nous avons cela de côté, nous pouvons passer à la partie amusante.

L'analyse

J'ai laissé mon Raspberry Pi fonctionner pendant environ un jour en écoutant le mempool Bitcoin. J'ai défini mon seuil pour les transactions en attente supérieures à 100 Bitcoin, ou pour des transactions d'une valeur d'au moins 1,15 million de dollars environ.

Regarder les transactions en attente (au-delà d'un certain seuil) en direct

J'ai capturé périodiquement les transactions mempool du 26 août 2020 à 8h30 PST au 28 à 8h00. Les tracer par ordre d'occurrence nous donne ceci:

mtSh7vxezjTYIGXG5hQbtbkKPfo2 5m1u3egt

Un graphique de l'ampleur de la transaction sur ma période de collecte de données

Nous pouvons voir que nous avons observé essentiellement deux niveaux de transactions en attente. De petites transactions (dans l'ordre des choses) d'une valeur inférieure à 1000 Bitcoin (~ 11 millions de dollars) qui se produisent fréquemment, et un bon nombre de transactions en attente dans la plage de 10000 Bitcoin (~ 100 millions de dollars) et plus. Cela peut surprendre certains de la quantité choquante de valeur constamment transférée sur le réseau Bitcoin. La répartition globale des transactions en attente que nous avons enregistrées ressemble à ceci:

count      503
mean      1034
std       2613.3
min        100
25%        131
50%        211
75%        438
max      11711

La transaction moyenne en attente – à l'exclusion des transactions inférieures à 100 BTC – était d'environ 1034 BTC, mais la médiane était inférieure à un peu plus de 200 BTC, ce qui indique qu'il y a des transactions beaucoup plus importantes faussant la distribution.

En remarque, même si Tmux maintient un serveur en vie afin que le programme d'écoute puisse continuer à s'abonner aux données du websocket, j'étais stupide et j'ai débranché ma machine pendant quelques heures à la fois. Mon Kindle partage le même chargeur et je suis également un lecteur assidu. Voici à quoi ressemble ma collecte de données dans le domaine temporel avec temps d'arrêt dû au débranchement de mon Raspberry Pi:

mtSh7vxezjTYIGXG5hQbtbkKPfo2

La disponibilité de ma collecte de données

Nous verrons l'effet de cela apparaître plus tard dans l'analyse, mais pour le moment, nous pouvons simplement garder cela à l'esprit. Étant donné que notre analyse est axée sur la surveillance des portefeuilles sur l’échange BitMEX, traduisons cela en transactions impliquant ces adresses BitMEX.

Filtrage des transactions vers / depuis / en échange

En parlant du flux d'argent par rapport à une bourse, nous pouvons avoir une idée de si les gens font du commerce dans la bourse, placent de l'argent dans la bourse pour échanger ou retirent l'argent de la bourse. Mettre de l'argent dans un échange reflète peut-être un sentiment haussier, car les gens achètent plus de Bitcoin pour échanger. Retirer de l'argent de la bourse, en revanche, peut refléter un sentiment baissier. Les gens peuvent transférer hors de l'échange pour retirer et placer dans un portefeuille froid, transférer vers un autre échange ou liquider en USD ou dans une autre devise.

Comme mentionné ci-dessus, nous utilisons un filtre de floraison pour identifier les transactions en attente d'un échange à la volée et observer les flux avant qu'ils ne deviennent des transactions terminées. S'il y a une adresse BitMEX dans le champ «de», alors nous considérons que la transaction provient ou «hors» de l'échange. De même, si nous trouvons une adresse BitMEX dans le champ «à», alors la transaction est «sur» l'échange. Si les deux champs contiennent une adresse BitMEX, la transaction est «dans» l'échange.

Seulement 4% environ des transactions que nous avons enregistrées ont eu lieu en bourse. Ici, nous ignorons les transactions non liées à BitMEX. Malheureusement, nous n'avons pas pu enregistrer les transactions qui provenaient ou «hors» de la bourse. Pour l'activité que nous avons enregistrée, la répartition est d'environ 40/60 de l'activité allant à l'échange par rapport à se produisant au sein de l'échange.

mtSh7vxezjTYIGXG5hQbtbkKPfo2 3a2h3eqs

La distribution des transactions liées à BitMEX

Maintenant que nous avons une image des grosses transactions en cours sur BitMEX, nous allons les tracer sur le prix pour avoir une image de ce qui se passait lorsque la transaction a été soumise.

Tracer les transactions importantes liées aux échanges sur le prix

Nous utilisons Amberdata OHLCV historique point final pour obtenir des données au niveau minute sur le prix de clôture de Bitcoin au cours de cette période. Si vous souhaitez répliquer cette analyse, sachez que vous pouvez interroger au maximum 24 heures de données avec cette granularité à la fois, mais il est facile de simplement créer une fenêtre sautante pour collecter autant de données que nécessaire. J'ai combiné les deux sources de données et tracé les grandes transactions en attente sur le prix du Bitcoin, en codant chaque transaction selon qu'elle était «sur» ou «dans» l'échange.

mtSh7vxezjTYIGXG5hQbtbkKPfo2 cn2w3epk

Un tracé de certains flux en attente vers BitMEX

Dans cette partie des données, la plupart des transactions en attente allaient d'adresses externes à l'échange, nous avons donc pu capturer des entrées en direct sur BitMEX. Voici à quoi ressemblent les transactions, triées par valeur:

mtSh7vxezjTYIGXG5hQbtbkKPfo2 6o343e96

Les plus grandes transactions liées à BitMEX en attente

Il semble que la plus importante de ces transactions en attente – de loin – se soit produite au début de la période d'observation.

mtSh7vxezjTYIGXG5hQbtbkKPfo2 1q383eve

Plus grande activité au sein de l'échange

La première transaction en attente, qui a effectivement eu lieu lors de ma deuxième minute d'observation, est la plus grosse transaction en attente à 3400 BTC. Plus intéressant encore, deux des transactions ont eu lieu dans la même minute, dont l'une est la deuxième plus grande transaction que nous ayons observée dans le mempool sur la période. Quelques millisecondes seulement après qu'une transaction a été publiée pour plus de 1000 Bitcoin, une autre transaction dans le même échange publiée pour 150 Bitcoin. J'ai regardé les adresses des deux transactions et elles n'ont pas de point commun. On ne sait donc pas si les deux sont liés.

Il y a une autre subtilité que nous avons manquée jusqu'ici dans l'analyse. Par exemple, la première transaction de la liste ne se produit en fait qu'entre deux adresses uniques, et l'une d'elles n'est pas une adresse BitMEX même si nous avons répertorié la transaction comme dans. Cela est dû à la façon dont BitMEX traite une transaction. Si un portefeuille BitMEX initie un transfert pour envoyer des fonds, l'expéditeur enverra la totalité du solde de son compte en entrée et recevra son solde moins le montant qu'il souhaite envoyer et les frais en retour.

Si vous passez par les transactions «à l'intérieur», vous constaterez qu'elles sont toutes de cette forme, ce qui signifie qu'il s'agit simplement d'un transfert BitMEX de fonds vers un compte extérieur. Nous n'avons donc trouvé aucun transfert BitMEX dans l'échange – c'est-à-dire d'une adresse BitMEX à une autre, et uniquement des transferts hors de l'échange.

En revenant à nos transactions sur l'échange, nous pouvons maintenant calculer le montant qui a quitté l'échange comme indiqué, ou le montant transféré sur l'échange. Je l'ai fait avec le script suivant:

Ce script parcourt les transactions qui ont été étiquetées «dedans» et calcule le montant qui a été transféré vers des adresses non-BitMEX, et passe par les transactions étiquetées «on» et calcule le montant qui a été envoyé aux adresses BitMEX. Nous utilisons Amberdata Célibataire endpoint pour obtenir les données de transaction en fonction du hachage de transaction. Les résultats se présentent comme suit:

mtSh7vxezjTYIGXG5hQbtbkKPfo2 sa3r3euw

Comme nous pouvons le voir, une seule transaction correspond à notre description d'un grand flux supérieur à 100 btc. Quelqu'un vers 7h00 PST le 28 août a transféré 100 btc hors de BitMEX. Avec cette couche de code supplémentaire, nous pourrions cibler les transferts de Bitcoin dans ou hors d'un échange juste au moment où ils étaient publiés sur le réseau.

Vérifier si la transaction a abouti

Une fois que nous voyons qu'une transaction importante a été publiée dans le mempool, nous voudrons peut-être vérifier si ou quand elle aboutit. Nous pouvons utiliser l'adresse blockchain d'Amberdata transaction endpoint pour voir quand la transaction est minée dans un bloc. L'exécution de ce code montre que la transaction a été minée dans le bloc 645509 le jour suivant, le 27 août.

mtSh7vxezjTYIGXG5hQbtbkKPfo2 2t413ee7

Voyons maintenant si l'une des 10 principales transactions que nous avons examinées a été confirmée. En utilisant simplement le code ci-dessus et en parcourant nos 10 meilleures adresses, nous pouvons rapidement voir si l'une des transactions a encore été effectuée.

Remarque: certaines de ces adresses sont beaucoup plus actives que la seule que nous avons examinée ci-dessus, nous devons donc augmenter le nombre d'enregistrements pour revenir à 1000 par page. Je vous invite à essayer cela dans l'analyse Jupyter Notebook, mais pour l'instant, vous pouvez me faire confiance que sur les 19 transactions liées à l'échange, toutes sauf trois ont été effectuées au moment de la rédaction.

Number of completed transactions: 16
Total transactions: 19
Percent completed: 84.2

Qu'avons-nous appris?

Si vous êtes resté avec moi jusqu'au bout, félicitations! Nous avons parcouru de nombreux sujets aujourd'hui. Nous avons appris ce qu'est un mempool, pourquoi les portefeuilles blockchain peuvent être si difficiles à trouver, et avons pris quelques premiers pas dans le calcul des flux à partir de transactions Bitcoin. De la collecte des données, du traçage des flux sur le prix et de la vérification des transactions terminées, la blockchain d'Amberdata et l'API de données de marché ont facilité la visibilité sur le mempool.

Nous avons également découvert certains outils de développement intéressants, tels que tmux, la bibliothèque Websockets, les filtres de floraison et comment commencer à écouter à moindre coût des données de blockchain en direct sur un Raspberry Pi. Plus important encore, nous avons appris que nous pouvons découvrir de gros flux de devises au moment où ils sont soumis à une blockchain, souvent jusqu'à 24 heures avant leur traitement par le réseau.

Si vous souhaitez essayer cette analyse par vous-même, vous pouvez consulter le référentiel Github pour cet article de blog ici. J'ai inclus les données de cette analyse comme échantillon juste pour commencer.

Photo en vedette par Sam Bark sur Unsplash

Sources

Mots clés

La bannière Noonification

Abonnez-vous pour obtenir votre tour d'horizon quotidien des meilleures histoires technologiques!



Traduction de l’article de Evan Azevedo : Article Original

Le Meilleur de l'Actualité Blockchain Francophone & Internationale | News, Guides, Avis & Tutoriels pour s'informer et démarrer facilement avec Bitcoin, les Crypto-Monnaies et le Blockchain. En Savoir Plus sur L'Équipe BlockBlog

Commenter cet Article

Commenter cet Article

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Plus dans News

Les Plus Populaires

Acheter des Bitcoin

Acheter des Alt-Coins

Sécuriser vos Cryptos

Vêtements et Produits Dérivés

Top