| functions | {"drift-price":{"description":"Get SOL price, funding rate, long/short ratio, and market sentiment","parameters":[{"name":"symbol","type":"string","required":false,"default":"SOL","description":"Market symbol (SOL, BTC, ETH)"}],"returns":{"type":"object","properties":{"bid":{"type":"number"},"ask":{"type":"number"},"lastPrice":{"type":"number"},"fundingRate":{"type":"number"},"longPct":{"type":"number"},"shortPct":{"type":"number"},"message":{"type":"string"}}},"execute":"const { Connection, Keypair } = require(\"@solana/web3.js\");\nconst { createDriftClient, getMarketData } = require(\"./scripts/market.js\");\n\nconst connection = new Connection(process.env.SOLANA_RPC_URL || \"https://api.mainnet-beta.solana.com\");\nconst wallet = Keypair.generate();\nconst client = await createDriftClient(connection, wallet);\nconst data = await getMarketData(client, symbol || \"SOL\");\nreturn {\n bid: data.bid,\n ask: data.ask,\n lastPrice: data.lastPrice,\n fundingRate: data.fundingRate,\n longPct: data.longPct,\n shortPct: data.shortPct,\n message: `SOL: $${data.lastPrice} | Funding: ${data.fundingRate.toFixed(4)}% | Long: ${data.longPct.toFixed(1)}% | Sentiment: ${data.longPct > 60 ? \"BEARISH\" : data.longPct < 40 ? \"BULLISH\" : \"NEUTRAL\"}`,\n};\n"},"drift-position":{"description":"Check open perp positions, unrealized PnL, and buying power","parameters":[{"name":"wallet_b58","type":"string","required":true,"description":"Base58-encoded wallet private key"},{"name":"symbol","type":"string","required":false,"default":"SOL","description":"Market symbol"}],"returns":{"type":"object","properties":{"positions":{"type":"array"},"totalCollateral":{"type":"number"},"totalPnL":{"type":"number"},"buyingPower":{"type":"number"},"message":{"type":"string"}}},"execute":"const { Connection, Keypair } = require(\"@solana/web3.js\");\nconst { getPositionStatus } = require(\"./scripts/position.js\");\n\nconst connection = new Connection(process.env.SOLANA_RPC_URL || \"https://api.mainnet-beta.solana.com\");\nconst wallet = Keypair.fromSecretKey(Buffer.from(Buffer.from(wallet_b58, \"base58\")));\nconst status = await getPositionStatus(connection, wallet, symbol || \"SOL\");\nreturn status;\n"},"drift-trade":{"description":"Open a long or short perpetual position on Drift","parameters":[{"name":"wallet_b58","type":"string","required":true,"description":"Base58-encoded wallet private key"},{"name":"direction","type":"string","required":true,"enum":["long","short"],"description":"long or short"},{"name":"size","type":"number","required":true,"description":"Position size in SOL"},{"name":"leverage","type":"number","required":false,"default":3,"description":"Leverage multiplier"},{"name":"symbol","type":"string","required":false,"default":"SOL","description":"Market symbol"}],"returns":{"type":"object","properties":{"success":{"type":"boolean"},"signature":{"type":"string"},"direction":{"type":"string"},"size":{"type":"number"},"leverage":{"type":"number"},"message":{"type":"string"},"error":{"type":"string"}}},"execute":"const { Connection, Keypair } = require(\"@solana/web3.js\");\nconst { openPosition } = require(\"./scripts/trade.js\");\n\nconst connection = new Connection(process.env.SOLANA_RPC_URL || \"https://api.mainnet-beta.solana.com\");\nconst wallet = Keypair.fromSecretKey(Buffer.from(Buffer.from(wallet_b58, \"base58\")));\nconst result = await openPosition({\n connection,\n wallet,\n symbol: symbol || \"SOL\",\n direction,\n sizeInSol: size,\n leverage: leverage || 3,\n});\nreturn result;\n"},"drift-close":{"description":"Close an open perp position","parameters":[{"name":"wallet_b58","type":"string","required":true,"description":"Base58-encoded wallet private key"},{"name":"symbol","type":"string","required":false,"default":"SOL","description":"Market symbol"}],"returns":{"type":"object","properties":{"success":{"type":"boolean"},"signature":{"type":"string"},"message":{"type":"string"},"error":{"type":"string"}}},"execute":"const { Connection, Keypair } = require(\"@solana/web3.js\");\nconst { closePosition } = require(\"./scripts/trade.js\");\n\nconst connection = new Connection(process.env.SOLANA_RPC_URL || \"https://api.mainnet-beta.solana.com\");\nconst wallet = Keypair.fromSecretKey(Buffer.from(Buffer.from(wallet_b58, \"base58\")));\nconst result = await closePosition(connection, wallet, symbol || \"SOL\");\nreturn result;\n"},"drift-balance":{"description":"Check Drift collateral balance and buying power","parameters":[{"name":"wallet_b58","type":"string","required":true,"description":"Base58-encoded wallet private key"}],"returns":{"type":"object","properties":{"totalCollateral":{"type":"number"},"message":{"type":"string"}}},"execute":"const { Connection, Keypair } = require(\"@solana/web3.js\");\nconst { createDriftClient, getTotalCollateral } = require(\"./scripts/market.js\");\n\nconst connection = new Connection(process.env.SOLANA_RPC_URL || \"https://api.mainnet-beta.solana.com\");\nconst wallet = Keypair.fromSecretKey(Buffer.from(Buffer.from(wallet_b58, \"base58\")));\nconst client = await createDriftClient(connection, wallet);\nconst collateral = await getTotalCollateral(client);\nreturn {\n totalCollateral: collateral,\n message: `Drift collateral: $${collateral.toFixed(2)}`,\n};\n"},"drift-market":{"description":"Get full market data — funding rate, open interest, long/short ratio, sentiment","parameters":[{"name":"wallet_b58","type":"string","required":true,"description":"Base58-encoded wallet private key"},{"name":"symbol","type":"string","required":false,"default":"SOL","description":"Market symbol"}],"returns":{"type":"object","properties":{"fundingRate":{"type":"number"},"openInterest":{"type":"number"},"longPct":{"type":"number"},"sentiment":{"type":"string"},"message":{"type":"string"}}},"execute":"const { Connection, Keypair } = require(\"@solana/web3.js\");\nconst { createDriftClient, getMarketData } = require(\"./scripts/market.js\");\n\nconst connection = new Connection(process.env.SOLANA_RPC_URL || \"https://api.mainnet-beta.solana.com\");\nconst wallet = Keypair.fromSecretKey(Buffer.from(Buffer.from(wallet_b58, \"base58\")));\nconst client = await createDriftClient(connection, wallet);\nconst data = await getMarketData(client, symbol || \"SOL\");\nconst sentiment = data.longPct > 60 ? \"BEARISH\" : data.longPct < 40 ? \"BULLISH\" : \"NEUTRAL\";\nreturn {\n fundingRate: data.fundingRate,\n openInterest: data.openInterest,\n longPct: data.longPct,\n sentiment,\n message: `Funding: ${data.fundingRate.toFixed(4)}% | OI: ${data.openInterest.toFixed(0)} SOL | Long: ${data.longPct.toFixed(1)}% | Sentiment: ${sentiment}`,\n};\n"}} |