SlemanFi
A comprehensive DeFi lending protocol built using Solidity (Foundry) and Arbitrum Stylus (Rust)
Videos
Tech Stack
Description
SlemanFi Protocol - Project Summary
A comprehensive DeFi lending protocol with cross-chain capabilities built using Solidity (Foundry) and Arbitrum Stylus (Rust)
π Executive Summary
SlemanFi is a modular, upgradeable DeFi lending protocol that enables:
Isolated lending pools for risk separation between token pairs
Collateral management with multiple token support
Dynamic interest rate models with configurable parameters
Liquidation mechanisms to maintain protocol health
DEX integration to repay loans using collateral (no need for borrow token)
The project consists of two technology stacks:
sleman-sc - Solidity smart contracts (Foundry)
sleman-stylus - Rust smart contracts (Arbitrum Stylus SDK)
ποΈ Project Architecture
βββ sleman-sc/ # Main Solidity contracts (Foundry)
β βββ src/ # Core protocol contracts
β β βββ LendingPool.sol # Main lending operations
β β βββ LendingPoolStorage.sol # Storage & accounting
β β βββ Router.sol # Central coordination hub
β β βββ TokenDataStream.sol # Oracle/price feed system
β β βββ InterestRateModel.sol # Interest calculations
β β βββ IsHealthy.sol # Health factor calculations
β β βββ Pricefeed.sol # Price feed aggregator
β β βββ WrappedNative.sol # Native token wrapper
β β βββ hooks/ # Protocol hook contracts
β β βββ interfaces/ # Contract interfaces
β β βββ mocks/ # Mock tokens for testing
β βββ script/ # Deployment scripts
β β βββ DeploySlemanCore.s.sol # Base deployment logic
β β βββ steps/ # 15 modular deployment steps
β βββ test/ # Unit and integration tests
β
βββ sleman-stylus/ # Rust smart contracts (Stylus SDK)
β βββ src/ # Rust source code
β βββ abi/ # Exported ABIs
β βββ tests/ # Rust tests
β βββ examples/ # Usage examples
β
βββ nitro-devnode/ # Local development node
π§ Core Contracts
1. LendingPool.sol (471 lines)
The main entry point for user interactions:
supplyCollateral()- Deposit tokens as collateralwithdrawCollateral()- Withdraw collateral tokenssupplyLiquidity()- Provide liquidity to earn interestwithdrawLiquidity()- Withdraw liquidity positionborrow()- Borrow tokens from liquidity poolrepay()- Repay borrowed tokensrepayWithCollateral()- Swap collateral to repay debtliquidation()- Liquidate unhealthy positions
Features:
UUPS Upgradeable pattern
Role-based access control (OWNER_ROLE, ADMIN_ROLE)
Pausable for emergency situations
Reentrancy protection
Native token (ETH/native) support
2. LendingPoolStorage.sol (589 lines)
Separated storage contract for upgradeable patterns:
Manages all state variables and accounting
Tracks user collateral, supply shares, and borrow shares
Handles interest accrual
Validates health factors before operations
Calculates share-to-asset conversions
Key Mappings:
mapping(address => mapping(address => uint256)) userCollateral;mapping(address => uint256) userSupplyShares;
mapping(address => uint256) userBorrowShares;
3. Router.sol (221 lines)
Central configuration and routing contract:
Manages lending pool registrations
Stores external contract addresses (Oracle, DEX, etc.)
Handles protocol fee configuration
Controls wrapped native token address
Manages reserve factors
4. Supporting Contracts
Contract | Purpose |
|---|---|
InterestRateModel.sol | Dynamic interest rate calculations |
IsHealthy.sol | Health factor & liquidation threshold calculations |
TokenDataStream.sol | Oracle/price feed aggregation |
Pricefeed.sol | Price feed interface |
π Hook System (7 Contracts)
The protocol uses a hook pattern for extensibility:
Hook | Description |
|---|---|
LendingPoolHook.sol | Events, errors, constants for LendingPool |
LendingPoolStorageHook.sol | Events, errors, constants for Storage |
RouterHook.sol | Events, errors, constants for Router |
InterestRateModelHook.sol | Interest rate configuration |
IsHealthyHook.sol | Health/liquidation parameters |
TokenDataStreamHook.sol | Oracle configuration |
PricefeedHook.sol | Price feed settings |
π‘ Interface Contracts (11)
βββ ILendingPool.sol # Main lending operations
βββ ILendingPoolStorage.sol # Storage access
βββ IRouter.sol # Router configuration
βββ IInterestRateModel.sol # Interest calculations
βββ IIsHealthy.sol # Health checks
βββ ITokenDataStream.sol # Oracle data
βββ IOracle.sol # External oracle interface
βββ IAerodromeRouter.sol # DEX (Aerodrome) integration
βββ ILiquidator.sol # Liquidation logic
βββ INusaVault.sol # Vault integration
βββ IWrapped.sol # Wrapped token interface
π Modular Deployment Pattern
The project features a 14-step modular deployment system:
Phase 8: IntegrationPhase 7: ParametersPhase 6: Lending ConfigPhase 5: Core LendingPhase 4: Router ConfigPhase 3: UtilitiesPhase 2: Oracle ConfigPhase 1: Infrastructure0. Deploy Mock Tokens1. Deploy Router2. Deploy TokenDataStream3. Set Price Feed4. Deploy IsHealthy5. Deploy InterestRateModel6. Config Router7. Deploy LendingPoolStorage8. Deploy LendingPool9. Config Router For LendingPool10. Config LendingPoolStorage11. Tweaking InterestRateModel12. Tweaking IsHealthy13. Set DEX Router14. Set ProtocolBenefits:
β Granular Control: Deploy/re-run only needed steps
β Easy Debugging: Identify issues at specific steps
β Fast Iteration: Skip successful steps
β Reusability: Works across networks (testnet/mainnet)
β Self-Documenting: Folder structure shows deployment order
π§ͺ Mock Tokens for Testing
Located in src/mocks/:
MOCKWBTC, MOCKWETH, MOCKUSDC, MOCKUSDT
MOCKARB
All mocks have public mint() and burn() functions for testing.
π§ Development Commands
Solidity (Foundry)
# Buildforge build
# Run tests
forge test
# Deploy single step
forge script script/steps/1.DeployRouter.s.sol --broadcast -vvv
# Deploy with verification
forge script ScriptName --broadcast -vvv \
--verify --verifier etherscan \
--etherscan-api-key $ETHERSCAN_API_KEY
Stylus (Rust)
# Check compilationcargo stylus check
# Export ABI
cargo stylus export-abi
# Deploy
cargo stylus deploy --private-key-path=<PATH>
# Run tests
cargo test
π Technology Stack
Layer | Technology |
|---|---|
Smart Contracts | Solidity 0.8.20, Rust (Stylus) |
Framework | Foundry, cargo-stylus |
Upgradability | UUPS Proxy Pattern |
Access Control | OpenZeppelin AccessControl |
Security | ReentrancyGuard, Pausable |
Cross-chain | LayerZero (OApp) |
DEX Integration | Aerodrome Router |
Oracle | Custom TokenDataStream + External oracles |
π― Key Differentiators
Isolated Pool Design: Risk separation between token pairs, no contagion
Collateral Repayment: Repay loans using collateral via DEX integration
Dual Technology Stack: Solidity + Stylus for optimal gas efficiency
Modular Architecture: Hook-based extensibility pattern
Professional Deployment: 14-step modular deployment with dependency tracking
Upgradeable Design: UUPS pattern with separated storage
Project: SlemanFi Protocol
Status: Active Development