solidity-library

  1. solidity-library
  2. 声明库
  3. 使用
    1. 利用using for指令
    2. 通过库合约名称调用库函数
  4. 部署测试

solidity-library

库函数是一种特殊的合约,为了提升solidity代码的复用性和减少gas而存在。库合约一般都是一些好用的函数合集(库函数),由大神或者项目方创作,咱们站在巨人的肩膀上,会用就行了。

他和普通合约主要有以下几点不同:

  • 不能存在状态变量
  • 不能够继承或被继承
  • 不能接收以太币
  • 不可以被销毁

声明库

使用library关键字声明库,一般都是独立到单独的文件中,下面简单的实现了一个减法方法,减去的结果必须大于等于0,否则报错

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

library Math {
    function sub(uint256 _x, uint256 _y) internal pure returns (uint256) {
        uint256 result = _x - _y;
        require(result >= 0, "");
        return result;
    }
}

使用

我们先要import库合约,使用库函数有两种方法;

利用using for指令

第一种是使用 using A for B,可用于附加库函数(从库 A)到任何类型(B)。添加完指令后,库A中的函数会自动添加为B类型变量的成员,可以直接调用。注意:在调用的时候,这个变量会被当作第一个参数传递给函数:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

import "./Math.sol";

contract testMath {

    using Math for uint256;
    
    function subXY1(uint256 _x, uint256 _y) public pure returns (uint256) {
        return _x.sub(_y);
    }
}

通过库合约名称调用库函数

直接通过库合约名调用

    function subXY2(uint256 _x, uint256 _y) public pure returns (uint256) {
        return Math.sub(_x, _y);
    }

部署测试

正常使用,两种方式都能正确的运行
69cc1434-c327-412b-b983-776362d6099f-image.png

如果结果小于0,则报错回退
477a4f5d-643b-4510-9c81-fa118c499ca2-image.png


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 289211569@qq.com