DualInvestmentManager
Main entry for creating Dual Investment positions. Validates inputs, coordinates collateral/borrow flows, mints ERC‑1155 positions, and updates risk tracking.
Key Responsibilities
Validate position params (supported markets, size bounds, direction, time window).
Compute position value in USD using pToken exchange rate + oracle.
Route via VaultExecutor for collateral path; via CompoundBorrowRouter for borrow path.
Mint ERC‑1155 position tokens (
ERC1155DualPosition).
Primary Functions
enterPosition(cTokenIn, cTokenOut, amount, direction, strike, expiry, useCollateral)Validates inputs; generates tokenId; chooses path:
Collateral:
vaultExecutor.redeemAndSupplyToProtocol(msg.sender, cTokenIn, amount); mint position.Borrow: compute
underlyingAmount = amount * exchangeRate / 1e18;borrowRouter.borrowAndRoute(... -> vaultExecutor);vaultExecutor.mintCTokensTo(...); mint position.
enterPositionWithBorrowed(cToken, cTokenOut, underlyingAmount, direction, strike, expiry)User borrows externally; vault pulls underlying and mints cTokens; position minted from actual minted amount.
canEnterPosition(user, cTokenIn, amount, useCollateral) -> (bool, reason)Pre‑checks size, balances (collateral) or liquidity (borrow).
getPositionInfo(tokenId) -> (Position, canSettle, isSettled)Admin:
setSupportedCToken(cToken, supported),setRiskParameters(maxPos, minPos, maxExpiry, minExpiry).
Events
PositionEntered(tokenId, user, cTokenIn, cTokenOut, amount, strike, expiry, direction, useCollateral)
Notes
Position tokenId is user‑scoped (
generateTokenIdForUser) to avoid collisions.Uses
exchangeRateStored()for deterministic conversions during entry.
Last updated