#!/usr/bin/env node // Deal Orchestration Tool - CLI Entry Point import { dealOrchestratorService } from './deal-orchestrator.service'; import { logger } from '@/infrastructure/monitoring/logger'; import { DealExecutionRequest } from './types'; /** * CLI interface for executing deals */ async function main() { const args = process.argv.slice(2); if (args.length === 0 || args[0] === '--help' || args[0] === '-h') { console.log(` Deal Orchestration Tool - Freeze-Resistant Arbitrage Loop Usage: node cli.js execute [options] Options: --totalEthValue Total ETH value in USD (e.g., 10000000 for $10M) --participantBankId Participant bank ID --moduleId DeFi module ID --poolId Optional pool ID --usdtzDiscount USDTz discount rate (default: 0.40) --maxLtv Maximum LTV (default: 0.30) --redemptionPortion Redemption portion (default: 0.35) --coldStoragePortion Cold storage portion (default: 0.65) Examples: node cli.js execute --totalEthValue 10000000 --participantBankId BANK001 --moduleId MODULE001 node cli.js execute 10000000 BANK001 MODULE001 `); process.exit(0); } if (args[0] === 'execute') { try { // Parse arguments const request: DealExecutionRequest = { totalEthValue: process.env.TOTAL_ETH_VALUE || args[1] || '10000000', participantBankId: process.env.PARTICIPANT_BANK_ID || args[2] || '', moduleId: process.env.MODULE_ID || args[3] || '', poolId: process.env.POOL_ID || args[4], usdtzDiscountRate: parseFloat( process.env.USDTZ_DISCOUNT || args.find((a) => a.startsWith('--usdtzDiscount='))?.split('=')[1] || '0.40' ), maxLtv: parseFloat( process.env.MAX_LTV || args.find((a) => a.startsWith('--maxLtv='))?.split('=')[1] || '0.30' ), monetizationSplit: { redemptionPortion: parseFloat( process.env.REDEMPTION_PORTION || args.find((a) => a.startsWith('--redemptionPortion='))?.split('=')[1] || '0.35' ), coldStoragePortion: parseFloat( process.env.COLD_STORAGE_PORTION || args.find((a) => a.startsWith('--coldStoragePortion='))?.split('=')[1] || '0.65' ), }, }; if (!request.participantBankId || !request.moduleId) { throw new Error('participantBankId and moduleId are required'); } logger.info('Executing Deal', { totalEthValue: request.totalEthValue, participantBankId: request.participantBankId, moduleId: request.moduleId, }); const result = await dealOrchestratorService.executeDeal(request); console.log('\n=== Deal Execution Result ==='); console.log(`Deal ID: ${result.dealId}`); console.log(`Status: ${result.status}`); console.log(`Step: ${result.state.step}`); console.log(`\nCapital Buckets:`); console.log(` Core ETH: $${result.state.buckets.coreEth.toString()}`); console.log(` Working Liquidity: $${result.state.buckets.workingLiquidity.toString()}`); console.log(` Opportunistic USDTz: $${result.state.buckets.opportunisticUsdtz.toString()}`); if (result.step1) { console.log(`\nStep 1 - Working Liquidity:`); console.log(` WETH Supplied: ${result.step1.wethAmount.toString()}`); console.log(` USDT Borrowed: $${result.step1.borrowedUsdt.toString()}`); console.log(` LTV: ${result.step1.ltv.mul(100).toFixed(2)}%`); } if (result.step2) { console.log(`\nStep 2 - Discount Arbitrage:`); console.log(` USDT Spent: $${result.step2.usdtSpent.toString()}`); console.log(` USDTz Received: $${result.step2.usdtzReceived.toString()}`); console.log(` Discount: ${result.step2.discountRate.mul(100).toFixed(2)}%`); } if (result.step3) { console.log(`\nStep 3 - Partial Monetization:`); console.log(` USDTz for Redemption: $${result.step3.usdtzForRedemption.toString()}`); console.log(` USDTz for Cold Storage: $${result.step3.usdtzForColdStorage.toString()}`); console.log(` Redemption Successful: ${result.step3.redemptionSuccessful}`); if (result.step3.usdtReceived) { console.log(` USDT Received: $${result.step3.usdtReceived.toString()}`); } } if (result.step4) { console.log(`\nStep 4 - Loop Closed:`); console.log(` Borrow Repaid: ${result.step4.borrowRepaid}`); console.log(` ETH Unlocked: ${result.step4.ethUnlocked}`); console.log(` Profit Captured: $${result.step4.profitCaptured.toString()}`); console.log(` Remaining USDTz: $${result.step4.remainingUsdtz.toString()}`); } if (result.finalProfit) { console.log(`\nFinal Profit: $${result.finalProfit.toString()}`); } console.log(`\nRisk Checks: ${result.riskChecks.filter((r) => r.passed).length}/${result.riskChecks.length} passed`); console.log(`Redemption Tests: ${result.redemptionTests.filter((r) => r.successful).length}/${result.redemptionTests.length} successful`); if (result.state.errors.length > 0) { console.log(`\nErrors:`, result.state.errors); } process.exit(result.status === 'completed' ? 0 : 1); } catch (error: any) { logger.error('CLI Error', { error: error.message, stack: error.stack, }); console.error('Error:', error.message); process.exit(1); } } else { console.error('Unknown command:', args[0]); process.exit(1); } } // Run CLI if executed directly if (require.main === module) { main().catch((error) => { logger.error('Unhandled CLI Error', { error }); process.exit(1); }); }