Recibo este error cuando transfiero algunos tokens al banco descentralizado Aquí está el código
Prueba.js:
await decentralbank.stakeTokens(tokens("100"), { from: customer, });BancoDescentralizado.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; }Tether.sol:
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; }Al mirar eso, supongo que olvidó aprobar la transferencia del token antes de llamar a stakeTokens .
await tether.approve(decentralbank.address, tokens("100"), { from: costumer, }); await decentralbank.stakeTokens(tokens("100"), { from: customer, }); Además, una nota de seguridad, debe llamar a transferFrom antes de que todos los cambios de estado en el contrato para evitar ataques de reingreso , o simplemente puede usar esta biblioteca .