One-way wrapper enabling conversion from sUSDC to STUSD with lock support
sUSDC Ecosystem
Overview
The sUSDC ecosystem implements a one-way conversion mechanism from sUSDC (tradeable ERC20) to STUSD (soul-bound token). This architecture enables participants to convert their liquid sUSDC holdings into yield-bearing STUSD positions.
Token Architecture
STUSD (Soul-bound Layer)
- Non-transferable (with lock support)
- Yield-bearing: Accrues returns from Venus Protocol
- Lock enforcement: Supports time-locked positions
- Protected design: Resistant to flash loan attacks
sUSDC (Liquidity Layer)
- ERC20 Standard: Fully transferable and tradeable
- One-way conversion: Converts to STUSD via wrapper (no reverse path)
- DEX Compatible: Tradable on PancakeSwap and alternative exchanges
- DeFi Integration-Ready: Deployable as collateral or in yield strategies
Technical Architecture
sUSDCWrapper Contract
The wrapper contract manages one-way conversion from sUSDC to STUSD:
contract STUSDWrapper {
// Core conversion function (one-way only)
function wrapTokens(uint256 amount) external
// Lock administration for investor vesting
function wrapWithLock(address to, uint256 amount, uint256 unlockTime) external
// Lock info query
function getLockInfo(address account) external view returns (uint256 amount, uint256 unlockTime)
// Treasury utilities
function transferReserves(address to, uint256 amount) external
function transferAllReserves(address to) external returns (uint256)
// Operator permissions
function setOperationsRole(address operator, bool granted) external
}
SUDC (STUSD) Token Implementation
STUSD implements lock-conscious transfer logic:
contract STUSD is ERC20, AccessControl {
// Validates locks before transfers
function _update(address from, address to, uint256 amount) internal override {
// Confirm sender possesses adequate unlocked balance
(uint256 locked, uint256 unlockTime) = ISTUSDWrapper(wrapper).getLockInfo(from);
require(balanceOf(from) - amount >= locked, "STUSD: Tokens locked");
super._update(from, to, amount);
}
// Minting and burning (wrapper only)
function issueFromWrapper(address to, uint256 amount) external
}
Key Features
One-Way Conversion
- sUSDC → STUSD: Convert tradeable sUSDC to yield-bearing STUSD
- No reverse path: Conversion is permanent (no unwrap function)
- Yield generation: STUSD immediately starts earning Venus yields
- Lock support: Optional time-locks for vesting schedules
Value Flow
- User holds sUSDC (tradeable ERC20)
- User calls
wrapTokens()to convert to STUSD - STUSD accrues yield from Venus Protocol
- No way to convert back to sUSDC
Application Scenarios
1. Yield Position Entry
Participants convert liquid sUSDC holdings into yield-generating STUSD positions to access Venus Protocol returns.
2. Vesting Schedules
Use wrapWithLock() for team/investor allocations with programmable unlock timetables that prevent premature transfers.
3. Treasury Management
Protocols convert idle sUSDC reserves to STUSD for sustainable yield generation without speculative risk.
Security Framework
Wrapper Protection
- Immutable contract architecture
- One-way design prevents exploit vectors
- Lock enforcement at contract level
- Reentrancy guards on all operations
Economic Protection
- No price peg to maintain (one-way conversion)
- No algorithmic mechanisms to fail
- Direct conversion without complex logic
- No reliance on oracles
Conversion Process
Standard Conversion
// User converts sUSDC to STUSD
sUSDC.approve(address(wrapper), amount);
wrapper.wrapTokens(amount);
// User now has STUSD earning yield
Locked Conversion (Vesting)
// Operator creates locked position
sUSDC.approve(address(wrapper), amount);
wrapper.wrapWithLock(recipient, amount, unlockTime);
// Recipient has STUSD but transfers are locked until unlockTime
Summary
The sUSDC ecosystem provides a straightforward mechanism for converting liquid sUSDC tokens into yield-bearing STUSD positions. The one-way architecture eliminates complexity and potential exploit vectors while enabling yield generation through Venus Protocol integration.