guys, I am developing ERC-20 token and I am wondering why SafeMath is used as as library in the OpenZeppelin implementation? Will not it be more optimal if we supply it as a base contract on the inheritance chain?

2 Answers 2


SafeMath's functions are all declared as internal. That means that the library doesn't actually have to be deployed, as the functions are 'inlined' by the compiler: their code is just copied from the library code to the calling function.

An inheritance relationship like contract A is B, A is a B. In case of SafeMath, that does not hold if I just want to use SafeMath's functionality in another contract.


Actually, as far as gas cost is concerned, it is more optimal when used as a library, since you do not make external function calls (the library functions reside within your contract).

In addition, SafeMath is a "library by nature", i.e., it supplies a specific yet general kind of functionality, so it makes a lot more sense to declare it as a library.

The only down side of it being a library, is that if you ever want to make changes in it, then you will have to redeploy the entire contract, since it does not contain a reference to a SafeMath contract, for which you can add a setter function in advance.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.