各位,我正在开发ERC-20令牌,我想知道为什么SafeMath被用作OpenZeppelin实现中的库?如果我们把它作为继承链上的基础合同提供,难道不是更理想吗?
发布于 2018-04-26 13:09:32
SafeMath的函数都声明为internal。这意味着实际上不必部署库,因为函数由编译器“内联”:它们的代码只是从库代码复制到调用函数。
像contract A is B、A这样的继承关系是B。在SafeMath的情况下,如果我只想在另一个合同中使用SafeMath的S功能,那就不适用了。
发布于 2018-04-26 14:45:34
实际上,就气体成本而言,它在用作库时更为理想,因为您不进行外部函数调用(库函数驻留在您的合同中)。
此外,SafeMath本质上是一个“库”,即它提供了一种特定但通用的功能,因此将其声明为库更有意义。
它唯一的缺点是库,如果您想要对它进行更改,那么您必须重新部署整个契约,因为它不包含对SafeMath契约的引用,为此您可以预先添加一个setter函数。
https://ethereum.stackexchange.com/questions/46780
复制相似问题