mirror of
https://github.com/autistic-symposium/blockchains-security-toolkit.git
synced 2025-05-13 20:22:26 -04:00
54 lines
919 B
Markdown
54 lines
919 B
Markdown
## overflow of numbers
|
|
|
|
<br>
|
|
|
|
|
|
<br>
|
|
|
|
----
|
|
|
|
### unchecked math
|
|
|
|
<br>
|
|
|
|
* overflow and underflow of numbers in solidity 0.8 throw an error. this can be disabled with `unchecked`.
|
|
* disabling overflow / underflow check saves gas.
|
|
|
|
<br>
|
|
|
|
```
|
|
contract UncheckedMath {
|
|
function add(uint x, uint y) external pure returns (uint) {
|
|
// 22291 gas
|
|
// return x + y;
|
|
|
|
// 22103 gas
|
|
unchecked {
|
|
return x + y;
|
|
}
|
|
}
|
|
|
|
function sub(uint x, uint y) external pure returns (uint) {
|
|
// 22329 gas
|
|
// return x - y;
|
|
|
|
// 22147 gas
|
|
unchecked {
|
|
return x - y;
|
|
}
|
|
}
|
|
|
|
function sumOfCubes(uint x, uint y) external pure returns (uint) {
|
|
// Wrap complex math logic inside unchecked
|
|
unchecked {
|
|
uint x3 = x * x * x;
|
|
uint y3 = y * y * y;
|
|
|
|
return x3 + y3;
|
|
}
|
|
}
|
|
}
|
|
|
|
```
|
|
|
|
<br>
|