Technical Aspects
Contract Modules
- ERC20CollateralPool.sol: Main contract.
- ERC20CollateralPool.interface.sol: Interface for contract structures and events.
- ERC20CollateralPool.storage.sol: Storage contract for state management.
- AggregatorV3Interface.sol: Interface for Chainlink price feeds.
Key Components
Constants
LIQUIDATION_PROTOCOL_FEE
: A fixed fee charged by the contract during liquidation.LIQUIDATION_FEE
: A fee awarded to the liquidator as an incentive for carrying out liquidations.LIQUIDATION_MARGIN_FACTOR
: Factor that determines whether the position is liquidatable.MAX_LTV_PERCENTAGE
: The highest loan-to-value (LTV) ratio that can be set for a pool.ONE_YEAR
: One year in seconds.BPS_DIVIDER
: Basis point divider.
Initialization
__ERC20CollateralPool_init
: Initialize the contract with admin, USDC token, and pools.
Pool Management
addPool
: Add a new pool.announceEditPool
: Announce upcoming pool edits.commitEditPool
: Commit announced pool edits.cancelEditPool
: Cancel announced pool edits.
Contract Control
pause
/unpause
: Pause or unpause contract operations.withdrawProtocolRewards
: Allows admin to withdraw protocol fees.
User Interactions
lend
: Supply USDC to a pool.borrow
: Borrow USDC against collateral.repay
: Repay borrowed USDC with interest.claim
: Withdraw supplied USDC with rewards.changeCollateralAmount
: Change the collateral amount of a borrow position.liquidate
: Liquidate borrow positions that are liquidatable.claimCollateral
: Allow to withdraw supply positions, receiving their rewards in collateral tokens by liquidate borrow positions.
Calculation Utilities
calculateRepayInterest
: Calculate repayment interest.calculateCollateralTokenAmount
: Calculate required collateral token amount.isPositionLiquidatable
: Calculate is a borrow position is liquidatable.
View Functions
getPools
: Get details of all pools.getPool
: Get details of one pool.getLendPosition
: Get details of one supply.getAllLendPositions
: Get all user supply position in the given pool.getBorrowPosition
: Get details of one borrow.getAllBorrowPositions
: Get all user borrow position in the given pool.getCollateralTokens
: Get the list of all collateral tokens.getCollateralTokenProtocolFee
: Get protocol fees for collateral token.getAvailableAmountsInPool
: Get available USDC and collateral token amount in a given pool.
Error Handling
Defined errors for exceptional scenarios, like PoolEndsAtIsInThePast
and AdminMustNotBeZeroAddress
.
Event Logging
Events like newLend
, newBorrow
, Repaid
, RewardsClaimed
, AddedCollateral
, RemovedCollateral
, and UserPositionLiquidated
for activity tracking.
Security Features
- Pausable: Stop activities in emergencies.
- Access Control: Restricted functions for specific roles.
- Chainlink Integration: For accurate price information.
Dependencies
Uses OpenZeppelin's SafeERC20Upgradeable
, AccessControlUpgradeable
, PausableUpgradeable
, and math utilities.
Upgradeability
Designed with OpenZeppelin's upgradeable contracts framework.
Important Considerations
- Precision and Rounding: While mathematical calculations are handled accurately, slight discrepancies may arise due to rounding and the use of different timestamps for calculating suppliers' and borrowers' rewards.
- Time Dependencies: Time-sensitive functions need careful handling.
- Security: Regular audits and reviews are recommended.