El Bitcoin Mempool: Donde las transacciones toman vuelo

El Bitcoin Mempool: Donde las transacciones toman vuelo

nueva historia

Evanaze Evan Azevedo Soy un generalista y amante de las ciencias

Uno de los puntos fuertes de Bitcoin y lo que lo hace único en el mundo de las finanzas es su radical transparencia. Los datos de las cadenas de bloques son como una ventana, puedes ver a través de ella.

reacciones

Pero si los datos de Blockchain son una ventana, a menudo se siente menos como la que está en tu apartamento para mirar hacia afuera (solemnemente durante una pandemia, posiblemente), y más como esto:

reacciones

En los datos de la cadena de bloqueo, los agentes involucrados están oscurecidos. No hay una agencia central que sepa quién está publicando qué transacción, pero los datos están ahí para que cualquiera los vea, y a menudo están tratando de contar una historia.

reacciones

Nuestro objetivo en esta entrada del blog es utilizar datos de cadenas de bloqueo y descubrir una de esas historias: la historia de millones de dólares de moneda digital en vuelo entre remitente(s) y destinatario(s).

reacciones

Nuestro objetivo es utilizar la transparencia de la cadena de bloqueo en nuestro beneficio y observar a nuestras contrapartes realizando grandes transacciones antes de que se completen. Esta es una habilidad increíblemente poderosa, y podemos aprovechar algo de poder mental y habilidades de teclado para hacerlo casi gratis.

reacciones

En este post, tocaremos algunos de los mismos temas de uno de mis posts anteriores, a saber, la entrada y salida y las carteras de BitMEX. También aprenderemos sobre temas como el mempool, lo que es una cartera digital, cómo escuchar datos en directo utilizando un pequeño ordenador, y cómo indagar en (algo) datos en bruto de cadenas de bloques utilizando Amberdata.

reacciones

El API de Amberdata unifica datos del mercado de la cadena de bloques y de la criptodivisa, métricas y tasas de referencia en un único punto de integración, lo que lo hace delicioso para la ciencia de los datos. Hay muchos temas que cubrir aquí, así que con eso, ¡comencemos!

reacciones

¿Qué es el Bitcoin Mempool?

Cuando se envía una nueva transacción a la red de Bitcoin, primero debe ser verificada por cada nodo de la red. Una vez que la transacción se verifica, se añade al mempool del nodo, o lista de transacciones pendientes. Cuando se crea un nuevo bloque, un minero rellena el bloque con transacciones del mempool y extrae el bloque, haciendo que la transacción forme parte de la cadena de bloques.

reacciones

A esto nos referimos cuando decimos que podemos observar las transacciones en vuelo en el mempool: podemos ver las transacciones y su información antes de la transferencia de fondos. Si soy un comerciante de criptodivisas, podría utilizar esta información en mi beneficio para identificar cómo las entidades están enviando dinero en la cadena de bloques, algo que es imposible de hacer en la mayoría de los mercados tradicionales. Suena fácil, ¿verdad? Aquí es donde los datos de la cadena de bloques se vuelven un poco difíciles, como esa vidriera.

reacciones

¿Qué es una cartera Bitcoin?

Si está interesado en comprar y posiblemente intercambiar criptodólares, puede crear una cartera digital con uno de los muchos proveedores de carteras que existen. Esta billetera tiene una llave secreta que demuestra que usted es dueño de alguna cantidad de cripto moneda en la red. Para que un amigo o un agente de bolsa deposite una moneda encriptada en su billetera, debe darle una dirección a la que enviarla. Sin embargo, esto se complica porque la mayoría de las carteras digitales modernas crean una nueva dirección para cada transferencia como medida de seguridad. La mayoría de los intercambios centralizados como Coinbase también han adoptado esta medida de seguridad.

reacciones

Aunque esto es muy bueno para usted como usuario porque protege sus activos digitales de ser robados, hace mucho más difícil para los mineros de datos como yo identificar quién está enviando a quién. Aunque no siempre es así, cada vez parece más que cada transacción es entre nuevos usuarios, lo que no ayuda. Si leen mi mencionado post sobre las carteras de BitMEX sabrán cómo resolvimos este problema para las carteras en el intercambio de BitMEX, pero lo resumiré aquí.

reacciones

BitMEX es una de las bolsas de Bitcoin más líquidas, lo que significa que tiene uno de los mayores volúmenes de comercio de Bitcoin y criptodivisas. Afortunadamente para nosotros, todas las direcciones de BitMEX empiezan con 3BMEX o 3BitMEX, lo que las hace muy fáciles de identificar. Este tipo de cosas no son fácilmente anunciadas por la propia bolsa, pero de acuerdo con algunas buenas fuentes y verificando con los datos parece que todavía es así.

