Files
trading_bot_v3/test-drift-account-comprehensive.js
mindesbunister de45349baa Restore working dashboard and TradingView analysis
- Fixed layout conflicts by removing minimal layout.tsx in favor of complete layout.js
- Restored original AI Analysis page with full TradingView integration
- Connected enhanced screenshot API to real TradingView automation service
- Fixed screenshot gallery to handle both string and object formats
- Added image serving API route for screenshot display
- Resolved hydration mismatch issues with suppressHydrationWarning
- All navigation pages working (Analysis, Trading, Automation, Settings)
- TradingView automation successfully capturing screenshots from AI and DIY layouts
- Docker Compose v2 compatibility ensured

Working features:
- Homepage with hero section and status cards
- Navigation menu with Trading Bot branding
- Real TradingView screenshot capture
- AI-powered chart analysis
- Multi-layout support (AI + DIY module)
- Screenshot gallery with image serving
- API endpoints for balance, status, screenshots, trading
2025-07-14 14:21:19 +02:00

162 lines
6.3 KiB
JavaScript
Raw Permalink 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.
#!/usr/bin/env node
require('dotenv').config();
const { Connection, Keypair, PublicKey } = require('@solana/web3.js');
async function testDriftAccount() {
console.log('🔍 Comprehensive Drift Account Analysis\n');
try {
// Setup
const secret = process.env.SOLANA_PRIVATE_KEY;
const keypair = Keypair.fromSecretKey(Buffer.from(JSON.parse(secret)));
const connection = new Connection(process.env.SOLANA_RPC_URL || 'https://api.mainnet-beta.solana.com', 'confirmed');
console.log('🔑 Wallet public key:', keypair.publicKey.toString());
// Check SOL balance
const balance = await connection.getBalance(keypair.publicKey);
console.log('💰 SOL balance:', (balance / 1e9).toFixed(6), 'SOL\n');
// Test multiple PDA calculation methods
const DRIFT_PROGRAM_ID = 'dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH';
console.log('📊 Testing different PDA calculation methods:\n');
// Method 1: Manual calculation (what check-drift-account.js uses)
console.log('1⃣ Manual PDA calculation:');
const [userAccountPDA1] = await PublicKey.findProgramAddress(
[
Buffer.from('user'),
keypair.publicKey.toBuffer(),
Buffer.from([0]) // subAccountId = 0
],
new PublicKey(DRIFT_PROGRAM_ID)
);
console.log(' PDA:', userAccountPDA1.toString());
const accountInfo1 = await connection.getAccountInfo(userAccountPDA1);
console.log(' Exists:', !!accountInfo1);
if (accountInfo1) {
console.log(' Data length:', accountInfo1.data.length);
console.log(' Owner:', accountInfo1.owner.toString());
}
// Method 2: Try using the Drift SDK's getUserAccountPublicKey function
console.log('\n2⃣ SDK PDA calculation:');
try {
// Import the getUserAccountPublicKey function from Drift SDK
const { getUserAccountPublicKey } = require('@drift-labs/sdk');
const userAccountPDA2 = await getUserAccountPublicKey(
new PublicKey(DRIFT_PROGRAM_ID),
keypair.publicKey,
0
);
console.log(' PDA:', userAccountPDA2.toString());
console.log(' Same as manual?', userAccountPDA1.equals(userAccountPDA2));
const accountInfo2 = await connection.getAccountInfo(userAccountPDA2);
console.log(' Exists:', !!accountInfo2);
if (accountInfo2) {
console.log(' Data length:', accountInfo2.data.length);
console.log(' Owner:', accountInfo2.owner.toString());
}
} catch (sdkError) {
console.log(' ❌ SDK method failed:', sdkError.message);
}
// Method 3: Try with different subaccount IDs
console.log('\n3⃣ Testing multiple subaccount IDs:');
for (let subAccountId = 0; subAccountId < 5; subAccountId++) {
const [userAccountPDA] = await PublicKey.findProgramAddress(
[
Buffer.from('user'),
keypair.publicKey.toBuffer(),
Buffer.from([subAccountId])
],
new PublicKey(DRIFT_PROGRAM_ID)
);
const accountInfo = await connection.getAccountInfo(userAccountPDA);
console.log(` SubAccount ${subAccountId}: ${userAccountPDA.toString()} - ${accountInfo ? '✅ EXISTS' : '❌ NOT FOUND'}`);
}
// Method 4: Try searching for any user accounts by scanning program accounts
console.log('\n4⃣ Scanning for any Drift user accounts by this authority:');
try {
const programAccounts = await connection.getProgramAccounts(
new PublicKey(DRIFT_PROGRAM_ID),
{
filters: [
{
memcmp: {
offset: 8, // Skip discriminator
bytes: keypair.publicKey.toBase58()
}
}
]
}
);
console.log(` Found ${programAccounts.length} account(s) owned by this program with this authority`);
programAccounts.forEach((account, index) => {
console.log(` Account ${index + 1}: ${account.pubkey.toString()}`);
console.log(` Data length: ${account.account.data.length}`);
console.log(` Lamports: ${account.account.lamports}`);
});
} catch (scanError) {
console.log(' ❌ Scan failed:', scanError.message);
}
// Method 5: Test API endpoints
console.log('\n5⃣ Testing API endpoints:');
try {
// Test login
const loginResponse = await fetch('http://localhost:3000/api/drift/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' }
});
const loginData = await loginResponse.json();
console.log(' Login API result:', JSON.stringify(loginData, null, 2));
// Test balance
const balanceResponse = await fetch('http://localhost:3000/api/drift/balance');
const balanceData = await balanceResponse.json();
console.log(' Balance API result:', JSON.stringify(balanceData, null, 2));
// Test positions
const positionsResponse = await fetch('http://localhost:3000/api/drift/positions');
const positionsData = await positionsResponse.json();
console.log(' Positions API result:', JSON.stringify(positionsData, null, 2));
} catch (apiError) {
console.log(' ❌ API test failed:', apiError.message);
}
// Method 6: Check actual Drift program state
console.log('\n6⃣ Checking Drift program state:');
try {
const programInfo = await connection.getAccountInfo(new PublicKey(DRIFT_PROGRAM_ID));
console.log(' Program exists:', !!programInfo);
console.log(' Program owner:', programInfo?.owner.toString());
console.log(' Program executable:', programInfo?.executable);
} catch (programError) {
console.log(' ❌ Program check failed:', programError.message);
}
console.log('\n📋 Summary:');
console.log(' - This wallet has sufficient SOL for transactions');
console.log(' - The Drift program is accessible');
console.log(' - Account existence discrepancy between manual check and SDK login');
console.log(' - Need to investigate why the SDK reports account exists but manual check fails');
} catch (error) {
console.error('❌ Test failed:', error.message);
console.error('Stack:', error.stack);
}
}
testDriftAccount().catch(console.error);