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 的无效成员)