Han pasado ya tres meses desde el Bloque 5 donde vimos como utilizar ethereum-etl para hacer un análisis superficial de LaChain. La intro a esta blockchain fue hecha en el Bloque 5, así que invitó a los perdidos a pegarse una vuelta por ahí antes de comenzar por acá.
LaChain se encuentra aún en un proceso de desarrollo buscando que se asienten algunos proyectos y buscando usuarios. Lanzaron hace un tiempo un programa llamado LaAceleradora, el cual es un mentoreo por parte del consorcio de empresas que sponsorean esta red. Recomendado por si desean comenzar a construir su proyecto acá.
Luego de estos 3 meses, hurgando un poco en su Discord, encontré que ya hay 2 DEXs funcionando (ambos forks de Uniswap v2) y un Bridge que parece montado por la gente de Ripio. Pero, ¿cómo les está yendo a estos protocolos?
Problemática
Hagan el siguiente ejercicio conmigo. Por un momento piensen que hacen para las siguientes situaciones:
- Necesitan saber el precio de un token/LP
- Quieren saber el TVL u otra métrica de un proyecto
- Buscan nuevos proyectos
- Necesitan saber el address de algún token
Para la primera respuesta, mi respuesta es variada. Suelo usar Coingecko si deseo ver un precio general, pero si necesito saber un dato exacto de un LP acudo a Dexscreener (me imagino varios degens diciendo pues claro). Para las siguientes dos preguntas, acudo a *se pone de pie* Defillama (sobre el cual escribiré en futuros Bloques) y para el último seguramente a alguna documentación de un DEX, directamente algún Block Explorer o quizás de nuevo Coingecko.
El problema con LaChain es que estamos hablando de una blockchain entera nueva y la carga de los datos suele demorar mucho más que incorporar un proyecto nuevo a alguno de estos sitios en una red ya soportada. Este es el estado actual al momento de escribir este post:
- Coingecko: LaCoin es un token agregado a su listado, pero no tiene precio asociado. Por lo general, Coingecko pide como requisito que el token este asociado al menos a uno de los exchanges asociados (https://www.coingecko.com/en/exchanges). Ninguno de los CEXs (como Ripio o Buenbit) están en este listado y como es un token nuevo tampoco se encuentra en otra blockchain en algún DEX.

Info disponible en Coingecko sobre LAC – No hay precio
- Defillama: Para sorpresa de nadie, Defillama ya tiene asociado LaChain y uno de sus DEX, pero al tomar los precios de Coingecko no tiene forma de pricear ningún token de LaChain. El TVL es nulo actualmente.

Info disponible en Defillama sobre LaChain – TVL en 0
- Dexscreener: Ya han solicitado que se agregue LaChain como nueva blockchain, pero sus requerimientos son bastante ambiguos. En mi opinión, aún no se cumple con tener una “cantidad significante de liquidez y volumen diario”.
- Documentación: Los proyectos son muy nuevos aún y quizás cuesta encontrar documentación ordenada
- Block Explorer: LaChain tiene su explorer (el cual fue actualizado hace poco) y es bastante bueno con excelentes stats: https://explorer.lachain.network/
Entonces, ¿Cómo analizamos métricas de alto nivel en LaChain si los pesos pesados de blockchain data van a tomarse su tiempo agregando la red?
LaData
Bienvenidos a LaData, el nuevo hub de información de LaChain. Hay mil millones de formas de encarar este proyecto y quiero clarificar que este es un blog de datos, con lo que meternos con frameworks de front y back para crear un sitio robusto escapa del scope de este ejercicio. Con lo cual, vamos a hacer algo sencillo, pero robusto y potente logrando nuestro objetivo.
Pueden entrar al sitio ya publicado en:

Home de LaData
Vamos a usar streamlit, que es una librería de Python el cual compila nuestro código como si fuese una suerte de backend y genera un sitio para el usuario sencillo y rápido. Utilizando algunos comandos como write, title, subheader, markdown, entre otros uno puede ir creando un sitio visualmente lindo y muy rápido. Nuevamente, esto no es algo duradero pero para los enfermos de datos como nosotros con 3 líneas de código podes deployear tu análisis en un sitio web. ¿Por qué no use una notebook como por ejemplo hicimos en el Bloque 5? “No hay por qué” diría el meme. Simplemente quise darle una vuelta de complejidad adicional para mostrarles otra herramienta interesante.
Es posible correr localmente la librería utilizando el comando streamlit run script.py y levanta el sitio localmente en el localhost:8501. Streamlit ofrece un servicio Cloud que utilizaremos para deployear nuestro sitio integrándose con un repo Github directamente.
Ok, tenemos la idea, sabemos cómo y dónde deployear. Definamos qué queremos ver.
Métricas
Actualmente hay dos DEX deployeados en LaChain: MateSwap y SambaSwap. Ambos son forks de Uniswap v2 que es un dato para nada trivial en nuestro análisis. Podemos sacar varias métricas interesantes de un DEX, pero para este primer ejercicio vamos únicamente a enfocarnos en el precio de LPs y volumen.
Lo importante para destacar es que hay dos contratos super importantes en estos forks:
- Router: es el contrato que tiene mapeado todos los LPs y que se utilizará para realizar exchanges entre tokens
- Factory: Crea y administra nuevos LPs
Para procesar estas métricas, debemos empezar a procesar Eventos generados por estos contratos. Una forma de hacerlo sería conectarnos a un nodo de LaChain, obtener bloques, transacciones y eventos, filtraros y procesarlos como hicimos en el Bloque 5. Pero para evitarnos todo ese manejo, vamos a simplificar el ejercicio y utilizar la API del Explorer de LaChain. Esta API tiene diferentes endpoints y uno de ellos nos devuelve todos los Eventos generados por un smart contract especifico, así que este será utilizado (así como otros relacionados a data de tokens). Más info de la API acá: https://explorer.lachain.network/api-docs
El smart contract de Factory, cuando genera un nuevo LP, genera un evento llamado PairCreated con los siguientes parámetros:
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
En un proyecto más complejo, deberíamos constantemente estar escuchando estos eventos creados para poder mapear en nuestro proyecto, pero como únicamente hay pocos LPs creados y pocos que tengan movimiento, simplemente los mapié a mano y los pueden ver en la sección de constantes del script. Lo mismo ocurre para los tokens.
Ya tenemos los tokens y los LPs. ¿Cómo medimos ahora el precio en el tiempo y el volumen operado?
Los LPs de Uniswap emiten dos Eventos que nos servirán para medir:
- Sync: Se emite luego de un cambio de liquidez dentro del LP debido a un Swap o un evento de agregar/quitar liquidez. Nos devuelva la cantidad de Token0 y Token1 que quedaron.
- Swap: tiene la información de la cantidad de Token0 y Token1 que salieron y entraron para un Swap particular. Dependiendo como se defina en los parámetros indicará si estamos hablando de una venta o una compra.
Para más info pueden chequear la página de Uniswap: https://docs.uniswap.org/contracts/v2/reference/smart-contracts/pair
Uno de los grandes problemas a sortear, fue que la mayoría de los contratos no están verificados en el explorer de LaChain. Al estar utilizando la API del Block Explorer, no podemos usar un ABI de un LP de Uniswap, pero si hubiese sido una buena solución en el caso de que estuviéramos interactuando onchain directo. Hubo que hacer algunos malabares con hexadecimales decodificando Eventos. Esto lo van a ver muy claro en las funciones process_onchain_logs (cuando se hace referencia a topics específicos) y desmechando hexadecimales en hex_to_decimals.
El resultado de este procesamiento son dos listados con todos los eventos Sync y Swap para cada LP mapeado. La API nos devuelve sólo el número de bloque, así que por cada evento hubo que utilizar otro endpoint que nos devuelve info del bloque y tomamos de allí su timestamp.
Para obtener datos de precio, debemos procesar los eventos Sync ya que en base a como está compuesta la liquidez el LP nos determinara cuanto vale cada token. Acá se aplican las siguientes lógicas:
- Si uno de los tokens del LP es UXD, vamos a hacer una simplificación y diremos que este token vale 1 siempre. Lógicamente esto no es siempre cierto, pero para la simplificación de este ejercicio no servirá. Luego, el cálculo del precio es sencillo: dividimos la cantidad de UXD por la cantidad de tokens del otro tipo y nos da el precio de forma directa.
- Si uno de los tokens del LP es WLAC, el wrapped del token LAC, iremos a buscar primero su precio a una fuente de información confiable. Para este caso utilizaremos la API de precios de Ripio como hicimos en el bloque 6 con MAGAIBA. Luego, dividimos cantidad de WLAC / cantidad de token restante y multiplicamos por el precio de WLAC más cercano en Ripio para ese timestamp.
- Si ninguno de los tokens es WLAC o UXD, primero buscaremos un LP donde esté asociado el Token1 con WLAC o UXD, priceamos ese token utilizando la primera o segunda lógica y reutilizamos ese precio haciendo: cantidad de Token1/ cantidad de Token0 * precio Token1.
- En todos los casos las cantidades se normalizan en base a la cantidad de decimales que informan cada uno de los tokens
Tómense un tiempo para analizar las lógicas recién expuestas porque son el corazón del Bloque de hoy. Aconsejo hacer algunos ejercicios de ejemplo o repasar el siguiente video de como funcionan los LPs: https://www.youtube.com/watch?v=CcIZFNKdefc&t=234s
El volumen será calculado procesando el evento Swap. Cada transacción de intercambio de tokens emitirá un Swap y luego un Sync informando las cantidades finales. El evento Swap tiene 4 parámetros importantes: amount0In, amount1In, amount0Out y amount1Out. Tomemos de ejemplo un LP de WLAC-UXD. Si tenemos data en amount0In y amount1Out estamos hablando de una venta ya que se incorporó WLAC al LP y salió UXD. Si tenemos data en amount1In y amount0Out estamos hablando de una compra ya que salió WLAC y se incorporó UXD. De esta forma determinamos el side de la transacción. Al ya tener el precio calculado, sólo debemos multiplicarlo por la cantidad indicada y dividirlo por la cantidad de tokens para obtener el volumen de esa transacción.
Finalmente, graficámos todo utilizando una librería interactiva llamada plotly, la cual nos permitirá hacer zoom in o zoom out y mirar cada día por separado de forma interactiva. Para el gráfico verán que lo dividí por día, por lo que el volumen es una sumatoria de todos los volúmenes de ese día y el precio es un promedio de los precios de ese día. Dejo la pregunta abierta para el público si debería ser un promedio ponderado, un promedio simple o simplemente tomar el último precio disponible para ese día.

Precio y volumen del token WLAC en UXD para el exchange MateSwap
Para simplificar la búsqueda, generé un listbox donde pueden buscar por token y la query les devolverá todos los LPs asociados que están mapeados en la app.
Listado de addresses
Me pareció interesante agregar un listado de Tokens, DEXs y Bridges con sus respectivos addresses y urls. Siento que la documentación de cada proyecto está verde y es difícil a veces encontrar la data necesaria. Por ejemplo, seguramente vayan a ver varios USDC o USDT creados. Los listados en la sección de tokens son los que el equipo de LaChain señalaron como los creados por ellos.
En los tokens encontrarán, además de WLAC y las stablecoins, el token de MATE que es el token del exchange MateSwap y XMATE que es el token del MATE stackeado en su DEX.

Listado de tokens de LaChain con sus addresses y links
Funcionamiento
Si aún no se dieron cuenta, el sitio tiene un gran problema: cada vez que alguien ingresa a la sección de precios y volúmenes estos se calculan y son mostrados. Lo ideal sería poder guardar estos precios en alguna base de datos para luego consultarlos directamente de allí y evitar el manoseo de Eventos. Pero al ser un ejercicio simple, decidí simplificarlo lo más posible.
Ténganle paciencia a esa sección ya que puede tardar uno o dos minutos en cargar. Es posible que si el volumen aumenta considerablemente el sitio se torne inusable y haya que migrar a algo más complejo.
Deploy
El sitio se encuentra deployeado en Streamlit Cloud el cual es gratuito, pero tiene un limite de espacio para hacer el deploy y algunos problemas adicionales si uno quiere hacer algo más complejo. Un claro ejemplo de esto es si queremos agregarle algún script de javascript como por ejemplo Google Analytics. Esto no es posible si está deployeado en Streamlit Cloud. Por lo que tuve que generar un sitio en Github pages, agregarle el código de Google Analytics, y luego hacer un wrapper que apunte a nuestra app de streamlit. Algunas chanchadas funcionales que me tomé la libertad de hacer para este ejercicio.
Todos los Bloques suelen tener en general una carpeta dentro del repo de Bloque X, pero para hacer el deploy en Streamlit Cloud se necesitaba linkear directamente con un repo de Github por lo que este Bloque tendrá su repo separado.
Conclusión
Aún no hay mucho movimiento en lo que respecta a los DEXs. Se ven movimientos, pero muy pocos e inclusive uno puede ver alguna disparidad de precios que podrían ser potencialmente interesantes para arbitrar si lo permite la liquidez.

Precio y Volumen del token MATE
Es muy interesante ver cómo evolucionan estos proyectos en el tiempo y para ellos se creó esta herramienta. Les recuerdo que el puntapié inicial fue la necesidad de ver datos que aún no es posible en otras plataformas mainstream. Hay muchas métricas más por agregar y cuestiones de performance por mejorar.
Dejo una pregunta abierta: ¿Esperamos que los grandes jugadores de la data en blockchain empiecen a agregar datos de LaChain? ¿O llevamos LaData al siguiente nivel? ¿Qué dicen?

Deja un comentario