- Implemented complete arbitrage loop (Steps 0-4) - Risk control service with hard caps (30% LTV, 25% USDTz exposure) - Progressive redemption testing (0k → 50k → cd /home/intlc/projects/proxmox/dbis_core/src/core/defi/arbitrage && git commit -m "Initial commit: Deal orchestration tool - Freeze-resistant arbitrage loop - Implemented complete arbitrage loop (Steps 0-4) - Risk control service with hard caps (30% LTV, 25% USDTz exposure) - Progressive redemption testing ($50k → $250k → $1M+) - Graceful failure handling and state management - CLI interface and programmatic API - Comprehensive documentation Features: - Capital split into three buckets (Core ETH, Working Liquidity, Opportunistic) - ETH wrapping and collateral supply - USDT borrowing at controlled LTV - Discount arbitrage execution - Partial monetization with redemption testing - Loop closing with profit capture Design Principles: - One-way risk only - Anchor asset (ETH) untouchable - No leverage on discounted assets - Independent leg settlement"M+) - Graceful failure handling and state management - CLI interface and programmatic API - Comprehensive documentation Features: - Capital split into three buckets (Core ETH, Working Liquidity, Opportunistic) - ETH wrapping and collateral supply - USDT borrowing at controlled LTV - Discount arbitrage execution - Partial monetization with redemption testing - Loop closing with profit capture Design Principles: - One-way risk only - Anchor asset (ETH) untouchable - No leverage on discounted assets - Independent leg settlement
16 KiB
Deal Orchestration Tool - Arbitrage Module
Freeze-Resistant, Capital-Preserving Arbitrage Loop
This module implements a sophisticated deal orchestration tool designed to execute freeze-resistant arbitrage loops that preserve capital even when individual legs fail. The system is built on four non-negotiable design principles that ensure no single leg failure can trap principal.
📋 Table of Contents
- Overview
- Design Principles
- Architecture
- The Arbitrage Loop
- Risk Controls
- Implementation Details
- Usage
- Configuration
- Failure Scenarios
- Development
Overview
This tool executes a multi-step arbitrage loop using:
- ETH/WETH as the anchor asset (never touched in risky operations)
- USDT/cUSDT as working capital (borrowed against ETH collateral)
- USDTz as discounted upside (bought at 40% discount, never leveraged)
The loop is designed so that if any single leg fails (redemption freezes, borrow market freezes, network congestion), the system degrades gracefully into a holding state rather than causing losses.
Key Features
✅ One-Way Risk: Principal recovery never depends on redemption
✅ Anchor Protection: Core ETH remains untouched
✅ No Leverage on Discounted Assets: USDTz never used as collateral
✅ Independent Settlement: Each leg can settle independently
✅ Progressive Testing: Redemption tested incrementally ($50k → $250k → $1M+)
✅ Hard Risk Caps: 30% max LTV, 25% max USDTz exposure
Design Principles
Rule 1 — One-Way Risk Only
- You never need redemption to recover principal
- Redemption = upside, not survival
- Principal is protected by ETH collateral
Rule 2 — Anchor Asset is Untouchable
- ETH / WETH is the anchor
- Stables are temporary instruments
- Core ETH bucket (50%) is never touched
Rule 3 — Discounted Assets Never Carry Leverage
- USDTz bought at 40% discount is never borrowed against
- It never collateralizes anything critical
- No rehypothecation allowed
Rule 4 — Every Leg Can Settle Independently
- No atomic dependency across chains or issuers
- If one leg freezes, loop degrades into a holding, not a loss
- Each step can complete independently
Architecture
File Structure
arbitrage/
├── types.ts # Type definitions and interfaces
├── config.ts # ChainID 138 addresses and risk params
├── risk-control.service.ts # Risk validation and enforcement
├── step-execution.service.ts # Individual step implementations
├── redemption-test.service.ts # Progressive redemption testing
├── deal-orchestrator.service.ts # Main orchestrator
├── cli.ts # Command-line interface
├── index.ts # Main exports
└── README.md # This file
Core Services
RiskControlService
- Validates deal requests against risk parameters
- Enforces LTV compliance (max 30%)
- Checks USDTz exposure limits (max 25% NAV)
- Validates no rehypothecation
StepExecutionService
- Step 0: Capital split into three buckets
- Step 1: Generate working liquidity (wrap, supply, borrow)
- Step 2: Execute discount arbitrage (buy USDTz)
- Step 3: Partial monetization (split and attempt redemption)
- Step 4: Close the loop (repay, unlock, capture profit)
RedemptionTestService
- Progressive testing: $50k → $250k → $1M+
- Success probability decreases with amount
- Stops testing if any test fails
DealOrchestratorService
- Orchestrates the entire loop
- Manages state transitions
- Handles errors and graceful degradation
- Tracks all risk checks and redemption tests
The Arbitrage Loop
STEP 0 — Capital Split
Purpose: Divide initial ETH into three strategic buckets
Example with $10M equivalent ETH:
| Bucket | Purpose | Amount | Percentage |
|---|---|---|---|
| A | Core ETH (never touched) | $5.0M | 50% |
| B | Working Liquidity | $3.0M | 30% |
| C | Opportunistic USDTz | $2.0M | 20% |
Critical Constraint: ETH never enters the USDTz leg directly.
Implementation: StepExecutionService.executeStep0()
STEP 1 — Generate Working Liquidity (Safe)
Purpose: Create working capital by borrowing against ETH collateral
Process:
- Wrap ETH → WETH (1:1 ratio)
- Supply WETH to lending protocol on ChainID 138
- Borrow USDT/cUSDT at ≤30% LTV
Example:
- $3M WETH collateral supplied
- $900k USDT borrowed (30% LTV)
Safety: If anything freezes later, ETH is recoverable due to low LTV.
Implementation: StepExecutionService.executeStep1()
Risk Checks:
- LTV compliance (must be ≤30%)
- Collateral value validation
STEP 2 — Execute Discount Arbitrage (Isolated)
Purpose: Use borrowed USDT to buy discounted USDTz
Process:
- Use borrowed USDT ($900k in example)
- Buy USDTz at 40% discount
- Receive ≈ $1.5M USDTz (at 40% discount: $900k / 0.6 = $1.5M)
Critical Rules:
- This USDTz is never pledged as collateral
- Never bridged unless tested small first
- Treated as optional upside, not money
Implementation: StepExecutionService.executeStep2()
Risk Checks:
- USDTz exposure limit (must be <25% of total NAV)
- No rehypothecation validation
STEP 3 — Partial Monetization (Optional, Safe)
Purpose: Attempt to monetize a portion of USDTz while holding the rest
Process:
-
Split USDTz into two portions:
- 30-40%: Attempt redemption/swap to USDT
- 60-70%: Hold cold as optional upside
-
Progressive redemption testing:
- Test $50k first (95% success probability)
- Then $250k (85% success probability)
- Then $1M+ (75% success probability)
-
If redemption works:
- Convert to USDT
- Ready to repay borrow
- Capture spread
-
If redemption freezes:
- Nothing upstream is affected
- ETH collateral remains safe
- Loan remains healthy
- USDTz held as optional upside
Implementation: StepExecutionService.executeStep3() + RedemptionTestService
STEP 4 — Close the Loop (If Redemption Works)
Purpose: Complete the arbitrage by repaying borrow and unlocking collateral
Process (if 40% redeems successfully):
- $600k USDTz → $600k USDT (from redemption)
- Repay $900k borrow (may need additional liquidity or wait for more redemption)
- Residual ETH unlocked
- Remaining USDTz ($900k) is pure upside
Profit Sources:
- Discount capture (40% on USDTz)
- ETH appreciation (if ETH price increases)
- Interest spread (if borrowing rate < redemption yield)
Implementation: StepExecutionService.executeStep4()
Note: If redemption fails, this step is skipped and the deal remains in "frozen" state.
Risk Controls
Hard Caps
| Control | Limit | Enforcement |
|---|---|---|
| Max LTV | 30% | Validated before and after borrowing |
| Max USDTz Exposure | <25% of total NAV | Checked after USDTz acquisition |
| No Rehypothecation | USDTz cannot be collateral | Validated throughout execution |
Redemption Testing
Progressive testing ensures redemption throughput is verified before committing large amounts:
-
$50k test (95% success probability)
- Small test to verify basic functionality
- If fails, stop immediately
-
$250k test (85% success probability)
- Medium test to verify scaling
- Cumulative: $300k tested
-
$1M+ test (75% success probability)
- Large test to verify production capacity
- Cumulative: $1.3M+ tested
Implementation: RedemptionTestService.executeProgressiveTests()
Implementation Details
Type System
All types are defined in types.ts:
DealExecutionRequest: Input parameters for deal executionDealState: Current state of a deal (step, buckets, amounts, tx hashes)DealStep: Enum of possible deal stepsStep0ResultthroughStep4Result: Results from each stepRiskCheckResult: Risk validation resultsRedemptionTestResult: Individual redemption test resultsDealExecutionResult: Complete execution result
State Management
Deals progress through states:
INITIALIZED→ Deal createdCAPITAL_SPLIT→ Step 0 completeWORKING_LIQUIDITY_GENERATED→ Step 1 completeARBITRAGE_EXECUTED→ Step 2 completeMONETIZATION_ATTEMPTED→ Step 3 completeLOOP_CLOSED→ Step 4 complete (success)FROZEN→ Redemption failed, holding stateFAILED→ Error occurred
Error Handling
- Graceful Degradation: Failures in optional steps (redemption) don't affect core positions
- Risk Validation: All steps validated before execution
- Transaction Tracking: All on-chain transactions tracked with hashes
- Error Logging: Comprehensive logging via Winston
Integration Points
The tool integrates with:
- Prisma ORM: For database persistence (when implemented)
- Winston Logger: For structured logging
- Existing DeFi Services: Follows patterns from
DeFiSwapService - ChainID 138: All operations on ChainID 138 network
Usage
Command-Line Interface
# Basic execution
node cli.js execute \
--totalEthValue 10000000 \
--participantBankId BANK001 \
--moduleId MODULE001
# With custom parameters
node cli.js execute \
--totalEthValue 10000000 \
--participantBankId BANK001 \
--moduleId MODULE001 \
--usdtzDiscount 0.40 \
--maxLtv 0.30 \
--redemptionPortion 0.35 \
--coldStoragePortion 0.65
Programmatic API
import { dealOrchestratorService } from '@/core/defi/arbitrage';
import { DealExecutionRequest } from '@/core/defi/arbitrage/types';
const request: DealExecutionRequest = {
totalEthValue: '10000000', // $10M
participantBankId: 'BANK001',
moduleId: 'MODULE001',
usdtzDiscountRate: 0.40, // 40% discount
maxLtv: 0.30, // 30% LTV
monetizationSplit: {
redemptionPortion: 0.35, // 35% for redemption
coldStoragePortion: 0.65, // 65% for cold storage
},
};
const result = await dealOrchestratorService.executeDeal(request);
console.log('Deal ID:', result.dealId);
console.log('Status:', result.status);
console.log('Step:', result.state.step);
console.log('Final Profit:', result.finalProfit?.toString());
// Check risk compliance
const allRiskChecksPassed = result.riskChecks.every(r => r.passed);
console.log('All Risk Checks Passed:', allRiskChecksPassed);
// Check redemption tests
const redemptionReliable = result.redemptionTests.every(r => r.successful);
console.log('Redemption Reliable:', redemptionReliable);
Service-Level Usage
// Use individual services
import {
riskControlService,
stepExecutionService,
redemptionTestService,
} from '@/core/defi/arbitrage';
// Validate a deal request
const riskCheck = await riskControlService.validateDealRequest(
request,
new Decimal('10000000')
);
// Execute a specific step
const step0Result = await stepExecutionService.executeStep0(request);
// Test redemption
const testResults = await redemptionTestService.executeProgressiveTests(
new Decimal('1500000')
);
Configuration
Environment Variables
Set these environment variables for protocol addresses:
# RPC Configuration
export CHAIN138_RPC_URL="http://192.168.11.250:8545"
# or
export CHAIN138_RPC_URL="https://rpc-core.d-bis.org"
# Protocol Addresses (to be configured based on actual deployment)
export CHAIN138_LENDING_PROTOCOL="<lending-protocol-address>"
export CHAIN138_VAULT_ADDRESS="<vault-contract-address>"
export CHAIN138_LEDGER_ADDRESS="<ledger-contract-address>"
export CHAIN138_USDTZ_SWAP_ADDRESS="<usdtz-swap-contract-address>"
export CHAIN138_USDTZ_REDEEM_ADDRESS="<usdtz-redeem-contract-address>"
Token Addresses (ChainID 138)
Pre-configured in config.ts:
| Token | Address | Decimals |
|---|---|---|
| WETH | 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 |
18 |
| WETH10 | 0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f |
18 |
| LINK | 0xb7721dD53A8c629d9f1Ba31a5819AFe250002b03 |
18 |
| cUSDT | 0x93E66202A11B1772E55407B32B44e5Cd8eda7f22 |
6 |
| cUSDC | 0xf22258f57794CC8E06237084b353Ab30fFfa640b |
6 |
Risk Parameters
Default values in config.ts:
DEFAULT_RISK_PARAMS = {
MAX_LTV: 0.30, // 30% maximum
MAX_USDTZ_EXPOSURE_PCT: 0.25, // 25% of NAV
DEFAULT_USDTZ_DISCOUNT: 0.40, // 40% discount
DEFAULT_MONETIZATION_SPLIT: {
redemptionPortion: 0.35, // 35% for redemption
coldStoragePortion: 0.65, // 65% for cold storage
},
}
Capital Split Defaults
DEFAULT_CAPITAL_SPLIT = {
coreEthPct: 0.50, // 50% core ETH
workingLiquidityPct: 0.30, // 30% working liquidity
opportunisticUsdtzPct: 0.20, // 20% opportunistic
}
Failure Scenarios
Failure Case A — USDTz Redemption Freezes
What Happens:
- ✅ ETH collateral untouched
- ✅ Loan still healthy (low LTV)
- ✅ USDTz just sits as optional upside
- ❌ No liquidation
- ❌ No margin calls
System Response:
- Deal state transitions to
FROZEN - No upstream impact
- Can wait indefinitely or attempt redemption later
Implementation: Handled in StepExecutionService.executeStep3()
Failure Case B — USDT Borrow Market Freezes
What Happens:
- ✅ ETH collateral still priced
- ✅ LTV low enough to wait (30% max)
- ✅ No forced unwind
System Response:
- Can wait for market to recover
- Can repay from other liquidity sources
- Can refinance later
Implementation: Low LTV ensures safety margin
Failure Case C — ChainID 138 Congestion
What Happens:
- ✅ ETH is base layer or wrapped (no cross-chain dependency)
- ✅ No issuer dependency
- ✅ No atomic cross-chain operations
System Response:
- Operations can wait for network to clear
- No time-sensitive atomic dependencies
- Each leg can complete independently
Development
Prerequisites
- TypeScript 4.5+
- Node.js 16+
- Prisma ORM (for database integration)
- Winston (for logging)
- Decimal.js (for precise decimal arithmetic)
Dependencies
{
"@prisma/client": "^5.0.0",
"decimal.js": "^10.4.0",
"uuid": "^9.0.0",
"winston": "^3.11.0"
}
Building
cd dbis_core/src/core/defi/arbitrage
tsc --build
Testing
# Run tests (when test suite is implemented)
npm test
# Run with coverage
npm run test:coverage
Integration with Existing Services
The tool follows patterns from existing DeFiSwapService:
- Uses Prisma for database operations
- Uses Winston for logging
- Uses Decimal.js for financial calculations
- Follows TypeScript path aliases (
@/core/*)
Future Enhancements
- On-Chain Integration: Replace mock transactions with actual smart contract calls
- Database Persistence: Store deal states in Prisma database
- Monitoring: Add metrics and alerting
- API Endpoints: REST/GraphQL API for deal management
- WebSocket Updates: Real-time deal status updates
- Multi-Chain Support: Extend to other chains beyond ChainID 138
Notes
Why This Loop Cannot Blow Up
The loop cannot blow up unless:
- ETH itself collapses (systemic risk, not loop-specific)
- LTV discipline is violated (prevented by hard caps)
Everything else becomes a timing issue, not a solvency issue.
USDTz Treatment
USDTz is treated as:
A deeply discounted call option, not money
This means:
- Never used as critical collateral
- Never required for principal recovery
- Always optional upside
- Can be held indefinitely if redemption freezes
Capital Preservation
The system is designed for capital preservation:
- Core ETH (50%) never touched
- Low LTV (30%) provides safety margin
- Independent leg settlement prevents cascade failures
- Graceful degradation to holding state
License
[To be determined based on parent project license]
Author
Created as part of the DBIS Core Banking System - DeFi Arbitrage Module
Date: January 27, 2026
Version: 1.0.0
References
- ChainID 138 Token Addresses:
docs/11-references/CHAIN138_TOKEN_ADDRESSES.md - DeFi Swap Service:
dbis_core/src/core/defi/sovereign/defi-swap.service.ts - Vault Contract:
smom-dbis-138/contracts/vault/Vault.sol - Ledger Contract:
smom-dbis-138/contracts/vault/Ledger.sol