LoanDesk

LoanDesk

Provides loan lifecycle.

config

struct ILoanDesk.LoanDeskConfig config

LoanDesk configuration parameters

loanTemplate

struct ILoanDesk.LoanTemplate loanTemplate

Default loan parameter values

nextApplicationId

uint256 nextApplicationId

Loan application id generator counter

loanApplications

mapping(uint256 => struct ILoanDesk.LoanApplication) loanApplications

Loan applications by applicationId

loanOffers

mapping(uint256 => struct ILoanDesk.LoanOffer) loanOffers

Loan offers by applicationId

recentApplicationIdOf

mapping(address => uint256) recentApplicationIdOf

Recent application id by address

nextLoanId

uint256 nextLoanId

Loan id generator counter

loans

mapping(uint256 => struct ILoanDesk.Loan) loans

Loans by loan ID

loanDetails

mapping(uint256 => struct ILoanDesk.LoanDetail) loanDetails

LoanDetails by loan ID

lentFunds

uint256 lentFunds

Accessor

Total funds lent at this time, accounts only for loan principals

weightedAvgAPR

uint32 weightedAvgAPR

Weighted average loan APR on the borrowed funds

applicationInStatus

modifier applicationInStatus(uint256 applicationId, enum ILoanDesk.LoanApplicationStatus status)

A modifier to limit access only to when the application exists and has the specified status

loanInStatus

modifier loanInStatus(uint256 loanId, enum ILoanDesk.LoanStatus status)

A modifier to limit access only to when the loan exists and has the specified status

updatedState

modifier updatedState()

Modifier to update pool accounting state before function execution

constructor

constructor() public

initialize

function initialize(address _pool, address _liquidityToken, address _accessControl, address _stakerAddress, bytes32 _lenderGovernanceRole) public

Initializer a new LoanDesk.

Addresses must not be 0.

NameTypeDescription

_pool

address

Lending pool address

_liquidityToken

address

ERC20 token contract address to be used as pool liquidity currency.

_accessControl

address

Access control contract

_stakerAddress

address

Staker address

_lenderGovernanceRole

bytes32

Role held by the timelock control that executed passed lender votes

setMinLoanAmount

function setMinLoanAmount(uint256 minAmount) external

Set a minimum loan amount.

minAmount must be greater than or equal to safeMinAmount. Caller must be the staker.

NameTypeDescription

minAmount

uint256

Minimum loan amount to be enforced on new loan requests and offers

setMinLoanDuration

function setMinLoanDuration(uint256 duration) external

Set the minimum loan duration

Duration must be in seconds and inclusively between SAFE_MIN_DURATION and maxDuration. Caller must be the staker.

NameTypeDescription

duration

uint256

Minimum loan duration to be enforced on new loan requests and offers

setMaxLoanDuration

function setMaxLoanDuration(uint256 duration) external

Set the maximum loan duration.

Duration must be in seconds and inclusively between minDuration and SAFE_MAX_DURATION. Caller must be the staker.

NameTypeDescription

duration

uint256

Maximum loan duration to be enforced on new loan requests and offers

setTemplateLoanGracePeriod

function setTemplateLoanGracePeriod(uint256 gracePeriod) external

Set the template loan payment grace period.

Grace period must be in seconds and inclusively between MIN_LOAN_GRACE_PERIOD and MAX_LOAN_GRACE_PERIOD. Caller must be the staker.

NameTypeDescription

gracePeriod

uint256

Loan payment grace period for new loan offers

setTemplateLoanAPR

function setTemplateLoanAPR(uint32 apr) external

Set a template loan APR

APR must be inclusively between SAFE_MIN_APR and 100%. Caller must be the staker.

NameTypeDescription

apr

uint32

Loan APR to be enforced on the new loan offers.

requestLoan

function requestLoan(uint256 _amount, uint256 _duration, string _profileId, string _profileDigest) external

Request a new loan.

_Requested amount must be greater or equal to minLoanAmount(). Loan duration must be between minDuration() and maxDuration(). Multiple pending applications from the same address are not allowed. _profileId and profileDigest are optional - provide nill values when not applicable.

NameTypeDescription

_amount

uint256

