Initial commit
This commit is contained in:
181
docs/ARCHITECTURE.md
Normal file
181
docs/ARCHITECTURE.md
Normal file
@@ -0,0 +1,181 @@
|
||||
# DBIS System Architecture
|
||||
|
||||
## Overview
|
||||
|
||||
The DBIS (Debt-Based Institutional Strategy) system is a comprehensive DeFi leverage management platform that implements atomic amortizing cycles to improve position health while maintaining strict invariants.
|
||||
|
||||
## Core Principles
|
||||
|
||||
### 1. Amortization Rule
|
||||
Every atomic transaction MUST end with:
|
||||
- **Debt ↓** (decreased)
|
||||
- **Collateral ↑** (increased)
|
||||
- **LTV ↓** (decreased loan-to-value ratio)
|
||||
- **HF ↑** (improved health factor)
|
||||
|
||||
If any of these conditions fail, the transaction reverts.
|
||||
|
||||
### 2. Policy Controls Over Bot Intelligence
|
||||
- Bots suggest actions
|
||||
- **Contracts enforce invariants**
|
||||
- If invariant fails → revert → no risk
|
||||
|
||||
### 3. Single Identity
|
||||
- One vault address
|
||||
- One router
|
||||
- One kernel
|
||||
- Multisig/MPC owner
|
||||
- Zero opacity
|
||||
- Maximum governance safety
|
||||
|
||||
### 4. Modular & Upgradeable
|
||||
All components are swappable:
|
||||
- Router
|
||||
- Kernel
|
||||
- Policy modules
|
||||
- Providers
|
||||
- Oracle adapters
|
||||
|
||||
## System Components
|
||||
|
||||
### Core Contracts
|
||||
|
||||
1. **DBISInstitutionalVault.sol**
|
||||
- Tracks collateral and debt across multiple assets
|
||||
- Integrates with Aave v3 for position data
|
||||
- Enforces position invariants
|
||||
|
||||
2. **FlashLoanRouter.sol**
|
||||
- Aggregates flash loans from multiple providers:
|
||||
- Aave v3
|
||||
- Balancer Vault
|
||||
- Uniswap V3
|
||||
- DAI Flash Mint
|
||||
- Liquidity-weighted provider selection
|
||||
|
||||
3. **RecursiveLeverageKernel.sol**
|
||||
- Implements atomic amortizing cycle pipeline:
|
||||
1. Harvest yield
|
||||
2. Swap to stable/collateral
|
||||
3. Split: repay debt + add collateral
|
||||
4. Enforce invariants
|
||||
5. Revert if LTV worsens
|
||||
|
||||
4. **CollateralToggleManager.sol**
|
||||
- Manages Aave v3 collateral enable/disable
|
||||
- Batch operations for efficiency
|
||||
|
||||
### Governance Contracts
|
||||
|
||||
5. **ConfigRegistry.sol**
|
||||
- Stores all system parameters:
|
||||
- Max loops
|
||||
- Max flash size per asset
|
||||
- Min/Target health factor
|
||||
- Allowed assets
|
||||
- Provider caps
|
||||
|
||||
6. **PolicyEngine.sol**
|
||||
- Plugin architecture for policy modules
|
||||
- Aggregates policy decisions
|
||||
- All modules must approve
|
||||
|
||||
7. **GovernanceGuard.sol**
|
||||
- Final gatekeeper for all actions
|
||||
- Invariant validation
|
||||
- Strategy throttling
|
||||
|
||||
8. **Policy Modules**
|
||||
- **PolicyHFTrend**: Monitors health factor trends
|
||||
- **PolicyFlashVolume**: Limits flash loan volume per period
|
||||
- **PolicyLiquiditySpread**: Validates liquidity spreads
|
||||
- **PolicyProviderConcentration**: Prevents over-concentration
|
||||
|
||||
### Oracle Layer
|
||||
|
||||
9. **DBISOracleAdapter.sol**
|
||||
- Standardizes pricing from multiple sources:
|
||||
- Aave oracles
|
||||
- Chainlink price feeds
|
||||
- Uniswap TWAPs
|
||||
- Aggregates with confidence scoring
|
||||
|
||||
## Execution Flow
|
||||
|
||||
### Atomic Amortizing Cycle
|
||||
|
||||
```
|
||||
1. Kernel.executeAmortizingCycle()
|
||||
↓
|
||||
2. GovernanceGuard.enforceInvariants()
|
||||
↓
|
||||
3. Vault.snapshotPosition()
|
||||
↓
|
||||
4. FlashRouter.flashLoan()
|
||||
↓
|
||||
5. Kernel.onFlashLoan() callback:
|
||||
- Harvest yield
|
||||
- Swap to target asset
|
||||
- Repay debt
|
||||
- Add collateral
|
||||
↓
|
||||
6. Vault.verifyPositionImproved()
|
||||
↓
|
||||
7. If invariant fails → revert
|
||||
If invariant passes → emit events
|
||||
```
|
||||
|
||||
## Security Model
|
||||
|
||||
### Invariant Enforcement
|
||||
|
||||
All position changes must satisfy:
|
||||
- `debtAfter <= debtBefore`
|
||||
- `collateralAfter >= collateralBefore`
|
||||
- `healthFactorAfter >= healthFactorBefore`
|
||||
|
||||
### Access Control
|
||||
|
||||
- **Owner**: Full administrative control
|
||||
- **Operator**: Can execute amortization cycles
|
||||
- **Kernel Role**: Can record position changes
|
||||
- **Policy Modules**: Evaluated by PolicyEngine
|
||||
|
||||
### Upgradeability
|
||||
|
||||
- All core contracts support UUPS upgradeability
|
||||
- Policy modules are plugin-based
|
||||
- Provider addresses are configurable
|
||||
|
||||
## Integration Points
|
||||
|
||||
### Aave v3
|
||||
- Position data
|
||||
- Collateral management
|
||||
- Borrowing/repayment
|
||||
|
||||
### Flash Loan Providers
|
||||
- Aave v3 Pool
|
||||
- Balancer Vault
|
||||
- Uniswap V3 Pools
|
||||
- DAI Flash Mint
|
||||
|
||||
### DEXs
|
||||
- Uniswap V3 Router (swaps)
|
||||
|
||||
### Oracles
|
||||
- Chainlink Price Feeds
|
||||
- Aave Oracle
|
||||
- Uniswap TWAPs
|
||||
|
||||
## Multi-Chain Support
|
||||
|
||||
The system is designed for multi-chain deployment:
|
||||
- Primary: Ethereum Mainnet
|
||||
- Secondary: Arbitrum, Polygon, Base, Optimism
|
||||
|
||||
Each chain requires:
|
||||
- Chain-specific protocol addresses
|
||||
- Chain-specific oracle feeds
|
||||
- Chain-specific RPC endpoints
|
||||
|
||||
Reference in New Issue
Block a user