reacciones

Obtención de los datos

El volumen de datos de transacciones para una gran red como Bitcoin es constante y considerable, por lo que para obtener una imagen precisa de su actividad, es una buena idea verlo en vivo y analizar las señales en las que queremos centrarnos. Nuestra principal fuente de datos será el Websocket de Transacciones Pendientes de Amberdata, que está disponible con una clave API de nivel libre de Amberdata. Tienen una guía útil para ponerse en marcha en busca de pruebas de grandes transferencias de fichas, llamada Real Time Asset Movement, pero como estoy ejecutando este análisis en Python pensé que mi método también podría ser útil.

reacciones

Como necesitaremos varios días de datos para encontrar algo interesante, opto por usar un dispositivo más pequeño para ahorrar energía y mantener mi habitación un poco más fresca. Mi dispositivo es un Pi 3B de Frambuesa actualizado a la última versión de Raspberry Pi OS 10: Buster. Esta versión viene instalada con Python 3.7 que necesitaremos para ejecutar el script de recolección de datos. Hablando de recolección de datos, ahora llegamos a la estrella del show desde el lado técnico: websockets.

reacciones

¿Qué son los WebSockets?

Los Websockets son una forma de obtener datos de streaming de una API. Las dos herramientas más útiles para ingerir datos en directo en Python son el paquete websockets y asyncio en la biblioteca estándar de Python. Websockets se mantiene activamente y lo recomiendo sobre websocket-client ya que refuerza las buenas prácticas de programación, incluyendo el uso de asyncio.

reacciones

Si no está familiarizado con el asincio, es un paquete para multihilo con algunas funcionalidades especiales que serán muy útiles para escuchar los datos de streaming. Esta guía de Real Python es genial para ponerse al día con asyncio. Así es como se ve mi función de recolección de datos usando la librería de Websockets:

reacciones

En resumen, al iniciar nuestra función con

async def

espera websocket.send(message)

pending_transaction

mientras que True

respuesta = espera asyncio.wait_for(websocket.recv(), timeout=25)

reacciones

podemos llamar a la función y reanudar nuestro programa sin esperar a que vuelva. Utilizamos esta misma metodología usando La forma general del programa es abrir un cliente y enviar al servidor del WebSocket un mensaje que dice que queremos escuchar el WebSocket para nuevos eventos. Una vez que se establece la conexión, comenzamos un bucle infinito cony escuchamos los nuevos eventos con

A medida que los datos llegan, los procesamos con una función llamada

on_response()

reacciones

que esencialmente busca ver si la transacción pendiente es lo suficientemente grande -mayor que nuestro umbral- y la registra en nuestro archivo de datos si es así. En particular, registramos la marca de tiempo de cuando la transacción pendiente apareció en el mempool, el valor de la transacción pendiente, de quién es la transacción y sus destinatarios, el hash de la transacción, y si esta transacción está en, a/desde, o no relacionada con el intercambio BitMEX. Si no está familiarizado con los datos de las cadenas de bloqueo, el hash de la transacción es sólo un identificador único que nos permite encontrar esta transacción en particular en cualquier momento, que utilizaremos más adelante cuando comprobemos que las transacciones se realizaron.

A medida que registramos la transacción, queremos comprobar si el remitente o los destinatarios forman parte de nuestro intercambio de intereses, para tener una idea de si el dinero se negocia en, desde o dentro del intercambio. Esto en realidad tiende a ser un indicador decente de la salud del mercado de la criptodivisa. Cuantas más personas pongan dinero en un intercambio, más alcistas serán y viceversa. Para lograr esto para las carteras BitMEX, podemos simplemente analizar las direcciones de 3BMEX o 3BitMEX, como se mencionó anteriormente. Pero, yo quería ir un paso más allá y utilizar lo que se llama un filtro de florecimiento.

reacciones

Filtro de floración

Un filtro de florecimiento es una estructura de datos eficiente para consultar una lista de artículos. Puede responder a la pregunta ¿No está este objeto en la lista de elementos? con certeza, pero da una respuesta con cierto margen de error cuando se pregunta ¿está este objeto en la lista de elementos?. Esto lo hace útil para aplicaciones más ligeras cuando se tienen hasta millones o más elementos que buscar. Para aprovechar esto, usé mi lista de direcciones de la entrada del blog de BitMEX para cruzar referencias cada vez que registrábamos una nueva transacción grande.

