Artículo del Blog

Construyendo SPEEDEX – Un Diseño Novedoso para un Intercambio Descentralizado Escalable

Autor

Geoff Ramseyer

Fecha de publicación

SPEEDEX

Descentralizado

Escalabilidad

Un intercambio descentralizado (DEX) de alta calidad es una pieza crucial de infraestructura para una red de pagos global. Las remesas transnacionales dependen del intercambio de la moneda de un país por otra, pero las empresas de un país no pueden transaccionar con clientes de otro a menos que estos puedan cambiar su moneda por una que la empresa acepte. Sin embargo, las implementaciones actuales de intercambio, especialmente los intercambios centralizados, típicamente limitan quién puede acceder al intercambio y a menudo cobran altas tarifas de operación. Por lo tanto, la descentralización del intercambio alrededor del mundo es crucial para asegurar un acceso abierto y egalitario al sistema financiero mundial.

SPEEDEX – un intercambio distribuido escalable, paralelizable y económicamente eficiente – es un nuevo diseño para un intercambio descentralizado completamente en cadena que puede escalar a un rendimiento de transacciones arbitrariamente alto. Los intercambios descentralizados en cadena actuales son lentos, costosos e ineficientes. SPEEDEX, por el contrario, no es ninguno de estos; puede escalar su rendimiento utilizando efectivamente muchos núcleos de CPU y, al mismo tiempo, SPEEDEX elimina el front-running sin riesgo, ofrece a cada usuario la misma tasa de cambio justa y aumenta la liquidez entre pares de trading ilíquidos.

El estado de los intercambios descentralizados

El DEX ideal debe: 1) cobrar las tarifas más bajas necesarias, 2) ser rápido y escalable, 3) ser fácil de usar, 4) tratar a los usuarios de manera justa, 5) ser igualmente accesible para todos los usuarios alrededor del mundo con conexiones a internet modestas, y 6) proporcionar mercados tan líquidos como sea posible directamente entre cada par de activos.

Desafortunadamente, los diseños actuales de DEX no se acercan a cumplir con estos criterios, por las siguientes razones:

  • Los DEXes (y los intercambios centralizados) del mundo hoy dividen la liquidez por par de activos. Mientras que los mercados entre USD y muchas otras monedas pueden ser relativamente líquidos, los mercados directos entre monedas no reservas pueden no serlo. Supongamos, por ejemplo, que un usuario desea comerciar ARS por NGN. Un DEX podría soportar el comercio de uno directamente por el otro, pero el usuario probablemente obtendría una mejor tasa de cambio general utilizando un pago de ruta — comerciando ARS por USD, y luego USD por NGN.Este problema es especialmente pronunciado en blockchains modernas donde muchas organizaciones han desplegado stablecoins distintas que representan el mismo activo subyacente.
  • El comercio óptimo entre cualquier par de activos en una red de pares de trading es casi siempre una combinación de pagos de ruta, con cada pago de ruta dejando detrás pequeñas oportunidades de arbitraje que fomentan el spam de arbitraje en la red.
  • Las transacciones en prácticamente cada DEX se procesan en un orden secuencial, determinado de manera pseudorandom (p. ej., en Stellar) o no determinísticamente por el productor del bloque (p. ej., en Ethereum). El control de este ordenamiento puede ser particularmente valioso. Si un comerciante ofrece comprar algo a un precio ligeramente superior al precio de mercado actual, un agente con influencia sobre el orden de las transacciones puede comprar el activo en cuestión exactamente al precio de mercado e inmediatamente revenderlo al comerciante a su precio máximo, obteniendo la diferencia como ganancia pura. Este tipo de front-running sin riesgo y manipulaciones de orden complicadas resultan en que los usuarios vean peores tasas de cambio, además la red tiene que hacer más trabajo computacional para manejar el mismo número de pagos transnacionales reales.
  • La ejecución secuencial también significa que la única manera de aumentar el rendimiento de las transacciones es esperar a que los fabricantes de hardware diseñen CPUs con un rendimiento de un solo núcleo más rápido.

