Overview
The Multiliquid SVM program does not implement a native laddered pricing model on chain. Instead, each pair stores one live discount rate and one live redemption fee. An LP can still build a laddered pricing model on top of those fields by using an off-chain worker to monitor rolling volume and update fees as thresholds are crossed.- Each
Pairhas oneredemption_fee_bpsand onediscount_rate_bps, which can be updated by the LP admin every block if needed - Each
Pairsources liquidity from two vaults: one vault for the stablecoin and one vault for the RWA - Swaps consume whatever fee values are currently stored in the pair
This page uses
discount_rate_bps for the primary example, but the same approach can be mirrored onto redemption_fee_bps.RWA1 while applying a tiered discount schedule across rolling 24-hour AssetToStable volume.
The first ~$2.5M should clear at a 1% discount, giving the user 99% of the RWA1 NAV value in stablecoin.
From $2.5M to $5M, the discount is set at 5%. From $5M to $10M, the discount is set at 15%.
| Rolling 24-hour cumulative volume | Active discount_rate_bps | Discount |
|---|---|---|
$0 to < $2.5M | 100 | 1.00% |
$2.5M to < $5M | 500 | 5.00% |
$5M to < $10M | 1500 | 15.00% |
RWA1.
- The LP keeps between
$1,000,000and$2,500,000of live stablecoin inventory in the vault at any given time - An off-chain worker measures rolling 24-hour volume
- The worker decides which tier is currently active
- When a threshold is crossed, the worker updates
discount_rate_bpsviaupdate_pair - The LP uses
add_liquidityto top up the stablecoin vault when balances fall below the chosen threshold, for example$1,000,000, potentially sourcing capital from a yield-generating product such as Liquid Treasury
What The Program Gives You
Pair Fee Fields
The pair stores only the currently active fee values:redemption_fee_bpsis the live fee forStableToAssetdiscount_rate_bpsis the live fee forAssetToStable- the current ladder rung is represented by the current value stored in the pair
Live Fee Updates
The LP can rotate the active rung withupdate_pair:
Shared Vault Liquidity
Liquidity is not stored per pair. It is stored per LP + mint:- one vault per LP and stable mint
- one vault per LP and RWA mint
add_liquiditydeposits into the LP’s vault for a mintremove_liquiditywithdraws from that same vault- if the LP has multiple pairs using the same mint, those pairs share the same vault balance
Directional Fee And Inventory Mechanics
The two fee fields are directional:| Swap direction | Pair field used | Inventory that leaves LP vault | Inventory that enters LP vault |
|---|---|---|---|
StableToAsset | redemption_fee_bps | RWA | Stablecoin |
AssetToStable | discount_rate_bps | Stablecoin | RWA |
- user sells RWA to the LP
- LP pays out stablecoin
- the live price lever is
discount_rate_bps - the constrained inventory is the LP’s stablecoin vault
- a rolling 24-hour counter off chain
- periodic
update_paircalls that change onlydiscount_rate_bps - periodic stablecoin
add_liquidityandremove_liquiditycalls
redemption_fee_bps can stay fixed while only discount_rate_bps changes with the ladder.
If the LP also wants a ladder on the opposite direction, the same pattern applies:
- maintain a separate rolling notional book for
StableToAsset - choose the active
redemption_fee_bpsfrom that book - pass both the current
redemption_fee_bpsand currentdiscount_rate_bpsintoupdate_pair
Reference Ladder
For the example strategy, define the activediscount_rate_bps from rolling 24-hour notional:
| Rolling 24-hour cumulative volume | Active discount_rate_bps | Discount |
|---|---|---|
$0 to < $2,500,000 | 100 | 1.00% |
$2,500,000 to < $5,000,000 | 500 | 5.00% |
$5,000,000 to < $10,000,000 | 1500 | 15.00% |
- there is one active rung at any point in time
- the worker recomputes the rolling 24-hour total
- the worker updates the pair to the fee corresponding to the current band
How To Measure The Rolling 24-Hour Volume
For a discount ladder onAssetToStable, the cleanest operational metric is:
- on
AssetToStable, the user receives stablecoin from the LP stable vault - protocol fees are also paid out of that same stable vault
- so
amount_out + protocol_fee_amountis the total stable inventory consumed by the fill
$1.00 stablecoin such as USDC, that rolling stable outflow is already a practical dollar proxy.
For
AssetToStable, do not rely on the raw amount_in field from the SwapExecuted event as your primary volume metric. In this direction, the useful inventory measure is stablecoin consumed from the LP vault, which is amount_out + protocol_fee_amount.How The Live Inventory Band Works
Assume the LP wants to keep up to$2,500,000 of stablecoin live in the vault, and refill when the balance drops below $1,000,000.
Define:
- target stable vault balance:
$2,500,000 - refill floor:
$1,000,000 - refill amount:
target - current_vault_balance
- if the stable vault balance is below
$1,000,000, calladd_liquiditywith the delta back to$2,500,000 - if the stable vault balance is above
$2,500,000, callremove_liquidityfor the excess
$1,000,000 and $2,500,000 while allowing the LP to manage on-chain inventory independently from the rolling fee ladder.
That is the core distinction:
- live liquidity is what is currently sitting in the vault
- rolling 24-hour volume is what has traded through the vault over time
$10,000,000 while keeping between $1,000,000 and $2,500,000 of stablecoin inventory on chain, replenishing inventory as needed during the day.
Why remove_liquidity Matters
remove_liquidity is just as important as add_liquidity.
In this model:
AssetToStableflow drains stablecoin from the stable vault and accumulates RWA in the RWA vaultStableToAssetflow does the opposite: it adds stablecoin to the stable vault and drains RWA from the RWA vault
remove_liquidity in two practical ways:
- sweep excess stablecoin out of the stable vault when reverse flow pushes it above the
$2,500,000cap - sweep accumulated RWA out of the RWA vault after users sell RWA into the LP
Single-Pair And Multi-Pair Variants
Single Pair
For oneRWA / stablecoin pair, the model is simple:
- track rolling 24-hour volume for that pair
- update that pair’s
discount_rate_bps - manage the pair’s shared stable vault balance
Multiple Pairs Sharing The Same Stablecoin
If the LP wants one ladder across several pairs that all share the same stablecoin:- the stable vault is already shared across those pairs because the vault is keyed by
LP + stable mint - the worker should aggregate rolling notional across the full set of managed pairs
- the worker should push the same active
discount_rate_bpsto every pair in that set - stablecoin rebalancing is done once at the shared stable vault
Multiple Pairs Across Different Stablecoins
If the LP spans multiple stablecoins:- each stablecoin still has its own vault
- the worker must normalize fills into a common USD measure off chain
update_pairmust still be called per pair- liquidity rebalancing must still be done per stable vault
update_pair, and rebalances vault inventory with add_liquidity and remove_liquidity.
What To Do At 10M Rolling Volume
Because this page assumes no pause controls, the$10,000,000 level should be treated as a soft operating budget, not as a hard protocol-enforced stop.
In practice, the worker usually does one or both of the following once rolling 24-hour volume reaches the final band:
- keep the pair on the highest configured discount tier
- stop topping the stable vault back up after it drains below the LP’s desired exposure
- the fee schedule is controllable
- the live inventory band is controllable
- the exact rolling-volume ceiling is not enforced atomically by the program
Practical Summary
The current SVM swap program is sufficient to run this laddered model today:- use
discount_rate_bpsas the current active rung forAssetToStable - keep
redemption_fee_bpsfixed unless the LP also wants a ladder onStableToAsset - measure rolling 24-hour stable outflow off chain
- update the pair fee when the rolling total enters a new band
- keep only
$1,000,000to$2,500,000of live stablecoin inventory in the vault withadd_liquidityandremove_liquidity - if the ladder spans multiple pairs, aggregate volume off chain and push the selected rung to each managed pair
- treat the
$10,000,000threshold as an operational target rather than a hard on-chain invariant
Pair Management
Full reference for pair instructions, account structures, and liquidity management
Integration Guide
SDK installation, quoting, and swap execution