Skip to main content
A Tplus asset is backed by a separate vault on each chain it lives on. To keep liquidity spread across them, the protocol charges a fee or pays a reward — up to 2.5% — on deposits, withdrawals, and settlements, based on how the movement shifts a vault relative to its target. Each vault has a minimum target weight (minWeight, a per-(asset, chain) parameter). A vault below its target is underweight; at or above it, overweight. A settlement is treated as both legs at once: the asset leaving a vault as a withdrawal, the asset entering a vault as a deposit. Rebalancing applies only to pooled assets (one fungible asset spread across vaults); an isolated, single-vault balance has nothing to rebalance and is never charged.

How the rate is computed

Each vault’s weight is its share of the asset’s total balance across all chains. Its target is derived from the configured weights, divided by a buffer so the per-vault minimums sum to less than 100% and can all be satisfied at once:
A movement is scored per affected vault on its average distance below target across the move — the mean of its weight before and after, with the before-weight capped at target so only the portion below target is charged:
rate runs from 0 (vault stays at or above target) to 2.5% (vault stranded at 0% weight). Applying it:
  • Deposit / settlement-in. The receiving vault earns a reward if it is below target. Every other vault the inflow pushes below target is charged a fee — depositing raises the asset’s total, lowering every other vault’s weight. The user pays or receives the net of the two.
  • Withdrawal / settlement-out. Only the source vault is scored, and only if it ends below target. Withdrawals never earn a reward.

Worked examples

Three vaults, weights 30 / 10 / 10, buffer 1.2. Targets:
The targets sum to 83.3% (= 1 / 1.2), the buffer’s headroom. Deposit that pays a fee. Balances 500 / 200 / 300 (total 1000); deposit 100 into Base.
Deposit that earns a reward. Balances 100 / 400 / 500; deposit 400 into Ethereum (underweight at 10% vs 50%).
Withdrawal that pays a partial fee. Balances 550 / 200 / 250; withdraw 200 from Ethereum.
Ethereum started above target, so only the slide below 50% is charged — not the whole 55% to 43.75% move. A vault stranded at 0% weight hits the 2.5% per-vault cap; a deposit charged across two such vaults costs up to 5%.

Application and timing

  • Deposits are charged when the balance is credited. Withdrawals and settlements are computed at request time — and counted in the solvency check — but applied only after the on-chain transaction confirms. A canceled withdrawal is charged nothing.
  • Rewards are paid from a protocol fee account and capped at its balance; fees are collected to the same account.
  • The rate uses the configured target weights at the moment of the movement, so it shifts as vault balances and pending outflows change.