I'm trying to create a split swap smart contract. This contract works fine on the BSC chain, but on ETH I got the error "TransferHelper: TRANSFER_FROM_FAILED", why?

SplitSwap.sol

    // SPDX-License-Identifier: GPL-3.0
    
    pragma solidity >=0.8.2 <0.9.0;
    
    import '@uniswap/v2-core/contracts/interfaces/IERC20.sol';
    import '@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol';
    
    contract SplitSwap {
    
        function splitSwap(address token0, address token1, address router, uint256 amount, uint256 size) public {
    
            IERC20(token0).transferFrom(msg.sender, address(this), amount);
    
            IERC20(token0).approve(router, amount);
            
            address[] memory paths = new address[](2);
    
            paths[0] = token0;
            paths[1] = token1;
    
            while (amount > 0) {
    
                uint amountIn = amount < size ? amount : size;
                uint amountOut = 0;
    
                IUniswapV2Router02(router).swapExactTokensForTokens(
                    amountIn, 
                    amountOut, 
                    paths, 
                    msg.sender,
                    block.timestamp + 120);
    
                amount = amount - amountIn;
            }  
        }
    }