Hybrid Lending
Dualis Finance combines the permissionless composability of DeFi with the risk controls and compliance requirements of institutional finance. This page explains how supplying and borrowing work, how the protocol differs for institutional versus retail participants, and how interest accrues efficiently at scale.
Supplying Assets
When a user supplies an asset to a Dualis lending pool, the protocol mints interest-bearing dTokens (e.g., dUSDC, dwBTC) that represent a proportional claim on the underlying pool balance. As borrowers pay interest, the exchange rate between dTokens and the underlying asset increases, meaning suppliers earn yield simply by holding dTokens.
Supply operations are settled atomically on Canton: the underlying asset is transferred into the pool contract and dTokens are minted to the supplier in a single DAML transaction. There is no approval step or two-transaction pattern required.
Borrowing Assets
To borrow, a user must first deposit collateral into the protocol. Each asset has a specific Loan-to-Value (LTV) ratio that determines the maximum borrowable amount. For example, depositing $10,000 of USDC (LTV 80%) permits borrowing up to $8,000 in other assets.
Borrow positions accrue interest continuously. The interest rate is determined by the pool's utilization ratio and the borrower's credit tier (see Interest Rate Model). Borrowers with higher credit scores receive discounted rates, enabling more capital-efficient borrowing for established institutions.
When a borrower repays, the protocol burns the corresponding debt tokens, releases a proportional share of collateral, and updates the pool's utilization ratio. Partial repayments are supported.
Institutional vs. Retail
Dualis Finance serves both institutional and retail participants, but with differentiated risk parameters and compliance requirements:
| Feature | Institutional | Retail |
|---|---|---|
| KYC/AML | Full institutional onboarding with document verification | Standard identity verification |
| Credit Scoring | Hybrid on-chain + off-chain credit assessment | On-chain history only |
| Credit Tier | Diamond, Gold, Silver (based on assessment) | Bronze or Unrated |
| Rate Discount | Up to 25% reduction (Diamond tier) | No discount (0%) |
| Collateral Types | Crypto + RWA (T-Bills) + Tokenized Invoices (TIFA) | Crypto assets only |
| Under-Collateralized Lending | Available for Diamond and Gold tiers | Not available |
| Position Limits | Higher pool caps based on credit tier | Standard pool limits |
| Privacy | Enhanced or Full privacy levels | Standard privacy |
| Liquidation Buffer | Wider health factor alert thresholds | Narrower thresholds |
Interest Accrual
Dualis uses an index-based interest accrual model that updates in O(1) time per block, regardless of the number of open positions. Rather than iterating over every borrow position to apply interest, the protocol maintains a global borrow index and supply index for each pool.
When a position is opened or modified, the protocol snapshots the current global index. To compute accrued interest at any later point, the protocol simply divides the current global index by the position's snapshot index:
// O(1) interest calculation
const accruedAmount = principalAmount * (currentBorrowIndex / positionSnapshotIndex);
// Global index update (once per block)
const blockDelta = currentBlock - lastAccrualBlock;
const borrowRate = calculateBorrowRate(utilization, rateModel);
const interestFactor = 1 + (borrowRate * blockDelta / BLOCKS_PER_YEAR);
newBorrowIndex = previousBorrowIndex * interestFactor;This approach has two key advantages:
- Constant-time complexity: The global index update runs once per block, and individual position lookups require only a single multiplication. This scales to millions of positions without increasing computational cost.
- Exact precision: Because the index accumulates multiplicatively, there is no rounding drift over time. Every position receives the mathematically exact interest amount relative to its entry point.
interestAccrual.job.ts) that runs on a fixed schedule. The updated indices are persisted to PostgreSQL and cached in Redis for low-latency reads by the API and frontend.Pool Tokens (dTokens)
Each lending pool issues its own dToken (e.g., dUSDC, dwETH). These tokens are non-rebasing: the token balance stays constant, but the exchange rate against the underlying asset grows as interest accrues. This design simplifies accounting for institutional participants who need stable token quantities for their internal ledgers.
dTokens are standard Canton asset contracts and can be transferred between parties, used as collateral in other Dualis pools, or redeemed for the underlying asset at any time (subject to pool liquidity).