USUALx Lockup Contract

High-Level Overview

The UsualXLockup contract is an upgradeable vault that enables users to lock their UsualX tokens for predefined durations. It implements a flexible locking mechanism with features such as position creation, top-ups within the same UTC calendar day, and position releases after lock expiration. The contract leverages OpenZeppelin's upgradeable contracts for enhanced security and flexibility, including pausability and reentrancy protection. The primary objective of UsualXLockup is to provide a secure mechanism for users to lock their UsualX tokens, potentially for governance or reward-earning purposes, while maintaining strict control over lock durations and position management.

Inherited Contracts

  • PausableUpgradeable: Emergency halt capabilities

  • ReentrancyGuardUpgradeable: Reentrancy attack prevention

Reward Boost Mechanism

The contract enables users to lock their UsualX tokens for various durations to receive boosted rewards. Key points:

  • Boost calculations are performed off-chain

  • Contract provides only necessary on-chain data through events and state tracking

Contract Summary

Main Functions

  • initialize: Contract setup with registry contract address

  • lock: New lock position creation

  • intraDayTopUp: Same-day position top-ups

  • release: Token release after lock expiration

  • releaseAndLock: Combined release and lock operations

  • unlockUserPosition: Forced position unlock by privileged roles

  • unlockUsersPositionsBatch: Forced batch position unlocking by privileged roles

Storage:

  • Uses UsualXLockupStorageV0 structure for state variables

Functionality Breakdown

A. Access Control and Security

  • Registry contract for role-based access

  • Position unlocking controls through dedicated roles

B. Position Management

  • Multiple lock positions per user support

  • Same-day position top-ups

  • Post-expiration release functionality

  • Privileged forced unlock capabilities

C. Lock Duration Management

  • Predefined durations (1, 3, 6, and 12 months)

  • Lock duration validation enforcement

Method Analysis

Public/External Functions

1. Initialize

Purpose: Contract initialization Key Features:

  • Registry contract validation

  • Access control setup

  • Default lock duration enablement Security:

  • Null address checks

  • Single initialization enforcement

  1. Lock

Purpose: New position creation Key Features:

  • Amount and receiver validation

  • Lock duration verification

  • Position creation and event emission

  • Reentrancy protection

  • Pause mechanism

  • Null address checks

  1. IntraDayTopUp

Purpose: Same-day position enhancement Key Features:

  • Same-day validation

  • Position amount update

  • Event emission

  • Reentrancy protection

  • Position existence checks

  • Active status verification

  1. Release

Purpose: Lock expiration token release Key Features:

  • Lock expiration verification

  • Token transfer

  • Position status update

  • Reentrancy protection

  • Position validation

  • Active status checks

Internal Functions

  1. _lock

Purpose: Core lock position creation Implementation:

  • Lock duration validation

  • Token transfer handling

  • Position creation

  • Total amount tracking

  • Event emission

  1. _topUp

Purpose: Position top-up logic Implementation:

  • Position validation

  • Same-day verification

  • Amount updates

  • Event emission

  1. _release

Purpose: Token release implementation Implementation:

  • Position validation

  • Lock expiration check

  • Token transfer

  • State updates

  1. _unlockBatchPositionsForUser

  • Range validation

  • Position processing

  • Amount accumulation

  • State updates

  • Token transfers

Flow Diagram

Security Considerations

1. Access Control

  • Role-based permissions

  • Registry contract integration

  • Function-level access restrictions

2. Input Validation

  • Address validation

  • Amount verification

  • Index range checks

3. Protection Mechanisms

  • Reentrancy guards

  • Pause functionality

  • Duration controls

Last updated

Was this helpful?