Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0x12d9fBC1dc633017192F0D9b513D38e6D0f99cE6
Balance 0.003406 ETH
Nonce 1
Code Size 5714 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

5714 bytes
0x6080604052600436106100595760003560e01c80630542975c14610065578063524533eb14610090578063920f5c84146100b95780639e281a98146100f6578063b4dcfc771461011f578063d54ba9541461014a57610060565b3661006057005b600080fd5b34801561007157600080fd5b5061007a610173565b6040516100879190611211565b60405180910390f35b34801561009c57600080fd5b506100b760048036038101906100b29190610de6565b610197565b005b3480156100c557600080fd5b506100e060048036038101906100db9190610cfe565b610309565b6040516100ed91906111f6565b60405180910390f35b34801561010257600080fd5b5061011d60048036038101906101189190610cc2565b610598565b005b34801561012b57600080fd5b506101346106f5565b604051610141919061122c565b60405180910390f35b34801561015657600080fd5b50610171600480360381019061016c9190610cc2565b610719565b005b7f000000000000000000000000b53c1a33016b2dc2ff3653530bff1848a515c8c581565b80518251146101db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101d290611287565b60405180910390fd5b60003090506000835167ffffffffffffffff811115610223577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156102515781602001602082028036833780820191505090505b509050600060405180602001604052806000815250905060007f0000000000000000000000007d2768de32b0b80b7a3454c06bdac94a69ddc7a973ffffffffffffffffffffffffffffffffffffffff1663ab9c4b5d858888873088886040518863ffffffff1660e01b81526004016102cf9796959493929190611142565b600060405180830381600087803b1580156102e957600080fd5b505af11580156102fd573d6000803e3d6000fd5b50505050505050505050565b60003073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161037090611247565b60405180910390fd5b60005b8a8a90508110156105865760008b8b838181106103c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906103d79190610c99565b905060008a8a84818110610414577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002013590506000898985818110610458577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002013590506000818361046f91906113f8565b90508373ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007d2768de32b0b80b7a3454c06bdac94a69ddc7a9836040518363ffffffff1660e01b81526004016104cc9291906111cd565b602060405180830381600087803b1580156104e657600080fd5b505af11580156104fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051e9190610e52565b508373ffffffffffffffffffffffffffffffffffffffff167f61268d74931c41c9775dffb6169a5208aab1d09cb2eb6aabe8b97162801e5dfa84846040516105679291906112a7565b60405180910390a250505050808061057e9061151f565b91505061037c565b50600190509998505050505050505050565b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016105d29190611127565b60206040518083038186803b1580156105ea57600080fd5b505afa1580156105fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106229190610e7b565b1015610663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065a90611267565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161069e9291906111cd565b602060405180830381600087803b1580156106b857600080fd5b505af11580156106cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f09190610e52565b505050565b7f0000000000000000000000007d2768de32b0b80b7a3454c06bdac94a69ddc7a981565b60003090506000600167ffffffffffffffff811115610761577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561078f5781602001602082028036833780820191505090505b50905083816000815181106107cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000600167ffffffffffffffff81111561084a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156108785781602001602082028036833780820191505090505b50905083816000815181106108b6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250506000600167ffffffffffffffff811115610905577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156109335781602001602082028036833780820191505090505b509050600081600081518110610972577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250506000309050600060405180602001604052806000815250905060007f0000000000000000000000007d2768de32b0b80b7a3454c06bdac94a69ddc7a973ffffffffffffffffffffffffffffffffffffffff1663ab9c4b5d888888888888886040518863ffffffff1660e01b81526004016109fe9796959493929190611142565b600060405180830381600087803b158015610a1857600080fd5b505af1158015610a2c573d6000803e3d6000fd5b50505050505050505050505050565b6000610a4e610a4984611301565b6112d0565b90508083825260208201905082856020860282011115610a6d57600080fd5b60005b85811015610a9d5781610a838882610b13565b845260208401935060208301925050600181019050610a70565b5050509392505050565b6000610aba610ab58461132d565b6112d0565b90508083825260208201905082856020860282011115610ad957600080fd5b60005b85811015610b095781610aef8882610c6f565b845260208401935060208301925050600181019050610adc565b5050509392505050565b600081359050610b22816115d7565b92915050565b60008083601f840112610b3a57600080fd5b8235905067ffffffffffffffff811115610b5357600080fd5b602083019150836020820283011115610b6b57600080fd5b9250929050565b600082601f830112610b8357600080fd5b8135610b93848260208601610a3b565b91505092915050565b60008083601f840112610bae57600080fd5b8235905067ffffffffffffffff811115610bc757600080fd5b602083019150836020820283011115610bdf57600080fd5b9250929050565b600082601f830112610bf757600080fd5b8135610c07848260208601610aa7565b91505092915050565b600081519050610c1f816115ee565b92915050565b60008083601f840112610c3757600080fd5b8235905067ffffffffffffffff811115610c5057600080fd5b602083019150836001820283011115610c6857600080fd5b9250929050565b600081359050610c7e81611605565b92915050565b600081519050610c9381611605565b92915050565b600060208284031215610cab57600080fd5b6000610cb984828501610b13565b91505092915050565b60008060408385031215610cd557600080fd5b6000610ce385828601610b13565b9250506020610cf485828601610c6f565b9150509250929050565b600080600080600080600080600060a08a8c031215610d1c57600080fd5b60008a013567ffffffffffffffff811115610d3657600080fd5b610d428c828d01610b28565b995099505060208a013567ffffffffffffffff811115610d6157600080fd5b610d6d8c828d01610b9c565b975097505060408a013567ffffffffffffffff811115610d8c57600080fd5b610d988c828d01610b9c565b95509550506060610dab8c828d01610b13565b93505060808a013567ffffffffffffffff811115610dc857600080fd5b610dd48c828d01610c25565b92509250509295985092959850929598565b60008060408385031215610df957600080fd5b600083013567ffffffffffffffff811115610e1357600080fd5b610e1f85828601610b72565b925050602083013567ffffffffffffffff811115610e3c57600080fd5b610e4885828601610be6565b9150509250929050565b600060208284031215610e6457600080fd5b6000610e7284828501610c10565b91505092915050565b600060208284031215610e8d57600080fd5b6000610e9b84828501610c84565b91505092915050565b6000610eb08383610ed4565b60208301905092915050565b6000610ec88383611109565b60208301905092915050565b610edd8161144e565b82525050565b610eec8161144e565b82525050565b6000610efd82611379565b610f0781856113b4565b9350610f1283611359565b8060005b83811015610f43578151610f2a8882610ea4565b9750610f358361139a565b925050600181019050610f16565b5085935050505092915050565b6000610f5b82611384565b610f6581856113c5565b9350610f7083611369565b8060005b83811015610fa1578151610f888882610ebc565b9750610f93836113a7565b925050600181019050610f74565b5085935050505092915050565b610fb781611460565b82525050565b6000610fc88261138f565b610fd281856113d6565b9350610fe28185602086016114ec565b610feb816115c6565b840191505092915050565b610fff816114a4565b82525050565b61100e816114c8565b82525050565b60006110216011836113e7565b91507f496e76616c696420696e69746961746f720000000000000000000000000000006000830152602082019050919050565b60006110616014836113e7565b91507f496e73756666696369656e742062616c616e63650000000000000000000000006000830152602082019050919050565b60006110a16022836113e7565b91507f546f6b656e7320616e6420616d6f756e7473206c656e677468206d69736d617460008301527f63680000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6111038161146c565b82525050565b6111128161149a565b82525050565b6111218161149a565b82525050565b600060208201905061113c6000830184610ee3565b92915050565b600060e082019050611157600083018a610ee3565b81810360208301526111698189610ef2565b9050818103604083015261117d8188610f50565b905081810360608301526111918187610f50565b90506111a06080830186610ee3565b81810360a08301526111b28185610fbd565b90506111c160c08301846110fa565b98975050505050505050565b60006040820190506111e26000830185610ee3565b6111ef6020830184611118565b9392505050565b600060208201905061120b6000830184610fae565b92915050565b60006020820190506112266000830184610ff6565b92915050565b60006020820190506112416000830184611005565b92915050565b6000602082019050818103600083015261126081611014565b9050919050565b6000602082019050818103600083015261128081611054565b9050919050565b600060208201905081810360008301526112a081611094565b9050919050565b60006040820190506112bc6000830185611118565b6112c96020830184611118565b9392505050565b6000604051905081810181811067ffffffffffffffff821117156112f7576112f6611597565b5b8060405250919050565b600067ffffffffffffffff82111561131c5761131b611597565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561134857611347611597565b5b602082029050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006114038261149a565b915061140e8361149a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561144357611442611568565b5b828201905092915050565b60006114598261147a565b9050919050565b60008115159050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006114af826114b6565b9050919050565b60006114c18261147a565b9050919050565b60006114d3826114da565b9050919050565b60006114e58261147a565b9050919050565b60005b8381101561150a5780820151818401526020810190506114ef565b83811115611519576000848401525b50505050565b600061152a8261149a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561155d5761155c611568565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6115e08161144e565b81146115eb57600080fd5b50565b6115f781611460565b811461160257600080fd5b50565b61160e8161149a565b811461161957600080fd5b5056fea2646970667358221220f70c148683ff562eed0e6bd0c9a13fe86249bcfbc9b302841743926eaea9986364736f6c63430008000033

