Skip to content

Latest commit

 

History

History
1508 lines (1031 loc) · 41.7 KB

open-term-loan.md

File metadata and controls

1508 lines (1031 loc) · 41.7 KB

OpenTermLoan

\

Functions

HUNDRED_PERCENT

The value that represents 100%, to be easily comparable with the loan rates.

    function HUNDRED_PERCENT()
        view
        returns (
            uint256
        );

Return Values:

Index Name Type Internal Type Description
0 uint256 uint256

\

acceptBorrower

Accept the borrower role, must be called by pendingBorrower.

    function acceptBorrower()
        nonpayable;

\

acceptLender

Accept the lender role, must be called by pendingLender.

    function acceptLender()
        nonpayable;

\

acceptNewTerms

Accept the proposed terms and trigger refinance execution.

    function acceptNewTerms(
        address refinancer_,
        uint256 deadline_,
        bytes[] calls_
    )
        nonpayable
        returns (
            bytes32 refinanceCommitment_
        );

Parameters:

Index Name Type Internal Type Description
0 refinancer_ address address The address of the refinancer contract.
1 deadline_ uint256 uint256 The deadline for accepting the new terms.
2 calls_ bytes[] bytes[] The encoded arguments to be passed to refinancer.

Return Values:

Index Name Type Internal Type Description
0 refinanceCommitment_ bytes32 bytes32 The hash of the accepted refinance agreement.

\

borrower

The borrower of the loan, responsible for repayments.

    function borrower()
        view
        returns (
            address
        );

Return Values:

Index Name Type Internal Type Description
0 address address

\

calledPrincipal

The amount of principal yet to be returned to satisfy the loan call.

    function calledPrincipal()
        view
        returns (
            uint256
        );

Return Values:

Index Name Type Internal Type Description
0 uint256 uint256

\

callPrincipal

The lender called the loan, giving the borrower a notice period within which to return principal and pro-rata interest.

    function callPrincipal(
        uint256 principalToReturn_
    )
        nonpayable
        returns (
            uint40 paymentDueDate_,
            uint40 defaultDate_
        );

Parameters:

Index Name Type Internal Type Description
0 principalToReturn_ uint256 uint256 The minimum amount of principal the borrower must return.

Return Values:

Index Name Type Internal Type Description
0 paymentDueDate_ uint40 uint40 The new payment due date for returning the principal and pro-rate interest to the lender.
1 defaultDate_ uint40 uint40 The date the loan will be in default.

\

dateCalled

The timestamp of the date the loan was called.

    function dateCalled()
        view
        returns (
            uint40
        );

Return Values:

Index Name Type Internal Type Description
0 uint40 uint40

\

dateFunded

The timestamp of the date the loan was funded.

    function dateFunded()
        view
        returns (
            uint40
        );

Return Values:

Index Name Type Internal Type Description
0 uint40 uint40

\

dateImpaired

The timestamp of the date the loan was impaired.

    function dateImpaired()
        view
        returns (
            uint40
        );

Return Values:

Index Name Type Internal Type Description
0 uint40 uint40

\

datePaid

The timestamp of the date the loan was last paid.

    function datePaid()
        view
        returns (
            uint40
        );

Return Values:

Index Name Type Internal Type Description
0 uint40 uint40

\

defaultDate

The timestamp of the date the loan will be in default.

    function defaultDate()
        view
        returns (
            uint40 paymentDefaultDate_
        );

Return Values:

Index Name Type Internal Type Description
0 paymentDefaultDate_ uint40 uint40

\

delegateServiceFeeRate

The annualized delegate service fee rate.

    function delegateServiceFeeRate()
        view
        returns (
            uint64
        );

Return Values:

Index Name Type Internal Type Description
0 uint64 uint64

\

factory

The address of the proxy factory.

    function factory()
        view
        returns (
            address factory_
        );

Return Values:

Index Name Type Internal Type Description
0 factory_ address address

