繁体   English   中英

错误:处理事务时出现 VM 异常:还原

[英]Error : VM Exception while processing transaction: revert

当我将一些代币转移到去中心化银行时出现此错误 这是代码

测试.js:

 await decentralbank.stakeTokens(tokens("100"), {
    from: customer,
  });

DecentralBank.sol:

function stakeTokens(uint256 _amount) public {


    tether.transferFrom(msg.sender, address(this), _amount);

    // update staking balance
    stakingBalance[msg.sender] = stakingBalance[msg.sender] + _amount;

    // add user to stakers array *only* if they haven't staked already
    if (!hasStaked[msg.sender]) {
        stakers.push(msg.sender);
    }

    // update stakng status
    isStaking[msg.sender] = true;
    hasStaked[msg.sender] = true;
}

系绳溶胶:

 function transferFrom(
    address _from,
    address _to,
    uint256 _value
) public  returns  (bool success) {
    require(_value <= balanceOf[_from]);
    require(_value <= allowance[_from][msg.sender]);
    balanceOf[_from] -= _value;
    balanceOf[_to] += _value;
    allowance[_from][msg.sender] -= _value;
    emit Transfer(_from, _to, _value);
    return true;
}

通过查看,我猜你忘记了在调用stakeTokens之前批准令牌传输。

await tether.approve(decentralbank.address, tokens("100"), {
  from: costumer,
});

await decentralbank.stakeTokens(tokens("100"), {
  from: customer,
});

另外,一个安全注意事项,你应该在合同中的所有 state 更改之前调用transferFrom以避免重入攻击,或者你可以只使用这个

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM