Logo
Nuevos usuarios de RPC: 35% de descuento el primer mesVer oferta
OnFinality Learn
Rendimiento y optimización12 min de lectura

Extracción de MEV: medición, infraestructura RPC y flujos de trabajo operativos

Una metodología reproducible para medir la exposición al MEV, configurar el acceso RPC para buscadores y constructores, y diagnosticar fallos comunes de extracción.

TL;DR

El MEV (valor máximo extraíble) es el beneficio disponible para los productores de bloques y los buscadores al reordenar, insertar o censurar transacciones dentro de un bloque. Este artículo explica el mecanismo y luego proporciona un procedimiento reproducible para medir la exposición al MEV en sus propias transacciones y para configurar el acceso RPC que admita flujos de trabajo de extracción de baja latencia. Separa el comportamiento documentado del protocolo de las recomendaciones y de las mediciones que usted mismo debe ejecutar. Las elecciones concretas de endpoint y proveedor corresponden a RPC Assistant, no a este artículo.

Alcance y el modelo mental del MEV

MEV se refiere al valor máximo que se puede extraer de un bloque eligiendo el orden, la inclusión o la exclusión de las transacciones. El término suele escribirse como MEV o valor máximo extraíble; la unidad física MeV (megaelectronvoltio) y nombres de empresas no relacionadas comparten la abreviatura, por lo que el contexto importa al buscar. En contextos de blockchain, el MEV es una propiedad del mempool y del pipeline de construcción de bloques, no un producto único.

El pipeline de extracción tiene cuatro roles. Los usuarios envían transacciones. Los buscadores detectan oportunidades rentables y envían paquetes (bundles). Los constructores ensamblan los paquetes en bloques. Los validadores o productores de bloques proponen esos bloques. Cada rol depende de un acceso rápido y consistente al estado de la cadena y a las transacciones pendientes, y aquí es donde la infraestructura RPC se convierte en una preocupación de primer orden.

Este artículo cubre tres cosas: cómo razonar sobre la exposición al MEV, cómo medirla de forma reproducible y cómo configurar el acceso RPC para flujos de trabajo de extracción. No recomienda un proveedor específico; utilice RPC Assistant para la selección de endpoint y proveedor.

  • El MEV es una propiedad a nivel de bloque; medirlo requiere datos de bloques y transacciones, no solo instantáneas del mempool.
  • Los buscadores y los constructores tienen requisitos diferentes de latencia y consistencia.
  • Los endpoints RPC públicos suelen ser inadecuados para la extracción competitiva debido a los límites de velocidad y la latencia variable.

Supuestos y requisitos previos

Los procedimientos a continuación asumen que tiene una cadena compatible con EVM con una interfaz JSON-RPC, una cuenta de prueba con fondos y permiso para ejecutar scripts contra un endpoint RPC. Necesita Node.js 18 o posterior para los ejemplos de JavaScript y curl para los ejemplos de shell. Reemplace RPC_URL con su propio endpoint; nunca confirme claves privadas.

También debe tener una forma de archivar o indexar bloques. La medición sobre un solo bloque rara vez es significativa; planifique al menos unos pocos miles de bloques o una muestra representativa. Si opera un validador o constructor, coordine con su equipo de infraestructura antes de ejecutar cargas de trabajo sensibles a la latencia contra endpoints de producción.

export RPC_URL="https://your-endpoint.example"
export PRIVATE_KEY="0x..."
node --version
curl --version

Comportamiento documentado versus recomendaciones

El comportamiento documentado incluye métodos JSON-RPC como eth_blockNumber, eth_getBlockByNumber, eth_getTransactionReceipt y eth_sendBundle cuando el relay lo admite. Estos métodos tienen formas de solicitud y respuesta definidas. Lo que no está estandarizado es la rapidez con la que un endpoint determinado propaga las transacciones pendientes, cómo las ordena o si expone un mempool privado.

Las recomendaciones de este artículo están claramente marcadas. Por ejemplo, utilizar un nodo dedicado para el envío de paquetes sensible a la latencia es una recomendación, no una regla del protocolo. Mediciones como la tasa de inclusión de paquetes, los percentiles de latencia y la frecuencia de reorganizaciones deben ser producidas por usted contra su propia infraestructura y cadena.

Medición de la exposición al MEV en sus propias transacciones