\

fund

Lend funds to the loan/borrower.

    function fund()
        nonpayable
        returns (
            uint256 fundsLent_,
            uint40 paymentDueDate_,
            uint40 defaultDate_
        );

Return Values:

Index Name Type Internal Type Description
0 fundsLent_ uint256 uint256 The amount funded.
1 paymentDueDate_ uint40 uint40 The due date of the first payment.
2 defaultDate_ uint40 uint40 The timestamp of the date the loan will be in default.

\

fundsAsset

The address of the fundsAsset funding the loan.

    function fundsAsset()
        view
        returns (
            address
        );

Return Values:

Index Name Type Internal Type Description
0 address address

\

getPaymentBreakdown

Get the breakdown of the total payment needed to satisfy the next payment installment.

    function getPaymentBreakdown(
        uint256 timestamp_
    )
        view
        returns (
            uint256 principal_,
            uint256 interest_,
            uint256 lateInterest_,
            uint256 delegateServiceFee_,
            uint256 platformServiceFee_
        );

Parameters:

Index Name Type Internal Type Description
0 timestamp_ uint256 uint256 The timestamp that corresponds to when the payment is to be made.

Return Values:

Index Name Type Internal Type Description
0 principal_ uint256 uint256 The portion of the total amount that will go towards principal.
1 interest_ uint256 uint256 The portion of the total amount that will go towards interest fees.
2 lateInterest_ uint256 uint256 The portion of the total amount that will go towards late interest fees.
3 delegateServiceFee_ uint256 uint256 The portion of the total amount that will go towards delegate service fees.
4 platformServiceFee_ uint256 uint256 The portion of the total amount that will go towards platform service fees.

\

globals

The Maple globals address

    function globals()
        view
        returns (
            address globals_
        );

Return Values:

Index Name Type Internal Type Description
0 globals_ address address

\

gracePeriod

The amount of time the borrower has, after a payment is due, to make a payment before being in default.

    function gracePeriod()
        view
        returns (
            uint32
        );

Return Values:

Index Name Type Internal Type Description
0 uint32 uint32

\

impair

Fast forward the payment due date to the current time. This enables the pool delegate to force a payment (or default).

    function impair()
        nonpayable
        returns (
            uint40 paymentDueDate_,
            uint40 defaultDate_
        );

Return Values:

Index Name Type Internal Type Description
0 paymentDueDate_ uint40 uint40 The new payment due date to result in the removal of the loan's impairment status.
1 defaultDate_ uint40 uint40 The timestamp of the date the loan will be in default.

\

implementation

The address of the implementation contract being proxied.

    function implementation()
        view
        returns (
            address implementation_
        );

Return Values:

Index Name Type Internal Type Description
0 implementation_ address address

\

interestRate

The annualized interest rate (APR), in units of 1e18, (i.e. 1% is 0.01e18).

    function interestRate()
        view
        returns (
            uint64
        );

Return Values:

Index Name Type Internal Type Description
0 uint64 uint64

\

isCalled

Whether the loan is called.

    function isCalled()
        view
        returns (
            bool isCalled_
        );

Return Values:

Index Name Type Internal Type Description
0 isCalled_ bool bool

\

isImpaired

Whether the loan is impaired.

    function isImpaired()
        view
        returns (
            bool isImpaired_
        );

Return Values:

Index Name Type Internal Type Description
0 isImpaired_ bool bool

\

isInDefault

Whether the loan is in default.

    function isInDefault()
        view
        returns (
            bool isInDefault_
        );

Return Values:

Index Name Type Internal Type Description
0 isInDefault_ bool bool

\

lateFeeRate

The rate charged at late payments.

    function lateFeeRate()
        view
        returns (
            uint64
        );

Return Values:

Index Name Type Internal Type Description
0 uint64 uint64

\

lateInterestPremiumRate

The premium over the regular interest rate applied when paying late.

    function lateInterestPremiumRate()
        view
        returns (
            uint64
        );

