← loom

Docs

loom is a stablecoin yield layer — a second layer for DeFi. Deposits keep earning at blue-chip venues; LUME is minted against them at up to 80% LTV, with no oracle and no liquidation engine in the codebase. Live on Base Sepolia (→ audit status).

Written for a reader who has supplied a DeFi money market before. What is different here: the mint cost is measured rather than quoted, there is no price between the debt and the collateral, and every position can exit by being sold whole. Every checkable claim carries a § — it opens the enforcing contract's verified code on Basescan.

01

The mental model

The protocol is one object — a receipt — and the verbs that act on it.

Deposit. Stablecoins route to the market's venue in full — Aave V3 for USDC today; nothing is skimmed on the way in. What you hold in return is a receipt: an ERC-721 whose four rows — deposit, minted, unlocks, at redemption — are the whole terms of the position. A zero-mint deposit is a complete position.

Mint. Against that receipt you can mint LUME — whenever, in as many steps as you like — up to 80% of what the collateral is worth live. Minting adds LUME written onto the receipt; nothing leaves the venue. The cost is measured on your position, not quoted (→ the charge).

Exit. Close the receipt after its T+2 unlock — minted LUME is returned and burned, and the collateral comes back at live value, already net of everything owed. Or sell before the unlock: the receipt goes whole on the on-chain marketplace, debt attached.

RECEIPT · Nº 001 · USDCdeposit$1,000 + earningsmintednothingunlocksT+2at redemption$1,000 + earningsmint 800 LUMEthe only line that changesRECEIPT · Nº 001 · USDCdeposit$1,000 + earningsminted800 LUMEunlocksT+2at redemption$1,000 + earningsclose after the unlock— or sell the receipt wholeRECEIPT · Nº 001 · USDCreturned800 LUMEreceived$1,000 + earningsCLOSED

Figures illustrative.

Enforced byPositionManager §Receipt §

02

The receipt

Every deposit mints one — an ERC-721. Its four rows are the vocabulary the whole product is written in (→ the mental model).

Nº 001depositprincipal at entry —never reduced by mintingmintedLUME face outstandingunlocksT+2, stamped onceat redemptionpays now, already net

The receipt is the unit of account for everything. Debt is booked per receipt, not per owner — transfer the token and the debt, the accruing charge, and the unlock all travel with it. That is what makes a position sellable whole.

The unlock is stamped once, at deposit: now plus the market's withdrawal delay — 2 days on the launch market, and the registry hard-caps any market at 30 days. It is never reset: not by minting, not by repaying, not by a sale.

A closed receipt stays on-chain rather than being burned, so it still appears in your wallet. It can't be sold on the marketplace, minted against, or closed again — the token itself stays transferable.

Enforced byReceipt §PositionManager §

03

Deposit

A deposit routes 100% to the market's venue through its adapter — the launch market supplies USDC to Aave V3 today — and books the vault shares to a fresh receipt owing nothing. There is no deposit fee and no split: the receipt claims everything the deposit earns.

The rate is the venue's own (→ Markets & venues).

Each market carries a supply cap (→ governance lanes).

Enforced byVault §AaveV3Adapter §MarketRegistry §

04

Mint & the charge

Minting writes LUME onto a receipt you hold — up to the market's max LTV: 80% of live net value, the receipt's shares at today's price minus the charge it already owes. Never of what was deposited. The registry hard-caps any market's LTV at 90%.

The debt is dollars against dollars — no price between them to attack (→ Security model).

collateral — never moves$1,000 + earningsminted — grows toward the cap550 LUMEcap · 80% of live net valuemintedstill availableunreachable

An illustrative $1,000.

Past the cap, a position is reported, not seized — healthOf returns the exact excess, repayable by anyone (→ Security model).

The charge

A minted position pays the yield earned by the slice of its own collateral the minted face occupies — value(drawnShares) − drawnBasis, measured per receipt. That is the venue's own supply rate on the minted share, zero spread, and never principal — if the venue earns nothing, nothing is charged. There is no rate parameter anywhere in the protocol to set, raise, or govern.

Anyone may settle any receipt's charge — harden is permissionless, and a keeper runs it nightly. Settling turns an accrual into a transfer: the receipt's payout is already quoted net, so nothing on it moves.

the minted slice's gainvalue(drawnShares) − drawnBasisharden — permissionlessanyone, any timebanked to the couponCarveAccumulator · collection valuelinear vest · 24h floor · 30d capreleased, never steppedminted to the pool at parmintAccrued — permissionlesssLUME share pricecounts the coupon as it vestsmeasured per receipt — no rate exists