Verified Source Code Partial Match

Compiler: v0.8.0+commit.c7dfd78e EVM: istanbul Optimization: No
WrapperUSDTFlash.sol 349 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
pragma experimental ABIEncoderV2;

library DataTypes {
  struct ReserveData {
    ReserveConfigurationMap configuration;
    uint128 liquidityIndex;
    uint128 variableBorrowIndex;
    uint128 currentLiquidityRate;
    uint128 currentVariableBorrowRate;
    uint128 currentStableBorrowRate;
    uint40 lastUpdateTimestamp;
    address aTokenAddress;
    address stableDebtTokenAddress;
    address variableDebtTokenAddress;
    address interestRateStrategyAddress;
    uint8 id;
  }

  struct ReserveConfigurationMap {
    uint256 data;
  }

  struct UserConfigurationMap {
    uint256 data;
  }

  enum InterestRateMode {NONE, STABLE, VARIABLE}
}

library Address {
  function isContract(address account) internal view returns (bool) {
    bytes32 codehash;
    bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
    assembly {
      codehash := extcodehash(account)
    }
    return (codehash != accountHash && codehash != 0x0);
  }

  function sendValue(address payable recipient, uint256 amount) internal {
    require(address(this).balance >= amount, 'Address: insufficient balance');
    (bool success, ) = recipient.call{value: amount}('');
    require(success, 'Address: unable to send value, recipient may have reverted');
  }
}

