Files
trading_bot_v3/app/api/drift/login/route.js
mindesbunister fb194f1b12 Implement working Drift leverage trading
Key Features:
-  Drift SDK v2.126.0-beta.14 integration with Helius RPC
-  User account initialization and balance reading
-  Leverage trading API with real trades executed
-  Support for SOL, BTC, ETH, APT, AVAX, BNB, MATIC, ARB, DOGE, OP
-  Transaction confirmed: gNmaWVqcE4qNK31ksoUsK6pcHqdDTaUtJXY52ZoXRF

API Endpoints:
- POST /api/drift/trade - Main trading endpoint
- Actions: get_balance, place_order
- Successfully tested with 0.01 SOL buy order at 2x leverage

Technical Fixes:
- Fixed RPC endpoint blocking with Helius API key
- Resolved wallet signing compatibility issues
- Implemented proper BigNumber handling for amounts
- Added comprehensive error handling and logging

Trading Bot Status: 🚀 FULLY OPERATIONAL with leverage trading!
2025-07-22 12:23:51 +02:00

142 lines
4.1 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { NextResponse } from 'next/server'
export async function POST(request) {
try {
console.log('🌊 Drift login attempt...')
// Check if environment is configured
if (!process.env.SOLANA_PRIVATE_KEY) {
return NextResponse.json({
success: false,
isLoggedIn: false,
error: 'Drift not configured - missing SOLANA_PRIVATE_KEY'
}, { status: 400 })
}
// Import Drift SDK components (same as execute-drift route)
const { DriftClient, initialize } = await import('@drift-labs/sdk')
const { Connection, Keypair } = await import('@solana/web3.js')
// Initialize connection and wallet
const connection = new Connection(
process.env.SOLANA_RPC_URL || 'https://api.mainnet-beta.solana.com',
'confirmed'
)
const privateKeyArray = JSON.parse(process.env.SOLANA_PRIVATE_KEY)
const keypair = Keypair.fromSecretKey(new Uint8Array(privateKeyArray))
// Create wallet interface manually since Anchor Wallet constructor is not working
const wallet = {
publicKey: keypair.publicKey,
signTransaction: async (tx) => {
tx.partialSign(keypair)
return tx
},
signAllTransactions: async (txs) => {
return txs.map(tx => {
tx.partialSign(keypair)
return tx
})
}
}
const publicKey = keypair.publicKey.toString()
console.log('🔐 Connecting to Drift with wallet:', publicKey)
// Initialize Drift SDK
const env = 'mainnet-beta'
const sdkConfig = initialize({ env })
const driftClient = new DriftClient({
connection,
wallet,
programID: sdkConfig.DRIFT_PROGRAM_ID,
opts: {
commitment: 'confirmed',
},
})
try {
// Subscribe to drift client
await driftClient.subscribe()
console.log('✅ Connected to Drift successfully')
// Check if user account exists
let userAccountExists = false
let userAccountPublicKey = null
try {
const userAccountPubkey = await driftClient.getUserAccountPublicKey()
userAccountPublicKey = userAccountPubkey.toString()
// Try to fetch user account to see if it exists
const userAccount = await driftClient.getUserAccount()
userAccountExists = !!userAccount
console.log('👤 User account status:', {
exists: userAccountExists,
publicKey: userAccountPublicKey
})
} catch (accountError) {
console.log(' User account not found or not initialized')
userAccountExists = false
}
// Clean up connection
await driftClient.unsubscribe()
return NextResponse.json({
success: true,
isLoggedIn: true,
publicKey: publicKey,
userAccountExists: userAccountExists,
userAccountPublicKey: userAccountPublicKey,
driftProgramId: sdkConfig.DRIFT_PROGRAM_ID.toString(),
connection: 'mainnet-beta',
message: userAccountExists
? '✅ Drift account ready for trading'
: '⚠️ Drift account exists but may need initialization'
})
} catch (subscribeError) {
console.error('❌ Failed to connect to Drift:', subscribeError)
return NextResponse.json({
success: false,
isLoggedIn: false,
error: 'Failed to connect to Drift Protocol',
details: subscribeError.message,
publicKey: publicKey
}, { status: 400 })
}
} catch (error) {
console.error('❌ Drift login error:', error)
return NextResponse.json({
success: false,
isLoggedIn: false,
error: 'Drift login failed',
details: error.message
}, { status: 500 })
}
}
export async function GET() {
return NextResponse.json({
message: 'Drift Protocol Login API',
endpoints: {
'POST /api/drift/login': 'Initialize connection to Drift Protocol'
},
status: 'Active',
requirements: [
'SOLANA_PRIVATE_KEY environment variable',
'Valid Solana wallet with USDC',
'Internet connection to Solana mainnet'
]
})
}