Giter Site home page Giter Site logo

assembly-safemath-library's Introduction

Introduction

Since v0.8.0, Solidity supports overflow and underflow checks for arithmetic operations, but inline assembly does not. This discrepancy necessitates a custom implementation to ensure the same level of safety when working with assembly code. This library presents a SafeMath library written in inline assembly to provide these essential checks, preventing potential vulnerabilities in smart contracts that rely on low-level arithmetic operations.

Contract Overview

The SafeMath library includes four arithmetic functions (add, sub, mul, div) with overflow and underflow checks using assembly. Custom errors enhance readability and debugging.

Documentation

One of the complex operation was the division, let’s Breakdown of Division Function:

  • Division by Zero Check: Ensures rhs is not zero.
  • INT256_MIN/-1 Check: Prevents overflow when lhs is INT256_MIN and rhs is -1.
    • eq(lhs, 0x8000...0000): Checks if the left-hand side is equal to INT256_MIN (the smallest possible int256).
    • eq(rhs, 0xffff...ffff): Checks if the right-hand side is equal to -1 in two's complement representation.

This part prevents the overflow that would occur when dividing INT256_MIN by -1, as the result (2^255) is too large to be represented in an int256.

  • Division Operation: Performs signed division using sdiv.

Usage

If you are developing smart contracts and using assembly/Yul code, this SafeMath library will definitely assist you, especially with complex arithmetic operations. By ensuring overflow and underflow checks, it offers a reliable way to handle arithmetic in low-level assembly, crucial for maintaining contract integrity and security.

Conclusion

While this project demonstrates high code quality and rigorous testing, it has not been audited and should be used cautiously.

assembly-safemath-library's People

Contributors

nour608 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.