Files
dbis_core/docs/flows/ssu-mint-burn-flow.md

313 lines
9.3 KiB
Markdown
Raw Permalink Normal View History

2025-12-12 15:02:56 -08:00
# SSU Mint Burn Flow
## Overview
The Synthetic Settlement Unit (SSU) is a stabilized cross-border settlement asset with composition: 40% currency, 30% commodity, 20% CBDC, 10% LAM. This flow documents the minting and burning processes, including composition calculation and liquidity verification.
## Prerequisites
- SSU exists or can be created (default SSU)
- Sufficient liquidity in underlying assets (for minting)
- Valid mint/burn request
- SSU service operational
- Composition service available
## Visual Flow Diagram
### Minting Flow
```
┌─────────────┐
│ Mint Request│
└──────┬──────┘
│ 1. Get/Create SSU
┌─────────────────────────┐
│ Get or Create Default │
│ SSU │
│ - Lookup active SSU │
│ - Create if not exists │
└──────┬──────────────────┘
│ 2. Verify Liquidity
┌─────────────────────────┐
│ Verify Liquidity for │
│ Minting │
│ - Check underlying │
│ - Verify sufficient │
└──────┬──────────────────┘
│ 3. Calculate Composition
┌─────────────────────────┐
│ Calculate SSU │
│ Composition │
│ - 40% currency │
│ - 30% commodity │
│ - 20% CBDC │
│ - 10% LAM │
└──────┬──────────────────┘
│ 4. Create Transaction
┌─────────────────────────┐
│ Create Mint Transaction │
│ - Transaction ID │
│ - Amount │
│ - Type: mint │
└──────┬──────────────────┘
│ 5. Complete
┌─────────────┐
│ SSU Minted │
└─────────────┘
```
### Burning Flow
```
┌─────────────┐
│ Burn Request│
└──────┬──────┘
│ 1. Verify SSU
┌─────────────────────────┐
│ Verify SSU Exists │
│ - Lookup SSU by ID │
│ - Check status: active │
└──────┬──────────────────┘
│ 2. Create Transaction
┌─────────────────────────┐
│ Create Burn Transaction │
│ - Transaction ID │
│ - Amount │
│ - Type: burn │
└──────┬──────────────────┘
│ 3. Complete
┌─────────────┐
│ SSU Burned │
└─────────────┘
```
## Step-by-Step Process
### Minting Process
#### Step 1: Get or Create Default SSU
1. Receive mint request with:
- Amount to mint
- Trigger bank ID (optional)
- Transaction ID (optional)
2. Lookup default SSU:
- Search for SSU with name: "DBIS Global SSU"
- Filter by status: `active`
3. If SSU doesn't exist:
- Generate SSU ID: `SSU-{uuid}`
- Create SSU record:
- SSU ID
- SSU name: "DBIS Global SSU"
- Description: "DBIS Synthetic Settlement Unit - Global settlement asset"
- Underlying assets: empty array (initialized later)
- Status: `active`
- Initialize composition via composition service
4. Return SSU (existing or newly created)
**Code Reference**: `src/core/settlement/ssu/ssu-service.ts:46-208`
#### Step 2: Verify Liquidity for Minting
1. Validate mint amount:
- Convert to Decimal
- Verify: `amount > 0`
- If invalid, throw error: "Mint amount must be greater than zero"
2. Verify underlying asset liquidity:
- In production: check liquidity pools for:
- 40% currency reserves
- 30% commodity reserves
- 20% CBDC reserves
- 10% LAM reserves
- Currently: assume liquidity available (simplified)
3. If insufficient liquidity, throw error
**Code Reference**: `src/core/settlement/ssu/ssu-service.ts:213-221`
#### Step 3: Calculate Composition
1. Call composition service to calculate current composition:
- Pass SSU ID
- Service calculates based on:
- Current market values
- Reserve availability
- Target composition ratios
2. Composition service returns:
- Currency percentage: 40%
- Commodity percentage: 30%
- CBDC percentage: 20%
- LAM percentage: 10%
3. Store composition for this mint operation
**Code Reference**: `src/core/settlement/ssu/ssu-composition.service.ts`
#### Step 4: Create Mint Transaction
1. Call SSU transaction service to create transaction:
- SSU ID
- Transaction type: `mint`
- Amount: mint amount
- Source bank ID: trigger bank ID (if provided)
- Settlement ID: transaction ID (if provided)
2. Transaction service creates:
- Transaction ID
- Transaction record
- Links to SSU
3. Update SSU balance (if tracked):
- In production: increment SSU total supply
- Currently: simplified (balance tracking)
4. Return transaction ID
**Code Reference**: `src/core/settlement/ssu/ssu-service.ts:57-68`
### Burning Process
#### Step 1: Verify SSU Exists
1. Receive burn request with:
- SSU ID
- Amount to burn
- Reason (optional)
2. Lookup SSU by ID
3. Verify SSU exists and status is `active`
4. If not found or inactive, throw error: "SSU not found or not active"
**Code Reference**: `src/core/settlement/ssu/ssu-service.ts:74-94`
#### Step 2: Create Burn Transaction
1. Call SSU transaction service to create transaction:
- SSU ID
- Transaction type: `burn`
- Amount: burn amount
2. Transaction service creates:
- Transaction ID
- Transaction record
- Links to SSU
3. Update SSU balance (if tracked):
- In production: decrement SSU total supply
- Currently: simplified (balance tracking)
4. Return transaction ID
**Code Reference**: `src/core/settlement/ssu/ssu-service.ts:84-93`
## Error Handling
### Error: SSU Not Found
- **Detection**: SSU lookup returns null
- **Action**: Throw error "SSU not found or not active"
- **Recovery**: Verify SSU ID, create SSU if needed
### Error: SSU Inactive
- **Detection**: SSU status is not `active`
- **Action**: Throw error "SSU not found or not active"
- **Recovery**: Activate SSU, retry
### Error: Invalid Mint Amount
- **Detection**: Amount <= 0
- **Action**: Throw error "Mint amount must be greater than zero"
- **Recovery**: Correct amount, retry
### Error: Insufficient Liquidity
- **Detection**: Underlying assets don't have sufficient liquidity
- **Action**: Throw error, prevent minting
- **Recovery**: Add liquidity to pools, retry
### Error: Composition Calculation Failure
- **Detection**: Composition service returns error
- **Action**: Throw error, prevent minting
- **Recovery**: Verify composition service, retry
## Integration Points
### Related Services
- **SSU Service**: `src/core/settlement/ssu/ssu-service.ts`
- **SSU Composition Service**: `src/core/settlement/ssu/ssu-composition.service.ts`
- **SSU Transaction Service**: `src/core/settlement/ssu/ssu-transaction.service.ts`
- **Liquidity Services**: GLP, ID-SLG for liquidity verification
### API Endpoints
- `POST /api/v1/ssu/mint` - Mint SSU
- `POST /api/v1/ssu/burn` - Burn SSU
- `GET /api/v1/ssu/:ssuId` - Get SSU details
- `GET /api/v1/ssu` - List active SSUs
### Database Models
- `SyntheticSettlementUnit` - SSU records
- `SsuTransaction` - SSU transaction records
- `SsuComposition` - Composition records
## Performance Metrics
- **SSU Lookup/Creation**: < 10ms target
- **Liquidity Verification**: < 20ms target
- **Composition Calculation**: < 30ms target
- **Transaction Creation**: < 10ms target
- **Total End-to-End**: < 70ms target
- **Throughput**: 5,000+ operations/second
- **Availability**: 99.99% uptime target
## Security Considerations
### SSU Validation
- Only active SSUs can be used
- SSU ID verification prevents unauthorized access
### Liquidity Verification
- Ensures underlying assets available
- Prevents over-minting
- Maintains composition ratios
### Transaction Tracking
- All mint/burn operations logged
- Transaction IDs provide audit trail
- Links to source transactions
## Testing Scenarios
### Happy Path - Minting
1. Valid mint request
2. SSU exists or created
3. Sufficient liquidity
4. Composition calculated
5. Transaction created
6. SSU minted
### Happy Path - Burning
1. Valid burn request
2. SSU exists and active
3. Transaction created
4. SSU burned
### Error Scenarios
1. SSU not found
2. SSU inactive
3. Invalid mint amount
4. Insufficient liquidity
5. Composition calculation failure
### Edge Cases
1. Maximum mint amount
2. Minimum mint amount
3. Mint with zero amount (should fail)
4. Burn more than available
5. Concurrent mint/burn operations
---
**Related Flows**:
- [SSU Atomic Settlement Flow](./ssu-atomic-settlement-flow.md)
- [FX/SSU Integration Flow](./fx-ssu-integration-flow.md)
- [GLP Contribution Withdrawal Flow](./glp-contribution-withdrawal-flow.md)