reacciones

Es posible que no tenga un algoritmo tan bueno para identificar las direcciones de intercambio en otras bolsas, en cuyo caso puede mantener una lista de las direcciones de intercambio con las que se encuentre y utilizar el filtro de florecimiento para comprobar las nuevas transacciones en busca de direcciones de intercambio a medida que vayan llegando. Dicho esto, probablemente también querrás un tercer proceso -posiblemente con una máquina diferente o hecho después de que los datos hayan sido recogidos- para comprobar de nuevo las transacciones para asegurarte de que el filtro bloom no ha dejado pasar ninguna.

reacciones

Empezando

También haremos un buen uso del programa tmux escrito en C para máquinas Linux. Este es un programa muy útil y se ha convertido en una parte estándar de mi flujo de trabajo desde que lo aprendí para esta entrada de blog. Tmux inicia una sesión de servidor que permite que sus sesiones de shell se mantengan vivas incluso después de que usted se vaya, o el ordenador se dormiría regularmente. Su uso principal aquí es mantener la sesión de Python viva y escuchando el websocket indefinidamente, pero hay muchos más usos para tmux como la creación de un entorno de desarrollo personalizado, y mucho más.

reacciones

Si quieres seguir o probar este análisis por ti mismo, primero necesitas una clave de la API de Amberdata para acceder al WebSocket. El código completo para esta entrada de blog, junto con las otras entradas de esta serie está disponible aquí, y para esta entrada nos centraremos en el repositorio txn-mempool. Me he asegurado de que haya paquetes mínimos para instalar, por lo que deberíais ser capaces de poneros en marcha recogiendo datos con sólo la versión 3.7 de Python y el gestor de entornos virtuales que elijáis. Ahora que hemos dejado eso de lado, podemos pasar a la parte divertida.

reacciones

El análisis

Dejé mi Pi de Frambuesa corriendo por un día escuchando el mempool de Bitcoin. Establecí mi umbral para las transacciones pendientes superiores a 100 Bitcoin, o transacciones de un valor aproximado de 1,15 millones de dólares.

reacciones

Vigilancia de las transacciones pendientes (por encima de un determinado umbral) en vivo

Capturé las transacciones de mempool periódicamente desde el 26 de agosto de 2020 a las 8:30 AM PST hasta el 28 a las 8 AM. Trazarlas en orden de ocurrencia nos da esto:

reacciones

Un gráfico de la magnitud de la transacción a lo largo de mi período de recopilación de datos

Podemos ver que observamos básicamente dos niveles de transacciones pendientes. Pequeñas (en el esquema de las cosas) transacciones con un valor inferior a 1.000 Bitcoin (~11 millones de dólares) que ocurren con frecuencia, y una buena cantidad de transacciones pendientes en el rango de 10.000 Bitcoin (~100 millones de dólares) y superiores. Esto puede sorprender a algunos sobre la impactante cantidad de valor que se transfiere constantemente en la red de Bitcoin. La distribución general de transacciones pendientes que registramos tiene este aspecto:

reacciones

cuenta 503 media 1034 std 2613.3 min 100 25% 131 50% 211 75% 438 max 11711

El promedio de transacciones pendientes -excluidas las transacciones inferiores a 100 BTC- fue de alrededor de 1034 BTC, pero la mediana fue inferior, de poco más de 200 BTC, lo que indica que hay algunas transacciones mucho más grandes que sesgan la distribución.

reacciones

Como nota al margen, aunque Tmux mantiene un servidor vivo para que el programa de escucha pueda seguir suscribiéndose a los datos del webcket, estaba siendo tonto y desenchufé mi máquina durante un par de horas cada vez. Mi Kindle comparte el mismo cargador, y también soy un ávido lector. Así es como se ve mi colección de datos en el dominio del tiempo con el tiempo de inactividad de desenchufar mi Pi de Frambuesa:

reacciones

El tiempo de actividad de mi colección de datos

Veremos el efecto de esto más adelante en el análisis, pero por ahora podemos mantener esto en el fondo de nuestras mentes. Dado que nuestro análisis se centra en vigilar las carteras en el intercambio de BitMEX, traduzcamos esto a las transacciones que implican estas direcciones BitMEX.

reacciones

Filtrar las transacciones a/desde/en el intercambio

