AMA de MEV en cryptos

Soltrac

Bueno, me han pedido por el fedachat que explique un poco como hice mi dinero en las cryptos desde el punto de vista de programador, así que allá va.

Para quien no sepa que es el MEV, más o menos lo teneis explicado aquí:

https://ethereum.org/en/developers/docs/mev/

De lo que voy a hablar aquí, voy a presuponer que el que lo lea entiende el mundo crypto.

Qué conocimientos tenía antes de empezar en esto? No sabía ni escribir en solidity, que es el lenguaje de programación de los contratos inteligentes (smart contracts), pero bueno, tenía unas bases sólidas de programación, así que no fue muy complicado.

Empecé primero por lo más básico, el arbitraje y empecé en la red de BSC, ya que la red de ETH tiene un coste alto de deployment de contratos inteligentes y no sabía exactamente si esto iba a ser rentable.

Los primeros días, empecé a investigar como funcionaba Pancakeswap (un fork de Uniswap). Es una tónica muy normal que el código de los smart contracts sea público, ya que la gente los tiene que utilizar para mover sus tokens y nadie puede fiarse de hacerlo bajo algo que no tiene el código público, pues no sabes si puedes acabar llamando a una función de un smart contract que haga que el dueño del smart contract se quede con tus tokens.

En pancakeswap, todo iba por pares, por ejemplo, me lo invento, el par CAKE-BNB y el par CAKE-BUSD. Si movías dinero en CAKE-BNB, se creaba una oportunidad de arbitrage sobre el par CAKE-BUSD y el par BNB-BUSD. Todo esto se podía ampliar a muchos pares, a muchos saltos, por lo que lo primero que hice fue conectarme a un nodo público de la red BSC, empecé a preguntarle por el estado de los pares y mediante una búsqueda usando un algoritmo DFS, intentar buscar el camino más rentable para hacer el arbitrage. Creé un smart contract al que le pasaba el camino que mi algoritmo había localizado y que hiciera el trade. Si salía positivo, me lo quedaba, si salía negativo, cancelaba el trade (y perdía las fees). El bot lo programé en C# usando la librería NEthereum, al fin y al cabo, es el lenguaje con el que estaba trabajando en ese momento.

Mi primera prueba resultó ser un fracaso, era lenta, había bots mucho más rápidos que el mío. Me dije, voy a crearme un nodo de BSC en casa, para no tener límites de llamadas. La cosa fue mejor, ganaba algunos trades, pero al final no le veía mucho sentido al tema y decidí apagarlo, pues el gasto de fees y el gasto propio del nodo (un nodo de BSC necesita un disco NVME y espacio) lo veía inviable.

Seguí investigando y encontré una posibilidad de MEV en otra página, que se llamaba alpha homora. Básicamente pagaban un reward al usuario que llamara a su smart contract por unos motivos que no vienen al caso ahora. Dicho y hecho, me creé un bot que calculara cuando era rentable llamar al smart contract y bum, empezó a funcionar. Muy poco, pero era el único que estaba ahí. No tardó mucho en aparecer otro bot y fue entonces cuando descubrí el front running.

El front running consiste en estudiar la mempool de un nodo y si aparece una transacción que te interesa enviar antes que la otra, envías la tuya con algo más de gas que la anterior. Empecé a front runnear al otro bot y no tardó ni 2 días en darse cuenta que lo estaba haciendo, cuando él empezó a front runnearme. Al final, entramos en una guerra tan absurda de front runneo que dejó de ser rentable y me cansé, me cansé antes que él.

Me había picado el tema, así que seguí informándome sobre la mempool, sobre MEV y leí este artículo que fue el que me hizo interesarme por todo esto:

https://www.paradigm.xyz/2020/08/ethereum-is-a-dark-forest

Ethereum llevaba trabajando mucho tiempo, no me veía capaz de entrar en el MEV allí (todavía), pero BSC acababa de nacer como quien dice y sin tener ni puta idea, pensé que quizás era una red demasiado joven para que la gente hubiera caído que aquí se podía hacer algo.

Y fue entonces cuando conocí la plataforma de Venus en BSC. Una plataforma de préstamos, que permite que los usuario liquiden y por esas liquidaciones se lleven un dinero. Investigué de nuevo el código, resultó que era un fork de Compound de ETH, el cual tenía mucha información de como se hacían liquidaciones (manuales). Básicamente pagas lo que el usuario debe a la plataforma y te da el token de colateral. Supongamos que el usuario había puesto como colateral 1 ETH y había pedido prestado 500 USDT, si el precio del ETH caía por debajo de un umbral, lo prestado superaba a lo colaterizado, por lo que yo pagaba 500 USDT y a lo mejor la plataforma me daba 0,4 ETH, que en valor era más que 500 USDT. Tenía el problema que iba a necesitar pasta, así que fue cuando aprendí lo que era un flashloan.

Un flashloan básicamente es que en la misma transacción, Pancakeswap te deja pedir un token y devolverlo pagando % muy bajo de interés, mucho más bajo que el interés de repagar yo el préstamo de un usuario. Mi siguiente problema era descubrir que usuarios estaban por debajo del límite de préstamos, fue entonces cuando descubrí este github:

https://github.com/haydenshively/Compound-Liquidation-Bot

Que me abría bastante el camino para no ir a ciegas. Lo primero que necesitaba era conocer los usuarios y su estado de colaterización, lo cual, venus no me proporcionaba, pero investigando el código de compound en github, me di cuenta que cada llamada a su smart contract para pedir prestado o poner colaterizado creaba un evento.

Mediante la llamada eth_getLogs y usando la librería de NEthereum, que por entonces me seguía acompañando, ya que seguía programando en C#, creé un indexador para que en una pequeña base de datos me pusiera las cuentas que existían en la plataforma de Venus. Simplemente tenía que consultarlas cada bloque y si estaban para ser liquidadas, llamaba a mi función del smart contract que hacía un flashloan, liquidaba la posición y devolvía el flashloan. Dicho y hecho, tras varias pruebas infructuosas (perdiendo dinero porque crear un smart contract cuesta gas, lo cual es pasta), conseguí crear una primera versión que funcionaba. A las pocas horas, liquidé una operación y gané dinero, más de lo que me pensaba, 2 cifras. Me di cuenta que existían otros bots que hacían lo mismo, así que empecé a estudiarlos y a frontrunnearlos (eran bots demasiado simples, no se daban cuenta de que los frontrunneaba) y empecé a hacer dinero, liquidaciones de 2, 3 cifras.

No me quedé parado, dije, si existe una plataforma en BSC como Venus, deben existir otras iguales. Y me puse a leer y encontré otras, más pequeñas, pero que los bots ni conocían. Y empecé a pensar, y si me voy de BSC y entro en redes más pequeñas? Y me fui a HECO, a Fantom, a Polygon, a AVAX, etc.. En HECO fue cuando me di cuenta que iba en serio, frontrunee a un usuario normal sin bot en una operación de liquidación de 5 cifras. Flipé. Empecé a liquidar en todas las redes posibles, monté varios ordenadores en casa para montar nodos de las redes, monté ordenadores en la nube haciendo lo mismo y tenía un ejército de bots liquidando sin parar en todas los sitios posibles. Ya pasaba de buscar arbitrajes, que son las operaciones que más bots tienen, decidí buscar los códigos de cualquier sitio que fomentara el liquidar y liquidaba todo lo posible. He llegado a seguir hasta 100 smart contracts a la vez. Un bot indexando a los usuario y otro liquidando.

No voy a mentir, hice mucho dinero en esta época, lo suficiente para poder vivir el resto de mi vida bien. Pero al final, como todo, apareció la competencia. Peleas de front running y me di cuenta que había bots que si los frontrunneaba no funcionaba, no entendía que pasaba....

