函数修饰符-公有函数和安全性
上一节
下一节
公有函数和安全性
现在来修改 mateAndMultiply 实现间隔周期。
回顾一下这个函数,前一步上我们将其可见性设置为public。你必须仔细地检查所有声明为 public 和 external的函数,来排除用户滥用它们的可能,谨防安全漏洞。请记住,如果这些函数没有类似 onlyOwner 这样的函数修饰符,用户能使用各种参数去调用它们。
检查完这个函数,用户可以直接调用并传入他们所希望的 _targetDna 或 species 。
仔细观察,这个函数只被 mateOnKitty() 调用,因此,想要防止漏洞,最简单的方法就是设其可见性为 internal,只被内部调用。
实战演习
目前函数
mateAndMultiply可见性为public。我们将其改为internal以保障合约安全。因为我们不希望用户调用它的时候塞进一堆乱七八糟的 DNA。mateAndMultiply过程需要参考gapTime。首先,在找到myPet之后,添加一个require语句来检查_isReady()并将myPet传递给它。这样用户必须等到区块宠物的间隔周期结束后才能执行mateAndMultiply功能。在函数结束时,调用
_triggerGap(myPet),标明配对行为触发了区块宠物新的间隔周期。


