1 2 3 4 5 6 7 8 9 10 11 |
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract IntegerOverflowExample { uint public maxValue = 2**256 - 1; // El valor máximo que puede almacenar un uint256 function overflow() public view returns (uint) { // No es necesario almacenar el resultado en una variable return maxValue + 1; } } |
Este contrato de Solidity ilustra un ejemplo de desbordamiento de enteros. Veamos el código paso a paso:
- contract IntegerOverflowExample: Aquí se define el contrato
IntegerOverflowExample
. - uint public maxValue = 2**256 – 1 En esta línea se declara una variable pública
maxValue
de tipouint
(entero sin signo de 256 bits) y se le asigna el valor máximo que puede contener unuint256
. Este valor se calcula como 2 elevado a la potencia de 256 menos 1. Es importante destacar que el valor máximo es extremadamente grande y prácticamente imposible de representar en la práctica. - function overflow() public view returns (uint): Aquí se define una función pública llamada
overflow
, que no modifica el estado del contrato (view
) y devuelve un valor de tipouint
. - return maxValue + 1; Dentro de la función
overflow
, se intenta realizar una operación de suma conmaxValue
y 1. Dado quemaxValue
ya es el valor máximo que puede contener unuint256
, sumarle 1 resultará en un desbordamiento de enteros.