Understand the risks of providing liquidity to Flux vaults and learn how to evaluate and mitigate them.
Overview
As a liquidity provider in Flux, you earn yield by lending capital to managers. While Flux implements multiple safety mechanisms, all DeFi lending carries risks. This guide helps you understand and manage those risks.
Key Risks
1. Bad Debt Risk
What it is: Managers default and their collateral is insufficient to cover debt.
How it happens:
Manager's position becomes underwater
Liquidation occurs too late
Asset price crashes faster than liquidation
Illiquid assets cannot be sold quickly
Impact:
Vault share value decreases
LPs lose principal
Cannot be recovered
Mitigation:
2. Liquidity Risk
What it is: Cannot withdraw your funds when needed.
How it happens:
High vault utilization (>90%)
Managers holding long-term positions
Market stress causes everyone to withdraw simultaneously
Insufficient idle liquidity causes withdrawals to fail
Impact:
Funds locked temporarily
Must wait for manager repayments
Opportunity cost
Mitigation:
3. Smart Contract Risk
What it is: Bugs or exploits in smart contracts.
How it happens:
Undiscovered vulnerabilities
Logic errors in strategy
Oracle manipulation
Reentrancy attacks
Impact:
Complete loss of funds
Protocol exploit
Cascading failures
Mitigation:
Only use audited vaults
Check audit reports
Prefer established vaults with TVL history
Diversify across multiple vaults
4. Oracle Risk
What it is: Price feed manipulation or failure.
How it happens:
Oracle returns incorrect prices
Flash loan price manipulation
Oracle downtime
Stale price data
Impact:
Incorrect liquidations
Undercollateralized positions go unliquidated
Bad debt accumulation
Mitigation:
5. Strategy Risk
What it is: Strategy parameters allow excessive risk-taking.
How it happens:
Low collateral requirements (minBondRatio)
Risky allowed assets
High leverage allowed
Poor liquidation parameters
Impact:
Managers take excessive risk
Higher bad debt probability
Losses for LPs
Mitigation:
6. Manager Risk
What it is: Manager behavior causes losses.
How it happens:
Incompetent trading
Excessive leverage
Poor risk management
Intentional misconduct
Impact:
Position liquidations
Bad debt
Lower returns
Mitigation:
Research managers before depositing
Check manager track record
Monitor manager positions
Prefer vaults with professional managers
7. Regulatory Risk
What it is: Regulatory action against protocol or participants.
How it happens:
DeFi regulations change
Sanctions on addresses
Geographic restrictions
Compliance requirements
Impact:
Access restrictions
Forced liquidations
Legal liability
Mitigation:
Understand your jurisdiction's regulations
Use compliant vaults if necessary
Consider KYC'd vaults for regulatory certainty
Monitor regulatory developments
Risk Assessment Framework
Vault Safety Checklist
Computing Risk Score
Risk Categories
Risk Score
Category
Recommendation
0-20
Low Risk
Safe for conservative LPs
21-40
Medium Risk
Acceptable for moderate risk tolerance
41-60
High Risk
Only for risk-tolerant LPs
61-100
Very High Risk
Avoid unless expert
Diversification Strategies
Don't Put All Funds in One Vault
Diversification Dimensions
Different base assets: USDC, WETH, DAI
Different strategies: Conservative vs aggressive
Different protocols: Not just Flux
Different risk profiles: Mix safe and risky
Portfolio Allocation Example
Monitoring Your Positions
Daily Monitoring
Red Flags to Watch
Share price decreasing: Immediate action required
Bad debt increasing: Monitor closely
Utilization >95%: Liquidity risk
Manager liquidations: Strategy may be too risky
Oracle failures: Critical risk
Low idle liquidity: May indicate others are exiting
Automated Alerts
Risk Mitigation Strategies
1. Gradual Entry
Don't deploy all capital at once:
2. Position Sizing
Never allocate more than you can afford to lose:
3. Stop-Loss Strategy
Set predetermined exit criteria:
4. Rebalancing
Periodically rebalance based on risk:
Insurance and Protection
Protocol Insurance
Some protocols offer coverage:
Third-party insurance (Nexus Mutual, Unslashed)
Protocol-owned insurance funds
Safety modules
Self-Insurance
Set aside a portion of returns as a safety buffer:
function dailyHealthCheck(address vault) external view returns (bool healthy) {
IFluxVault v = IFluxVault(vault);
// 1. Check share price hasn't decreased
uint256 currentPrice = v.convertToAssets(1e18);
require(currentPrice >= lastKnownPrice, "Share price decreased");
// 2. Check bad debt hasn't increased significantly
uint256 badDebt = v.getBadDebt();
uint256 badDebtRatio = badDebt * 100 / v.totalAssets();
require(badDebtRatio < 5, "Bad debt too high");
// 3. Check utilization is reasonable
uint256 util = v.totalBorrowed() * 100 / v.totalAssets();
require(util < 95, "Vault over-utilized");
// 4. Check your position value
uint256 myValue = v.convertToAssets(v.balanceOf(msg.sender));
require(myValue > 0, "Position has no value");
return true;
}
// Set up alerts for critical events
event SharePriceDecreased(uint256 oldPrice, uint256 newPrice);
event BadDebtIncreased(uint256 amount);
event UtilizationCritical(uint256 utilization);
// Monitor and alert
function monitorVault(address vault) external {
IFluxVault v = IFluxVault(vault);
uint256 sharePrice = v.convertToAssets(1e18);
if (sharePrice < previousSharePrice) {
emit SharePriceDecreased(previousSharePrice, sharePrice);
}
// ...other checks
}
// Week 1: Test with small amount
vault.deposit(100e6, user);
// Week 2: If performance good, increase
vault.deposit(500e6, user);
// Week 3: If still good, deploy more
vault.deposit(2000e6, user);
// Month 2: Full deployment
vault.deposit(7400e6, user);
Total Portfolio: $100,000
Max allocation per vault: $10,000 (10%)
Max allocation to Flux: $30,000 (30%)
Max allocation to high-risk: $5,000 (5%)
function shouldExit(address vault) public view returns (bool) {
IFluxVault v = IFluxVault(vault);
// Exit if share price drops >5%
uint256 currentPrice = v.convertToAssets(1e18);
if (currentPrice < entryPrice * 95 / 100) return true;
// Exit if bad debt >3%
uint256 badDebtRatio = v.getBadDebt() * 100 / v.totalAssets();
if (badDebtRatio > 3) return true;
// Exit if utilization >97%
uint256 util = v.totalBorrowed() * 100 / v.totalAssets();
if (util > 97) return true;
return false;
}
// Monthly rebalancing
function rebalance() external {
// If a vault becomes too risky, reduce exposure
if (calculateRiskScore(vault1) > 60) {
reducePosition(vault1, 50); // Cut by 50%
}
// Reallocate to safer vaults
if (calculateRiskScore(vault2) < 20) {
increasePosition(vault2);
}
}