How do I properly call the transferTokens() function?

This first contract creates a liqudity pool for the two tokens on sepolia test net

// SPDX-License-Identifier: MIT
pragma solidity 0.8.25;

// Using npm package imports for a Hardhat or Truffle project
import "@uniswap/v3-core/contracts/interfaces/IUniswapV3Factory.sol";



contract createLpPool
{

    IUniswapV3Factory public immutable factory;
    address public immutable facaddy=0x0227628f3F023bb0B980b67D528571c95c6DaC1c;

    address public immutable WETH=0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14;
    address public immutable TESTTOKEN=0x46d8c56588aE7172701f2F20a026FCe95A06E871;

    uint24 public immutable fee=10000;

    constructor()
    {
        factory=IUniswapV3Factory(facaddy);
    }


    function makePool() external returns(address pool)
    {

        pool=factory.createPool(WETH,TESTTOKEN,fee);
        return pool;

    }
    

}

Then in this code I try adding some tokens and eth to the liqudity pool but then whenever I call the transferTokens() I get this error:Gas estimation errored with the following message (see below). The transaction execution will likely fail. Do you want to force sending?
Error happened while trying to execute a function inside a smart contract


pragma solidity 0.8.25;




import "@uniswap/v3-periphery/contracts/interfaces/INonfungiblePositionManager.sol";
import "@uniswap/v3-periphery/contracts/libraries/TransferHelper.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";





contract addLiq
{

 

    INonfungiblePositionManager public immutable managerAddress;
    address public managerAddy=0x1238536071E1c677A632429e3655c799b22cDA52;

    IERC20 public  WETH;
    IERC20 public  TESTTOKEN;

    

    uint24 public immutable Fee=10000;


    uint256 internal immutable amount0Desired=1 ether;
    uint256 internal immutable amount1Desired=50_000 ether;
    int24 internal immutable lowerTick= -887220;
    int24 internal immutable upperTick= 887220;
   


    constructor()
    {
        WETH=IERC20(0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14);
        TESTTOKEN=IERC20(0x46d8c56588aE7172701f2F20a026FCe95A06E871);
        managerAddress=INonfungiblePositionManager(managerAddy);
        
    }




    function approveContract() external 
    {
        // Check balances
        require(WETH.balanceOf(msg.sender) >= amount0Desired, "Insufficient WETH balance");
        require(TESTTOKEN.balanceOf(msg.sender) >= amount1Desired, "Insufficient ASND balance");

        // Check allowances
        require(WETH.approve(address(this),amount0Desired));
        require(TESTTOKEN.approve(address(this),amount1Desired));

    }
        
    function transferTokens() external 
    {    
        // Transfer tokens from the user to this contract
        require(WETH.transferFrom(msg.sender, address(this), amount0Desired), "WETH transfer failed");
        require(TESTTOKEN.transferFrom(msg.sender, address(this), amount1Desired), "ASND transfer failed");
    }






    function approveManagerContract() external
    {
        // Now approve Uniswap manager to use these tokens
        WETH.approve(address(managerAddress), amount0Desired);
        TESTTOKEN.approve(address(managerAddress), amount1Desired);
    }

    function addLiquidity() external 
    {
        // Ensure this contract already has the necessary approvals to Uniswap manager
        INonfungiblePositionManager.MintParams memory params = INonfungiblePositionManager.MintParams
        ({
            token0: address(WETH),
            token1: address(TESTTOKEN),
            fee: Fee,
            tickLower: lowerTick,
            tickUpper: upperTick,
            amount0Desired: amount0Desired,
            amount1Desired: amount1Desired,
            amount0Min: 0,
            amount1Min: 0,
            recipient: msg.sender,
            deadline: block.timestamp + 15 minutes
        });

        managerAddress.mint(params);






    }
}

I am trying to work off of this example adding liq example
But after sucessfully approve the contract to have access to the tokens and then I go to call transferTokens it gets the gas error.I have triple checked I have all the right contract addresses and that I have enough WETH and TESTTOKEN in my balance

1 Like