![cover](https://img-blog.csdnimg.cn/img_convert/fae48e90456b425398b72313710c5806.png)
Solidity library库的使用详解(2023版)
库是智能合约的精简版。就像智能合约一样,我们可以在其他合约中使用库的函数。但与智能合约不同的是,库不能有任何状态变量,它们也不能继承其他合约。这个库的目的很简单,这些库位于区块链上,包含可以被其他合约使用的代码。library用于定义合约库;库合约可以被其他合约引用并使用其提供的方法;参考库:http://github.com/OpenZeppelin/openzeppelin-contracts
·
什么是库?
库是智能合约的精简版。就像智能合约一样,我们可以在其他合约中使用库的函数。但与智能合约不同的是,库不能有任何状态变量,它们也不能继承其他合约。这个库的目的很简单,这些库位于区块链上,包含可以被其他合约使用的代码。
- 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值来查看两个字符串是否相等。
更多推荐
所有评论(0)