首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >布尔返回方法:用"if“或需要量()验证输入?

布尔返回方法:用"if“或需要量()验证输入?
EN

Ethereum用户
提问于 2017-11-11 10:26:33
回答 2查看 1.4K关注 0票数 0

拥有创建新令牌的方法mint(address _to, uint256 _amount) ... returns (bool)。我想介绍一个供应限制,我不知道如何正确地验证输入。我是应该使用require(),抛出,还是应该像调用者所期望的那样返回布尔值?

这些选择的后果是什么?

代码语言:javascript
运行
复制
function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) {
    // TODO: validate amount is not too big.

    // Validate with require():
    // require((totalSupply + _amount) <= SUPPLY_LIMIT);

    // Or validate with if:
    // if ((totalSupply + _amount) > SUPPLY_LIMIT) return false;

    // Or throw?
    // if ((totalSupply + _amount) > SUPPLY_LIMIT) throw;

    totalSupply = totalSupply.add(_amount);
    if (totalSupply == SUPPLY_LIMIT) mintingFinished = true;

    balances[_to] = balances[_to].add(_amount);
    Mint(_to, _amount);
    Transfer(0x0, _to, _amount);

    assert(totalSupply <= SUPPLY_LIMIT);

    return true;
}

呼叫合同如下所示:

代码语言:javascript
运行
复制
contract Crowdsale {

    // ...

    function buyTokens(address beneficiary) public payable {
        require(beneficiary != 0x0);
        require(validPurchase());

        // ...
        token.mint(beneficiary, tokens); // return value not used
        // ...
  }
}
EN

回答 2

Ethereum用户

回答已采纳

发布于 2017-11-11 12:09:26

我想介绍一个供应限制,我不知道如何正确地验证输入。我是使用require(),抛出,还是像调用者所期望的那样返回布尔值?

该方法直接返回bool,我建议使用if和返回bool(状态定义为true或false)。

对于请求/抛出,它将返回“无效的Opcode”,还会使用上述相同的气体,并返回未定义的sate (无效的Opcode/不太友好的用户),这是不可取的。当您更改变量的状态时,通常会使用require,这不是这样的情况。

票数 1
EN

Ethereum用户

发布于 2017-11-11 13:39:10

实际上,您不应该在令牌的mint()函数中检查这个值。

如果您使用的是Open,那么这里有canMint修饰符,只要mintingFinished是假的,就允许造币。

因此,最好的方法,至少在我看来,以及在其他契约中遵循的模式是,检查令牌是否超过了buyTokens()函数中的硬上限。

稍后,当众销售结束时,您应该调用token.finishMinting(),以阻止您能够在众包之后创建新的令牌。

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/30460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档