智能合约库
页面最后更新: 2025年8月21日
你无需从头开始编写项目中的每一个智能合约 我们有许多开源代码的智能合约库可为你的项目提供可重复利用的构建块,从而使你不必重新开始。
前提条件
在我们跳转到智能合约库之前,清楚地了解一个智能合约的构成是一个不错的主意。 若您尚未阅读智能合约剖析,请前往阅读。
程序库中有什么
你通常可以在智能合约库中找到两种构建模块:可以添加到合约中的可复用代码,与各种标准的实现。
行为
编写智能合约时,您很有可能会发现自己需要反复编写类似的模式,例如,指定一个_管理员_地址来执行合约中受保护的操作,或在发生意外问题时添加紧急_暂停_按钮。
智能合约程序库通常在 Solidity 中以程序库opens in a new tab或通过继承opens in a new tab的形式,为这些行为提供可重用的实现。
例如,下面是 OpenZeppelin 合约程序库opens in a new tab中 Ownable 合约opens in a new tab的简化版本,它将一个地址指定为合约的所有者,并提供一个修饰符,用于将方法的访问权限限制为仅该所有者可用。
1contract Ownable {2 address public owner;34 constructor() internal {5 owner = msg.sender;6 }78 modifier onlyOwner() {9 require(owner == msg.sender, "Ownable: caller is not the owner");10 _;11 }12}显示全部在你的合约中使用这个构建模块,你需要先导入它,然后在你自己的合约中扩展它。 这样,您就可以使用基础 Ownable 合约提供的修饰符来保护自己的函数。
1import ".../Ownable.sol"; // Path to the imported library23contract MyContract is Ownable {4 // The following function can only be called by the owner5 function secured() onlyOwner public {6 msg.sender.transfer(1 ether);7 }8}另一个流行的示例是 SafeMathopens in a new tab 或 DsMathopens in a new tab。 这些库(与基础合约不同)提供了语言本身不具有的带有溢出检查的算术函数。 使用这些库而不是本地的算术操作可以来防止你的合约出现溢出错误,这些错误可能会导致灾难性的后果!
标准
为促进可组合性和互操作性,以太坊社区以 ERC 的形式定义了多项标准。 您可以在标准部分阅读有关这些标准的更多信息。
当将以太坊意见征求作为你的合约的一部分时,更好的做法是寻找已有的标准去实现而不是试图推出你自己的方式。 许多智能合约库包含了最流行的以太坊意见征求标准的实现。 例如,无处不在的 ERC20 同质化代币标准可以在 HQ20opens in a new tab、DappSysopens in a new tab 和 OpenZeppelinopens in a new tab 中找到。 此外,一些以太坊意见征求还提供规范实现作为以太坊意见征求本身的一部分。
值得一提的是,一些以太坊意见征求不是独立的,而是对其他以太坊意见征求的补充。 例如,ERC2612opens in a new tab 为 ERC20 添加了一个扩展,以提高其可用性。
如何添加程序库
始终参考你所包含的库的文档,以获得关于如何将其包含在你的项目中的具体说明 一些 Solidity 合约程序库使用 npm 打包,因此您只需 npm install 即可安装它们。 大多数编译合约的工具都会在您的 node_modules 中查找智能合约程序库,因此您可以执行以下操作:
1// This will load the @openzeppelin/contracts library from your node_modules2import "@openzeppelin/contracts/token/ERC721/ERC721.sol";34contract MyNFT is ERC721 {5 constructor() ERC721("MyNFT", "MNFT") public { }6}无论您使用哪种方法,在引入程序库时,请务必留意语言版本。 例如,如果你用 Solidity 0.5 编写你的合约,你就不能使用 Solidity 0.6 的库。
何时使用
为你的项目使用智能合约库有几个好处。 首先,它为你提供了现成的构建模块,你可以将其纳入你的系统,而不必自己编码,从而节省了你的时间。
安全性也是一个重要的优点。 开源智能合约库也经常受到严格审查。 鉴于许多项目都依赖于它们,社区有强烈的动机来对它们持续审计。 在应用程序代码中发现错误比在可重用的合约库中发现错误要常见得多。 为增强安全性,有些程序库还会经过外部审计opens in a new tab。
然而,使用智能合约库有可能将你不熟悉的代码纳入你的项目。 导入一个合约并将其直接包含在你的项目中是很诱人的,但如果没有很好地理解该合约的作用,你可能会由于一个意外的行为而无意中在你的系统中引入一个问题。 一定要确保阅读你要导入的代码的文档,然后在使其成为你的项目的一部分之前审查代码本身。
最后,在决定是否包括一个库时,要考虑其总体使用情况。 一个被广泛采用的方案的好处是有一个更大的社区和更多的眼睛来关注它的问题。 在使用智能合约进行建设时,安全应该是你的首要关注点!
相关工具
OpenZeppelin 合约 - 最受欢迎的安全智能合约开发程序库。
DappSys - 安全、简单、灵活的智能合约构建模块。
HQ20 - 一个 Solidity 项目,包含合约、程序库和示例,可帮助您为现实世界构建功能齐全的分布式应用程序。
thirdweb Solidity SDK - 提供高效构建自定义智能合约所需的工具
相关教程
- 以太坊开发者安全注意事项– 关于构建智能合约时安全注意事项的教程,包括程序库的使用。
- 理解 ERC-20 代币智能合约 - 关于 ERC20 标准的教程,由多个程序库提供。
扩展阅读{#further-reading}
你还知道哪些对你有帮助的社区资源? 请编辑本页面并添加进来!