BreakingApril 17, 2026
Overview
The concentrated liquidity design for RWT master pools has been redesigned from a symmetric 2:1 pyramid with periodic range-shifts to a Monotonic Ladder — a single-sided, cumulatively growing bid structure that usesrwt_engine::mint_rwt as a synthetic ask-side.
This change doubles effective capital efficiency of Nexus LP, eliminates ask-side impermanent-loss-style drift on NAV appreciation, and replaces stateful range repositioning with additive growth.
Why Change
The prior 2:1 pyramid was a direct adaptation of standard CL-AMM patterns (Meteora, Trader Joe). It assumed RWT price could drift in both directions, so both sides of the book needed pre-funded liquidity. Three properties of RWT invalidate that assumption:- NAV is monotonically non-decreasing in normal operation (70% of yield accrues to book value, no redeem)
mint_rwtis an always-on ask-side at deterministic priceNAV × 1.01. Any pre-funded RWT aboveNAV × 1.005is economically dead capital — buyers always prefer mint- Exit liquidity is the scarce resource — holders need deep bid; buyers already have unlimited mint depth
What Changed
Before (Symmetric Pyramid)
- ~33% of LP capital sat in RWT ask-side that was economically dead (mint cheaper)
- Rebalance on NAV growth forced LPs out of appreciating RWT positions
- BinArray size limited cumulative growth to ~7% before hitting bounds
- No distinction between “permanent stress buffer” and “active trading zone”
After (Monotonic Ladder)
- 100% of Nexus LP is productive (bid-side only) — ~2× capital efficiency
- LPs never forced to sell RWT on NAV appreciation (no ask-side IL)
- Cumulative structure: every historical NAV level retains bid depth forever
- 1000-bin array at 0.1% step covers NAV × 2.7 growth (~10+ years at 7% APY)
- Mint routing guarantees deterministic worst-case ask price
- Self-reinforcing depth flywheel: NAV↑ → yield↑ → Nexus USDC inflow↑ → bid depth↑
Breaking Changes
Contract interface
| Instruction | Status |
|---|---|
shift_liquidity | Removed |
grow_liquidity | New — signature includes liquidity_nexus and nexus_usdc_ata accounts |
compress_liquidity | New — no Nexus accounts (capital-neutral) |
swap | Changed — master-pool USDC→RWT path now branches on ask availability and mint price; additional accounts required (rwt_vault, rwt_mint, capital_accumulator_ata, dao_fee_account, user_rwt) |
create_concentrated_pool | Changed — new permanent_tail_offset_bps parameter; non-RWT side must be USDC or USDY; BinArray sized for 1000 bins |
add_liquidity / zap_liquidity | Restricted — fails with MasterPoolUserLpDisabled on Monotonic Ladder pools (StandardCurve unaffected) |
State
BinArrayPDA size: ~32 KB (was ~2 KB for 70 bins). Rent: ~0.22 SOL per master pool.PoolStateadds:left_anchor_bin,permanent_tail_floor_bin,last_rebalance_nav_bin,active_zone_lower.
Off-chain services
- Pool Rebalancer logic split into growth path (
grow_liquidity) and compression path (compress_liquidity). Adds checks for Nexus accumulator availability before growth calls.
Unchanged
- StandardCurve pools (OT/RWT, third-party pairs) — no change in behavior, math, or fee structure
- Per-pool fee vault and
claim_lp_feesmodel (for bin-path swaps) compound_yieldfor OT pools (unchanged)- OT Treasury fee on OT pairs (unchanged)
mint_rwtmechanics (no change in fee split or NAV accounting)
Migration
This is a protocol-design change, not a live-state migration — master pools have not yet launched on mainnet. Developers implementing from the updated spec should disregard priorshift_liquidity references and the 70-bin / 2:1 pyramid semantics.
Implementation Status
Implemented 2026-05-17 across all submodules:contracts/native-dex— full ladder geometry,grow_liquidity/compress_liquidityinstructions, mint-route swap CPI torwt_engine::mint_rwt,MasterPoolUserLpDisabledguards (commits2ef4990→f4d393e)sdk0.12.2 — builders forgrow_liquidity/compress_liquidity,masterPoolMintRouteAccountson swap,routefield on quotes, ladder math mirror, MAX_BINS 630 mirrorbots/pool-rebalancer— growth-vs-compression decision tree, Nexus accumulator pre-checkbots/.e2e— scenario-4 rewritten end-to-end for the new surfaceapp— LP form gated on master pools, “Routed via mint” badge + adjusted fee receipt on the swap modal- MAX_BINS = 630, not 1000: the original spec sized
BinArrayfor 1000 bins (~16 KB account). Solana 3.x’s CPI inner-instruction realloc limit (MAX_PERMITTED_DATA_INCREASE = 10_240bytes) caps single-ix BinArray creation becausecreate_concentrated_poolallocates the PDA via an innersystem::CreateAccountCPI. 630 bins (BinArray::SPACE = 10_131— ~109 B buffer below the limit) is the practical maximum without splitting BinArray creation into two instructions. Coverage drops from “10+ years at 7% APY” to ~9.3 years at 7% APY ((1.001)^630 ≈ 1.877). Splittingcreate_concentrated_poolinto a 2-ix flow (create+extend_bin_array) to restore 1000 bins is tracked as a separate ticket. SDK (0.12.2) and the bots.e2escenario-4 are already aligned to the 630-bin layout.
Related Documents
- Liquidity & Native DEX — user-facing explanation of the ladder
- Native DEX contract spec — full instruction definitions
- RWT — Real World Token — master pool section
- Treasury — Nexus funding flow
- Off-Chain Services — Pool Rebalancer logic