Al hablar del flujo de dinero con respecto a un intercambio, podemos tener una idea de si la gente está comerciando dentro del intercambio, poniendo dinero en el intercambio para comerciar, o sacando el dinero del intercambio. Poner dinero en un intercambio posiblemente refleja un sentimiento alcista, porque la gente está comprando más Bitcoin para comerciar. Sacar dinero del intercambio, por otro lado, puede reflejar un sentimiento bajista. La gente puede transferir el dinero del intercambio para retirarlo y ponerlo en una cartera fría, transferirlo a otro intercambio, o liquidarlo en USD u otra moneda.

reacciones

Como ya se ha mencionado, utilizamos un filtro de florecimiento para identificar las transacciones pendientes de un intercambio sobre la marcha y observar los flujos antes de que se conviertan en transacciones completadas. Si hay una dirección BitMEX en el campo desde, entonces consideramos que la transacción es desde o fuera de la bolsa. Del mismo modo, si encontramos una dirección BitMEX en el campo a, entonces la transacción está en la bolsa. Si ambos campos contienen una dirección BitMEX, entonces la transacción está dentro de la bolsa.

reacciones

Sólo alrededor del 4% de las transacciones que registramos se produjeron en la bolsa. Aquí ignoramos las transacciones no relacionadas con BitMEX. Desafortunadamente, no pudimos registrar las transacciones que eran sólo de o fuera de la bolsa. Para la actividad que sí registramos, la división es aproximadamente 40/60 de la actividad que va a la bolsa versus la que ocurre dentro de la bolsa.

reacciones

La distribución de las transacciones relacionadas con BitMEX

Ahora que tenemos una imagen de las grandes transacciones en vuelo en BitMEX, vamos a trazar sobre el precio para obtener una imagen de lo que estaba pasando cuando la transacción fue presentada.

reacciones

Trazado de grandes transacciones relacionadas con el cambio de divisas sobre el precio

Utilizamos el punto final histórico de OHLCV de Amberdata para obtener datos de nivel de minuto sobre el precio de cierre de Bitcoin durante este período. Si desea replicar este análisis, tenga en cuenta que puede consultar como máximo 24 horas de datos con esta granularidad cada vez, pero es fácil hacer una ventana de salto para recoger todos los datos que necesite. Combiné las dos fuentes de datos, y grafiqué las grandes transacciones pendientes sobre el precio de Bitcoin, codificando por colores cada transacción sobre si estaba en o dentro del intercambio.

reacciones

Una trama de algunas entradas pendientes en vivo a BitMEX

En esta parte de los datos, la mayoría de las transacciones pendientes iban de direcciones externas al intercambio, así que pudimos capturar algunas entradas en vivo en BitMEX. Así es como se ven las transacciones, ordenadas por valor:

reacciones

Las mayores transacciones pendientes relacionadas con BitMEX

Parece que la mayor de estas transacciones pendientes – por mucho – eran dos justo al principio del período de observación.

reacciones

La mayor actividad dentro del intercambio

La primera transacción pendiente, que en realidad ocurrió en mi segundo minuto de observación, es la mayor transacción pendiente a 3400 btc. Aún más interesante, dos de las transacciones ocurrieron en el mismo minuto, siendo una de ellas la segunda mayor transacción que observamos en el mempool durante el período. Apenas milisegundos después de que se contabilizara una transacción por más de 1000 Bitcoin, otra transacción en el mismo intercambio contabilizada por 150 Bitcoin. He investigado las direcciones de ambas transacciones y no tienen ninguna en común, por lo que no está claro si ambas están relacionadas.

reacciones

Hay otra sutileza que hemos pasado por alto hasta ahora en el análisis. Por ejemplo, la primera transacción de la lista en realidad sólo se produce entre dos direcciones únicas, y una de ellas no es una dirección BitMEX aunque hayamos enumerado la transacción como dentro de ella. Esto se debe a la forma en que BitMEX procesa una transacción. Si una cartera de BitMEX inicia una transferencia para enviar fondos, el remitente enviará todo el saldo de su cuenta como entrada, y recibirá su saldo menos la cantidad que desea enviar y la comisión a cambio.

reacciones

Si revisa las transacciones internas, verá que todas son de esta forma, lo que significa que son simplemente una transferencia de fondos de BitMEX a una cuenta externa. Por lo tanto, no encontramos ninguna transferencia de BitMEX dentro del intercambio, es decir, de una dirección de BitMEX a otra, y sólo transferencias fuera del intercambio.

reacciones

Volviendo a nuestras transacciones en la bolsa, podemos ahora calcular la cantidad que salió de la bolsa como se discutió, o la cantidad transferida a la bolsa. Hice eso con el siguiente guión:

reacciones

