Solidity进阶之路:僵尸攻击人类 - 第4章: Require

Solidity Path: Beginner to Intermediate Smart Contracts

课程链接:https://cryptozombies.io/zh/lesson/2

你成功晋升到第二课啦!

厉害了,我的人类! 你比我设想的更会编程! 第二课中,你会学到如何通过猎食其他生物,扩张你的僵尸军团在这一课里,我们会使用到一些高级的Solidity概念,所以你一定要先完成第一课。

第4章: Require

在第一课中,我们成功让用户通过调用createRandomZombie函数,并输入一个名字来创建新的僵尸。但是,如果用户能持续调用这个函数来创建出无限多个僵尸加入他们的军团,这游戏就太没意思了!

于是,我们作出限定:每个玩家只能调用一次这个函数。这样一来,新玩家可以在刚开始玩游戏时通过调用它,为其军团创建初始僵尸。

我们怎样才能限定每个玩家只调用一次这个函数呢?

答案是使用requirerequire使得函数在执行过程中,当不满足某些条件时抛出错误,并停止执行:

function sayHiToVitalik(string _name) public returns (string) {
     
    // 比较`_name`是否等于`Vitalik`。如果不成立,抛出异常并终止程序。
    //(敲黑板:`Solidity`并不支持原生的字符串比较,我们只能通过比较两字符串的`keccak256`哈希值来进行判断)
    require(keccak256(_name) == keccak256("Vitalik"));
    // 如果返回`true`,运行如下语句
    return "Hi!";
}

如果你这样调用函数sayHiToVitalik(“Vitalik”),它会返回“Hi!”。而如果调用的时候使用了其他参数,它则会抛出错误并停止执行。

因此,在调用一个函数之前,用require验证前置条件是非常有必要的。

你可能感兴趣的:(Solidity,Path,智能合约,以太坊,区块链)