diff --git a/.env b/.env index ec95dfb..4d96fab 100644 --- a/.env +++ b/.env @@ -351,4 +351,5 @@ NEW_RELIC_LICENSE_KEY= USE_TRAILING_STOP=true TRAILING_STOP_PERCENT=0.3 -TRAILING_STOP_ACTIVATION=0.5 \ No newline at end of file +TRAILING_STOP_ACTIVATION=0.5 +MIN_QUALITY_SCORE=40 \ No newline at end of file diff --git a/lib/drift/client.ts b/lib/drift/client.ts index a9210c8..aa5061d 100644 --- a/lib/drift/client.ts +++ b/lib/drift/client.ts @@ -299,6 +299,13 @@ export class DriftService { return this.driftClient! } + /** + * Get Solana connection instance + */ + getConnection(): Connection { + return this.connection + } + /** * Get user instance */ diff --git a/lib/drift/orders.ts b/lib/drift/orders.ts index 6430d72..1a9bbae 100644 --- a/lib/drift/orders.ts +++ b/lib/drift/orders.ts @@ -141,13 +141,38 @@ export async function openPosition( console.log('🚀 Placing REAL market order...') const txSig = await driftClient.placePerpOrder(orderParams) - console.log(`✅ Order placed! Transaction: ${txSig}`) + console.log(`📝 Transaction submitted: ${txSig}`) + + // CRITICAL: Confirm transaction actually executed on-chain + console.log('⏳ Confirming transaction on-chain...') + const connection = driftService.getConnection() + + try { + const confirmation = await connection.confirmTransaction(txSig, 'confirmed') + + if (confirmation.value.err) { + console.error(`❌ Transaction failed on-chain:`, confirmation.value.err) + return { + success: false, + error: `Transaction failed: ${JSON.stringify(confirmation.value.err)}`, + } + } + + console.log(`✅ Transaction confirmed on-chain: ${txSig}`) + + } catch (confirmError) { + console.error(`❌ Failed to confirm transaction:`, confirmError) + return { + success: false, + error: `Transaction confirmation failed: ${confirmError instanceof Error ? confirmError.message : 'Unknown error'}`, + } + } // Wait a moment for position to update console.log('⏳ Waiting for position to update...') await new Promise(resolve => setTimeout(resolve, 2000)) - // Get actual fill price from position (optional - may not be immediate in DRY_RUN) + // Get actual fill price from position const position = await driftService.getPosition(marketConfig.driftMarketIndex) if (position && position.side !== 'none') {