LP rewards
Rewards depend on fees generated and your share of liquidity. There is no yield promise and no rate to quote.
Every swap pays a USDC fee. 80% of it goes to the pool's liquidity providers through an accumulator:
eligible = totalSupply − MINIMUM_LIQUIDITY
on LP fee f: euler += f · 1e30 / eligible
pending(u) = credited[u] + balance[u] · (euler − checkpoint[u]) / 1e30
Before any LP balance changes (mint, burn, transfer, lock), the accounts involved are settled. This is what makes rewards follow positions:
- A new deposit never receives fees from before it.
- Withdrawing or transferring LP preserves what was already earned.
- A claim cannot be replayed.
Reward USDC is held in the pair but tracked separately from the reserves. The curve never sees it. Rounding always floors toward the pool; dust above 1 USDC can be swept to the treasury by anyone.
Worked example
Alice holds 100 LP and 20 USDC of LP fees arrive: Alice has 20. Bob adds 100 LP and 30 USDC arrive: 15 each. Alice withdraws 50 LP and 12 USDC arrive: Alice 4, Bob 8. Totals: Alice 39, Bob 23. The test suite reproduces these numbers exactly through real swaps.
Locked liquidity
VistaLocker holds LP tokens under a time lock or a permanent hardlock. The locker is the LP holder from the pair's point of view and keeps its own per lock checkpoint, so each lock owner can claim their USDC while the liquidity stays locked. Lock ownership is transferable.
Claiming
Use the Rewards window. Wallet positions are claimed through the router, one pool or all at once. Locks are claimed one by one. Funds always go to the position owner.