Una primera medición práctica es la diferencia entre el valor que su transacción esperaba y el valor que realizó después de la inclusión. Para los swaps, compare la salida cotizada en el momento del envío con la salida real en el recibo. Para las liquidaciones, compare la bonificación esperada con la bonificación realizada. Esto aísla la porción de valor capturada por el reordenamiento o el sándwich.

El siguiente script obtiene un bloque, itera sus transacciones e imprime el gas utilizado y el precio efectivo del gas. Es un punto de partida para construir un informe de MEV por bloque. No clasifica el MEV; la clasificación requiere decodificar registros y comparar con un precio de referencia.

Ejecute esto contra una muestra de bloques y registre los resultados en una tabla con columnas para el número de bloque, el hash de la transacción, la salida esperada, la salida real y el delta. No complete números que no haya medido.

const { ethers } = require("ethers");

async function main() {
  const provider = new ethers.JsonRpcProvider(process.env.RPC_URL);
  const blockNumber = await provider.getBlockNumber();
  const block = await provider.getBlock(blockNumber, true);
  console.log(`block ${blockNumber} txs=${block.transactions.length}`);
  for (const tx of block.transactions.slice(0, 5)) {
    const receipt = await provider.getTransactionReceipt(tx);
    console.log(tx, receipt.gasUsed.toString(), receipt.effectiveGasPrice?.toString());
  }
}

main().catch((err) => { console.error(err); process.exit(1); });

Procedimiento de tabla de resultados para la medición de MEV

Registre cada medición en una tabla con columnas fijas para que los resultados sean comparables entre ejecuciones. Un esquema sugerido es: número de bloque, hash de la transacción, tipo de estrategia, valor esperado, valor realizado, delta, latencia de inclusión en milisegundos y si la transacción se incluyó en el bloque objetivo. Complete la tabla solo con valores que haya producido su script.

BloqueHash de txEstrategiaEsperadoRealizadoDeltaLatencia (ms)Incluido
(medido)(medido)(etiqueta)(medido)(medido)(calculado)(medido)(sí/no)

Ejecute el mismo procedimiento antes y después de cualquier cambio de infraestructura. Si cambia los endpoints RPC, mantenga el mismo rango de bloques para que la comparación sea válida. Informe percentiles en lugar de promedios para la latencia, porque los resultados de MEV tienen colas pesadas.

Configuración del acceso RPC para buscadores y constructores

Los buscadores necesitan acceso de baja latencia a las transacciones pendientes y lecturas rápidas del estado. Los constructores necesitan un envío confiable de bloques y un estado consistente en muchas solicitudes concurrentes. Ambos se benefician de nodos dedicados en lugar de endpoints públicos compartidos, porque los límites de velocidad y los vecinos ruidosos distorsionan las mediciones de latencia.

El ejemplo de curl a continuación verifica la salud básica del endpoint y la altura del bloque. Úselo como una prueba de humo antes de ejecutar cargas de trabajo de extracción. Si el endpoint devuelve errores o alturas inconsistentes en llamadas repetidas, no proceda con trabajo sensible a la latencia.

Para la selección de proveedor y endpoint, consulte RPC Assistant en lugar de codificar un proveedor aquí. Para obtener orientación más amplia sobre infraestructura, consulte la guía de OnFinality Learn sobre alojamiento de nodos de blockchain y la descripción general de endpoints RPC multicadena.

curl -s -X POST "$RPC_URL" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'

curl -s -X POST "$RPC_URL" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"eth_getBlockByNumber","params":["latest",false]}'

Flujo de trabajo de envío y verificación de paquetes

El envío de paquetes es específico del relay. El siguiente ejemplo utiliza la forma eth_sendBundle común a muchos relays; confirme el método y los parámetros exactos con la documentación de su relay antes de ejecutarlo. El objetivo es verificar que su paquete sea aceptado y luego confirmar la inclusión en un bloque posterior.

Después del envío, consulte eth_getTransactionReceipt para cada hash de transacción en el paquete. Si el paquete no se incluye dentro de su ventana objetivo, registre el rango de bloques y la respuesta del relay. Este registro es la base para la solución de problemas en la siguiente sección.

const { ethers } = require("ethers");