Liquidity token amount to be borrowed

_duration

uint256

Loan duration in seconds

_profileId

string

Borrower metadata profile id obtained from the borrower service

_profileDigest

string

Borrower metadata digest obtained from the borrower service

denyLoan

function denyLoan(uint256 appId) external

Deny a loan.

Loan must be in APPLIED status. Caller must be the staker.

draftOffer

function draftOffer(uint256 appId, uint256 _amount, uint256 _duration, uint256 _gracePeriod, uint256 _installmentAmount, uint16 _installments, uint32 _apr) external

Draft a loan offer for an application.

Loan application must be in APPLIED status. Caller must be the staker. Loan amount must not exceed available liquidity.

NameTypeDescription

appId

uint256

Loan application id

_amount

uint256

Loan amount in liquidity tokens

_duration

uint256

Loan term in seconds

_gracePeriod

uint256

Loan payment grace period in seconds

_installmentAmount

uint256

Minimum payment amount on each instalment in liquidity tokens

_installments

uint16

The number of payment installments

_apr

uint32

Annual percentage rate of this loan

updateDraftOffer

function updateDraftOffer(uint256 appId, uint256 _amount, uint256 _duration, uint256 _gracePeriod, uint256 _installmentAmount, uint16 _installments, uint32 _apr) external

Update an existing draft loan offer.

Loan application must be in OFFER_DRAFTED status. Caller must be the staker. Loan amount must not exceed available liquidity.

NameTypeDescription

appId

uint256

Loan application id

_amount

uint256

Loan amount in liquidity tokens

_duration

uint256

Loan term in seconds

_gracePeriod

uint256

Loan payment grace period in seconds

_installmentAmount

uint256

Minimum payment amount on each instalment in liquidity tokens

_installments

uint16

The number of payment installments

_apr

uint32

Annual percentage rate of this loan

lockDraftOffer

function lockDraftOffer(uint256 appId) external

Lock a draft loan offer.

Locking an offer makes it cancellable by a lender vote. Loan application must be in OFFER_DRAFTED status. Caller must be the staker.

NameTypeDescription

appId

uint256

Loan application id

offerLoan

function offerLoan(uint256 appId) external

Make a loan offer.

Loan application must be in OFFER_DRAFT_LOCKED status. Caller must be the staker. Voting lock period must have expired.

NameTypeDescription

appId

uint256

Loan application id

cancelLoan

function cancelLoan(uint256 appId) external

Cancel a loan.

Loan application must be in one of OFFER_MADE, OFFER_DRAFT_LOCKED, OFFER_MADE statuses. Caller must be the staker or the lender governance within the voting window.

borrow

function borrow(uint256 appId) external

Accept a loan offer and withdraw funds

Caller must be the borrower of the loan in question. The loan must be in OFFER_MADE status.

NameTypeDescription

appId

uint256

ID of the loan application to accept the offer of

repay

function repay(uint256 loanId, uint256 amount) external

Make a payment towards a loan.

Caller must be the borrower. Loan must be in OUTSTANDING status. Only the necessary sum is charged if amount exceeds amount due. Amount charged will not exceed the amount parameter.

NameTypeDescription

loanId

uint256

ID of the loan to make a payment towards.

amount

uint256

Payment amount

repayOnBehalf

function repayOnBehalf(uint256 loanId, uint256 amount, address borrower) external

Make a payment towards a loan on behalf of a borrower.

Loan must be in OUTSTANDING status. Only the necessary sum is charged if amount exceeds amount due. Amount charged will not exceed the amount parameter.

NameTypeDescription

loanId

uint256

ID of the loan to make a payment towards.

amount

uint256

Payment amount

borrower

address

address of the borrower to make a payment on behalf of.

defaultLoan

function defaultLoan(uint256 loanId) external

Default a loan.

Loan must be in OUTSTANDING status. Caller must be the staker. canDefault(loanId) must be true.

NameTypeDescription

loanId

uint256

ID of the loan to default

repayBase

function repayBase(uint256 loanId, uint256 amount) internal

Make a payment towards a loan.

Loan must be in OUTSTANDING status. Only the necessary sum is charged if amount exceeds amount due. Amount charged will not exceed the amount parameter.