Diseñando un nuevo tipo de DEX

SPEEDEX es un diseño novedoso para un intercambio distribuido completamente en cadena, y es el primer diseño de este tipo que simultáneamente:

  • Da a cada usuario el mismo nivel de acceso. SPEEDEX da a cada usuario (aproximadamente) el mismo nivel de acceso, ya que no toma en cuenta el orden de las transacciones dentro de un lote de ninguna manera. Como tal, la latencia de la conexión de red de un usuario no afecta la calidad de la experiencia comercial del usuario. Mientras el usuario pueda enviar su comercio a un productor de bloques antes de un tiempo límite de bloque, el usuario obtendrá la misma tasa de cambio que un usuario con una conexión de baja latencia al productor.
  • Da a cada usuario un comercio justo. SPEEDEX previene muchos de los ataques de front-running vistos hoy en los DEXes existentes. Incluso un comerciante con un acceso a la red tan ventajoso que pueden ver cada otra transacción en un bloque antes de enviar la suya propia no puede comprar un activo y revenderlo a un precio más alto en el mismo bloque.
  • Hace un uso óptimo de su liquidez disponible. SPEEDEX hace el mejor uso posible de su liquidez disponible. En particular, un mercado entre cualquier par de activos es al menos tan líquido como cualquier camino multi-salto entre los dos activos. Como tal, SPEEDEX obvia la necesidad de pagos de ruta multi-salto.
  • Evita la dependencia en monedas de reserva y caminos de transacción. Muchas monedas menos utilizadas se comercian en mercados altamente líquidos con monedas de reserva globales como el Dólar estadounidense, pero raramente se comercian directamente entre sí. Por el contrario, SPEEDEX asegura automáticamente que los mercados directos entre estas monedas menos comerciadas sean tan líquidos como los mercados (mínimos de los) de estas monedas al dólar. Un comercio ni siquiera necesita una contraparte directa para ejecutarse.
  • Evita dejar oportunidades de arbitraje atrás. SPEEDEX no deja oportunidades de arbitraje atrás, en el sentido de que no hay oportunidades de arbitraje entre las órdenes que no se ejecutan. Además, ningún comercio dentro de un lote puede constituir una oportunidad de arbitraje. Un camino comercial a lo largo de un ciclo hace exactamente cero ganancias o pérdidas. Por supuesto, SPEEDEX no puede eliminar las oportunidades de arbitraje entre sí y los intercambios externos.
  • Y puede soportar no solo las tasas de transacción que vemos hoy, sino también tasas de transacción muchos órdenes de magnitud mayores que las que vemos hoy, para seguir siendo útil décadas en el futuro. SPEEDEX es escalable porque su operación es paralelizable. El resultado de cualquier comercio no depende del orden entre comercios en un bloque. Como tal, SPEEDEX puede paralelizar todo su trabajo computacional (p. ej., transferir activos) con prácticamente ninguna sincronización o sobrecarga entre hilos, utilizando efectivamente tantos núcleos de CPU como estén disponibles en un nodo de blockchain. El sistema en su conjunto puede obtener un mayor rendimiento de transacciones simplemente instalando más núcleos de CPU.

SPEEDEX procesa comercios en lotes. Cada comercio dentro de un lote ocurre al mismo conjunto de tasas de cambio que cada otro comercio en ese lote, y un cálculo cuidadoso de las tasas de cambio deja sin oportunidades de arbitraje después de ejecutar un lote de comercios. Estas tasas de cambio eliminan la necesidad de pagos de ruta multi-salto — todos los caminos dan al usuario la exacta misma tasa de cambio, y cada mercado entre dos activos es al menos tan líquido como el camino más líquido.