interface IERC20 {
  function totalSupply() external view returns (uint256);
  function balanceOf(address account) external view returns (uint256);
  function transfer(address recipient, uint256 amount) external returns (bool);
  function allowance(address owner, address spender) external view returns (uint256);
  function approve(address spender, uint256 amount) external returns (bool);
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    require(c >= a, 'SafeMath: addition overflow');
    return c;
  }

  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    return sub(a, b, 'SafeMath: subtraction overflow');
  }

  function sub(
    uint256 a,
    uint256 b,
    string memory errorMessage
  ) internal pure returns (uint256) {
    require(b <= a, errorMessage);
    uint256 c = a - b;
    return c;
  }

  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }

    uint256 c = a * b;
    require(c / a == b, 'SafeMath: multiplication overflow');
    return c;
  }

  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    return div(a, b, 'SafeMath: division by zero');
  }

  function div(
    uint256 a,
    uint256 b,
    string memory errorMessage
  ) internal pure returns (uint256) {
    require(b > 0, errorMessage);
    uint256 c = a / b;
    return c;
  }

  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    return mod(a, b, 'SafeMath: modulo by zero');
  }

  function mod(
    uint256 a,
    uint256 b,
    string memory errorMessage
  ) internal pure returns (uint256) {
    require(b != 0, errorMessage);
    return a % b;
  }
}

library SafeERC20 {
  using SafeMath for uint256;
  using Address for address;

  function safeTransfer(
    IERC20 token,
    address to,
    uint256 value
  ) internal {
    callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
  }

  function safeTransferFrom(
    IERC20 token,
    address from,
    address to,
    uint256 value
  ) internal {
    callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
  }

  function safeApprove(
    IERC20 token,
    address spender,
    uint256 value
  ) internal {
    require(
      (value == 0) || (token.allowance(address(this), spender) == 0),
      'SafeERC20: approve from non-zero to non-zero allowance'
    );
    callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
  }

  function callOptionalReturn(IERC20 token, bytes memory data) private {
    require(address(token).isContract(), 'SafeERC20: call to non-contract');
	
    (bool success, bytes memory returndata) = address(token).call(data);
    require(success, 'SafeERC20: low-level call failed');

    if (returndata.length > 0) {
      require(abi.decode(returndata, (bool)), 'SafeERC20: ERC20 operation did not succeed');
    }
  }
}