On-chain, mint is borrow(receiptId, amount) — the ABI's name for the same verb. Passing receiptId 0 means "the receipt this transaction just created", which is how deposit-and-mint lands as one transaction.

Enforced byPositionManager §MarketRegistry §CarveAccumulator §

05

Stake — sLUME & the coupon

LUME stakes into sLUME, an ERC-4626 pool. 100% of the charge goes to stakers: no emissions, no points, no protocol rate. The pool prices the coupon as it vests, so a staker's figure moves without anyone executing anything.

The plumbing: a hardened charge is collected as vault shares and banked at the value it was taken at; the coupon — an equal face of LUME — is minted to the pool at par as it vests. The vest is linear over the span the charge took to accrue — 24h at the floor, 30 days at the cap, and a nightly sweep sits at the floor — because a share price that steps is sandwichable and one that vests is not. The collected shares themselves sit with the treasury.

totalSupplytotalDebtminted face on receiptsburned —on repay & closecouponMintedcoupon, minted at parno redemption sink— deliberatetotalSupply = totalDebt + couponMinted

Proportions illustrative.

Publishing both terms makes the gap measurable without summing receipts off the token.

Any yield figure the app shows for sLUME is realized — what a staked LUME actually returned over a stated window, annualized. No forward rate is projected, because there is none to project.

Enforced bysLUME §LUME §CarveAccumulator §

06

The marketplace

Every receipt can be sold whole, on-chain. Listing escrows the ERC-721 with the marketplace contract; a buyer pays the ask in LUME and takes the receipt with its debt, its accruing charge, and its unlock. Bids work the same way in reverse: the bidder's LUME is escrowed until the bid is accepted or withdrawn — an expired bid can no longer be accepted, and the bidder reclaims the LUME by withdrawing it.

Both sides settle pinned, and a trade carries six bounds.

The position
  • max debt
  • min shares
  • min payout
The venue
  • min venue payout
  • uncovered-loss floor
  • arrangement — matched exactly

Leaving the arrangement empty means “settle only while this market's collateral sits at one venue” — a trade pinned that way is refused while a migration has left part of the book behind. A bid stores the same six, plus an expiry, checked when the seller accepts.

The fee is 0 today — owner-settable, hard cap 5%, raises wait 48h. While escrowed, a receipt can't be minted against or closed.

Enforced byReceiptMarketplace §

07

Exits & T+2

Close — one transaction after the unlock; the charge settles inside it.

Sell — on the marketplace, whole.

Close · after T+2800 LUME returned— and burned$1,000 + earnings outat live value, already netno exit feeSell · wholeLISTEDbuyer pays the ask— in LUMEdebt + charge travelwith the receiptunlock passes to the buyerUSDe · exits in kindredemption delivers sUSDe — the venue cooldownruns on the holder's own address, never a shared slotcooldown today: 7d

Figures illustrative.

Enforced byPositionManager §Vault §ReceiptMarketplace §

08

Markets & venues

Five markets, two venue shapes — a savings vault is a different adapter, not a different label.

Market · venueStatus
USDC · Aave V3 · lending poollive — Base Sepolia
USDT · Aave V3 · lending poolat mainnet
DAI · Aave V3 · lending poolat mainnet
USDe · Ethena sUSDe · savings vault · in kindat mainnet
GHO · Aave sGHO · savings vaultat mainnet

Status = the registry's allAssets() answer at the deploy in the book below.

Every rate shown anywhere is read from the venue itself — Aave's liquidityRate (a ray), sGHO's targetRate (basis points), sUSDe derived from its own reward schedule. A derivation that is ill-conditioned is refused and shown as an em dash rather than printed wrong.

Enforced byMarketRegistry §

09

Security model

No oracles. Dollars against dollars — no price feed sits between them.
No liquidations. Past the cap is reported — healthOf returns the exact excess — and cured by permissionless repay.
De-levering always works. Repay is never blocked: not by the clock, the market, or the owner.
The charge never touches principal. A measured gain, collected as shares — a venue that earns nothing collects nothing.

8,638 lines · 13 contracts — 9 core, 4 venue adapters · counted from the tree, not typed · 0 oracles, in any market

Enforced byPositionManager §

10

Governance & custody

Youhold the receipt — an ERC-721Vaultholds the shares — the claimthe claim staysabove the seameverything below the seam is swappableAaveV3Adapterroutes deposits — swappableAave V3 Poolearns the rate — the venue

The custody trail for the live USDC market, as deployed today. Every hop below You is a contract — the addresses are in the book.

