合约中有一些功能,只能被授权为 拥有者
的地址才能调用。
传统的处理方式如下:
Solidity 0.4.10之前(以及其后一段时间),这种强制授权处理方式很普遍:
contract HasAnOwner {
address owner;
function useSuperPowers(){
if (msg.sender != owner) { throw; }
// do something only the owner should be allowed to do
}
}
如果 useSuperPowers()
函数被其它非拥有者调用,此函数将抛出“返回无效操作代码错误”,回滚所有状态改变,而且消耗掉剩下的gas。
然而,solidity 提供了更加聪明的办法。
Solidity ^0.4.24
contract HasAnOwner {
address owner;
require(msg.sender == owner);
...
}
错误处理: Assert, Require, Revert
assert(bool condition)
:如果条件不满足,则抛出,消耗掉剩余的gas - 用于内部错误。 require(bool condition):
如果条件不满足,则抛出,