-
Notifications
You must be signed in to change notification settings - Fork 49
/
Copy pathProtocolLike.sol
105 lines (89 loc) · 3.65 KB
/
ProtocolLike.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/**
* Copyright 2017-2021, bZeroX, LLC. All Rights Reserved.
* Licensed under the Apache License, Version 2.0.
*/
pragma solidity 0.5.17;
pragma experimental ABIEncoderV2;
import "../lib/MarginTradeStructHelpers.sol";
interface ProtocolLike {
function borrowOrTradeFromPool(
bytes32 loanParamsId,
bytes32 loanId, // if 0, start a new loan
bool isTorqueLoan,
uint256 initialMargin,
MarginTradeStructHelpers.SentAddresses 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)
MarginTradeStructHelpers.SentAmounts 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);
function borrowerNonce(address) external view returns (uint256);
function closeWithSwap(
bytes32 loanId,
address receiver,
uint256 swapAmount, // denominated in collateralToken
bool returnTokenIsCollateral, // true: withdraws collateralToken, false: withdraws loanToken
bytes calldata // for future use /*loanDataBytes*/
) external returns (uint256 loanCloseAmount, uint256 withdrawAmount, address withdrawToken);
function closeWithDeposit(
bytes32 loanId,
address receiver,
uint256 depositAmount // denominated in loanToken
)
external
payable
returns (uint256 loanCloseAmount, uint256 withdrawAmount, address withdrawToken);
}