Callside Docs
Concepts

Interest and the daily charge

Your debit accrues every second through one global index, then settles once a day, every day, in a fixed charge order. Nothing about the charge is discretionary: the rate, the time and the order are all on chain.

The margin rate

The gross margin rate is the fed funds rate plus the desk spread. Today that is 3.50% + 2.00% = 5.50% annually. Both components sit behind bounded, rate-limited setters: each can move by at most a fixed number of basis points per change, with a minimum interval between changes, so the rate can track policy but never lurch. The current values and their bounds are on the Parameters page. Staking discounts never lower this rate directly; every account accrues at the gross rate and a discount arrives as a rebate out of the protocol's share at settlement.

The per-second index

Accrual is a single global number, the debit index, advanced by a permissionless poke() that every desk transaction runs first and the keeper runs at least hourly:

index_t = index_(t-1) × (1 + r × dt / 31,536,000)

Growth is simple interest within a poke and compounds across pokes, floored at every step so no account is ever charged more index than elapsed time earns. Your marked debit is then just a multiplication:

debit = principalScaled × index

Because each draw is stored pre-divided by the index at the moment you drew it, accrual needs no per-account writes at all. One global poke moves every debit on the desk at once, and any view can mark your debit to the current second without a transaction. This is what the ticking figure on the margin screen is: your principalScaled times the live index, recomputed client-side every second.

Worked example, spec pinned

One day of interest on a 12,000 debit at the spec rate of 5.50% is about $1.81: 12,000 × 0.055 / 365 = 1.8082. The test suites pin this number to the cent, both in the TypeScript mirror and on chain through 24 hourly pokes.

The daily charge

Accrued interest becomes a cash movement once a day at 00:00 UTC, every day of the year. There is no trading-day test and no calendar in the path: the desk is open continuously, so the charge runs on Saturdays, Sundays and holidays exactly as it runs on a Tuesday, and a day is simply a UTC day. The Realiser freezes the index for the day, computes each account's accrual as marked debit less cash principal (so a debit drawn mid-period is charged only its own accrual), and settles it in a fixed order:

OrderSourceHow it settles
1Held USDGPays the interest in cash; leftover USDG then nets against the debit itself
2WEEKSold in the day's batch, largest positions first within the class
3Crypto and majorsSame, after WEEK is exhausted
4Stock and ETF tokensLast resort, largest position value first

Sales are netted: every account's slice of a given asset joins one batch per asset, executed against the oracle mark under a per-class slippage budget (0.10% for WEEK, 0.30% for crypto, 0.50% for stock and ETF tokens). Fills apply pro rata by each account's share, with per-account parts summing exactly to the batch totals, to the cent.

When a charge cannot settle

A batch that cannot fill, because the venue reverts or an asset's price is stale, never blocks the day. The affected share capitalises: it stays in the debit, keeps compounding through the index, and the next day's charge retries it. Everyone else settles normally. Because the charge runs every day, a retry is never more than 24 hours away, and cash on an account is netted against the debit every day rather than waiting out a weekend.

Who runs it

Allowlisted keepers may call the charge from 00:00 UTC; after 30 more minutes anyone may. The function is idempotent per UTC day and caller-independent, so a stalled keeper delays settlement by at most that window, and a stranger running it changes nothing about the outcome.

The cash side of every settlement flows to the cash vault, where depositors earn it less the protocol skim. Interest accrual is also part of your debit for every margin test, so a position left alone can drift toward a call on interest alone; see calls and forced sales.