A migration swaps the adapter under the vault without touching a single position — receipts, debt and unlocks all live above the seam.

Vaultboth legs counted hereold venuewhat stayed — partialnew venuewhat movedboth counted — the vault'sno on-chain deadline

One redemption is paid out of one side; the app reads the split and says so.

Four adapters, three venue shapes: accrual-index (Aave V3), share-price (ERC-4626 savings vaults, with an in-kind variant for sUSDe), and raw — the refuge, holding the asset bare. Every adapter answers an in-kind lane: a redemption is paid entirely in the asset or entirely in the venue's token, never split. The refuge declares no second lane, because its only lane already is the asset.

raise a parameterannounce the exact calldata48h — executesone announcement, one execution · dies unused at 14dlower a cap · disable a marketlands same-blockmigrate the venueto the refuge — same-blockanywhere else — 48hmigration loss budget10 bps — cap per hop, either lane30 bps — rolling 365d, charged on the loss

Same-block is reserved for moves that cannot hurt a depositor. A hop that moves value at par spends no budget; the hop INTO the refuge is never rationed, and draining the rest out of a dead venue is rationed on its shortfall alone.

Testnet truth: the current owner is the deploy key — an EOA with an EIP-7702 delegation, verified on-chain — and it is also the treasury and the fee recipient. A Safe multisig ships with mainnet. Renouncing ownership is disabled on every contract.

Enforced byMarketRegistry §Vault §

11

Parameters

One row per enforced fact — the same data the landing and /verify render. A test pins each number to the constant the contracts declare.

Liquidation enginenone in the codebase§
Price oraclenone — no price to attack§
What minting coststhe yield on the minted share§
Charge sourceyield only, never principal§
Max LTV80% of live net value — registry hard cap 90%§
Withdrawal delayT+2 days — registry hard cap 30 days§
Collectionpermissionless — anyone may settle any receipt's charge§
Repaymentpermissionless — repayment is never blocked§
Past the LTV capreported by healthOf and emitted — nothing is liquidated§
Coupon schedulebanked when collected, released linearly over its accrual — 24h floor, 30d cap§
Exit feesnone — a receipt's value is already net of what it owes§
Charge destinationthe treasury holds the collected shares directly§
Parameter changesraises wait 48h; only de-risking — lowering a dial, disabling a market — lands same-block§
Marketplace fee0 today — owner-settable, cap 5%§
Venue migrationssame-block only to the refuge — anywhere else waits 48h§
Migration loss budget30 bps rolling over 365 days, 10 bps per hop§
12

Addresses

Base Sepolia — chain 84532, deploy block 45383777, stack v9.6. Generated from the deployment's own address book — the file the app reads.

13

Audit status

The mechanism is frozen for an independent audit. Ethereum mainnet follows it. Audit status: pending.

Until the audit the repository is private; /verify carries the complete ledger and address book.

14

FAQ

Is minting required?

No. Zero is the default, and a zero-mint deposit is a complete position. Minting is a separate decision, available later or never.

What is returned at redemption?

The collateral at its live value, less only what the position already owes. A receipt's value is already net — the charge is settled in shares as it accrues, never at exit — so nothing further is subtracted. Minted LUME is returned and burned.

Can positions be liquidated?

No. The debt is dollars against dollars, so there is no price between them to move. No oracle and no liquidation engine exist in the codebase — the § links open every deployed contract, so the absence is checkable on-chain.

What does minting cost?

The yield earned by the share of collateral the mint occupies — measured on your own position, not a rate applied to it. Never principal, and no performance fee.

How long does exit take?

T+2 to redeem, or sell the position on the secondary market and the unlock passes to the buyer. USDe exits in kind, delivering sUSDe.

What happens past the LTV cap?

Reported, not seized: healthOf returns the exact excess, and repaying it — permissionless, never blocked — brings the position back inside. Security model

Who can settle a receipt's charge?

Anyone, any time — harden is permissionless, and a keeper runs it nightly. Settling only changes when the coupon reaches stakers; the payout was already quoted net. Mint & the charge

What does the marketplace cost?

Nothing today: the fee is 0. It is owner-settable with a 5% hard cap; raising it waits 48h, lowering lands same-block.

Where does the charge go?

Collected as vault shares, banked to the coupon at the value it was taken at, and minted at par to the sLUME pool as it vests — linearly over the span it accrued, 24h floor, 30-day cap. Stake

Who owns the contracts today?

The deploy key — an EOA with an EIP-7702 delegation, verified on-chain — also the treasury and the fee recipient. A Safe multisig ships with mainnet. Governance & custody

← BackVerifyLaunch app