For the complete documentation index, see llms.txt. This page is also available as Markdown.

Active

The Active phase is the core operating state of the vault. The loan has been disbursed to the borrower, and periodic repayments are expected, flowing through a strict six-bucket waterfall.

What Happens

  • The Borrower makes periodic repayments via receive_payment(payer, amount)

  • Each payment is allocated through the waterfall, in order: reserve fee → senior interest → senior principal → junior interest → junior principal → residual (borrower cash pool)

  • Investors can claim their pro-rata share of their own tranche's accumulated interest and principal at any time

  • The Borrower can withdraw from the cash pool, but only while current on payments

  • The Pool Manager monitors repayment health, applies late fees, and stays current on any reporting covenant

Payment Processing — the waterfall

receive_payment accepts any amount greater than zero — there is no gross-up or fixed split. Per period, buckets fill in this order (with any carried arrears from a prior underpaid period added ahead of the new period's dues, in the same order):

Order
Bucket
Amount due this period

1

Reserve fee → treasury

interest × reserve_fee_bps / 10000

2

Senior interest

Senior's share of interest, net of the reserve and the junior spread

3

Senior principal

Scheduled senior amortisation

4

Junior interest

Remaining interest after buckets 1–2

5

Junior principal

Scheduled junior amortisation

6

Residual → borrower cash pool

Whatever remains

A bucket that isn't fully paid records the deficit as arrears, which must be cleared — in the same order — before the next period's own dues are accepted. The schedule (payments_made, next_due) only advances once buckets 1–5 are fully cleared for a period; a short payment never advances the schedule. See Payments & the Waterfall for the full worked example.

The amount actually received is verified against the vault's own token-balance delta, not just the caller-supplied amount — a fee-on-transfer or otherwise short-delivering token is rejected with TransferShortfall.

Yield Claims

Investors call claim_yield(investor, tranche) to claim their share of that tranche's accumulated interest and principal pools, pro rata to their deposit within the tranche. Claims are available during both the Active and FullyRepaid phases.

Cash Withdrawals — the covenant

The borrower can call withdraw_cash(amount) to withdraw available funds from the cash pool — but only while missed_payments == 0. If the borrower has missed a payment, withdraw_cash is blocked with BorrowerNotCurrent until they catch up. See Covenants, Exposure and Compliance.

Reporting Covenant

If the vault has a reporting_interval set, the manager calls mark_report_received() on the agreed cadence. If a report becomes overdue, anyone can call check_reporting(), which flags reporting_overdue and counts as one missed period toward the NAV write-down until the next report lands.

Transition Out

From Active, the vault can transition to:

  • FullyRepaid — Automatically when both outstanding_s and outstanding_j reach zero

  • Renegotiation — When the manager proposes new terms

  • Defaulted — When the grace period expires after a missed payment

Relevant Functions

Function
Caller
Description

receive_payment(payer, amount)

Anyone

Submit a repayment; allocated through the six-bucket waterfall

claim_yield(investor, tranche)

Investor

Claim pro-rata share of that tranche's interest + principal pools

withdraw_cash(amount)

Borrower

Withdraw from the cash pool (blocked while behind on payments)

apply_late_fee(caller)

Manager

Apply late fee penalty, split pro rata across tranches

mark_report_received(caller)

Manager

Clear the reporting-overdue flag

check_reporting()

Anyone

Flag the reporting covenant overdue after the deadline

propose_renegotiation(caller, rate, term)

Manager

Propose new terms

check_default()

Anyone

Trigger default if grace period expired

get_senior_nav() / get_junior_nav()

Anyone

View NAV after write-down (view only)

get_covenant_status()

Anyone

View missed payments, reporting-overdue flag, borrower-current flag

As of September 2026.

Last updated