// SPDX-License-Identifier: MIT
pragma solidity ^0.7.6;
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a, "SafeMath: subtraction overflow");
uint256 c = a - b;
return c;
}
}
contract TestSafeMath {
using SafeMath for uint256;
uint256 public MAX_UINT256 = 2**256 - 1;
function testAdd(uint256 a, uint256 b) public pure returns (uint256) {
return a.add(b);
}
function testSub(uint256 a, uint256 b) public pure returns (uint256) {
return a.sub(b);
}
function testMaxUint256() public pure returns (uint256) {
return MAX_UINT256;
}
}
在Solidity中,库是可重用代码块的集合。库可以被认为是一种特殊的合约,只能定义函数和状态变量,而不能有函数调用或接收以太币。
在此示例中,我们定义了一个名为SafeMath
的库,其中包含基本算术函数(加法和减法)来处理整数溢出问题。然后,在另一个合约TestSafeMath
中,我们使用using
关键字将库引入到合约中,并调用库中的函数。
值得注意的是,在使用库时,需要在合约中包含using
语句。这使得库中的函数可以更轻松地调用,并大大提高了代码的重用性。