Skip to content

Commit 06b03cd

Browse files
Merge pull request #247 from simonfrvr/feature/developer-sandbox-environment
Feature/developer sandbox environment
2 parents bbcd334 + 699e054 commit 06b03cd

13 files changed

Lines changed: 3574 additions & 6 deletions

.env.example

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,3 +201,15 @@ PII_SCRUBBING_SALT=your-secure-random-salt-for-pii-hashing-min-32-bytes
201201
INACTIVE_RETENTION_YEARS=3
202202
PII_SCRUBBING_ENABLED=true
203203
PII_SCRUBBING_CRON_SCHEDULE=0 2 * * 0 # Weekly on Sunday at 2 AM
204+
205+
# Sandbox Environment Configuration
206+
SANDBOX_ENABLED=false
207+
SANDBOX_MODE=testnet # testnet or mainnet
208+
SANDBOX_DB_SCHEMA_PREFIX=sandbox_
209+
SANDBOX_STELLAR_NETWORK_PASSPHRASE=Test SDF Network ; September 2015
210+
SANDBOX_STELLAR_HORIZON_URL=https://horizon-testnet.stellar.org
211+
SANDBOX_SOROBAN_RPC_URL=https://soroban-rpc.testnet.stellar.gateway.fm
212+
SANDBOX_SOROBAN_CONTRACT_ID=CAOUX2FZ65IDC4F2X7LJJ2SVF23A35CCTZB7KVVN475JCLKTTU4CEY6L
213+
SANDBOX_MOCK_PAYMENTS_ENABLED=true
214+
SANDBOX_FAILURE_SIMULATION_ENABLED=true
215+
SANDBOX_ZERO_VALUE_TOKENS_ENABLED=true

