Original de Pavel Naydanov

Compilado por | Odaily Planet Daily Golem (@web3_golem)

超详细揭秘Polymarket背后的技术实现方式

Nota del editor: Polymarket ha ganado más atención en estas elecciones estadounidenses, no solo porque el volumen total de transacciones de temas de predicción ha superado los 3.6 mil millones de dólares, sino porque, en comparación con las encuestas y los medios de comunicación tradicionales, predijo con éxito que Trump ganaría, lo que ha llevado a la gente a darse cuenta de que Polymarket no es solo un sitio de apuestas, sino que se convertirá en un 'sitio de noticias' más real y confiable (lectura recomendada: (Nuevo artículo de Vitalik: De los mercados de predicción a las finanzas informativas)). Polymarket podría ser el 'punto de referencia' más brillante en esta ronda de innovación blockchain.

Entonces, ¿cómo logró Polymarket, que tiene un significado revolucionario en blockchain, implementarse técnicamente? El desarrollador de contratos inteligentes Pavel Naydanov realizó un desglose detallado de la tecnología utilizada por Polymarket, lo que resulta inspirador para los desarrolladores, especialmente para aquellos que están construyendo mercados de predicción. Odaily Planet Daily ha compilado la parte relacionada con la implementación técnica a continuación, y exploremos juntos los detalles técnicos de cada aspecto del protocolo.

CTF: tokenizar los resultados

Todos los resultados de eventos en Polymarket están tokenizados:

  • Estos tokens pueden denominarse Sharetoken;

  • Las Shares se compran con el activo subyacente, por lo que están completamente colateralizadas;

  • Las Shares pueden venderse para obtener el activo subyacente.

El token de participación se implementa en ERC-1155 basado en el marco de token condicional (CTF) de Gnosis, que ha demostrado su eficacia y ha sido probado por múltiples protocolos, con un CTF que puede admitir hasta 256 resultados por evento.

Cada predicción está identificada en el CTF, para ello se les asigna un ID de condición único compuesto por el hash de tres parámetros:

  • Oráculo: dirección del oráculo que determinará el resultado del evento, asegurando que solo el oráculo designado pueda liquidar la predicción;

  • ID de pregunta: identificador de la predicción, establecido por el creador de la pregunta de predicción. Esto puede ser un simple contador que aumenta con cada nueva predicción en función de las predicciones anteriores, o puede ser un esquema más complejo utilizando texto y otros hashes de datos;

  • outcomeSlotCount: número de posibles resultados de la predicción.

La siguiente imagen ilustra cómo funciona el CTF (Marco de Token Condicional):

超详细揭秘Polymarket背后的技术实现方式

Los usuarios proporcionan el activo subyacente al realizar apuestas y reciben Shares, que en el CTF se denominan tokens condicionales. Después de que el oráculo determina la predicción, los usuarios pueden reclamar recompensas del CTF según los resultados de la predicción.

Cuando los usuarios reciben tokens condicionales, se consideran que han determinado una posición específica. En el CTF, una posición representa un conjunto de combinaciones de resultados posibles para cada predicción. El CTF genera estas posiciones para cada predicción, y cada posición corresponde a una de las combinaciones de resultados que el usuario puede elegir.

Por ejemplo:

¿Cuál es la película más taquillera de 2024?

  • Los Cazafantasmas 2

  • Deadpool 3

  • Joker 2

  • Mi villano favorito 4

  • Duna 2

  • Mad Max 4

  • Otros

Los usuarios pueden votar si creen que (Los Cazafantasmas 2) será la película más taquillera o que (Duna 2) definitivamente no será la película más taquillera de 2024. Esta combinación de predicciones se considerará como su posición.

CTF ofrece dos mecanismos interesantes para manejar posiciones: división y fusión. El mecanismo de división permite dividir una sola posición en múltiples resultados separados, mientras que la fusión combina diferentes resultados en una sola posición. Estos mecanismos permiten a los usuarios gestionar sus posiciones de manera flexible.

CTF proporciona cuatro ventajas importantes a Polymarket:

  • El token de participación se puede utilizar para confirmar el voto de un usuario sobre un resultado de predicción específico;

  • Se ha implementado un sistema flexible que combina los votos de los usuarios en varias posiciones;

  • La responsabilidad de calcular los resultados se delega al CTF según la señal del oráculo;

  • Las recompensas se calculan en función del número de tokens Share correspondientes al resultado ganador.

También es importante mencionar que el CTF permite organizar actividades relacionadas en las que las posiciones de los usuarios pueden ser fusionadas. Sin embargo, actualmente no hay ejemplos de esto en Polymarket. Para obtener más información sobre el CTF, consulte la documentación oficial.

Mecanismo de órdenes

超详细揭秘Polymarket背后的技术实现方式

Para realizar compras, la interfaz de Polymarket ofrece tres tipos de órdenes:

  • Mercado: compra de inmediato al precio de mercado actual;

  • Límite: órdenes diferidas, que le permiten especificar el precio al que desea comprar una vez alcanzado ese precio;

  • AMM: compra a un precio determinado automáticamente similar a un intercambio descentralizado, basado en la cantidad de reservas en el pool.

Actualmente, la función de órdenes AMM parece estar inactiva, no se encontraron predicciones que permitan compras a través de AMM. Un comentario de un usuario en el Discord de Polymarket explica en cierta medida esta situación.

超详细揭秘Polymarket背后的技术实现方式

AMM está obsoleto

Según la documentación de Polymarket, AMM fue desarrollado como parte del contrato inteligente del marco de token condicional. Por lo tanto, AMM se utiliza para determinar el precio de compra del Sharetoken. Este mecanismo básico requiere liquidez para asegurar precios estables y reducir la volatilidad. Los proveedores de liquidez necesitan incentivos económicos, recibiendo recompensas por cada compra para mantener el sistema en funcionamiento.

Es posible que Polymarket inicialmente estuviera completamente basado en CTF, utilizando AMM para determinar el precio. Pero con el tiempo, el protocolo desarrolló una solución híbrida con un libro de órdenes, y dos tipos adicionales de órdenes (limitadas y de mercado) comenzaron a funcionar sobre esta solución personalizada. Esta solución se denomina CLOB (Libro de Órdenes de Límite Central) o BLOB (Libro de Órdenes de Límite Binario).

CLOB y BLOB

CLOB (Libro de Órdenes de Límite Central) o BLOB (Libro de Órdenes de Límite Binario) es un sistema que representa un libro de órdenes descentralizado mixto. En este sistema, operadores dedicados son responsables de gestionar la coincidencia de órdenes y de iniciar la ejecución del contrato inteligente.

Sin necesidad de demasiadas presentaciones, el sistema se ilustra a continuación:

超详细揭秘Polymarket背后的技术实现方式

Los usuarios crean órdenes para ejecutar, que pueden ser órdenes limitadas u órdenes de mercado; el operador empareja las órdenes de los usuarios y inicia la ejecución en el contrato inteligente. Crear una orden significa crear una estructura de datos firmada con la clave privada del usuario según el estándar EIP-712. Dado que las órdenes se almacenan fuera de la cadena antes de ser ejecutadas, los términos de la orden pueden ajustarse rápidamente y sin costo, e incluso cancelarse por completo.

Sin embargo, todo lo relacionado con el libro de órdenes y la coincidencia de órdenes solo se puede acceder a través de API. Para mayor comodidad, Polymarket ofrece dos clientes: uno utilizando JavaScript y otro utilizando Python.

Sin embargo, el contrato inteligente Exchange.sol es público y es responsable de crear posiciones de usuario en el CTF. También permite gestionar las posiciones de los usuarios y transferir activos entre ellas, asegurando la seguridad y transparencia dentro del protocolo.

超详细揭秘Polymarket背后的技术实现方式

Este contrato inteligente ha pasado por auditoría, y el informe de auditoría se adjunta en el repositorio.

Contrato inteligente

El contrato inteligente de intercambio tiene un nombre más específico: CTFExchange.sol. No es muy grande, solo tiene unas 100 líneas de código, pero tiene muchas dependencias.

超详细揭秘Polymarket背后的技术实现方式

La mayoría de estos son pequeños contratos inteligentes que implementan funcionalidades limitadas:

  • BaseExchange.sol: contrato inteligente abstracto que implementa la capacidad de recibir tokens ERC-1155, y también es responsable de prevenir ataques de reentrada;

  • Auth.sol: administrador de roles, define funciones de validación y modificadores para establecer roles, admin y operador de CTFExchange.sol;

  • Assets.sol: define dos tipos de activos, el activo subyacente (colateral) y la dirección de CTF;

  • Fees.sol: define las tarifas del protocolo;

  • Pausable.sol: define la capacidad de pausar las operaciones del contrato inteligente, una forma centralizada que el protocolo acepta en caso de circunstancias imprevistas. Solo se aplica al rol de admin;

  • AssetOperation.sol: define las operaciones de activos subyacentes y CTF. Incluye la transferencia, división y fusión de posiciones;

  • Signature.sol: define el código utilizado para verificar las firmas de usuario al procesar órdenes;

  • Hashing.sol: define el hash de los parámetros de la orden, utilizado para la verificación de firmas;

  • Registry.sol: define el proceso de registrar predicciones en el sistema y registrar tokens para las predicciones.

Todo lo relacionado con la ejecución real de órdenes se implementa en el contrato inteligente Trading.sol. Es fácil recorrer el código y estudiar el contrato inteligente. La estructura define claramente el punto de entrada a través de funciones:

  • fillOrder() — ejecuta el pedido entre el usuario que crea la orden y la orden seleccionada por el usuario (otra orden);

  • fillOrders() — igual que fillOrder(), pero para una lista de pedidos;

  • matchOrders() — el operador selecciona dos órdenes diferentes y las ejecuta.

Todas las funciones anteriores solo pueden ser llamadas por el operador.

超详细揭秘Polymarket背后的技术实现方式

Sin importar cómo se invoque el contrato inteligente, el resultado siempre es el mismo: dos usuarios intercambiarán tokens según sus órdenes.

Tarifas del protocolo

Las tarifas se cobran en función de los activos de salida. Para predicciones binarias, las tarifas son simétricas, lo que significa: si un usuario vende tokens a 0.99 dólares, pagará la misma tarifa que el comprador que compra tokens a 0.01 dólares.

La fórmula de cálculo es bastante simple, tomada de la documentación oficial:

超详细揭秘Polymarket背后的技术实现方式

Programa de recompensas por liquidez

El objetivo general del programa es incentivar la liquidez del mercado.

Para que un intercambio basado en un libro de órdenes funcione, se necesita que alguien cree órdenes limitadas, las órdenes limitadas proporcionan la liquidez necesaria para ejecutar órdenes de mercado de inmediato, y los usuarios que crean órdenes limitadas se denominan creadores de mercado. Cuanto más 'cercanas' estén las órdenes limitadas al precio de mercado, más rápido se ejecutarán las órdenes de mercado y mayor será el volumen de transacciones, lo que sin duda beneficia a los usuarios finales. Además, cuanto mayor sea la liquidez, más difícil será manipular el mercado.

Para garantizar una liquidez suficiente, Polymarket ha establecido un programa especial de recompensas para incentivar a los usuarios a crear órdenes limitadas. Cuanto más cerca esté una orden limitada del precio medio del mercado, mayor será la recompensa. Las recompensas se pagarán automáticamente todos los días a la medianoche (hora UTC).

El sistema se basa en dYdX, y para obtener más información, puede consultar el programa de incentivos de liquidez original de dYdX y la fórmula de cálculo detallada de recompensas de liquidez de Polymarket.

Oráculo

El oráculo se utiliza para proporcionar resultados de predicción, independientemente de si el evento ocurre o no. El oráculo es uno de los componentes más importantes del protocolo, pero es proporcionado por un servicio externo, no por el equipo de Polymarket, y este oráculo se llama UMA.

UMA es un oráculo descentralizado diseñado para registrar cualquier tipo de datos en la blockchain, excepto los datos que no pueden ser verificados. Este oráculo es optimista y considera que los datos son correctos por defecto, a menos que haya una disputa. UMA tiene su propio sistema de arbitraje para resolver disputas, donde los árbitros son personas reales: participantes del ecosistema UMA, especialmente poseedores de tokens UMA. Este sistema se llama DVM (Mecanismo de Verificación de Datos).

El siguiente proceso se utiliza para determinar los resultados de las predicciones y registrarlos en la blockchain:

超详细揭秘Polymarket背后的技术实现方式

  1. Declaración: la predicción se añade al oráculo junto con la recompensa. Cualquiera que dispute con éxito el resultado de la predicción puede reclamar la recompensa;

  2. Período de desafío: en este período, cualquier persona puede impugnar el resultado de la predicción. Si no hay desafíos y el tiempo expira, el resultado de la predicción se considera listo para la liquidación final, lo que indica su precisión;

  3. Disputa: cualquier participante del protocolo puede impugnar el resultado, ya sea para reclamar una recompensa o por justicia. En la práctica, esto sucede raramente, ya que la teoría de juegos sugiere que la mayoría de los participantes actúan de manera honesta.

  4. Votación: si se inicia una disputa, los poseedores de tokens UMA votarán para resolver la disputa. UMA es el token del protocolo utilizado para votar, y los participantes reciben recompensas por participar en la votación.

  5. Liquidación: la última fase es el proceso de liquidación, es decir, registrar realmente los datos en la blockchain. Después de esto, los resultados de la predicción pueden considerarse confiables.

Todo el protocolo se basa en la teoría de juegos, y cualquier comportamiento malicioso por parte de los participantes es económicamente desincentivado.

  1. Los participantes que envían resultados de predicción para votar proporcionan colateral al contrato inteligente. Si su resultado es impugnado, perderán su colateral; de lo contrario, recuperarán su colateral y recibirán una recompensa. Esto crea un fuerte incentivo para solo enviar resultados precisos.

  2. Los participantes que impugnan el resultado de la predicción también proporcionarán colateral. Si tienen razón, recuperarán su colateral y obtendrán una recompensa; de lo contrario, perderán su colateral. Esto incentiva a los participantes a impugnar solo aquellos resultados que están seguros de que son incorrectos.

  3. Participantes que resuelven disputas. Deben apostar tokens UMA y recibirán recompensas por resolver disputas. Si votan incorrectamente o no votan en absoluto, perderán parte de su saldo apostado; de lo contrario, recibirán una recompensa. No hay forma de ser negligente.

Es especialmente notable que el proceso de votación en disputa se divide en dos fases utilizando el esquema commit/reveal:

  1. Commit: enviar, los participantes votan en secreto al enviar el hash de su voto al contrato inteligente, lo que significa que nadie puede identificar cómo votó un participante solo a través del hash.

  2. Reveal: revelar, después de que finaliza la fase de votación, los participantes revelan sus boletas, y el contrato inteligente verifica si coinciden con el hash enviado anteriormente.

Este proceso de votación en dos fases previene que los votantes coludan para desacreditar al oráculo o atacar servicios que dependen de los resultados de las predicciones. Al mismo tiempo, los resultados de las predicciones pueden ser cuestionados varias veces, en cuyo caso UMA permite reiniciar el proceso de decisión después de que se haya resuelto la disputa anterior.

El proceso de iniciación de disputas es el siguiente:

超详细揭秘Polymarket背后的技术实现方式

Conclusión

Polymarket, este sistema de apuestas y predicciones aparentemente simple, en realidad incluye tres módulos principales, cada uno desarrollado por diferentes protocolos y equipos:

  • CTF (Marco de Token Condicional): gestiona combinaciones, posiciones y Shares en las predicciones. Este marco flexible creado por Gnosis es muy adecuado para los mercados de predicción.

  • CLOB (Libro de Órdenes de Límite Central): la solución interna de Polymarket para implementar órdenes limitadas y libros de órdenes. CLOB permite a los usuarios participar eficazmente en el ecosistema y ayuda a agregar liquidez.

  • UMA: un oráculo descentralizado con un sistema de arbitraje único para resolver disputas. UMA es el núcleo del sistema, transmitiendo los resultados de las predicciones a través de la blockchain.

Aunque Polymarket es un sistema de apuestas, técnicamente, el protocolo ha logrado combinar tecnologías de diferentes proyectos, lo que resulta especialmente atractivo para los desarrolladores.

Lecturas relacionadas

¿Cuánto tiempo durará el auge de Polymarket y los mercados de predicción después de las elecciones estadounidenses?

¿Cómo superó Polymarket las encuestas tradicionales de elecciones?