SafeMath and under/overflow attacks
Solidity in previous versions (prior to 0.8) has been subject to integer overflow and underflow attacks. Before exploring these attacks, it is important to understand what overflow and underflow mean in terms of Solidity.
Integer overflow is a mechanism that occurs when you assign an integer value more than the variable can accept. In such cases, the value assigned is different and calculated by starting over with the minimum value, supported by the data type. For example, uint8
in Solidity can accept values ranging from 0 to 255. Assigning a value of 256 to uint8
would assign a value of 1 to the variable. Similarly, assigning 257 to uint8
would assign a value of 2 to the variable.
Integer underflow is similar to overflow. The difference is that the value assignment happens at the lower boundary for an acceptable value for a datatype. Assigning a value of -1 to uint8
would recycle its value to 255. Similarly, assigning -2 to uint8
would assign...