Return Values:

Index Name Type Internal Type Description
0 uint64 uint64

\

lender

The lender of the Loan.

    function lender()
        view
        returns (
            address
        );

Return Values:

Index Name Type Internal Type Description
0 address address

\

makePayment

Make a payment to the loan.

    function makePayment(
        uint256 principalToReturn_
    )
        nonpayable
        returns (
            uint256 interest_,
            uint256 lateInterest_,
            uint256 delegateServiceFee_,
            uint256 platformServiceFee_
        );

Parameters:

Index Name Type Internal Type Description
0 principalToReturn_ uint256 uint256 The amount of principal to return, to the lender to reduce future interest payments.

Return Values:

Index Name Type Internal Type Description
0 interest_ uint256 uint256 The portion of the amount paying interest.
1 lateInterest_ uint256 uint256 The portion of the amount paying late interest.
2 delegateServiceFee_ uint256 uint256 The portion of the amount paying delegate service fees.
3 platformServiceFee_ uint256 uint256 The portion of the amount paying platform service fees.

\

migrate

Modifies the proxy's storage by delegate-calling a migrator contract with some arguments. Access control logic critical since caller can force a selfdestruct via a malicious `migrator_` which is delegatecalled.

    function migrate(
        address migrator_,
        bytes arguments_
    )
        nonpayable;

Parameters:

Index Name Type Internal Type Description
0 migrator_ address address The address of a migrator contract.
1 arguments_ bytes bytes Some encoded arguments to use for the migration.

\

noticePeriod

The amount of time the borrower has, after the loan is called, to make a payment, paying back the called principal.

    function noticePeriod()
        view
        returns (
            uint32
        );

Return Values:

Index Name Type Internal Type Description
0 uint32 uint32

\

paymentDueDate

The timestamp of the due date of the next payment.

    function paymentDueDate()
        view
        returns (
            uint40 paymentDueDate_
        );

Return Values:

Index Name Type Internal Type Description
0 paymentDueDate_ uint40 uint40

\

paymentInterval

The specified time between loan payments.

    function paymentInterval()
        view
        returns (
            uint32
        );

Return Values:

Index Name Type Internal Type Description
0 uint32 uint32

\

pendingBorrower

The address of the pending borrower.

    function pendingBorrower()
        view
        returns (
            address
        );

Return Values:

Index Name Type Internal Type Description
0 address address

\

pendingLender

The address of the pending lender.

    function pendingLender()
        view
        returns (
            address
        );

Return Values:

Index Name Type Internal Type Description
0 address address

\

platformServiceFeeRate

The annualized platform service fee rate.

    function platformServiceFeeRate()
        view
        returns (
            uint64
        );

Return Values:

Index Name Type Internal Type Description
0 uint64 uint64

\

principal

The amount of principal owed (initially, the requested amount), which needs to be paid back.

    function principal()
        view
        returns (
            uint256
        );

Return Values:

Index Name Type Internal Type Description
0 uint256 uint256

\

proposeNewTerms

Propose new terms for refinance.

    function proposeNewTerms(
        address refinancer_,
        uint256 deadline_,
        bytes[] calls_
    )
        nonpayable
        returns (
            bytes32 refinanceCommitment_
        );

Parameters:

Index Name Type Internal Type Description
0 refinancer_ address address The address of the refinancer contract.
1 deadline_ uint256 uint256 The deadline for accepting the new terms.
2 calls_ bytes[] bytes[] The encoded arguments to be passed to refinancer.

Return Values:

Index Name Type Internal Type Description
0 refinanceCommitment_ bytes32 bytes32 The hash of the proposed refinance agreement.

\

refinanceCommitment

The hash of the proposed refinance agreement.

    function refinanceCommitment()
        view
        returns (
            bytes32
        );

Return Values:

Index Name Type Internal Type Description
0 bytes32 bytes32

\

rejectNewTerms

