escribo 2 contratos
cuando se llama a la función "marketBuy", puede transferir NFT al comprador y puede llamar a quemar desde el contrato ERC20. Pero cuando cambio la función "grabar" a "transferir/transferir desde", aparece un error como este
transacción a NFT2.marketBuy pendiente... transacción a NFT2.marketBuy con error: error de VM: revertir.
revert La transacción ha sido revertida al estado inicial. Nota: La función llamada debe pagarse si envía valor y el valor que envía debe ser menor que su saldo actual. Depure la transacción para obtener más información.
este es el codigo
... function marketBuy(uint _tokenId) public returns (bool) { address _buyer = msg.sender; uint _price = marketItem[_tokenId].price; IERC20(ERC20Token).approve(marketItem[_tokenId].seller, _price); IERC20(ERC20Token).transferFrom(_buyer, marketItem[_tokenId].seller, _price); transferFrom(marketItem[_tokenId].seller, _buyer, _tokenId); marketItem[_tokenId].seller = _buyer; marketItem[_tokenId].isSold = true; return true; } ....No sé cómo resolver esto.
Para esta linea
IERC20(ERC20Token).approve(marketItem[_tokenId].seller, _price);quien llama es el contrato mismo, no es el comprador.
Entonces, el comprador debe llamar a la función de transfer manualmente en el contrato ERC-20