Y lo comprendí, los bots ponían sus transacciones justo en el momento en el que el precio cambiaba (para explicar esto tendríamos que hablar de oracles y demás, pero es un coñazo) con el mismo gas que el cambio de precio y si yo ponía más gas, enviaba la transacción antes del cambio de precio y todo se jodía. Tenía que hacer lo mismo y ese es el momento actual.

Empecé a necesitar velocidad, poner la transacción justo cuando el oracle actualiza un precio se ha convertido en la guerra actual. Esto ha hecho que durante el último año haya tenido que hacer muchos cambios. Hay sitios, donde no consigo ganar casi nunca ya, otros donde a veces. He cambiado de lenguaje de programación ya que C# se me hacía lento y he pasado a GO, próximamente pasaré a rust o c++ para probar. He puesto varios nodos estratégicamente colocados por el mundo, ya que la propagación de una transacción en la mempool de un nodo a otro se hace por p2p y mi nodo en casa en España ya no era suficiente.

He modificado el código de los nodos para hacerlos lo más eficientes posibles, los nodos suelen estar escritos en go, por ejemplo el oficial de BSC es este:

https://github.com/bnb-chain/bsc y si tengo varios, cada uno que necesita mínimo 1 TB de NVME SSD y 64 GB de RAM, si tengo que tener varios servidores por el mundo, pues se me hacía muy caro.

Los he reescrito para adaptarlos a mis necesidades de velocidad y aún así, hay redes como la de avalanche en las que no soy capaz de competir contra un bot que hace cada año millones de dólares o en BSC, donde a duras penas puedo hacer algo.

Actualmente sigo por diversión, por la emoción y por mejorar como optimización de todo, red, código, ciclos de computación, gestión de memoria, etc. pero si hoy hubiera empezado, no habría seguido. Me ha ayudado a aprender nuevos lenguajes, a optimizar el código al máximo, a buscar cuellos de botella, y toda esa mierda.

Ah, y por último, todo esto está democratizado en la red de Ethereum. Allí, antes de generar un bloque, lo ordenan según pidan los botters de MEV y estos pagan una comisión al minero (ahora validador). El que más comisión pague, se inserta su transacción. Creo que tarde o temprano, redes como BSC acabarán siendo así.

Cualquier duda, me la podeis preguntar sin problema.

22
Nedaim

Y ya esta? Así sin mas? Y la gente se complica con el dropshipping lol.

Es coña, buena currada, no me he enterado de mucho pero más tarde intentare releerlo y complementar las cosas que no pillo del todo.

PiPePiTo

Mis dies, tuve así como un año corriendo un nodo de bsc y me cago en dios qué dolor de huevos el que sea esa mierda estable y el consumo absurdo de espacio.

CatPilo

Qué pasada! Muchísimas gracias por tomarte el tiempo de escribir tu experiencia y compartirla. La parte final de reimplementar los nodos en go me ha hecho explotar la cabeza, menudo currazo tiene que ser.

La gran pregunta que me surge es si vale la pena ponerse a explorar nuevas oportunidades de MEV, sabiendo hasta qué punto estamos expuestos a frontrunners. Has comentado que antes de empezar con las liquidaciones detectabas oportunidades de arbitraje dentro de un (o varios) DEXs, imagino que usando Bellman-Ford. Una vez surgió la competencia para las liquidaciones, ¿no te planteaste volver a detectar oportunidades de arbitraje? Al final hay varios DEXs, muchos de ellos basados en el mismo código (Uniswap), además de otros DEXs que manejan derivados, de donde también podrían surgir oportunidades.

El problema, entiendo, es que te arriesgas a darle muchas vueltas pensando en una nueva oportunidad de arbitraje cuando, poco después de empezar a explotarla, pueden venir los frontrunners, copiártela y arruinarte la fiesta, ¿no?

1 respuesta
Soltrac

#4 Buenas!

En el tema de MEV tenemos que diferenciar a Ethereum de otras redes ¿Por qué? En Ethereum si no todos, casi todos los bloques son generados por productores de bloques, a los que los MEV-Searchers le envían sus bundles de transacciones. En Ethereum en este caso no existe frontrunning, porque los productores de bloques no publican las transacciones en la mempool, se las mandan directamente a los validadores.