NameTypeDescription

loanId

uint256

ID of the loan to make a payment towards

amount

uint256

Payment amount in tokens

updateAvgApr

function updateAvgApr(uint256 amountReducedBy, uint32 apr) internal

Internal method to update the weighted average loan apr based on the amount reduced by and an apr.

NameTypeDescription

amountReducedBy

uint256

amount by which the funds committed into strategy were reduced, due to repayment or loss

apr

uint32

annual percentage rate of the strategy

applicationsCount

function applicationsCount() external view returns (uint256)

Count of all loan requests in this pool.

NameTypeDescription

[0]

uint256

LoanApplication count.

loansCount

function loansCount() external view returns (uint256)

Count of all loans in this pool.

NameTypeDescription

[0]

uint256

Loan count.

loanBalanceDue

function loanBalanceDue(uint256 loanId) external view returns (uint256)

Loan balance due including interest if paid in full at this time.

Loan must be in OUTSTANDING status.

NameTypeDescription

loanId

uint256

ID of the loan to check the balance of

NameTypeDescription

[0]

uint256

Total amount due with interest on this loan

hasOpenApplication

function hasOpenApplication(address account) public view returns (bool)

canDefault

function canDefault(uint256 loanId) public view returns (bool)

View indicating whether or not a given loan qualifies to be defaulted

NameTypeDescription

loanId

uint256

ID of the loan to check

NameTypeDescription

[0]

bool

True if the given loan can be defaulted, false otherwise

validateLoanParams

function validateLoanParams(uint256 _amount, uint256 _duration, uint256 _gracePeriod, uint256 _installmentAmount, uint16 _installments, uint32 _apr) private view

Validates loan offer parameters

Throws a require-type exception on invalid loan parameter

NameTypeDescription

_amount

uint256

Loan amount in liquidity tokens

_duration

uint256

Loan term in seconds

_gracePeriod

uint256

Loan payment grace period in seconds

_installmentAmount

uint256

Minimum payment amount on each instalment in liquidity tokens

_installments

uint16

The number of payment installments

_apr

uint32

Annual percentage rate of this loan

loanBalanceDueWithInterest

function loanBalanceDueWithInterest(uint256 loanId) private view returns (uint256, uint256, uint256)

Loan balances due if paid in full at this time.

NameTypeDescription

loanId

uint256

ID of the loan to check the balance of

NameTypeDescription

[0]

uint256

Principal outstanding, interest outstanding, and the number of interest acquired days

[1]

uint256

[2]

uint256

payableLoanBalance

function payableLoanBalance(uint256 loanId, uint256 maxPaymentAmount) private view returns (uint256, uint256, uint256)

Loan balances payable given a max payment amount.

NameTypeDescription

loanId

uint256

ID of the loan to check the balance of

maxPaymentAmount

uint256

Maximum liquidity token amount user has agreed to pay towards the loan

NameTypeDescription

[0]

uint256

Total transfer amount, interest payable, and the number of payable interest days, and the current loan balance

[1]

uint256

[2]

uint256

countInterestDays

function countInterestDays(uint256 borrowedTime, uint256 interestPaidTillTime) private view returns (uint256)

Get the number of days in a time period to witch an interest can be applied.

Returns the floor of the unix day count, but not less than 1.

NameTypeDescription

borrowedTime

uint256

Block timestamp of the loan borrowed time.

interestPaidTillTime

uint256

Block timestamp up to which the interest is paid for.

NameTypeDescription

[0]

uint256

Floor count of unix day in a time period to witch an interest can be applied.

canClose

function canClose() internal view returns (bool)

Indicates whether or not the contract can be closed in it's current state.

Overrides a hook in SaplingStakerContext.

NameTypeDescription

[0]

bool

True if the contract is closed, false otherwise.

canOpen

function canOpen() internal view returns (bool)

Indicates whether or not the contract can be opened in it's current state.

Overrides a hook in SaplingStakerContext.

NameTypeDescription

[0]

bool

True if the conditions to open are met, false otherwise.

percentDecimals

function percentDecimals() external pure returns (uint8)

External accessor for library level percent decimals.

Last updated