什么是库?

库是智能合约的精简版。就像智能合约一样,我们可以在其他合约中使用库的函数。但与智能合约不同的是,库不能有任何状态变量,它们也不能继承其他合约。这个库的目的很简单,这些库位于区块链上,包含可以被其他合约使用的代码。

  • library用于定义合约库;
  • 库合约可以被其他合约引用并使用其提供的方法;
  • 参考库:http://github.com/OpenZeppelin/openzeppelin-contracts(OpenZeppelin Contracts 是一个用于安全智能合约开发的库。它提供了 ERC20 和 ERC721 等标准的实现,可以按需部署或扩展以满足需求,还提供 Solidity 组件来构建自定义合同和更复杂的分散系统);

库的演示:实现字符串比较函数

首先我们先来写个库,它的功能是实现字符串的比较

// SPDX-License-Identifier: Apache-2.0

pragma solidity ^0.8.7;

library libstring{
    function isEqual(string memory a,string memory b)internal pure returns(bool){
        bytes32 hashA = keccak256(abi.encode(a));
        bytes32 hashB = keccak256(abi.encode(b));
        return hashA == hashB;

    }
}

这里我们用library关键字定义了名为libstring的库,提供了名为isEqual的方法;

库的函数一般使用internal,不是给外部调用的,而是内部使用的;

之后我们再来写个library_demo合约,来对库合约进行调用

// SPDX-License-Identifier: Apache-2.0

pragma solidity ^0.8.7;

import "./libstring.sol";

contract library_demo{
    using libstring for string;         //这个库要给string类型的使用

    function isMyEqual(string memory a,string memory b)public  pure returns(bool){
        return a.isEqual(b);

    }

}           

这边需要注意的是将a和b比较,我们需要用a.isEqual(b),因为第一个a默认变成了string本身,这是从面向对象的角度去处理的,这部分原理不太好理解,记住它的用法就可以了。通过返回bool值来查看两个字符串是否相等。

Logo

为所有Web3兴趣爱好者提供学习成长、分享交流、生态实践、资源工具等服务,作为Anome Land原住民可不断优先享受各种福利,共同打造全球最大的Web3 UGC游戏平台。

更多推荐