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:

FeatureInstitutionalRetail
KYC/AMLFull institutional onboarding with document verificationStandard identity verification
Credit ScoringHybrid on-chain + off-chain credit assessmentOn-chain history only
Credit TierDiamond, Gold, Silver (based on assessment)Bronze or Unrated
Rate DiscountUp to 25% reduction (Diamond tier)No discount (0%)
Collateral TypesCrypto + RWA (T-Bills) + Tokenized Invoices (TIFA)Crypto assets only
Under-Collateralized LendingAvailable for Diamond and Gold tiersNot available
Position LimitsHigher pool caps based on credit tierStandard pool limits
PrivacyEnhanced or Full privacy levelsStandard privacy
Liquidation BufferWider health factor alert thresholdsNarrower thresholds
Credit Tiers
Credit tiers are central to the Dualis risk model. A Diamond-tier institution benefits from a 25% rate discount, access to under-collateralized borrowing, and broader collateral options. See the Credit Tiers documentation for details on qualification criteria.

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:

interest-accrual.ts
// 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.
Background Processing
Interest index updates are processed by a dedicated BullMQ worker (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).