CallableLoan
CallableLoan
Deployment on Ethereum mainnet:
https://etherscan.io/address/0x384fb62AdB60B18f561F83EBB31e84333DeF5205
A loan that allows the lenders to call back capital from the borrower.
LOCKER_ROLE
bytes32 LOCKER_ROLE
SPLIT_TOKEN_DUST_THRESHOLD
uint256 SPLIT_TOKEN_DUST_THRESHOLD
MAJOR_VERSION
uint8 MAJOR_VERSION
MINOR_VERSION
uint8 MINOR_VERSION
PATCH_VERSION
uint8 PATCH_VERSION
_staleCreditLine
struct StaleCallableCreditLine _staleCreditLine
drawdownsPaused
bool drawdownsPaused
allowedUIDTypes
uint256[] allowedUIDTypes
config
contract IGoldfinchConfig config
createdAt
uint256 createdAt
Time when the pool was initialized. Zero if uninitialized
borrower
address borrower
initialize
function initialize(contract IGoldfinchConfig _config, address _borrower, uint256 _limit, uint256 _interestApr, uint256 _numLockupPeriods, contract ISchedule _schedule, uint256 _lateFeeApr, uint256 _fundableAt, uint256[] _allowedUIDTypes) external
Initialize the pool. Can only be called once, and should be called in the same transaction as contract creation to avoid initialization front-running
Parameters
Name | Type | Description |
---|---|---|
_config | contract IGoldfinchConfig | address of GoldfinchConfig |
_borrower | address | address of borrower, a non-transferrable role for performing privileged actions like drawdown |
_limit | uint256 | |
_interestApr | uint256 | interest rate for the loan |
_numLockupPeriods | uint256 | the number of periods at the tail end of a principal period during which call requests are not allowed |
_schedule | contract ISchedule | |
_lateFeeApr | uint256 | late fee interest rate for the loan, which kicks in LatenessGracePeriodInDays days after a payment becomes late |
_fundableAt | uint256 | earliest time at which the first slice can be funded |
_allowedUIDTypes | uint256[] |
submitCall
function submitCall(uint256 callAmount, uint256 poolTokenId) external returns (uint256 callRequestedTokenId, uint256 remainingTokenId)
Submit a call request for the given amount of capital. The borrower is obligated to pay the call request back at the end of the corresponding call request period.
Parameters
Name | Type | Description |
---|---|---|
callAmount | uint256 | Amount of capital to call back |
poolTokenId | uint256 | Pool token id to be called back. |
Return Values
Name | Type | Description |
---|---|---|
callRequestedTokenId | uint256 | callRequestedTokenId Token id of the call requested token. |
remainingTokenId | uint256 | remainingTokenId Token id of the remaining token. |
deposit
function deposit(uint256 tranche, uint256 amount) external returns (uint256)
Supply capital to the loan.
Parameters
Name | Type | Description |
---|---|---|
tranche | uint256 | Should always be uncalled capital tranche index. |
amount | uint256 | amount of capital to supply |
Return Values
Name | Type | Description |
---|---|---|
[0] | uint256 | tokenId NFT representing your position in this pool |
depositWithPermit
function depositWithPermit(uint256 tranche, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external returns (uint256 tokenId)
Supply capital to the loan.
Parameters
Name | Type | Description |
---|---|---|
tranche | uint256 | Should always be uncalled capital tranche index. |
amount | uint256 | amount of capital to supply |
deadline | uint256 | deadline of permit operation |
v | uint8 | v portion of signature |
r | bytes32 | r portion of signature |
s | bytes32 | s portion of signature |
Return Values
Name | Type | Description |
---|---|---|
tokenId | uint256 | NFT representing your position in this pool |
withdraw
function withdraw(uint256 tokenId, uint256 amount) external returns (uint256, uint256)
Withdraw an already deposited amount if the funds are available. Caller must be the owner or approved by the owner on tokenId. Amount withdrawn is sent to the caller.
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | the NFT representing the position |
amount | uint256 | amount to withdraw (must be <= interest+principal available to withdraw) |
Return Values
Name | Type | Description |
---|---|---|
[0] | uint256 | |
[1] | uint256 |
withdrawMultiple
function withdrawMultiple(uint256[] tokenIds, uint256[] amounts) external
Withdraw from multiple tokens
Parameters
Name | Type | Description |
---|---|---|
tokenIds | uint256[] | NFT positions to withdraw. Caller must be an owner or approved on all tokens in the array |
amounts | uint256[] | amounts to withdraw from positions such that amounts[i] is withdrawn from position tokenIds[i] |
withdrawMax
function withdrawMax(uint256 tokenId) external returns (uint256 interestWithdrawn, uint256 principalWithdrawn)
Similar to withdraw but withdraw the max interest and principal available for tokenId
drawdown
function drawdown(uint256 amount) external
Drawdown the loan. The credit line's balance should increase by the amount drawn down. Junior capital must be locked before this function can be called. If senior capital isn't locked then this function will lock it for you (convenience to avoid calling lockPool() separately). This function should revert if the amount requested exceeds the the current slice's currentLimit This function should revert if the caller is not the borrower.
Parameters
Name | Type | Description |
---|---|---|
amount | uint256 | USDC to drawdown. This amount is transferred to the caller |
pay
function pay(uint256 amount) external returns (struct ILoan.PaymentAllocation)
Pay down interest + principal. Excess payments are refunded to the caller
{this} must be approved by msg.sender to transfer {amount} of USDC
Parameters
Name | Type | Description |
---|---|---|
amount | uint256 | USDC amount to pay |
Return Values
Name | Type | Description |
---|---|---|
[0] | struct ILoan.PaymentAllocation | PaymentAllocation info on how the payment was allocated |
pauseDrawdowns
function pauseDrawdowns() external
Pauses all drawdowns (but not deposits/withdraws)
unpauseDrawdowns
function unpauseDrawdowns() external
Unpause drawdowns
setAllowedUIDTypes
function setAllowedUIDTypes(uint256[] ids) external
Set accepted UID types for the loan. Requires that users have not already begun to deposit.
setFundableAt
function setFundableAt(uint256 newFundableAt) external
Update fundableAt
to a new timestamp. Only the borrower can call this.
getLoanType
function getLoanType() external pure returns (enum LoanType)
getLoanType was added to support the new callable loan type. It is not supported in older versions of ILoan (e.g. legacy TranchedPools)
getFundableAt
function getFundableAt() external view returns (uint256)
getAllowedUIDTypes
function getAllowedUIDTypes() external view returns (uint256[])
inLockupPeriod
function inLockupPeriod() public view returns (bool)
numLockupPeriods
function numLockupPeriods() public view returns (uint256)
estimateOwedInterestAt
function estimateOwedInterestAt(uint256 assumedBalance, uint256 timestamp) public view returns (uint256)
Returns a naive estimate of the interest owed at the timestamp. Omits any late fees, and assumes no future payments.
estimateOwedInterestAt
function estimateOwedInterestAt(uint256 timestamp) external view returns (uint256)
Returns a naive estimate of the interest owed at the timestamp. Omits any late fees, and assumes no future payments.
loanPhase
function loanPhase() public view returns (enum LoanPhase)
Returns the current phase of the loan. See documentation on LoanPhase enum.
interestBearingBalance
function interestBearingBalance() public view returns (uint256)
TODO: Low priority tests - currently only used for tests and frontend
getAmountsOwed
function getAmountsOwed(uint256 timestamp) external view returns (uint256 returnedInterestOwed, uint256 returnedInterestAccrued, uint256 returnedPrincipalOwed)
Compute interest and principal owed on the current balance at a future timestamp
Parameters
Name | Type | Description |
---|---|---|
timestamp | uint256 | time to calculate up to |
Return Values
Name | Type | Description |
---|---|---|
returnedInterestOwed | uint256 | |
returnedInterestAccrued | uint256 | |
returnedPrincipalOwed | uint256 |
uncalledCapitalTrancheIndex
function uncalledCapitalTrancheIndex() public view returns (uint256)
getUncalledCapitalInfo
function getUncalledCapitalInfo() external view returns (struct ICallableLoan.UncalledCapitalInfo)
getCallRequestPeriod
function getCallRequestPeriod(uint256 callRequestPeriodIndex) external view returns (struct ICallableLoan.CallRequestPeriod)
availableToCall
function availableToCall(uint256 tokenId) public view returns (uint256)
availableToWithdraw
function availableToWithdraw(uint256 tokenId) public view returns (uint256, uint256)
Query the max amount available to withdraw for tokenId's position
Parameters
Name | Type | Description |
---|---|---|
tokenId | uint256 | position to query max amount withdrawable for |
Return Values
Name | Type | Description |
---|---|---|
[0] | uint256 | |
[1] | uint256 |
hasAllowedUID
function hasAllowedUID(address sender) public view returns (bool)
_pay
function _pay(uint256 amount) internal returns (struct ILoan.PaymentAllocation)
_deposit
function _deposit(uint256 tranche, uint256 amount) internal returns (uint256)
Supply capital to the loan.
Parameters
Name | Type | Description |
---|---|---|
tranche | uint256 | Should always be uncalled capital tranche index. |
amount | uint256 | amount of capital to supply |
Return Values
Name | Type | Description |
---|---|---|
[0] | uint256 | tokenId NFT representing your position in this pool |
_withdraw
function _withdraw(struct IPoolTokens.TokenInfo tokenInfo, uint256 tokenId, uint256 amount) internal returns (uint256, uint256)
_withdraw
function _withdraw(struct IPoolTokens.TokenInfo tokenInfo, uint256 tokenId, uint256 amount, struct CallableCreditLine cl) internal returns (uint256, uint256)
_withdrawMax
function _withdrawMax(uint256 tokenId) internal returns (uint256, uint256)
nextPrincipalDueTime
function nextPrincipalDueTime() public view returns (uint256)
nextDueTimeAt
function nextDueTimeAt(uint256 timestamp) public view returns (uint256)
nextInterestDueTimeAt
function nextInterestDueTimeAt(uint256 timestamp) public view returns (uint256)
schedule
function schedule() public view returns (contract ISchedule)
_reserveFundsFeePercent
function _reserveFundsFeePercent() public view returns (uint256)
_availableToWithdraw
function _availableToWithdraw(struct IPoolTokens.TokenInfo tokenInfo) internal view returns (uint256 interestAvailable, uint256 principalAvailable)
_availableToWithdraw
function _availableToWithdraw(struct IPoolTokens.TokenInfo tokenInfo, struct CallableCreditLine cl) internal view returns (uint256 interestAvailable, uint256 principalAvailable)
_availableToWithdrawGivenProportions
function _availableToWithdrawGivenProportions(struct IPoolTokens.TokenInfo tokenInfo, uint256 totalInterestWithdrawable, uint256 totalPrincipalWithdrawable) internal view returns (uint256 interestAvailable, uint256 principalAvailable)
creditLine
function creditLine() external view returns (contract ICreditLine)
Pool's credit line, responsible for managing the loan's accounting variables
balance
function balance() public view returns (uint256)
interestOwed
function interestOwed() public view returns (uint256)
principalOwed
function principalOwed() public view returns (uint256)
termEndTime
function termEndTime() public view returns (uint256)
nextDueTime
function nextDueTime() public view returns (uint256)
interestAccruedAsOf
function interestAccruedAsOf() public view returns (uint256)
We keep this to conform to the ICreditLine interface, but it's redundant information
now that we have checkpointedAsOf
currentLimit
function currentLimit() public view returns (uint256)
limit
function limit() public view returns (uint256)
interestApr
function interestApr() public view returns (uint256)
lateFeeApr
function lateFeeApr() public view returns (uint256)
isLate
function isLate() public view returns (bool)
totalInterestAccrued
function totalInterestAccrued() public view returns (uint256)
If a checkpoint has not occurred, late fees may be overestimated beyond the next due time.
totalInterestAccruedAt
function totalInterestAccruedAt(uint256 timestamp) public view returns (uint256)
If a checkpoint has not occurred, late fees may be overestimated beyond the next due time.
totalInterestPaid
function totalInterestPaid() public view returns (uint256)
Cumulative interest paid back up to now
totalInterestOwed
function totalInterestOwed() public view returns (uint256)
If a checkpoint has not occurred, late fees may be overestimated beyond the next due time.
totalInterestOwedAt
function totalInterestOwedAt(uint256 timestamp) public view returns (uint256)
If a checkpoint has not occurred, late fees may be overestimated beyond the next due time.
interestOwedAt
function interestOwedAt(uint256 timestamp) public view returns (uint256)
If a checkpoint has not occurred, late fees may be overestimated beyond the next due time.
interestAccrued
function interestAccrued() public view returns (uint256)
If a checkpoint has not occurred, late fees may be overestimated beyond the next due time.
interestAccruedAt
function interestAccruedAt(uint256 timestamp) public view returns (uint256)
If a checkpoint has not occurred, late fees may be overestimated beyond the next due time.
principalOwedAt
function principalOwedAt(uint256 timestamp) public view returns (uint256)
Principal owed up to timestamp
totalPrincipalPaid
function totalPrincipalPaid() public view returns (uint256)
Returns the total amount of principal thats been paid
totalPrincipalOwedAt
function totalPrincipalOwedAt(uint256 timestamp) public view returns (uint256)
Cumulative principal owed at timestamp
totalPrincipalOwed
function totalPrincipalOwed() public view returns (uint256)
Cumulative principal owed at current timestamp
termStartTime
function termStartTime() public view returns (uint256)
Time of first drawdown
withinPrincipalGracePeriod
function withinPrincipalGracePeriod() public view returns (bool)
lastFullPaymentTime
function lastFullPaymentTime() public view returns (uint256)
pay
function pay(uint256, uint256) external pure returns (struct ILoan.PaymentAllocation)
Unsupported in callable loans.
maxLimit
function maxLimit() external pure returns (uint256)
Unsupported in callable loans.
setMaxLimit
function setMaxLimit(uint256) external pure
Unsupported in callable loans.
setLimit
function setLimit(uint256) external pure
Unsupported ICreditLine method kept for ICreditLine conformance
getVersion
function getVersion() external pure returns (uint8[3] version)
Returns the version triplet [major, minor, patch]
onlyLocker
modifier onlyLocker()