Nullify the current proposed terms.

    function rejectNewTerms(
        address refinancer_,
        uint256 deadline_,
        bytes[] calls_
    )
        nonpayable
        returns (
            bytes32 refinanceCommitment_
        );

Parameters:

Index Name Type Internal Type Description
0 refinancer_ address address The address of the refinancer contract.
1 deadline_ uint256 uint256 The deadline for accepting the new terms.
2 calls_ bytes[] bytes[] The encoded arguments to be passed to refinancer.

Return Values:

Index Name Type Internal Type Description
0 refinanceCommitment_ bytes32 bytes32 The hash of the rejected refinance agreement.

\

removeCall

Remove the loan's called status.

    function removeCall()
        nonpayable
        returns (
            uint40 paymentDueDate_,
            uint40 defaultDate_
        );

Return Values:

Index Name Type Internal Type Description
0 paymentDueDate_ uint40 uint40 The restored payment due date.
1 defaultDate_ uint40 uint40 The date the loan will be in default.

\

removeImpairment

Remove the loan impairment by restoring the original payment due date.

    function removeImpairment()
        nonpayable
        returns (
            uint40 paymentDueDate_,
            uint40 defaultDate_
        );

Return Values:

Index Name Type Internal Type Description
0 paymentDueDate_ uint40 uint40 The restored payment due date.
1 defaultDate_ uint40 uint40 The timestamp of the date the loan will be in default.

\

repossess

Repossess collateral, and any funds, for a loan in default.

    function repossess(
        address destination_
    )
        nonpayable
        returns (
            uint256 fundsRepossessed_
        );

Parameters:

Index Name Type Internal Type Description
0 destination_ address address The address where the collateral and funds asset is to be sent, if any.

Return Values:

Index Name Type Internal Type Description
0 fundsRepossessed_ uint256 uint256 The amount of funds asset repossessed.

\

setImplementation

Modifies the proxy's implementation address.

    function setImplementation(
        address newImplementation_
    )
        nonpayable;

Parameters:

Index Name Type Internal Type Description
0 newImplementation_ address address The address of an implementation contract.

\

setPendingBorrower

Set the `pendingBorrower` to a new account.

    function setPendingBorrower(
        address pendingBorrower_
    )
        nonpayable;

Parameters:

Index Name Type Internal Type Description
0 pendingBorrower_ address address The address of the new pendingBorrower.

\

setPendingLender

Set the `pendingLender` to a new account.

    function setPendingLender(
        address pendingLender_
    )
        nonpayable;

Parameters:

Index Name Type Internal Type Description
0 pendingLender_ address address The address of the new pendingLender.

\

skim

Remove all available balance of a specified token. NOTE: Open Term Loans are not designed to hold custody of tokens, so this is designed as a safety feature.

    function skim(
        address token_,
        address destination_
    )
        nonpayable
        returns (
            uint256 skimmed_
        );

Parameters:

Index Name Type Internal Type Description
0 token_ address address The address of the token contract.
1 destination_ address address The recipient of the token.

Return Values:

Index Name Type Internal Type Description
0 skimmed_ uint256 uint256 The amount of token removed from the loan.

\

upgrade

Upgrades a contract implementation to a specific version. Access control logic critical since caller can force a selfdestruct via a malicious `migrator_` which is delegatecalled.

    function upgrade(
        uint256 toVersion_,
        bytes arguments_
    )
        nonpayable;

Parameters:

Index Name Type Internal Type Description
0 toVersion_ uint256 uint256 The version to upgrade to.
1 arguments_ bytes bytes Some encoded arguments to use for the upgrade.

\

Events

BorrowerAccepted

Borrower was accepted, and set to a new account.

    event BorrowerAccepted(
        address borrower_
    );

Parameters:

Index Name Type Internal Type Description
0 borrower_ address address The address of the new borrower.

\

CallRemoved

