Skip to content

Conversation

@AdekunleBamz
Copy link

Summary

This PR introduces two comprehensive utility libraries designed specifically for DeFi lending protocol calculations, providing reusable, well-tested building blocks for the FiRM protocol.

New Files

src/util/MathLib.sol

A library providing safe math operations and utilities for DeFi calculations:

  • Value Comparisons: min, max, clamp, absDiff
  • Safe Division Operations: safeDiv (returns 0 on div-by-zero), divUp (rounds up), mulDiv, mulDivUp
  • Basis Point Conversions: bpsToDecimal, applyBps, applyPercentage
  • Financial Calculations: ratio, proRata, calculateInterest
  • Utility Functions: safeSub, isWithinTolerance, convertDecimals, currentDay
  • Lending Calculations: collateralizationRatio, isPositionHealthy, calculateLiquidationAmount

src/util/PositionLib.sol

A library for lending protocol position management:

  • Health Status Enum: Healthy, AtRisk, Liquidatable, BadDebt
  • Position Metrics Struct: Comprehensive position data container
  • Health Analysis: getCollateralizationRatio, getHealthStatus, isLiquidatable
  • Borrowing Calculations: getAvailableToBorrow, getLiquidationPrice, getValueAtRisk
  • Position Management: getWithdrawableCollateral, getRepaymentForTargetRatio
  • Liquidation Utilities: getLiquidationBonus, getMaxLiquidatableAmount, getCollateralToSeize
  • Comprehensive Metrics: getPositionMetrics returning full position analysis

Testing

  • 48 passing tests across both libraries
  • Includes fuzz testing for critical functions
  • Covers edge cases (division by zero, zero values, boundary conditions)

Why This Matters

These libraries provide:

  1. Standardized calculations across the protocol
  2. Gas-efficient reusable logic
  3. Well-documented functions with NatSpec
  4. Battle-tested patterns common in DeFi lending protocols

- Add MathLib.sol with safe math operations for DeFi calculations:
  - min, max, clamp, absDiff for value comparison
  - safeDiv, divUp, mulDiv, mulDivUp for safe division operations
  - bpsToDecimal, applyBps, applyPercentage for basis point conversions
  - ratio, proRata, calculateInterest for financial calculations
  - safeSub, isWithinTolerance, convertDecimals for utility operations
  - collateralizationRatio, isPositionHealthy for lending calculations
  - calculateLiquidationAmount for liquidation logic
  - currentDay helper for time-based tracking

- Add PositionLib.sol for lending protocol position management:
  - HealthStatus enum (Healthy, AtRisk, Liquidatable, BadDebt)
  - PositionMetrics struct for comprehensive position data
  - getCollateralizationRatio, getHealthStatus for position health
  - getAvailableToBorrow, getLiquidationPrice, getValueAtRisk
  - getWithdrawableCollateral, getRepaymentForTargetRatio
  - getLiquidationBonus, getMaxLiquidatableAmount, getCollateralToSeize
  - isLiquidatable, getPositionMetrics for position analysis

- Add comprehensive test suites with 48 passing tests including fuzz tests
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant