You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
1.4 KiB

  1. // SPDX-License-Identifier: MIT
  2. pragma solidity ^0.8.19;
  3. // TODO(zx): Replace all instances of SafeMath with OZ implementation
  4. library SafeMath {
  5. function add(uint256 a, uint256 b) internal pure returns (uint256) {
  6. uint256 c = a + b;
  7. require(c >= a, "SafeMath: addition overflow");
  8. return c;
  9. }
  10. function sub(uint256 a, uint256 b) internal pure returns (uint256) {
  11. return sub(a, b, "SafeMath: subtraction overflow");
  12. }
  13. function sub(
  14. uint256 a,
  15. uint256 b,
  16. string memory errorMessage
  17. ) internal pure returns (uint256) {
  18. require(b <= a, errorMessage);
  19. uint256 c = a - b;
  20. return c;
  21. }
  22. function mul(uint256 a, uint256 b) internal pure returns (uint256) {
  23. if (a == 0) {
  24. return 0;
  25. }
  26. uint256 c = a * b;
  27. require(c / a == b, "SafeMath: multiplication overflow");
  28. return c;
  29. }
  30. function div(uint256 a, uint256 b) internal pure returns (uint256) {
  31. return div(a, b, "SafeMath: division by zero");
  32. }
  33. function div(
  34. uint256 a,
  35. uint256 b,
  36. string memory errorMessage
  37. ) internal pure returns (uint256) {
  38. require(b > 0, errorMessage);
  39. uint256 c = a / b;
  40. assert(a == b * c + (a % b)); // There is no case in which this doesn't hold
  41. return c;
  42. }
  43. }