The lender reverted the action of the loan being called and the payment due date was restored to it's original value.

    event CallRemoved(
        uint40 paymentDueDate_,
        uint40 defaultDate_
    );

Parameters:

Index Name Type Internal Type Description
0 paymentDueDate_ uint40 uint40 The restored payment due date.
1 defaultDate_ uint40 uint40 The date the loan will be in default.

\

Funded

The loan was funded.

    event Funded(
        uint256 amount_,
        uint40 paymentDueDate_,
        uint40 defaultDate_
    );

Parameters:

Index Name Type Internal Type Description
0 amount_ uint256 uint256 The amount funded.
1 paymentDueDate_ uint40 uint40 The due date of the first payment.
2 defaultDate_ uint40 uint40 The date the loan will be in default.

\

Impaired

The payment due date was fast forwarded to the current time, activating the grace period. This is emitted when the pool delegate wants to force a payment (or default).

    event Impaired(
        uint40 paymentDueDate_,
        uint40 defaultDate_
    );

Parameters:

Index Name Type Internal Type Description
0 paymentDueDate_ uint40 uint40 The new payment due date.
1 defaultDate_ uint40 uint40 The date the loan will be in default.

\

ImpairmentRemoved

The payment due date was restored to it's original value, reverting the action of loan impairment.

    event ImpairmentRemoved(
        uint40 paymentDueDate_,
        uint40 defaultDate_
    );

Parameters:

Index Name Type Internal Type Description
0 paymentDueDate_ uint40 uint40 The restored payment due date.
1 defaultDate_ uint40 uint40 The date the loan will be in default.

\

Initialized

Loan was initialized.

    event Initialized(
        address borrower_,
        address lender_,
        address fundsAsset_,
        uint256 principalRequested_,
        uint32[3] termDetails_,
        uint64[4] rates_
    );

Parameters:

Index Name Type Internal Type Description
0 borrower_ address address The address of the borrower.
1 lender_ address address The address of the lender.
2 fundsAsset_ address address The address of the lent asset.
3 principalRequested_ uint256 uint256 The amount of principal requested.
4 termDetails_ uint32[3] uint32[3] Array of loan parameters: [0]: gracePeriod, [1]: noticePeriod, [2]: paymentInterval
5 rates_ uint64[4] uint64[4] Array of rate parameters: [0]: delegateServiceFeeRate, [1]: interestRate, [2]: lateFeeRate, [3]: lateInterestPremiumRate

\

LenderAccepted

Lender was accepted, and set to a new account.

    event LenderAccepted(
        address lender_
    );

Parameters:

Index Name Type Internal Type Description
0 lender_ address address The address of the new lender.

\

NewTermsAccepted

The terms of the refinance proposal were accepted.

    event NewTermsAccepted(
        bytes32 refinanceCommitment_,
        address refinancer_,
        uint256 deadline_,
        bytes[] calls_
    );

Parameters:

Index Name Type Internal Type Description
0 refinanceCommitment_ bytes32 bytes32 The hash of the refinancer, deadline, and calls proposed.
1 refinancer_ address address The address that will execute the refinance.
2 deadline_ uint256 uint256 The deadline for accepting the new terms.
3 calls_ bytes[] bytes[] The individual calls for the refinancer contract.

\

NewTermsProposed

A refinance was proposed.

    event NewTermsProposed(
        bytes32 refinanceCommitment_,
        address refinancer_,
        uint256 deadline_,
        bytes[] calls_
    );

Parameters:

Index Name Type Internal Type Description
0 refinanceCommitment_ bytes32 bytes32 The hash of the refinancer, deadline, and calls proposed.
1 refinancer_ address address The address that will execute the refinance.
2 deadline_ uint256 uint256 The deadline for accepting the new terms.
3 calls_ bytes[] bytes[] The individual calls for the refinancer contract.

\

NewTermsRejected

The terms of the refinance proposal were rejected.

    event NewTermsRejected(
        bytes32 refinanceCommitment_,
        address refinancer_,
        uint256 deadline_,
        bytes[] calls_
    );

