Solidity BlockChain 无效金额检查

Posted

技术标签:

【中文标题】Solidity BlockChain 无效金额检查【英文标题】:Solidity BlockChain invalid amount check 【发布时间】: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 。这是某种约定吗?

提前谢谢你。

【问题讨论】:

【参考方案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;

【讨论】:

以上是关于Solidity BlockChain 无效金额检查的主要内容,如果未能解决你的问题,请参考以下文章

无法将 Solidity 合约部署到 Rinkeby 网络(无效的 asm.js:stdlib 的无效成员)

Solidity - 字符串中的无效字符

职位 | Blockchain Developer(E-Commerce)

区块链特辑——solidity语言基础

从 Web.js 连接到 Solidity 合约时地址无效

BlockChain 网站和相关博客列表