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))); } }