Además, porque todos los comercios ocurren a las mismas tasas de cambio, los comercios no tienen dependencias de orden entre sí; es decir, SPEEDEX puede ejecutar los comercios en un lote en cualquier orden y obtener los mismos resultados, sin importar el orden. Esta propiedad simultáneamente bloquea el front-running y permite a SPEEDEX paralelizar efectivamente su operación y usar tantos núcleos de CPU como tenga disponibles. En otras palabras, cuantos más núcleos de CPU haya en una máquina ejecutando SPEEDEX, más comercios por segundo puede procesar SPEEDEX

El comercio en lotes se ajusta particularmente bien en un contexto de blockchain. Todas las transacciones en un bloque se finalizan al mismo tiempo, así que ¿por qué debería una de esas transacciones ejecutarse antes que otra en el mismo bloque?

Los entresijos de SPEEDEX

El enfoque de SPEEDEX para el comercio en lotes es construir un "subastador" virtual. Los usuarios intercambian activos con el subastador y no directamente entre ellos. Para SPEEDEX, una oferta de comercio será una oferta para vender un activo a cambio de tanto de otro activo como sea posible, siempre que el precio del primer activo en relación con el segundo sea al menos un precio mínimo.

Dado un lote de comercios, el subastador calcula una "valoración" para cada activo. Estas valoraciones cuantifican el "valor" de un activo en relación con otro activo. Estas valoraciones relativas implican una tasa de cambio entre cada par de activos, que el subastador ofrece a cada solicitud de comercio. Las solicitudes de comercio miran las tasas de cambio ofrecidas y calculan si la tasa ofrecida es mayor que el precio límite mínimo de una oferta. Las ofertas de comercio que aceptan la tasa del subastador entonces venden sus activos al subastador y reciben la cantidad proporcional de otro activo a cambio del subastador.

Siempre existe un conjunto único (hasta reescalamiento, y algunas condiciones técnicas) de valoraciones que "despeja" el mercado (lo que se sigue del Teorema 1 de[Devanur, Garg, Végh], combinado con algunas condiciones técnicas). Un conjunto de valoraciones despeja el mercado si:

  1. Cada oferta con un precio límite menor al tipo de cambio ofrecido por el subastador vende todos sus activos al subastador y recibe la cantidad implícita de otro activo del subastador.
  2. El subastador no tiene ganancias ni deudas. Es decir, la cantidad total de cada activo que las ofertas de comercio eligen vender al subastador es exactamente igual a la cantidad del activo que las ofertas compran del subastador.

Dado que los precios de despeje del mercado son únicos y el subastador nunca obtiene ganancias ni pérdidas, el subastador no hace realmente una elección estratégica al "elegir" las valoraciones. En cambio, simplemente informa un conjunto de valores que son una propiedad inherente de un lote de comercios.

El desafío algorítmico central para SPEEDEX es calcular las valoraciones de despeje del mercado de manera eficiente. SPEEDEX se ejecuta una vez por bloque – integrado con Stellar, eso significa aproximadamente una vez cada cinco segundos, e idealmente en bien menos de un segundo.


Aquí trazo la tasa de transacción de mi implementación de investigación de SPEEDEX comerciando 20 activos distintos. Los números totales de transacción aquí deben tomarse con un gran grano de sal. Este no es código probado en batalla, y está funcionando en un entorno de desarrollo aislado con un simple protocolo de consenso de membresía cerrada. Incluyo el gráfico, sin embargo, para enfatizar dos puntos. Primero, permitir que SPEEDEX acceda a más núcleos de CPU (más hilos de trabajo) permite que SPEEDEX funcione más rápido. Segundo, el proceso de cálculo de precios, que debe ejecutarse en cada bloque, no se ralentiza significativamente a medida que aumenta el número de ofertas de comercio abiertas.

Casi toda la desaceleración asociada con un aumento en el número de ofertas abiertas es una fase de preprocesamiento del algoritmo. Mis máquinas de prueba desafortunadamente solo tenían discos duros relativamente lentos, y no siempre podían mantenerse al día con SPEEDEX.

¿Por qué construir SPEEDEX en Stellar?

SPEEDEX encaja naturalmente en la blockchain de Stellar, ya que funciona mejor en una máquina de estado replicada que está explícitamente construida para admitirlo. Los beneficios de escalabilidad dependen de un diseño que puede usar múltiples CPU, y los algoritmos de cálculo de precios son intensivos en memoria, funcionando mejor cuando se construyen directamente en la máquina de estado replicada. SPEEDEX también se beneficia de un diseño cuidadoso de los patrones de acceso a la memoria y una gestión cuidadosa de la caché de la CPU.

Este tipo de preocupaciones de rendimiento serían casi imposibles de manejar dentro de un contrato inteligente. Sería intensamente intensivo en gas ejecutar los algoritmos de cálculo de precios dentro de la Máquina Virtual de Ethereum, por ejemplo, o en casi cualquier lenguaje de contratación inteligente. Un lenguaje de contratación inteligente podría diseñar un conjunto de primitivas que interactúen con un módulo SPEEDEX distinto, pero ese módulo aún probablemente necesitaría ser implementado directamente dentro de la máquina de estado de la Capa-1. El cálculo de precios o la coincidencia de órdenes también podrían moverse fuera de la cadena (como con LoopRing o CoWSwap), pero entonces el DEX ya no sería una pieza de infraestructura verdaderamente descentralizada y replicada.

SPEEDEX permite que una blockchain de Capa 1 escale directamente, sin mover la mayor parte del cálculo interesante fuera de la cadena – pero eso requiere que la propia blockchain esté dispuesta a rediseñarse para admitir el paralelismo y la integración directa con SPEEDEX.

Finalmente, la semántica de transacción precisamente diseñada de Stellar simplifica sustancialmente una integración con SPEEDEX.

SPEEDEX se alinea estrechamente con la misión de Stellar de habilitar un futuro de pagos transnacionales de bajo costo y rápidos. Cualquier DEX que alimente un sistema global de pagos debe dar a cada usuario en todo el mundo acceso equitativo. Además, para admitir no solo los volúmenes de transacción de hoy sino los volúmenes de transacción de las próximas décadas, blockchains como Stellar necesitarán escalar mucho más allá de su rendimiento actual. Casi todos los demás sistemas informáticos relevantes ampliamente desplegados se escalan a sí mismos ejecutando más copias de sí mismos o paralelizando el manejo de solicitudes. SPEEDEX puede ayudar a la red de Stellar a escalar horizontalmente de la misma manera, y convertirse en una infraestructura de pagos verdaderamente global.

-----

Stellar ya ha realizado un trabajo increíble en la construcción de una red descentralizada para transacciones transnacionales y entre divisas. Pero Stellar necesitará escalar su rendimiento DEX en cadena a medida que más y más usuarios en todo el mundo realicen transacciones a través de la blockchain. Integrado en Stellar, SPEEDEX se basa en el trabajo de Stellar para crear un DEX que pueda escalar su rendimiento de transacciones para admitir los volúmenes de transacciones que veremos en las próximas décadas. SPEEDEX también proporciona una serie de propiedades económicamente útiles, incluyendo igualdad de acceso, eliminación de front-running sin riesgo y arbitraje interno, y liquidez directa entre pares de comercio ilíquidos.

Para saber más sobre SPEEDEX, consulta lo siguiente:

  • Una implementación de SPEEDEX independiente, open-source, implementada en su propia blockchain (usando HotStuff como protocolo de consenso) está disponible aquí. Nosotros (yo y mis coautores, los Profesores Ashish Goel y David Mazières) damos una descripción técnica detallada de cómo funciona esta implementación en este preprint.
  • Un prototipo de una integración de SPEEDEX dentro de Stellar-Core está disponible aquí.
  • Para detalles sobre cómo funciona el cálculo del creador de mercado, vea el post del blog del Apéndice, o, para una descripción más matemática y una discusión de algunos de los compromisos involucrados, vea este paper de taller (por mí y los Profesores Goel y Mazières) o el preprint.