I'm trying to implement a flash loan using aave-v3 flash loan contracts. and when testing using hardhat I get this error:

Error: 

    Transaction reverted: function returned an unexpected amount of data
        at FlashLoan.constructor (contracts/utils/FlashLoanSimpleReceiverBase.sol:22)
        at EthModule._estimateGasAction (flashLoan/node_modules/hardhat/src/internal/hardhat-network/provider/modules/eth.ts:425:7)
        at HardhatNetworkProvider.request (flashLoan/node_modules/hardhat/src/internal/hardhat-network/provider/provider.ts:118:18)
        at EthersProviderWrapper.send (flashLoan/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)



& this is my implementation 


    // SPDX-License-Identifier: UNLICENSED
    pragma solidity 0.8.10;
    
    import "./utils/IERC20.sol";
    import "./utils/FlashLoanSimpleReceiverBase.sol";
    
    contract FlashLoan is FlashLoanSimpleReceiverBase {
    address payable owner;
    address assetAddress;

    error NotOwner();
    error NotEnoughFunds();

    constructor (address _poolAddress) FlashLoanSimpleReceiverBase(IPoolAddressesProvider(_poolAddress)) {
        owner = payable(msg.sender);
    }

    function executeOperation(
        address asset,
        uint256 amount,
        uint256 premium,
        address initiator,
        bytes calldata params
    ) external returns (bool) {
        IERC20 token = IERC20(asset);
        uint256 debt = amount + premium;
        if (token.balanceOf(address(this)) < debt) revert NotEnoughFunds();
        token.approve(address(POOL), debt);
        return true;
    }

    function flashloan(address _assetAddress, uint256 amount) external {
        if (msg.sender != owner) revert NotOwner();
        assetAddress = _assetAddress;
        address recieverAddress = address(this);
        bytes memory params = '';
        uint16 referralCode = 0;

        POOL.flashLoanSimple(recieverAddress, assetAddress, amount, params, referralCode);
    }

    function withdraw() external {
        if (msg.sender != owner) revert NotOwner();
        IERC20 token = IERC20(assetAddress);
        token.transfer(owner, token.balanceOf(address(this)));
    }
    }