No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Introducción a OpenZeppelin

Curso de Introducción a OpenZeppelin

Sebastián Leonardo Perez

Sebastián Leonardo Perez

Operaciones matemáticas

11/19
Recursos

Dentro del repositorio de OpenZeppelin encontrarás una serie de contratos útiles para resolver problemas frecuentes. Uno de ellos, es la resolución de operaciones matemáticas y evitar problemas con estas.

Resolución de problemas matemáticos

Las variables numéricas, tanto con signo como sin signo, solían tener un problema denominado Overflow y Underflow.

Cuando una variable entera llega a su límite máximo que puede representar, y se le suma uno, se reinicia a cero. Caso contrario, lo mismo ocurre cuando se encuentra en su límite mínimo y se le resta uno, pasa al valor máximo que puede representar.

Por ejemplo, si una variable puede almacenar como máximo el valor 999, al sumarle uno pasará a 000 y si le restamos uno a este vuelve a 999.

Afortunadamente, el problema ha sido resuelto a partir de la versión 0.8.0 del compilador de Solidity. Si ocurriese uno de estos tipos de errores, se lanzará un error y se revierte la operación

Es muy importante tener en cuenta la compatibilidad hacia atrás. Contratos inteligentes que fueron desarrollados con versiones anteriores a la 0.8.0 aún tienen este problema que puede ser resulto con librerías que hagan las respectivas validaciones como Math de OpenZeppelin.

Si te encuentras realizando mantenimiento a contratos inteligentes desarrollados hace algunos años, es posible que te encuentres con librerías como SafeMath de OpenZeppelin para resolver estos problemas.

Como desarrollador de contratos inteligentes, será muy importante que estudies este tipo de vulnerabilidades. El Curso de Introducción a Seguridad de Smart Contracts de Platzi te aguarda para que aprendas a desarrollar contratos de forma segura.


Contribución creada por: Kevin Fiorentino (Platzi contributor).

Aportes 3

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Para mi gusto falta un ejemplo practico de las implementaciones, ya han pasado varios videos en este curso donde se dice que se ve como implementar x o y utillidad y realmente lo unico que se hizo fue entrar al github y mostrar el código.

Solo entrar a github y mostrar el código de dicha utilidad no cuenta como ver la implementación.

La librería Math de OpenZeppelin es imprescindible utilizar en contratos menores a la versión 0.8.0 para evitar problemas de Overflow/Underflow.
A partir de la versión 0.8.0, inclusive, el propio compilador de Solidity realiza el chequeo de este bug y ya no es necesaria su utilización.
Sin embargo, proyectos legacy pueden estar utilizando esta librería o una implementación similar. Por eso, es importante conocer este problema y cómo solucionarlo.

Comparto un ejemplo de contrato para explotar esta vulnerabilidad y jugar en algún entorno como Remix para estudiar el caso.