fix: Investigate: VWAP not preventing IL crystallization during buy-only recenter cycles (#543)
Investigation findings: - VWAP WAS being fed during buy-only cycles (shouldRecordVWAP = true on ETH inflow / price rising). Over 80 buy-recenter cycles VWAP converged toward the inflated current price. - When VWAP ≈ currentTick, mirrorTick = currentTick + vwapDistance ≈ currentTick, placing the floor near the inflated price. Adversary sells back through the high floor, extracting nearly all LM ETH. - Optimizer parameters (anchorShare, CI) were not the primary cause. Fix (LiquidityManager.sol): Flip shouldRecordVWAP from buy direction to sell direction. VWAP is now recorded only when price falls (ETH outflow / sell events) or at initial bootstrap (cumulativeVolume == 0). Buy-only attack cycles leave VWAP frozen at the historical baseline, keeping mirrorTick and the floor conservatively anchored far from the inflated current price. Also updated onchain/AGENTS.md to document the corrected recording direction. Regression test (VWAPFloorProtection.t.sol): - test_vwapNotInflatedByBuyOnlyAttack: asserts getVWAP() stays at bootstrap after N buy cycles. - test_floorConservativeAfterBuyOnlyAttack: asserts floor center is far below inflated tick. - test_vwapBootstrapsOnFirstFeeEvent: confirms bootstrap path unchanged. - test_recenterSucceedsOnSellDirectionWithoutReverts: confirms sell-direction recenters work. All 187 tests pass. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
08b9a3df30
commit
e35a805138
3 changed files with 233 additions and 5 deletions
|
|
@ -42,7 +42,7 @@ The staking system traces a triangle in (staking%, avgTax) space:
|
|||
## System Snapshot
|
||||
- Kraiken ERC20 with mint/burn via LiquidityManager. VERSION=2.
|
||||
- LiquidityManager.sol: ANCHOR + DISCOVERY + FLOOR positions with asymmetric slippage.
|
||||
- VWAPTracker.sol: squared price in X96, compression, directional recording (ETH inflow only).
|
||||
- VWAPTracker.sol: squared price in X96, compression, directional recording (price-fall / ETH-outflow events only — buy-only cycles must NOT update VWAP or the floor tracks the inflated price, crystallising IL; see issue #543).
|
||||
- OptimizerV3.sol: UUPS upgradeable, direct 2D binary mapping.
|
||||
- Stake.sol: self-assessed tax, snatching auctions, discrete brackets, UBI redistribution.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue