BreakingApril 13, 2026
Overview
LP swap fees are no longer auto-compounded into pool reserves. Instead, the LP fee portion is transferred to the Yield Distribution reward vault during each swap. LP holders accumulate rewards in their active rewards wallet and claim them manually — the same flow used for OT token yield. This change ensures that pool capitalization is never diluted by fee extraction, and provides LP holders with a unified, transparent reward experience.What Changed
Before (Auto-Compound Model)
- LP fee was invisible to the user — no explicit reward tracking
- Fee extraction from swap amount reduced effective pool depth
- No unified reward experience — OT yield claimed separately from LP income
After (Per-Pool Fee Vault, Instant Claim)
- Pool capitalization is never reduced by fees
- LP holders see explicit, growing reward balance — claimable instantly
- Simple on-chain accounting:
cumulative_fees_per_share(O(1) per holder) - No off-chain dependency — fully on-chain fee distribution
- OT yield continues to auto-compound into pool reserves (deeper liquidity)
Fee Flow by Swap Direction
User Sells RWT (input = RWT)
Fees are charged on top of the swap amount. User’s wallet is debited foramount_in + fee_total + ot_treasury_fee.
| Token flow | Amount | Destination |
|---|---|---|
| User RWT → Pool vault | amount_in | Pool reserves (full, no deduction) |
| User RWT → Pool fee_vault | fee_lp | Claimable by LP holders via claim_lp_fees |
| User RWT → Areal Finance | fee_protocol | Protocol revenue |
| User RWT → OT Treasury | ot_treasury_fee | Project treasury (OT pairs only) |
| Pool vault → User | amount_out | User receives output token |
User Buys RWT (input = OT/USDC)
Fees are deducted from gross RWT output. User receives net amount after all fees.| Token flow | Amount | Destination |
|---|---|---|
| User → Pool vault | amount_in | Pool reserves |
| Pool vault → Pool fee_vault | fee_lp | Claimable by LP holders via claim_lp_fees |
| Pool vault → Areal Finance | fee_protocol | Protocol revenue |
| Pool vault → OT Treasury | ot_treasury_fee | Project treasury (OT pairs only) |
| Pool vault → User | amount_out | User receives net RWT |
LP Reward Claim Flow
LP fee rewards use a per-pool fee vault withcumulative_fees_per_share accounting — fully on-chain, no off-chain dependencies:
Swap Occurs
During each swap,
fee_lp (in RWT) is transferred to the pool’s fee_vault. The contract updates: cumulative_fees_per_share += fee_lp × PRECISION / total_lp_shares.Instant Availability
Rewards are available immediately after each swap. No vesting, no merkle tree rebuild, no off-chain server. Fully on-chain O(1) accounting.
| Stream | Source | Mechanism | Availability |
|---|---|---|---|
| LP Swap Fees | Per-pool fee vault | claim_lp_fees (on-chain accounting) | Instant |
| OT Yield | Yield Distribution | compound_yield (auto-compounds into reserves) | Passive (increases LP value) |
Nexus (Areal Finance LP) Changes
The Nexus PDA — Areal Finance’s internal LP management — is simplified:| Before | After |
|---|---|
nexus_withdraw_profits — principal tracking, profit = ATA balance - principal | nexus_claim_rewards — claims LP fees from pool fee vault to Areal Treasury |
principal_usdc, principal_rwt state fields | total_deposited_usdc, total_deposited_rwt (tracking only) |
| Principal permanently locked, only profit withdrawable | LP fee rewards claimed via cumulative_fees_per_share, no principal locking needed |
Reserve Impact
| Metric | Before | After |
|---|---|---|
| Pool reserves after swap | Reduced by protocol + OT treasury fees | Unchanged — all fees external |
| LP fee in reserves | Yes (auto-compound) | No — sent to YD |
| Pool capitalization | Affected by fee extraction | Preserved — fees on top |
| LP reward visibility | Implicit (higher reserve value) | Explicit (claimable balance) |
Related Contracts
Native DEX
Full contract documentation with updated fee architecture.
Yield Distribution
Reward vault, merkle claims, and vesting mechanics.