Parameters:

Index Name Type Internal Type Description
0 refinanceCommitment_ bytes32 bytes32 The hash of the refinancer, deadline, and calls proposed.
1 refinancer_ address address The address that will execute the refinance.
2 deadline_ uint256 uint256 The deadline for accepting the new terms.
3 calls_ bytes[] bytes[] The individual calls for the refinancer contract.

\

PaymentMade

Payments were made.

    event PaymentMade(
        address lender_,
        uint256 principalPaid_,
        uint256 interestPaid_,
        uint256 lateInterestPaid_,
        uint256 delegateServiceFee_,
        uint256 platformServiceFee_,
        uint40 paymentDueDate_,
        uint40 defaultDate_
    );

Parameters:

Index Name Type Internal Type Description
0 lender_ address address The address of the lender the payment was made to.
1 principalPaid_ uint256 uint256 The portion of the total amount that went towards paying down principal.
2 interestPaid_ uint256 uint256 The portion of the total amount that went towards interest.
3 lateInterestPaid_ uint256 uint256 The portion of the total amount that went towards late interest.
4 delegateServiceFee_ uint256 uint256 The portion of the total amount that went towards delegate service fees.
5 platformServiceFee_ uint256 uint256 The portion of the total amount that went towards platform service fee.
6 paymentDueDate_ uint40 uint40 The new payment due date.
7 defaultDate_ uint40 uint40 The date the loan will be in default.

\

PendingBorrowerSet

Pending borrower was set.

    event PendingBorrowerSet(
        address pendingBorrower_
    );

Parameters:

Index Name Type Internal Type Description
0 pendingBorrower_ address address Address that can accept the borrower role.

\

PendingLenderSet

Pending lender was set.

    event PendingLenderSet(
        address pendingLender_
    );

Parameters:

Index Name Type Internal Type Description
0 pendingLender_ address address The address that can accept the lender role.

\

PrincipalCalled

The lender called the loan, giving the borrower a notice period within which to return principal and pro-rata interest.

    event PrincipalCalled(
        uint256 principalToReturn_,
        uint40 paymentDueDate_,
        uint40 defaultDate_
    );

Parameters:

Index Name Type Internal Type Description
0 principalToReturn_ uint256 uint256 The minimum amount of principal the borrower must return.
1 paymentDueDate_ uint40 uint40 The new payment due date.
2 defaultDate_ uint40 uint40 The date the loan will be in default.

\

PrincipalReturned

Principal was returned to lender, to close the loan or return future interest payments.

    event PrincipalReturned(
        uint256 principalReturned_,
        uint256 principalRemaining_
    );

Parameters:

Index Name Type Internal Type Description
0 principalReturned_ uint256 uint256 The amount of principal returned.
1 principalRemaining_ uint256 uint256 The amount of principal remaining on the loan.

\

Repossessed

The loan was in default and funds and collateral was repossessed by the lender.

    event Repossessed(
        uint256 fundsRepossessed_,
        address destination_
    );

Parameters:

Index Name Type Internal Type Description
0 fundsRepossessed_ uint256 uint256 The amount of funds asset repossessed.
1 destination_ address address The address of the recipient of the funds, if any.

\

Skimmed

Some token was removed from the loan.

    event Skimmed(
        address token_,
        uint256 amount_,
        address destination_
    );

Parameters:

Index Name Type Internal Type Description
0 token_ address address The address of the token contract.
1 amount_ uint256 uint256 The amount of token remove from the loan.
2 destination_ address address The recipient of the token.

\

Upgraded

The instance was upgraded.

    event Upgraded(
        uint256 toVersion_,
        bytes arguments_
    );

Parameters:

Index Name Type Internal Type Description
0 toVersion_ uint256 uint256 The new version of the loan.
1 arguments_ bytes bytes The upgrade arguments, if any.

\