# Limitador de suministro

El contrato ERC20ElasticSupply es una extensión del estándar ERC20 que permite crear tokens con suministro elástico que pueden ser acuñados y quemados por otros contratos. Como medida de seguridad, el contrato incluye un limitador de acuñación cuyos parámetros quedan fijados por el constructor durante la creación del contrato del token.&#x20;

Tanto el token GEX como todas las monedas estables de Geminon incluyen este mecanismo de seguridad. Este sistema está pensado para los casos en los que se conceden permisos de acuñación de tokens de Geminon a contratos externos al protocolo, concretamente en el caso de puentes entre cadenas operados por terceras partes, ya que en caso de hackeo del puente se limita el daño posible al protocolo.&#x20;

### Algoritmo

El algoritmo, desarrollado por Geminon, se basa en un suavizado exponencial adaptativo cuyos parámetros $$w\_1$$ y $$w\_2$$ varían en función del intervalo $$\Delta t$$ transcurrido desde la última acuñación o quema del token.&#x20;

$$
\Delta t = t\_n - t\_{n-1}
$$

$$
\delta = \frac{86400}{\Delta t}
$$

$$
\alpha = \frac {2}{1+\delta}
$$

$$
w\_1 = \begin{cases}
\ \ \ 1 &\text{if } \Delta t = 0 \\
\alpha \cdot \delta &\text{if } \Delta t > 0
\end{cases}
$$

$$
w\_2 = \begin{cases}
\ \ \ \ 1 &\text{if } \Delta t = 0 \\
1-\alpha &\text{if } \Delta t > 0
\end{cases}
$$

$$
\lambda\_n = w\_1 v\_n + w\_2 \lambda\_{n-1}
$$

Donde $$\Delta t$$ es el intervalo de tiempo en segundos transcurrido desde la última operación y $$v\_n$$ es el volumen (número de tokens) que se quiere acuñar o quemar, en cuyo último caso tendrá valor negativo y se reducirá el valor de $$\lambda$$.

Nótese que el tiempo $$t$$ es una variable discreta definida por el momento de creación del bloque en el que se mina la transacción actual, por lo que aquellas transacciones minadas dentro de un mismo bloque tienen $$\Delta t = 0$$. En estos casos los pesos $$w\_1$$ y $$w\_2$$ toman valor 1 y el volumen de tokens de la transacción se suma directamente al acumulado hasta el momento.&#x20;

### Fundamentos

El algoritmo descrito está diseñado para aproximar mediante un cálculo mínimo el valor de una media móvil de periodo 24 horas calculada sobre una serie temporal discreta de frecuencia variable.&#x20;

En una aplicación informática tradicional, si deseamos monitorizar el valor acumulado de una variable discreta en un intervalo de tiempo determinado, lo que haríamos es crear una tabla que almacene cada valor de la variable junto con su marca de tiempo, y usar dicha tabla para calcular un promedio de todos los valores que estén dentro de la ventana de tiempo deseada, por ejemplo las últimas 24 horas.&#x20;

En una aplicación de blockchain sin embargo un cálculo básico como ese resultaría prohibitivo en coste. Primero, porque almacenar datos en blockchain, especialmente en una congestionada como Ethereum, es extremadamente caro. Y segundo, porque en cada transacción sería necesario iterar sobre las listas de valores y tiempos almacenados, con lo que la complejidad del cálculo y con ello el coste de la transacción crecería con el número de datos almacenados en el periodo.&#x20;

Esta aproximación no solo sería desproporcionadamente cara sino además peligrosa: dado un volumen de operaciones lo suficientemente alto, se podría alcanzar el límite de gas por bloque de la red, haciendo que las funciones de acuñación del token en cuestión quedaran temporalmente bloqueadas al revertir las transacciones que excedan dicho límite de gas. Un actor malicioso podría aprovechar esta vulnerabilidad para lanzar ataques de denegación de servicio contra el protocolo.&#x20;

Si tratáramos con una serie temporal uniforme, con los valores separados a intervalos regulares en el tiempo, se podría aproximar de forma sencilla la media móvil de periodo $$t$$ sin más que usar una media móvil exponencial equivalente con parámetro $$\alpha = 2/({1+t})$$. En este caso, dado que tampoco existe la posibilidad de imputar los valores faltantes para transformar la serie irregular en regular, la única opción pasa por la introducción de una variable $$\delta$$ que compensa la irregularidad en el domino de la frecuencia adaptando la intensidad del suavizado que se aplica a cada nuevo dato en función de cómo de alejado está de la frecuencia básica definida por el periodo de la media móvil que se trata de aproximar (86400 segundos en nuestro caso).&#x20;

### Eficacia del algoritmo

El algoritmo autorregresivo que ha diseñado Geminon es capaz de aproximar de forma óptima la curva de la media móvil calculada de forma explícita.&#x20;

<figure><img src="/files/xTFSLOOcCGZf02wtoWWk" alt=""><figcaption><p>Respuesta del estimador (naranja) a una señal constante (azul). Valor real de la serie en verde.</p></figcaption></figure>

En una simulación simple introduciendo operaciones de importe constante a intervalos constantes para producir una función rampa en el valor de la media móvil, el aproximador es capaz de seguir la rampa y converge perfectamente al nuevo nivel sin necesidad de almacenar los valores de la serie.&#x20;

<figure><img src="/files/rreeutUonhztW4FCDBfJ" alt=""><figcaption><p>Respuesta del estimador (naranja) a una señal aleatoria en amplitud y frecuencia (azul). Valor real de la serie en verde.</p></figcaption></figure>

En una prueba mucho más difícil, se introduce una serie de valores aleatorios a intervalos de tiempo también aleatorios. Como puede verse en la figura, el algoritmo diseñado por Geminon es capaz de seguir en todo momento el valor real de la media móvil a pesar de la fuerte aleatoriedad de la señal sin necesidad de almacenar los valores previos.&#x20;


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.geminon.fi/geminon-docs-esp/tokens/gex/limitador-de-suministro.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
