// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; type Id is bytes32; struct MarketParams { address loanToken; address collateralToken; address oracle; address irm; uint256 lltv; } /// @dev Warning: For `feeRecipient`, `supplyShares` does not contain the accrued shares since the last interest /// accrual. struct Position { uint256 supplyShares; uint128 borrowShares; uint128 collateral; } interface IMorpho { function createMarket(MarketParams memory marketParams) external; function supply( MarketParams memory marketParams, uint256 assets, uint256 shares, address onBehalf, bytes calldata data ) external returns (uint256, uint256); function withdraw( MarketParams memory marketParams, uint256 assets, uint256 shares, address onBehalf, address receiver ) external returns (uint256, uint256); function borrow( MarketParams memory marketParams, uint256 assets, uint256 shares, address onBehalf, address receiver ) external returns (uint256, uint256); function repay( MarketParams memory marketParams, uint256 assets, uint256 shares, address onBehalf, bytes calldata data ) external returns (uint256, uint256); function supplyCollateral(MarketParams memory marketParams, uint256 assets, address onBehalf, bytes calldata data) external; function withdrawCollateral(MarketParams memory marketParams, uint256 assets, address onBehalf, address receiver) external; function position(Id id, address user) external view returns(Position memory); }