interface ILendingPoolAddressesProvider {
  event MarketIdSet(string newMarketId);
  event LendingPoolUpdated(address indexed newAddress);
  event ConfigurationAdminUpdated(address indexed newAddress);
  event EmergencyAdminUpdated(address indexed newAddress);
  event LendingPoolConfiguratorUpdated(address indexed newAddress);
  event LendingPoolCollateralManagerUpdated(address indexed newAddress);
  event PriceOracleUpdated(address indexed newAddress);
  event LendingRateOracleUpdated(address indexed newAddress);
  event ProxyCreated(bytes32 id, address indexed newAddress);
  event AddressSet(bytes32 id, address indexed newAddress, bool hasProxy);

  function getMarketId() external view returns (string memory);
  function setMarketId(string calldata marketId) external;
  function setAddress(bytes32 id, address newAddress) external;
  function setAddressAsProxy(bytes32 id, address impl) external;
  function getAddress(bytes32 id) external view returns (address);
  function getLendingPool() external view returns (address);
  function setLendingPoolImpl(address pool) external;
  function getLendingPoolConfigurator() external view returns (address);
  function setLendingPoolConfiguratorImpl(address configurator) external;
  function getLendingPoolCollateralManager() external view returns (address);
  function setLendingPoolCollateralManager(address manager) external;
  function getPoolAdmin() external view returns (address);
  function setPoolAdmin(address admin) external;
  function getEmergencyAdmin() external view returns (address);
  function setEmergencyAdmin(address admin) external;
  function getPriceOracle() external view returns (address);
  function setPriceOracle(address priceOracle) external;
  function getLendingRateOracle() external view returns (address);
  function setLendingRateOracle(address lendingRateOracle) external;
}

interface ILendingPool {
  event Deposit(address indexed reserve, address user, address indexed onBehalfOf, uint256 amount, uint16 indexed referral);
  event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount);
  event Borrow(address indexed reserve, address user, address indexed onBehalfOf, uint256 amount, uint256 borrowRateMode, uint256 borrowRate, uint16 indexed referral);
  event Repay(address indexed reserve, address indexed user, address indexed repayer, uint256 amount);
  event Swap(address indexed reserve, address indexed user, uint256 rateMode);
  event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user);
  event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user);
  event RebalanceStableBorrowRate(address indexed reserve, address indexed user);
  event FlashLoan(address indexed target, address indexed initiator, address indexed asset, uint256 amount, uint256 premium, uint16 referralCode);
  event Paused();
  event Unpaused();
  event LiquidationCall(address indexed collateralAsset, address indexed debtAsset, address indexed user, uint256 debtToCover, uint256 liquidatedCollateralAmount, address liquidator, bool receiveAToken);
  event ReserveDataUpdated(address indexed reserve, uint256 liquidityRate, uint256 stableBorrowRate, uint256 variableBorrowRate, uint256 liquidityIndex, uint256 variableBorrowIndex);

  function deposit(address asset, uint256 amount, address onBehalfOf, uint16 referralCode) external;
  function withdraw(address asset, uint256 amount, address to) external returns (uint256);
  function borrow(address asset, uint256 amount, uint256 interestRateMode, uint16 referralCode, address onBehalfOf) external;
  function repay(address asset, uint256 amount, uint256 rateMode, address onBehalfOf) external returns (uint256);
  function swapBorrowRateMode(address asset, uint256 rateMode) external;
  function rebalanceStableBorrowRate(address asset, address user) external;
  function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external;
  function liquidationCall(address collateralAsset, address debtAsset, address user, uint256 debtToCover, bool receiveAToken) external;
  function flashLoan(address receiverAddress, address[] calldata assets, uint256[] calldata amounts, uint256[] calldata modes, address onBehalfOf, bytes calldata params, uint16 referralCode) external;
  function getUserAccountData(address user) external view returns (uint256 totalCollateralETH, uint256 totalDebtETH, uint256 availableBorrowsETH, uint256 currentLiquidationThreshold, uint256 ltv, uint256 healthFactor);
  function initReserve(address reserve, address aTokenAddress, address stableDebtAddress, address variableDebtAddress, address interestRateStrategyAddress) external;
  function setReserveInterestRateStrategyAddress(address reserve, address rateStrategyAddress) external;
  function setConfiguration(address reserve, uint256 configuration) external;
  function getConfiguration(address asset) external view returns (DataTypes.ReserveConfigurationMap memory);
  function getUserConfiguration(address user) external view returns (DataTypes.UserConfigurationMap memory);
  function getReserveNormalizedIncome(address asset) external view returns (uint256);
  function getReserveNormalizedVariableDebt(address asset) external view returns (uint256);
  function getReserveData(address asset) external view returns (DataTypes.ReserveData memory);
  function finalizeTransfer(address asset, address from, address to, uint256 amount, uint256 balanceFromAfter, uint256 balanceToBefore) external;
  function getReservesList() external view returns (address[] memory);
  function getAddressesProvider() external view returns (ILendingPoolAddressesProvider);
  function setPause(bool val) external;
  function paused() external view returns (bool);
}