CONSOLIDATED_TREASURY_PR.md

Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
# PR: Multi-Currency "Consolidated Treasury" View
2+
3+
**Issue #220**
4+
5+
## Summary
6+
7+
This PR implements a comprehensive multi-currency consolidated treasury view that enables large organizations to view their entire protocol treasury in a single, stable currency regardless of underlying crypto assets (XLM, USDC, EURC).
8+
9+
## 🎯 Problem Solved
10+
11+
Large organizations accepting payments in multiple cryptocurrencies across different plans need:
12+
- **Single-Currency View**: Net worth in their preferred base currency (USD, EUR, etc.)
13+
- **Real-time Valuation**: Accurate pricing within 5-minute windows
14+
- **Risk Analysis**: Exposure breakdown by volatile tokens
15+
- **Performance Tracking**: 24-hour delta showing treasury changes
16+
17+
## 🚀 Features Implemented
18+
19+
### Core API Endpoints
20+
- `GET /api/v1/merchants/:id/treasury/consolidated` - Main consolidated view
21+
- `GET /api/v1/merchants/:id/treasury/history` - Historical treasury data
22+
23+
### Key Capabilities
24+
**Multi-Currency Conversion**: XLM, USDC, EURC → base currency
25+
**Real-time Price Feeds**: 5-minute freshness window via PriceCache
26+
**24-Hour Delta**: Price fluctuation vs revenue growth analysis
27+
**Asset Breakdown**: Detailed exposure analysis with percentages
28+
**Historical Tracking**: Treasury snapshots for trend analysis
29+
30+
## 🏗️ Architecture
31+
32+
### Database Schema
33+
- **`merchants`** - Base currency preferences and merchant data
34+
- **`merchant_balances`** - Multi-asset holdings (XLM, USDC, EURC)
35+
- **`price_cache`** - Real-time price data from multiple sources
36+
- **`treasury_snapshots`** - Historical treasury values
37+
38+
### Services Layer
39+
- **`PriceCacheService`** - Price conversion and caching logic
40+
- **`MerchantService`** - Balance management and historical data
41+
- **`TreasuryService`** - Consolidation and delta calculations
42+
43+
### Response Structure
44+
```json
45+
{
46+
"success": true,
47+
"data": {
48+
"merchantId": "uuid",
49+
"baseCurrency": "USD",
50+
"totalValueLocked": "93802.500000",
51+
"totalValueLockedUsd": "93802.500000",
52+
"delta24h": {
53+
"absolute": "1250.500000",
54+
"percentage": "1.3524"
55+
},
56+
"assetBreakdown": [
57+
{
58+
"assetCode": "USDC",
59+
"balance": "50000.00000000",
60+
"valueInBaseCurrency": "50000.000000",
61+
"percentageOfTotal": 53.31,
62+
"currentPrice": "1.00000000",
63+
"priceChange24h": 0
64+
}
65+
// ... more assets
66+
],
67+
"lastUpdated": "2026-04-28T14:30:00.000Z"
68+
}
69+
}
70+
```
71+
72+
## ✅ Acceptance Criteria Verification
73+
74+
### AC1: Single-Currency View ✅
75+
- Merchants can view net protocol worth in their base currency
76+
- Supports USD, EUR, and other major currencies
77+
- Shows total value in both base currency and USD
78+
79+
### AC2: Real-time Price Accuracy ✅
80+
- 5-minute price freshness window enforced
81+
- Multiple price sources (Stellar, Coinbase, Binance)
82+
- USD-bridged conversion for unsupported pairs
83+
84+
### AC3: Asset Exposure Breakdown ✅
85+
- Detailed breakdown by asset with percentages
86+
- Individual asset prices and 24h changes
87+
- Clear view of volatile token exposure
88+
89+
## 🧪 Testing
90+
91+
### Sample Data
92+
- 2 sample merchants with different base currencies
93+
- Multi-asset balances (XLM, USDC, EURC)
94+
- Current and historical price data
95+
96+
### Test Coverage
97+
- Comprehensive test script (`test_treasury_endpoint.js`)
98+
- Database migrations and seed data
99+
- Error handling and edge cases
100+
101+
## 📊 Files Added/Modified
102+
103+
### New Files
104+
- `services/priceCacheService.js` - Price conversion service
105+
- `services/merchantService.js` - Merchant management service
106+
- `services/treasuryService.js` - Consolidation logic service
107+
- `services/loggerService.js` - Logging utility
108+
- `routes/merchants.js` - Updated with treasury endpoints
109+
- `migrations/2024042800000*_create_*_table.js` - Database schema
110+
- `seeds/001_sample_merchants.js` - Sample data
111+
- `test_treasury_endpoint.js` - Test script
112+
113+
### Modified Files
114+
- `index.js` - Added merchant routes and fixed route ordering
115+
116+
## 🔒 Security & Compliance
117+
118+
- **Authentication**: All treasury endpoints require JWT authentication
119+
- **Audit Trail**: All treasury views logged for compliance
120+
- **Rate Limiting**: Standard rate limiting applied
121+
- **Error Handling**: Comprehensive error responses
122+
- **Input Validation**: Proper sanitization throughout
123+
124+
## 🚀 Performance
125+
126+
- **Database Indexing**: Optimized queries on merchant_id, asset_code, timestamps
127+
- **Price Caching**: Efficient lookup with freshness checks
128+
- **Connection Pooling**: High concurrency support
129+
- **Batch Operations**: Historical data processing
130+
131+
## 📋 Setup Instructions
132+
133+
1. Run migrations: `npm run migrate`
134+
2. Seed data: `npm run seed`
135+
3. Start server: `npm run dev`
136+
4. Test: `node test_treasury_endpoint.js`
137+
138+
## 🎯 Business Impact
139+
140+
**For Corporate Treasurers:**
141+
- Unified view of crypto-denominated revenue streams
142+
- Real-time risk assessment and exposure management
143+
- Performance tracking for treasury optimization
144+
145+
**Technical Benefits:**
146+
- Scalable architecture supporting additional assets
147+
- Real-time price feeds from multiple exchanges
148+
- Comprehensive audit trail for compliance
149+
150+
## 🔧 Integration Notes
151+
152+
- **Authentication**: Uses existing `authenticateToken` middleware
153+
- **Database**: Integrates with existing Knex.js setup
154+
- **Error Handling**: Follows existing error response patterns
155+
- **Logging**: Uses custom logger service for consistency
156+
157+
---
158+
159+
**Status**: ✅ Ready for Review
160+
**Testing**: ✅ Complete with sample data
161+
**Documentation**: ✅ Comprehensive README included
162+
163+
This implementation fully addresses Issue #220 and provides enterprise-grade treasury management capabilities for organizations managing multi-cryptocurrency payment streams.
164+
165+
### 📝 Next Steps for Reviewers
166+
167+
1. Review database migrations for proper schema design
168+
2. Test API endpoints with provided test script
169+
3. Verify authentication and authorization logic
170+
4. Check error handling and edge cases
171+
5. Validate price conversion accuracy
172+
173+
### 🧪 Quick Test Commands
174+
175+
```bash
176+
# Setup database
177+
npm run migrate
178+
npm run seed
179+
180+
# Start server
181+
npm run dev
182+
183+
# Test endpoints (in separate terminal)
184+
node test_treasury_endpoint.js
185+
```

0 commit comments

Comments
 (0)