WEB3DEV Español

Cover image for Asegurando sus Movimientos: Superando a los Front-Runners en su Propio Juego
Paulo Gio
Paulo Gio

Posted on

Asegurando sus Movimientos: Superando a los Front-Runners en su Propio Juego

Ya sea que te identifiques como desarrollador o usuario dentro del mundo web3, es probable que hayas cruzado caminos con el concepto de "front-running" o tal vez incluso haya afectado sus experiencias. En este artículo, compartiré valiosas perspectivas para protegerte contra los front-runners.

https://miro.medium.com/v2/resize:fit:1100/0*SsX6m1xdDZQ9FTKI

Foto por GuerrillaBuzz no Unsplash

¿Qué es el Front-running?

El front-running es un poco como si alguien escuchara a escondidas sus planes y luego tratara de adelantarte. Imagina que estás en una fila en una tienda esperando comprar un juguete de edición limitada que está a punto de salir a la venta. La persona delante de ti escucha que quieres ese juguete y rápidamente corre a comprarlo antes de que su tengas la oportunidad. Están tratando de conseguirlo antes de que su puedas, aunque llegaste primero.

En el mundo del dinero digital y las criptomonedas, el front-running es una idea similar. Digamos que quieres comprar algunas monedas digitales a un cierto precio. Antes de que su compra se complete, alguien con herramientas más avanzadas o computadoras más rápidas nota su plan. Compran rápidamente esas monedas al precio más bajo y luego te las venden inmediatamente a un precio ligeramente más alto. Están obteniendo lucro al adelantarse a su transacción.

El front-running puede ocurrir en diversas situaciones en línea donde hay un retraso entre el momento en que decides hacer algo y cuando realmente se hace. Es como si alguien se colara delante de ti en la fila para aprovechar sus planes y obtener un beneficio para ellos mismos.

En Términos más Técnicos...

El front-running implica aprovechar el proceso de ejecución de órdenes al tomar ventaja de la secuencia predecible de transacciones procesadas en un bloque. Aquí es como funciona:

  • Visibilidad de la Transacción: Cuando una transacción se difunde a la red, se vuelve visible para todos los participantes. Esto incluye a los mineros, que son responsables de confirmar las transacciones y agregarlas a la blockchain.
  • Subasta de Precio de Gas: Los usuarios adjuntan un precio de gas a sus transacciones como incentivo para que los mineros prioricen sus transacciones. Las transacciones con precios de gas más altos tienen más probabilidades de ser incluidas en el próximo bloque.
  • Ataque de Front-running: Un front-runner observa las transacciones pendientes e identifica oportunidades rentables. Por ejemplo, si alguien realiza un pedido grande para comprar un token específico a un cierto precio, el front-runner envía rápidamente una transacción para comprar el mismo token a un precio ligeramente más alto antes de que la transacción original sea confirmada.
  • Beneficio de Arbitraje: La transacción del front-runner se mina antes que la transacción original debido al precio de gas más alto. Una vez que se confirma la transacción del front-runner, pueden vender inmediatamente los tokens adquiridos al usuario original a un precio ligeramente más alto, obteniendo un lucro en el proceso.
  • Preocupaciones de Privacidad y Seguridad: El front-running no solo conduce a pérdidas financieras para el usuario que es objeto del front-running, sino que también plantea preocupaciones sobre la privacidad, ya que el atacante obtiene información sobre las intenciones y transacciones de los usuarios.

El front-running puede ser facilitado mediante bots y scripts automáticos que monitorean continuamente el pool de transacciones en busca de oportunidades rentables. Esta práctica aprovecha la naturaleza abierta y transparente de las transacciones de blockchain, así como el retraso inherente en la confirmación de transacciones.

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*OxFIFyrZwhxlLZdxnPzQDQ.jpeg

Para ver las transacciones en el mempool, puedes navegar a: https://txstreet.com/

Alternativamente, puedes usar el siguiente script proporcionado para rastrear las transacciones pendientes asociadas con un contrato específico.

require("dotenv").config()

var Web3 = require('web3');
var fs = require('fs')

var options = {
    timeout: 60000,
    clientConfig: {
        // keepalive: true,
        // keepaliveInterval: 6000,
        maxReceivedFrameSize: 100000000,
        maxReceivedMessageSize: 100000000,
    },
    reconnect: {
    auto: true,
    delay: 5000,
    maxAttempts: 15,
    onTimeout: false,
    },
};

// Puedes utilizar cualquier proveedor de websocket como infura, alchemy, etc.
// Se verá así: 'wss://mainnet.infura.io/ws/v3/<API_KEY>'
var web3 = new Web3(new Web3.providers.WebsocketProvider(process.env.WEBSOCKET_PROVIDER, options));


// Obtener transacciones pendientes de la red de ethereum (mempool)
const getPendingTransactions = web3.eth.subscribe("pendingTransactions", (err, res) => {
    if (err) console.error(err);
})

var main = function() {
    getPendingTransactions.on("data", (txHash) => {
        setTimeout(async () => {
            try {
                let tx = await web3.eth.getTransaction(txHash);
                if (tx != null)

                // Obtener la transacción de una dirección específica y escribirla en un archivo
                if (tx.to == 0xdAC17F958D2ee523a2206206994597C13D831ec7)

                var writeTxFromTether = async function(data) {
                    fs.appendFile("./Transactions.txt", JSON.stringify(data) + '\n', (err) => {
                        if (err) console.log(err);
                        console.log("Actualizado con éxito");
                    })
                }
                console.log({tx});
            } catch (err) {
                console.error(err);
            }
        })
    })
}

