UserPool

UserPool: QEURO Deposits and Staking Management

πŸ“‹ Overview

The UserPool is the central contract that manages USDC user deposits, QEURO staking operations, and reward distribution. It's the main entry point for Quantillon protocol users.


πŸ—οΈ Contract Architecture

Inheritance

contract UserPool is 
    Initializable,
    ReentrancyGuardUpgradeable,
    AccessControlUpgradeable,
    PausableUpgradeable,
    SecureUpgradeable

External Dependencies

Contract
Variable
Role

IQEUROToken

qeuro

QEURO token for mint/burn

IERC20

usdc

USDC token for deposits

IQuantillonVault

vault

Main vault for QEURO operations

IOracle

oracle

Real-time EUR/USD price

IYieldShift

yieldShift

Yield distribution

TimeProvider

TIME_PROVIDER

Centralized time management

address

treasury

ETH recovery address


πŸ” Roles & Permissions

Role
Responsibilities

DEFAULT_ADMIN_ROLE

General administration

GOVERNANCE_ROLE

Parameter modification (APY, fees, cooldown)

EMERGENCY_ROLE

Pause, emergency unstake, recovery


βš™οΈ Configuration Parameters

Staking Parameters

Parameter
Type
Description
Example

stakingAPY

uint256

Staking APY in basis points

500 = 5%

depositAPY

uint256

Base APY on deposits in basis points

200 = 2%

minStakeAmount

uint256

Minimum amount to stake (in QEURO)

100e18 = 100 QEURO

unstakingCooldown

uint256

Cooldown period before unstake (in seconds)

604800 = 7 days

Configuration Functions

Performance Fee

Parameter
Type
Description
Example

performanceFee

uint256

Fee on distributed yield (basis points)

1000 = 10%

Note: Mint and redemption fees are managed by QuantillonVault, not UserPool.


πŸ“Š Data Structures

UserInfo

Optimization: Fields are packed to reduce gas costs.

UserDepositInfo

UserWithdrawalInfo


πŸ’° User Operations

Deposit (USDC β†’ QEURO)

Flow

Withdrawal (QEURO β†’ USDC)

Flow


πŸ“ˆ Staking System

🚦 Staking APY Mechanism

The staking APY determines the annual return for users who stake their QEURO.

Reward Calculation

Variable
Description

stakedAmount

QEURO amount staked

stakingAPY

Annual rate in BPS (500 = 5%)

timeElapsed

Time since last calculation

Reward Update

This function is called automatically on each interaction (stake, unstake, claim).

Stake

Validations

  1. amount >= minStakeAmount (minimum amount)

  2. User has sufficient QEURO balance

  3. Contract not paused

Effects

  1. Updates pending rewards

  2. Transfers QEURO from user to contract

  3. Increases stakedAmount and totalStakes

  4. Records lastStakeTime

⏱️ Cooldown Mechanism (Unstaking)

The cooldown system prevents rapid stake/unstake cycles and protects against manipulation.

Unstaking Flow

Functions

Possible Errors

Error
Cause

CooldownNotComplete

Cooldown not yet finished

NoUnstakeRequest

No unstake request in progress

InsufficientStakedAmount

Requested amount > staked

Cooldown Configuration

Reward Claims

Allows the user to claim their pendingRewards in QEURO.


πŸ“¦ Batch Operations

To optimize gas on multiple operations:

Batch Reward Claim

Characteristics

Parameter
Value
Description

MAX_REWARD_BATCH_SIZE

50

Maximum users per batch

Use Cases

  • Automated reward distribution

  • Governance maintenance operations

  • Gas optimization for multiple claims


πŸ’Έ Performance Fee

The performanceFee is deducted from yield distributed to users.

Distribution Flow

Tracking Variables


πŸ“Š View Functions

User Information

Pool Metrics

Histories

Analytics


πŸ›‘οΈ Security & Emergency Controls

Emergency Unstake

Forces unstake for all users in case of emergency.

Pause

Pool Status

Recovery


πŸ“ Constants


πŸ“‹ Events


Summary: The UserPool is the main user interaction contract, managing USDC deposits, QEURO staking with configurable APY, and reward distribution. The cooldown mechanism protects against manipulation, while batch operations optimize gas costs.

Last updated