Un bundle podría ser un sandwich (pepito compra en Uniswap con un slippage alto, lo q hace que si compro antes que él y vendo después de él, pueda generarme un ingreso interesante) o un bundle podría ser que el oracle envíe un precio y yo envíe la liquidación después. Yo por ese bundle pago al validador X ETH (generalmente una parte de mis beneficios). Los productores de bloque van a ver mi bundle y varios bundles iguales que el mío y van a escoger el que más beneficio les reporte.

Una liquidación es muy simple, es un cambio dep recio de un oracle y la liquidación, pero el arbitrage incluído entre varios DEX y a varios niveles....a ver, en Ethereum cada bloque son 12 segundos. Eso significa que tienes 12 segundos para buscar el arbitrage que más beneficio te de, hacer un bundle y enviarlo. Tienes tiempo "de sobra" y al final si el productor no escoge tu bundle por lo que sea, no pierdes nada.

Pero en las demás redes, ya depende bastante. En BSC por ejemplo, no existe esto. Tienes 3 segundos por bloque, y las transacciones se ordenan por orden de llegada, es decir, si yo leo en la mempool una transacción que va a crearme un arbitrage, el que antes se la mande al validador gana, no hay posibilidad de frontrunning por lo que expliqué en #1 de enviar la transacción a la vez de la víctima.

Fantom tiene un bloque cada segundo y por ejemplo Arbitrum tiene un bloque cada menos de un segundo. La estrategia cambia bastante.

Mi consejo es o intentarlo en Ethereum, por el tema de ser "mas democrático" o en una red muy rara y muy nueva. Intentarlo en BSC y demás es muy complicado hoy en día. El problema de Ethereum es que crear un smart contract es un dinero.

1 1 respuesta
Calzeta

El mundo crypto me repele, pero es muy interesante el post. ¡Enhorabuena por el éxito!

CatPilo

#5 muy interesante, esto ha evolucionado un montón desde la última vez que lo estuve investigando. Entiendo que el modelo que comentas de MEV-searchers y productores de bloques viene de la iniciativa de Flashbots, y de que todo viene un poco a partir del árticulo que comentas en #1 "Ethereum is a Dark Forest".

Tiene buena pinta en cuanto a que da pie a intentar buscar oportunidades de MEV sin miedo a ser frontrunneado, la única pega es lo que comentas, los costes de la red. Ya en redes con tiempos de bloque más reducidos depende de más factores: lo bien optimizada que esté la búsqueda de MEV, si depende o no del orden entre transacciones, y de si te pueden frontrunnear.

Le tendré que echar un vistazo a todo esto, pero tengo la sensación de que siendo creativo quizás se puedan encontrar oportunidades!

1 respuesta
MTX_Anubis

Pues vaya currada y super interesante.

Has pensado en montarte algo con socios? No del tema crypto pero sí en tus próximas andaduras

1 respuesta
Soltrac

#7 Exacto, viene de flashbots, simplemente que ahora no solo está flashbots, hay muchos más. Es más, los MEV-Searchers envían sus bundles generalmente a varios productores, no solo a flashbots.

#8 La verdad es que siempre he trabajado solo. Me cuesta confiar en la gente para temas de trabajo y las pocas veces q lo he hecho me han decepcionado. Lo que me ha pasado es que me he encontrado con programadores mejor que yo, que no es tan difícil, pero después no me han aportado nada.

Recuerdo que estaba colaborando con un chico alemán cuando estaba desarrollando un script para el LOL y al final me di cuenta que solo me hacía preguntas para él mejorar su bot y no me aportaba nada, aún siendo mejor reverser que yo. Al final, lo que hice es decompilar un cheat de LOL semipúblico y sacar los offsets de allí, en vez de pelearme con código de LOL que no conocía tan bien por entonces.

