【问题标题】:Solidity BlockChain invalid amount checkSolidity BlockChain 无效金额检查
【发布时间】:2021-10-08 15:29:38
【问题描述】:
     // Attempt transfer tokens, when you have none
     invalidAmount = tokens(10) // recipient has no tokens ??
     await token.transfer(deployer, invalidAmount, { from: receiver }).should.be.rejectedWith(EVM_REVERT)

开发人员,我正在按照教程制作标准 ERC-20 令牌,其中有一个测试来检查用户是否发送零令牌。但仍然在导师提供的代码中,测试将 invalidAmount 定义为 10 个令牌。

有人可以告诉我为什么我们要传递 10 个令牌而不是 0 。这是某种约定吗?

提前谢谢你。

【问题讨论】:

    标签: blockchain solidity erc20


    【解决方案1】:

    如果发件人没有 10 个(或 20 个,或任意数量)他们尝试发送的令牌,则交易应该恢复。这个sn-p中测试的情况是这样的:

    should.be.rejectedWith(EVM_REVERT)
    

    所以这是一个检查交易是否真的在应该恢复的时候恢复的代码。


    根据合约的实施方式,有可能成功转移 0 个代币,但交易可能无法恢复。

    例如:

    function transfer(address _to, uint256 _amount) external returns (bool) {
        // doesn't revert, because their 0 balance is "greater or equal" to the 0 `amount`
        require(balances[msg.sender] >= _amount);
    
        balances[msg.sender] -= _amount; // subtract 0 from 0
        balances[_to] += _amount; // add 0
    
        emit Transfer(msg.sender, _to, _amount);
        return true;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-18
      • 1970-01-01
      • 2011-11-03
      • 2017-10-19
      • 2015-01-18
      • 1970-01-01
      • 2022-09-28
      • 1970-01-01
      相关资源
      最近更新 更多