async function sendBundle(provider, signedTxs, targetBlock) {
  const payload = {
    jsonrpc: "2.0",
    id: 1,
    method: "eth_sendBundle",
    params: [{ txs: signedTxs, blockNumber: "0x" + targetBlock.toString(16) }]
  };
  const res = await fetch(process.env.RPC_URL, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(payload)
  });
  const json = await res.json();
  console.log(JSON.stringify(json));
  return json;
}

async function verify(provider, hashes) {
  for (const h of hashes) {
    const r = await provider.getTransactionReceipt(h);
    console.log(h, r ? `included in ${r.blockNumber}` : "not included");
  }
}

module.exports = { sendBundle, verify };

Resultados de verificación esperados

Un endpoint saludable devuelve una respuesta JSON-RPC con un campo result y sin objeto de error. La altura del bloque debe aumentar monotónicamente en llamadas repetidas. Un paquete enviado debe devolver una respuesta de aceptación del relay, y el paso de verificación eventualmente debe mostrar un recibo con un número de bloque dentro de su ventana objetivo.

Si está midiendo la latencia, registre el tiempo entre el envío de la solicitud y la recepción de la respuesta para al menos unos cientos de muestras. Informe p50, p95 y p99. No afirme una cifra de latencia sin el tamaño de la muestra y la configuración del endpoint utilizada para producirla.

Solución de problemas comunes de extracción

La mayoría de los fallos se dividen en cuatro categorías: estado obsoleto, limitación de velocidad, rechazo de paquetes y reorganizaciones. El estado obsoleto aparece cuando su script lee una altura de bloque que está por detrás de la punta de la cadena; compare eth_blockNumber entre dos endpoints para detectarlo. La limitación de velocidad aparece como HTTP 429 o códigos de error JSON-RPC; reduzca la concurrencia de solicitudes o pase a un nodo dedicado.

El rechazo de paquetes generalmente devuelve un error del relay que explica el motivo, como una tarifa de prioridad insuficiente o una firma inválida. Registre la respuesta completa. Las reorganizaciones invalidan los recibos; vuelva a verificar la inclusión después de unos bloques antes de tratar un paquete como final.

Si no puede reproducir un fallo, capture el payload de la solicitud, la respuesta, la altura del bloque en el momento del envío y la altura del bloque en el momento de la verificación. Este registro es lo que hace que el fallo sea diagnosticable.

  • Estado obsoleto: compare las alturas de bloque entre endpoints antes de cada ejecución.
  • Limitación de velocidad: reduzca la concurrencia y verifique los encabezados de respuesta.
  • Rechazo de paquetes: registre el error del relay textualmente.
  • Reorganizaciones: vuelva a verificar los recibos después de varios bloques.

Limitaciones y compensaciones

La medición de MEV es inherentemente incompleta. Puede medir su propia exposición y los resultados de sus propios paquetes, pero no puede observar el flujo de órdenes privado ni los paquetes de otros buscadores. Cualquier afirmación sobre el MEV total en una cadena requiere suposiciones que deben declararse explícitamente.

La infraestructura de baja latencia reduce pero no elimina el riesgo de ser superado en la puja. Los nodos dedicados cuestan más que los endpoints compartidos y aún dependen de la ruta de red subyacente. También existe un debate ético y a nivel de protocolo sobre el MEV que este artículo no resuelve; el enfoque aquí es la medición y la confiabilidad operativa.

Próximos pasos

Comience ejecutando el script de escaneo de bloques contra una muestra pequeña y registrando los resultados en el esquema de tabla anterior. Luego ejecute la prueba de humo del endpoint y compare la latencia entre dos configuraciones. Si necesita una recomendación concreta de endpoint o proveedor, utilice RPC Assistant. Para la planificación de infraestructura, revise la guía de alojamiento de nodos de OnFinality Learn, la descripción general de RPC multicadena y la documentación de nodos dedicados. Los precios de los servicios RPC están disponibles en la página de precios, y las redes compatibles se enumeran en la página de redes.

  • Ejecute el script de medición en un rango de bloques fijo.
  • Registre los resultados en el esquema de tabla estándar.
  • Compare configuraciones de endpoint con cargas de trabajo idénticas.
  • Consulte RPC Assistant para la selección de endpoint.

Nunca te preocupes por la infraestructura nuevamente

OnFinality elimina la carga pesada de DevOps para que puedas construir de forma más inteligente y rápida.

Comenzar