/** * Copyright 2017-2021, bZeroX, LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0. */ pragma solidity 0.5.17; interface ProtocolLike { function borrowOrTradeFromPool( bytes32 loanParamsId, bytes32 loanId, // if 0, start a new loan bool isTorqueLoan, uint256 initialMargin, address[4] calldata sentAddresses, // lender: must match loan if loanId provided // borrower: must match loan if loanId provided // receiver: receiver of funds (address(0) assumes borrower address) // manager: delegated manager of loan unless address(0) uint256[5] calldata sentValues, // newRate: new loan interest rate // newPrincipal: new loan size (borrowAmount + any borrowed interest) // torqueInterest: new amount of interest to escrow for Torque loan (determines initial loan length) // loanTokenReceived: total loanToken deposit (amount not sent to borrower in the case of Torque loans) // collateralTokenReceived: total collateralToken deposit bytes calldata loanDataBytes ) external payable returns (uint256 newPrincipal, uint256 newCollateral); function getTotalPrincipal(address lender, address loanToken) external view returns (uint256); function withdrawAccruedInterest(address loanToken) external; function getLenderInterestData(address lender, address loanToken) external view returns ( uint256 interestPaid, uint256 interestPaidDate, uint256 interestOwedPerDay, uint256 interestUnPaid, uint256 interestFeePercent, uint256 principalTotal ); function priceFeeds() external view returns (address); function getEstimatedMarginExposure( address loanToken, address collateralToken, uint256 loanTokenSent, uint256 collateralTokenSent, uint256 interestRate, uint256 newPrincipal ) external view returns (uint256); function getRequiredCollateral( address loanToken, address collateralToken, uint256 newPrincipal, uint256 marginAmount, bool isTorqueLoan ) external view returns (uint256 collateralAmountRequired); function getBorrowAmount( address loanToken, address collateralToken, uint256 collateralTokenAmount, uint256 marginAmount, bool isTorqueLoan ) external view returns (uint256 borrowAmount); function isLoanPool(address loanPool) external view returns (bool); function lendingFeePercent() external view returns (uint256); function getSwapExpectedReturn( address sourceToken, address destToken, uint256 sourceTokenAmount ) external view returns (uint256); }