El problema de los límites. La falla de overflow y underflow ocurre solamente en variables de tipo “enteras”. Pensemos en el “contador de km” o el “contador de visitas” el cual es un contador secuencial que va sumando e incrementando valores enteros de forma que cuando se alcanza el máximo valor posible representable en el contador, vuelve a empezar de cero. Por ejemplo, llegamos al máximo “999” y al siguiente incremento volvemos a iniciar de “000”. Lo mismo ocurre si volvemos hacia atrás, de “000” disminuimos un valor, nos vamos al máximo posible de este ejemplo que sería “999”.
En el caso de las variables enteras va a suceder lo mismo, porque si almacenamos un valor en cero y le restamos uno, nos iremos al máximo valor posible representable en ese tipo de variable, y eso va a depender del tamaño de número entero que hayamos elegido. Y viceversa.
Esto llevado a un balance, es una falla muy grave, dado que courriría que un balance en cero, pasaría a tener el máximo valor representable. Esto aplica a los números enteros, no importa si es con signo positivo o negativo.
Afortunadamente, desde la versión 0.8 de Solidity, este problema ya está resuelto por el “compilador”, es decir, si tenemos alguna operación con un número entero que tiene el problema de overflow, ya el “compilador” ejecuta una acción de error, por lo tanto no tenemos que preocuparnos.
Pero qué pasa… en el mundo de contratos inteligentes, encontraremos muchos contratos que están implementados en versiones anteriores del compilador y que, lamentablemente, aún cuentan con este problema.
De modo que la solución es:
- actualizar el compilador a las últimas versiones, y llevar los contratos a la versión del compilador,
- utilizar librerías para operar de manera segura.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?