# Subvault Technical Docs

### Contract Overview

**Contract Name**: `Subvault`\
**Symbol**: `STS`\
**Token Type**: ERC20 (non-transferable)\
**Primary Asset**: USDC (ERC20-compatible stablecoin)\
**Stake Token**: STS (Subvault Token Share)\
**Security Modules**: Pausable, ReentrancyGuard, Ownable, Chainalysis Oracle

### 🗃 Data Structures

```solidity
solidityCopyEditstruct StakeRecord {
    uint256 stsShares;      // Amount of STS minted during stake
    uint256 durationDays;   // Lock period (0, 90, 180)
    uint256 lockEndTime;    // Epoch time after which stake can be redeemed
    bool active;            // Active status
}
```

User stakes are stored in:

```solidity
solidityCopyEditmapping(address => StakeRecord[]) public userStakeRecords;
```

### 🧠 Business Logic Flow

#### Staking

1. User approves and calls `stake(amount, duration)`
2. STS minted and stake recorded
3. USDC transferred in

#### Unstaking

1. Lock expires → user calls `unstake(index)`
2. STS burned → USDC redeemed

#### Acquisition

1. Admin calls `withdrawForAcquisition(to, amount)`
2. Vault USDC decreases → STS dilution occurs

### 📦 Deployment Details

* **Compiler**: Solidity 0.8.17 (locked)
* **Libraries**: OpenZeppelin ERC20, SafeERC20, Pausable, ReentrancyGuard, Ownable
* **Decimals**: STS follows 18 decimals; USDC assumed to use 6
* **Chainalysis Oracle**: Must be deployed and compatible with `SanctionsList` interface
