> For the complete documentation index, see [llms.txt](https://zokyo-auditing-tutorials.gitbook.io/zokyo-gas-savings/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://zokyo-auditing-tutorials.gitbook.io/zokyo-gas-savings/tutorials/gas-saving-technique-12-safemath-no-longer-needed.md).

# Gas Saving Technique 12: SafeMath no longer needed

{% hint style="info" %}
[**Book an audit with Zokyo**](https://www.zokyo.io/)
{% endhint %}

#### Introduction

Efficient gas usage in smart contracts is crucial for the cost-effective operation on the Ethereum network. With the release of Solidity 0.8, some previously essential libraries are no longer needed, creating an opportunity for gas savings. One notable example is the `SafeMath` library, which was commonly used to prevent integer overflow and underflow. Since Solidity 0.8, these checks are built into the compiler, making `SafeMath` redundant and removable for gas optimization.

#### Impact & Details

**Understanding Gas Consumption**

* **SafeMath Overhead**: Previously, the `SafeMath` library was indispensable for safely conducting arithmetic operations. However, it introduces additional gas costs due to the external library calls and checks it performs.
* **Compiler-Level Checks**: Starting with Solidity 0.8, the compiler includes built-in checks for integer overflow and underflow, eliminating the need for `SafeMath` and thereby saving gas on each transaction that involves arithmetic operations.

#### How to Remove SafeMath for Gas Savings

**Practical Example: Removing SafeMath**

Here’s a contract example before and after the removal of `SafeMath`:

Before Optimization:

```solidity
solidityCopy code// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;

import "@openzeppelin/contracts/math/SafeMath.sol";

contract MyContract {
    using SafeMath for uint256;

    function add(uint256 a, uint256 b) public pure returns (uint256) {
        return a.add(b);
    }
}
```

After Optimization:

```solidity
solidityCopy code// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract MyContract {
    function add(uint256 a, uint256 b) public pure returns (uint256) {
        return a + b;  // Safe due to built-in overflow checks in Solidity 0.8 and above
    }
}
```

#### Recommended Mitigation Steps

1. **Identify SafeMath Usage**: Look through your smart contracts to identify where `SafeMath` is being used.
2. **Remove SafeMath**: For contracts using Solidity 0.8 and above, remove `SafeMath` and refactor arithmetic operations to use standard operators.
3. **Test**: After removal, rigorously test the contract to ensure it maintains expected functionality while saving gas on arithmetic operations.

#### Conclusion

Removing the `SafeMath` library from smart contracts compiled with Solidity 0.8 and above is a straightforward and effective optimization technique for reducing gas consumption. Though the savings per transaction may seem small, it can amount to a substantial total when considering the volume of transactions processed over time. Ensure to comprehensively test the contract post-optimization to validate its behavior and the gas savings achieved.