Este guión recorre las transacciones etiquetadas dentro y calcula la cantidad que fue transferida a direcciones que no son de BitMEX, y recorre las transacciones etiquetadas en y calcula la cantidad que fue enviada a las direcciones de BitMEX. Utilizamos el punto final único de Amberdata para obtener los datos de la transacción dado el hash de la transacción. Los resultados son los siguientes:

reacciones

Como podemos ver, sólo una transacción se ajusta a nuestra descripción de un gran flujo mayor de 100 btc. Alguien a las 7:00 AM PST del 28 de agosto transfirió 100 btc desde BitMEX. Con esta capa extra de código, podíamos hacer una zona en las transferencias de Bitcoin dentro o fuera de un intercambio tal y como se enviaban a la red.

reacciones

Comprobando si la transacción se realizó

Una vez que veamos que una gran transacción ha sido publicada en el mempool, tal vez queramos comprobar si se realiza o cuando se realiza. Podemos usar el punto final de la transacción de la dirección de la cadena de bloqueo de Amberdata para ver cuando la transacción se extrae en un bloque. Ejecutando este código, muestra que la transacción fue minada en el bloque 645509 al día siguiente, el 27 de agosto.

reacciones

Ahora vamos a comprobar y ver si alguna de las 10 principales transacciones que hemos estado mirando se han confirmado. Simplemente usando el código de arriba y haciendo un bucle en nuestras 10 direcciones principales podemos ver rápidamente si alguna de las transacciones se ha realizado ya.

reacciones

Nota: algunas de estas direcciones son mucho más activas que la única que vimos arriba, por lo que tenemos que aumentar el número de registros para volver a 1000 por página. Les invito a probar esto en el análisis del Cuaderno Jupyter, pero por ahora pueden confiar en mí que de las 19 transacciones relacionadas con el intercambio, todas menos tres se han realizado hasta el momento de escribir este artículo.

reacciones

Número de transacciones completadas: 16 Transacciones totales: 19 Porcentaje completado: 84.2

¿Qué aprendimos?

Si te quedaste conmigo hasta el final, ¡felicidades! Hoy hemos pasado por muchos temas. Aprendimos lo que es un mempool, por qué las carteras de cadenas de bloques pueden ser tan difíciles de encontrar, y dimos los primeros pasos para calcular los flujos de las transacciones de Bitcoin. Desde la recogida de datos, el trazado de los flujos sobre el precio, y la comprobación de las transacciones completadas, la cadena de bloqueo de Amberdata y las API de datos de mercado hicieron que ganar visibilidad en el mempool fuera pan comido.

reacciones

También aprendimos sobre algunas herramientas de desarrollo, como el tmux, la biblioteca de websockets, los filtros de florecimiento, y cómo empezar a escuchar datos de cadenas de bloques en vivo en un Pi de Frambuesa. Lo más importante, aprendimos que podemos descubrir grandes flujos de dinero tal y como son sometidos a una cadena de bloqueo, a menudo hasta 24 horas antes de que sean procesados por la red.

reacciones

Si estás interesado en probar este análisis por ti mismo, puedes ver el repositorio Github para esta entrada de blog aquí. Incluí los datos de este análisis como una muestra sólo para empezar.

reacciones

Foto destacada de Sam Bark en Unsplash

reacciones

Fuentes

Mempool de Bitcoin: Una explicación para principiantes: https://99bitcoins.com/bitcoin/mempool/

Websocket de transacciones pendientes de Amberdata: https://docs.amberdata.io/reference#address-mempool

Punto final de la transacción de la dirección de la cadena de bloqueo de Amberdata: https://docs.amberdata.io/reference#get-address-transactions

Punto final histórico de la OHLCV de Amberdata: https://docs.amberdata.io/reference#get-historical-ohlc

Punto final único de Amberdata: https://docs.amberdata.io/reference#get-transaction

Guía para el movimiento de activos y eventos de cadenas de bloqueo: https://amberdata.io/guides/track-asset-movement-and-blockchain-events

Async IO en Python: https://realpython.com/async-io-python/#async-io-design-patterns

Websockets: https://pypi.org/project/websockets/

¿Por qué cambia constantemente la dirección de la cartera de Bitcoin?: https://www.btcwires.com/round-the-block/why-does-a-bitcoin-wallet-address-change-constantly/

GeeksForGeeks – Bloom Filters: https://www.geeksforgeeks.org/bloom-filters-introduction-and-python-implementation/

Comparte esta historia @ evanaze Evan Azevedo Lee mis historias Soy un generalista y amante de las ciencias

Etiquetas

David B Simpson

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *