Oráculo interno

Los GLP de Geminon forman parte de un sistema de finanzas descentralizadas completo que incluye creación de monedas estables y préstamos. Este tipo de aplicaciones son vulnerables a ataques de manipulación de precios, y por ello necesitan fuentes fiables de precios para sus cálculos. Dado el rol central que desempeña el token GEX en el protocolo Geminon, se ha incorporado a los GLP un oráculo interno que permite obtener precios seguros del token.

Algoritmo del oráculo

El algoritmo del oráculo interno de los GLP emplea un principio similar al usado para el limitador de suministro del token GEX y para el sistema de seguridad del intercambio de moneda estable (StableSwap Guard), que se basa en un suavizado exponencial adaptativo cuyos parámetros varían en función de la aplicación. El algoritmo del oráculo calcula dos valores, un valor instantáneo que incluye las operaciones dentro del bloque actual (Δt=0\Delta t = 0) y otro considerado el valor seguro que solo se actualiza al cierre de cada bloque (Δt>0\Delta t > 0).

Valor instantáneo

El valor instantáneo del oráculo, lnl_n, se actualiza cada vez que se produce una operación en un GLP. El parámetro de suavizado, β\beta, se obtiene a partir de la relación entre el volumen de la operación actual, vnv_n, y el volumen medio de las operaciones en el pool V\overline{V}.

βn={     1if βn>1Vnvn+ϵif βn1\beta_n = \begin{cases} \ \ \ \ \ 1 &\text{if } \beta_n > 1 \\ \dfrac {\overline{V}_n}{v_n + \epsilon} &\text{if } \beta_n \le 1 \end{cases}
ln=βnpn+(1βn)ln1l_n = \beta_n p_n + (1-\beta_n) l_{n-1}

El parámetro β\beta toma su valor máximo, limitado a 1, cuando el volumen de la operación actual es inferior al volumen habitual del pool. En ese caso, el valor instantáneo del precio del oráculo lnl_n coincide con el precio instantáneo del pool pnp_n. Si el volumen de la última operación es mayor al volumen habitual, entonces β<1\beta < 1 y el precio se filtra proporcionalmente a la anomalía del volumen. Por ejemplo, si el volumen de la operación es 1000 veces mayor al normal, entonces el nuevo precio tendrá un peso de 0.001 en el precio promedio lnl_n y su valor no afectará al precio instantáneo del oráculo, logrando su objetivo de filtrar las operaciones anómalas.

Para el cálculo del volumen medio de operaciones se utiliza un suavizado exponencial simple, con parámetro γ=0.001\gamma = 0.001. Este suavizado es equivalente a utilizar la media del volumen de las últimas 1000 operaciones:

Vn+1=γvn+(1γ)Vn\overline{V}_{n+1} = \gamma v_n + (1 - \gamma) \overline{V}_n

La actualización del volumen medio de operaciones se realiza a posteriori, por lo que el volumen de la operación en curso no se tiene en cuenta en los cálculos del oráculo hasta la siguiente operación. Este detalle es importante, puesto que evita que un préstamo flash pueda alterar el dato de volumen medio usado para calcular el parámetro β\beta, mejorando la capacidad de filtrado del algoritmo.

Finalmente, se calcula el volumen acumulado del bloque en curso:

VB={     0if Δt>0nBvnif Δt=0V_B = \begin{cases} \ \ \ \ \ 0 &\text{if } \Delta t > 0 \\ \sum_{n \in B} v_n &\text{if } \Delta t = 0 \end{cases}

Valor seguro

El valor seguro del oráculo se calcula únicamente al inicio de un nuevo bloque (Δt>0\Delta t > 0). El cálculo es similar al del valor instantáneo, siendo la diferencia que el valor seguro toma como entrada los valores del valor instantáneo del oráculo, produciendo un filtrado de segundo orden. Para el parámetro de suavizado α\alpha, se utiliza el volumen acumulado del bloque anterior VB1V_{B-1} en lugar del volumen de la última operación vnv_n:

αn={      1if αn>1VnVB1+ϵif αn1\alpha_n = \begin{cases} \ \ \ \ \ \ 1 &\text{if } \alpha_n > 1 \\ \dfrac {\overline{V}_n}{V_{B-1} + \epsilon} &\text{if } \alpha_n \le 1 \end{cases}

Finalmente, para el cálculo del valor seguro del precio mnm_n se utiliza como entrada el valor instantáneo suavizado del bloque anterior, ln1l_{n-1}, en lugar del precio actual pnp_n:

mn=αnln1+(1αn)mn1m_n = \alpha_n l_{n-1} + (1-\alpha_n) m_{n-1}

Esta estructura de cálculo asegura que el precio seguro mnm_n no puede verse afectado por un ataque de préstamo flash, ya que toma el precio de cierre del bloque anterior, que además ha sido previamente filtrado descartando operaciones con volumen anómalo, y que es nuevamente filtrado a través del parámetro α\alpha. Este filtrado doble asegura además que incluso ataques realizados al contado sean adecuadamente descartados hasta que se realicen varias operaciones con volumen normal en el pool al nuevo precio.

La justificación de la seguridad frente a ataques realizados al contado y que tienen una duración superior al tiempo de bloque de la red se encuentra en la hipótesis de eficiencia del mercado y el principio de no arbitraje. Un atacante que intente manipular el precio de un pool sin utilizar un préstamo flash se expone a la reacción del mercado (arbitraje) en el bloque siguiente para restablecer el equilibrio de precios, por lo que el precio resultante de las operaciones siguientes será un precio justo de mercado que debe ser reflejado por el oráculo.

Esta capacidad de reflejar inmediatamente los cambios en el precio cuando se establece un flujo de operaciones normal a la vez que se filtran las anomalías puntuales es posible gracias a que el suavizado se realiza en el dominio del volumen en lugar de en el dominio del tiempo, por lo que se logra una gran capacidad de filtrado del ruido sin introducir retardo en la serie suavizada.

El objetivo de un oráculo de precios no es eliminar por completo las operaciones de gran tamaño sino evitar las manipulaciones instantáneas de precios a la vez que proporciona un precio lo más actualizado posible. En esta tarea, el algoritmo propuesto por Geminon es extremadamente eficiente y supera a los algoritmos utilizados hasta ahora en otros protocolos descentralizados. La combinación de este oráculo con la característica de captura de entropía de los GLP hace extremadamente improbable que un ataque de manipulación de precio del token GEX resulte beneficioso para el atacante.

Última actualización