Yo se mis limitaciones, seguramente nunca pasaría una entrevista en una empresa grande para trabajar, pero todo el mundo que me ha sorprendido en los ámbitos que yo me he movido, han sido o grupos muy pequeños o gente que trabajaba sola.

3 1 respuesta
JuAn4k4

#9 Es que ese tipo de colaboración no es colaboración, si cada uno tiene su bot es competencia vaya. Lo suyo sería que hicierais ambos el mismo bot. O si algo va lento y tu no sabes cómo mejorarlo a partir de cierto punto el otro le da un empujón, es decir cada uno hace lo que mejor sabe hacer. O en plan mírate tú cómo hacer esto y yo tiro por aquí a ver que da mejor resultado.

1 respuesta
Soltrac

#10 Y quien te dice que el otro no arranque sus propios bots y no comparta beneficios? Es q es muy complicado.

1 respuesta
JuAn4k4

#11 Ya te meterías en contratos y temas legales, así que si, es un marrón.

MTX_Anubis

Yo opino más o menos como juanaka, claro el caso es encontrar a alguien de fiar xD

De todas formas iba más enfocado a cosa que no fueran bots, negocios más tradicionales, pero claro si te dedicas a algo tan individualista (que no lo digo por ti si no por lo que dices la esfera de los bots tiene pinta de serlo) y las pocas experiencias han sido malas pues es normal que no te lo vuelvas a plantear xD.

23 días después
bLaKnI

Me parece increíble como siendo profesional de las tecnologías después de tantos años y considerarme "al día", esto sigue pareciéndome surrealista...
Interesantisima lectura.

Puedes aportar números? Ganancias vs. Gastos? Aprox. si no quieres entrar en detalle...

Y aunque como todo, ¿porque hay un momento en el que si se puede "entrar" y te permite generar beneficios, y ahora ya no? Es como todo, lo se. Pero que te lleva personalmente a usar tu vida en algo en un momento dado intuyendo que puede ser interesante dedicarse a ello?

A pesar de que lo he seguido con bastante detenimiento a lo largo de estos años, jamás ni se me ha antojado ni me ha apetecido sumergirme en estas aguas. Y ahora al leerte, pienso "joder...".

1 respuesta
Soltrac

#14 las ganancias no las quiero decir, digamos que me sirven para poder retirarme.

Lo del momento es por lo que expliqué, básicamente el nivel de competencia que hay ahora no lo había hace varios años.

Al final la competencia por una oportunidad de MEV es una pelea de bots, antes directamente no existía competencia.

Sobre la pregunta de q me llevó, es que básicamente siempre me he movido en buscar nichos. He hecho cheats hasta que los anticheats se han vuelto mejores que yo y la competencia ha crecido exponencialmente, he creado bots de poker hasta que las casas de apuestas se pusieron serías en detectar gente que jugaba 24/7.

La cosa es que llevo en criptomonedas mucho tiempo y entonces era un mundo que conocía más o menos, por eso el salto fue fácil de encontrar, aunque bueno, si lo hubiera hecho un año antes pues hoy básicamente sería multimillonario

1 respuesta
r0n1n-gklan

#15 Primero de todo como estan los maquinas? xD No en serio ole tu poia, felicidades por poder retirarte. Una duda, los profits los sacabas en ETH la mayoria imagino. Una vez conseguias beneficios, has diversificado en otras crypto? Sigues manteniendo los profits en crypto por tema impuestos o has sacado a FIAT, si saliste a FIAT, has invertido o lo mantienes en banco? Pura curiosidad por pillar ideas si alguna vez me tocara a mi el gordo tb xD

Salud!

1 respuesta
Soltrac

#16 tengo un poco de todo. Tengo dinero en criptos, tengo dinero en el banco y he pagado varias cosas, unas reformas en la casa, la hipoteca y demás.

Tb he tenido q sacar dinero para el palazo de hacienda.

Sobre si lo he invertido fuera de criptos aún no. Pensé en comprar para alquilar pero no es un campo que domine y no quiero cagarla.

1 comentario moderado

Usuarios habituales