模块化
import
使用 import
导入合约,并使用导入的合约的内容。 import
可以使本地合约路径或远程地址
// A.sol
contract A {}
// B.sol
import "./A.sol"; // 导入合约A
contract B is A {}
library
库类似于合约,但你不能声明任何状态变量,也不能发送以太币。如果所有库函数都是 internal
的,则将库嵌入到合约中。
使用库合约需要使用 using for
, 如下所示
// safemath.sol
library SafeMath {
function add(uint x, uint y) internal pure returns (uint) {
uint z = x + y;
require(z >= x, "uint overflow");
return z;
}
}
// TestSafeMath.sol
import "./safemath.sol";
contract TestSafeMath {
// 使用 SafeMath, 则 uint 会拥有 SafeMath 所有方法
using SafeMath for uint;
uint public MAX_UINT = 2**256 - 1;
function testAdd(uint x, uint y) public pure returns (uint) {
return x.add(y);
}
function testSquareRoot(uint x) public pure returns (uint) {
return Math.sqrt(x);
}
}