main()

// Obtener detalles de la transacción a partir del recibo de la transacción
async function getReceipt(hash) {
    var receipt = web3.eth.getTransactionReceipt(hash)
    console.log({rec:await receipt});
}

// getReceipt("0xdb4dd756220ad7677e2238d6cec303d19e93de1671cdd1828a94458a5235b1a6")
// .then(() => process.exit(0))
// .catch((error) => {
//     console.error(error);
//     process.exit(1)
// })
Enter fullscreen mode Exit fullscreen mode

Estrategias para prevenir el front-running

Ahora, hay maneras de evitar que este tipo de pérdida ocurra. Podemos tomar medidas para asegurarnos de que otros no se aprovechen de nuestras transacciones y nos perjudiquen.

Conciencia sobre el precio del gas

Los front runners se alegran de ver transacciones lentas porque les da más tiempo para idear un pedido para montarse en su operación y obtener beneficios. Pagar menos por el gas hace que sus transacciones se acumulen durante más tiempo, dando a los front runners más tiempo para formular su estrategia y perjudicar sus intereses.

Pagar de más por el gas motiva a los mineros a validar su transacción más rápido, reduciendo sus probabilidades de ser el objetivo de un mal actor. Con este propósito, podrías configurar el precio del gas más alto que el promedio o simplemente usar la opción de gas rápido en su cartera.

Utiliza pools de liquidez grandes

A los front runners les encantan los pools de baja liquidez, ya que hay menos probabilidad de competencia y de que su transacción sea interrumpida por un gran pedido que altere inesperadamente la ponderación del pool. Ejecutar sus operaciones en pools de liquidez grandes hace que sea menos probable que te afecte el front-running.

Mantener el deslizamiento máximo bajo

En la mayoría de las exchanges descentralizadas, puedes configurar la tolerancia al deslizamiento (desviación máxima del rendimiento esperado). Un ejemplo te ayudará a entender mejor el escenario.

Supongamos que haces un pedido en una DEX y esperas un retorno de 500 Tether por ello. Si estableces su deslizamiento al 1% de su pedido, entonces no recibirás menos de 495 USDT. Sin embargo, si la tolerancia al deslizamiento es mayor, habrá más desviación.

Por lo tanto, trata de mantener el deslizamiento máximo bajo, alrededor del 0.5%-2%, para repeler a los front runners. Si vas a hacer un pedido grande, mantén su deslizamiento en el nivel más bajo. A los front runners les gustaría que mantuvieras el deslizamiento alto, así que mejor hacer justamente lo contrario.

Usar soluciones L2

Las soluciones de escalamiento de capa 2 (layer 2, o L2), como los Rollups Optimistas y Rollups de Conocimiento Cero (zk-Rollups), pueden reducir significativamente el riesgo de front-running mientras ofrecen transacciones más rápidas y económicas.

Con estas sidechains, la ordenación se realiza fuera de la cadena, mientras que la liquidación se hace en la cadena principal. Como estos dos pasos se llevan a cabo en diferentes plataformas, esto no solo tiene beneficios en términos de mayor capacidad de procesamiento, sino que también disuade a los mineros o usuarios regulares de obtener la información necesaria para explotar la vulnerabilidad del front-running.

Design de Contrato Inteligente

Los desarrolladores pueden emplear diversas técnicas dentro del design de contratos inteligentes para mitigar el impacto del front-running. Estas incluyen el uso de esquemas de compromiso-revelación, subastas secretas y otros mecanismos que dificultan que los front-runners predigan los resultados.

Al mantenerse informados, emplear tácticas inteligentes y utilizar las herramientas disponibles, puedes reducir el riesgo de ser víctima del front-running y ayudar a mantener la integridad de las plataformas descentralizadas.

Usar Flashbots o herramientas de protección MEV

Flashbots es una plataforma que busca minimizar el impacto del front-running ofreciendo una forma segura para que los usuarios envíen transacciones directamente a los mineros. La integración de herramientas de protección MEV (Miner Extractable Value, o Valor Extraíble por el Minero) también puede ayudarte a evitar actividades explotadoras.

Usar agregadores

Cuando estés realizando una transacción grande, como un intercambio (swap), siempre debes usar agregadores, ya que dividen una gran transacción en múltiples transacciones pequeñas. Esto ayuda a prevenir el front-running (ya que los usuarios maliciosos están menos interesados en transacciones pequeñas) y también maximiza el rendimiento de un intercambio.

Conclusión

Los ataques de front-running representan una amenaza significativa para la seguridad y la equidad de los contratos inteligentes en Solidity. Al comprender la naturaleza de estos ataques e implementar medidas preventivas adecuadas, los desarrolladores pueden mitigar los riesgos y mejorar la integridad de las aplicaciones descentralizadas.

Estrategias como la conciencia sobre las tarifas del gas, usar pools de liquidez grandes, mantener el deslizamiento máximo bajo, usar soluciones L2, design de contratos inteligentes y el uso de Flashbots. Además, la auditoría regular y el seguimiento de las mejores prácticas de seguridad son cruciales para garantizar la robustez de los contratos inteligentes en Solidity.

Artigo original publicado por Kartikjain. Traduzido por Paulinho Giovannini.

Discussion (0)