异常处理
上一节
下一节
异常处理
Solidity 提供了很多错误检查和错误处理的方法。通常,检查是为了防止未经授权的代码访问,当发生错误时,状态会恢复到初始状态。
以下三个为错误处理的主要方法:
revert ( )require ( )assert ( )
本关卡我们主要来介绍 require。
require(bool condition)
如果不满足条件,此方法调用将恢复到原始状态。此方法用于检查输入或外部组件的错误。
例子:
function sayHiToPet(string _name) public returns (string) {
// 比较 _name 是否等于 "Pet". 如果不成立,抛出异常并终止程序
// (敲黑板: Solidity 并不支持原生的字符串比较, 我们只能通过比较
// 两字符串的 keccak256 哈希值来进行判断)
require(keccak256(_name) == keccak256("Pet"));
// 如果返回 true, 运行如下语句
return "Hi!";
}如果你这样调用函数 sayHiToPet(“Pet”) ,它会返回“Hi!”。而如果调用的时候使用了其他参数,它则会抛出错误并停止执行。
实战练习
在上面的关卡里我们成功让用户通过调用 createRandomPet 函数 并输入一个名字来创建新的宠物。 但是,如果用户能持续调用这个函数来创建出无限多个宠物,这个游戏就乱套了!
所以我们必须作出限定:每个玩家只能调用一次这个函数。 我们使用 require 来确保这个函数只有在每个用户第一次调用它的时候执行。这样一来,新玩家可以孵化他的第一个宠物。
在
createRandomPet的前面放置require语句。 使得函数先检查ownerPetCount [msg.sender]的值为 0 (否则系统会抛出一个错误)。

