memoscan
← all memos

Memo 0x338953d4…2a3925 on Ethereum

# Update the INV Price Feed - 2 # Update INV Price Feed to Dynamic-Fee INV/WETH Curve Oracle Forum Post: https://forum.inverse.finance/t/update-the-inv-price-feed-2/628 ## Summary This proposal updates the INV/USD price feed used by FiRM and Frontier to: 1. Migrate from the current [INV/WETH](https://etherscan.io/address/0x6bd88c57523bf138a19b263e8ebc8661c836b171) Curve pool to the new higher-fee [INV/WETH](https://etherscan.io/address/0xdcd90d866ff9636e5a04768825d05d27b3fb19ec) Curve pool; and 2. Replace the existing `ChainlinkCurve2CoinsFeed` with a new `DynamicFeeCurveFeed` that explicitly accounts for the Curve pool’s trading fee. The goal is for FiRM and Frontier to use a price that reflects INV’s net-of-fee executable value in our main liquidity pool. ## Background * INV is currently priced via a Chainlink \+ Curve oracle: * Chainlink WETH/USD price, combined with * Curve INV/WETH twocrypto-ng EMA (`price_oracle()`). * The DAO is migrating INV liquidity and routing to a new INV/WETH Curve pool configured with a higher trading fee. * With the higher fee, the mid-price from the pool (EMA) overstates the value a liquidator can actually realize after paying fees. To keep the oracle aligned with where INV trades and make pricing slightly more conservative, we introduce a dynamic-fee-aware variant. ## DynamicFeeCurveFeed Overview The new oracle contract, `DynamicFeeCurveFeed`, keeps the same basic structure: * Uses `IChainlinkBasePriceFeed` for WETH → USD (18 decimals). * Uses the new INV/WETH Curve pool for: * `price_oracle()` (EMA of the INV/WETH rate), and * `fee()` (dynamic pool fee, 1e10 precision). * Returns INV/USD with 18 decimals and description INV / USD. Price calculation (simplified): * Get `pairedTokenToUsdPrice` (WETH/USD) from Chainlink. * Get `crvOraclePrice` from `curvePool.price_oracle()`, which is WETH/INV * Compute INV/USD * Fetch `fee = curvePool.fee()`, clamp it to `maxFee` (initially 2%, equal to the pools maximum fee). * Apply the discount: `usdPrice = usdPrice * (1 - fee)`. This makes the oracle reflect a post-fee price, bounded by a governance-controlled maxFee (0–100%). The contract also includes a simple gov / pendingGov pattern and a setMaxFee(int \_maxFee) function restricted to gov. ## Rationale * We are already relying on the INV/WETH Curve pool as the main liquidity venue for INV. * With the new pool’s higher fee, using a pure mid-price (price\_oracle()) overestimates the value available to liquidators and arbitrageurs. * Applying the Curve fee in the oracle: * Keeps assumptions closer to real execution, and * Introduces a small, bounded conservative bias that improves risk management for FiRM and Frontier. ## On-Chain Actions * Update FiRM INV Feed * Update Frontier INV Feed * Update sINV price feed