interface IFlashLoanReceiver {
  function executeOperation(
    address[] calldata assets,
    uint256[] calldata amounts,
    uint256[] calldata premiums,
    address initiator,
    bytes calldata params
  ) external returns (bool);

  function ADDRESSES_PROVIDER() external view returns (ILendingPoolAddressesProvider);

  function LENDING_POOL() external view returns (ILendingPool);
}

abstract contract FlashLoanReceiverBase is IFlashLoanReceiver {
  using SafeERC20 for IERC20;
  using SafeMath for uint256;

  ILendingPoolAddressesProvider public immutable override ADDRESSES_PROVIDER;
  ILendingPool public immutable override LENDING_POOL;

  constructor(ILendingPoolAddressesProvider provider)  {
    ADDRESSES_PROVIDER = provider;
    LENDING_POOL = ILendingPool(provider.getLendingPool());
  }
}

contract WrapperUSDTFlash is FlashLoanReceiverBase {
    event FlashLoanExecuted(address indexed token, uint256 amount, uint256 premium);
    event FlashLoanFailed(address indexed token, uint256 amount, string reason);

    constructor(ILendingPoolAddressesProvider _addressProvider)
        FlashLoanReceiverBase(_addressProvider)
    {}

    function executeOperation(
        address[] calldata assets,
        uint256[] calldata amounts,
        uint256[] calldata premiums,
        address initiator,
        bytes calldata params
    ) external override returns (bool) {
        
        require(initiator == address(this), "Invalid initiator");

        for (uint256 i = 0; i < assets.length; i++) {
            address token = assets[i];
            uint256 amount = amounts[i];
            uint256 premium = premiums[i];

            uint256 amountOwing = amount + premium;
            IERC20(token).approve(address(LENDING_POOL), amountOwing);

            emit FlashLoanExecuted(token, amount, premium);
        }

        return true;
    }

    function requestFlashLoan(address _token, uint256 _amount) public {
        address receiverAddress = address(this);
        address[] memory assets = new address[](1);
        assets[0] = _token;

        uint256[] memory amounts = new uint256[](1);
        amounts[0] = _amount;

        uint256[] memory modes = new uint256[](1);
        modes[0] = 0;

        address onBehalfOf = address(this);
        bytes memory params = "";
        uint16 referralCode = 0;

        LENDING_POOL.flashLoan(
            receiverAddress,
            assets,
            amounts,
            modes,
            onBehalfOf,
            params,
            referralCode
        );
    }

    function requestMultiTokenFlashLoan(address[] memory _tokens, uint256[] memory _amounts) public {
        require(_tokens.length == _amounts.length, "Tokens and amounts length mismatch");

        address receiverAddress = address(this);
        uint256[] memory modes = new uint256[](_tokens.length); 
        bytes memory params = "";
        uint16 referralCode = 0;

        LENDING_POOL.flashLoan(
            receiverAddress,
            _tokens,
            _amounts,
            modes,
            address(this),
            params,
            referralCode
        );
    }

    function withdrawToken(address _token, uint256 _amount) external {
        require(IERC20(_token).balanceOf(address(this)) >= _amount, "Insufficient balance");
        IERC20(_token).transfer(msg.sender, _amount);
    }

    receive() external payable {}
}

Read Contract

ADDRESSES_PROVIDER 0x0542975c → address
LENDING_POOL 0xb4dcfc77 → address

Write Contract 4 functions

These functions modify contract state and require a wallet transaction to execute.

executeOperation 0x920f5c84
address[] assets
uint256[] amounts
uint256[] premiums
address initiator
bytes params
returns: bool
requestFlashLoan 0xd54ba954
address _token
uint256 _amount
requestMultiTokenFlashLoan 0x524533eb
address[] _tokens
uint256[] _amounts
withdrawToken 0x9e281a98
address _token
uint256 _amount

Recent Transactions

No transactions found for this address