@drift-labs/common 1.0.8 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/drift/Drift/clients/AuthorityDrift/DriftOperations/index.js +1 -1
- package/lib/drift/Drift/clients/AuthorityDrift/DriftOperations/index.js.map +1 -1
- package/lib/drift/Drift/clients/CentralServerDrift/index.d.ts +21 -6
- package/lib/drift/Drift/clients/CentralServerDrift/index.js +63 -6
- package/lib/drift/Drift/clients/CentralServerDrift/index.js.map +1 -1
- package/lib/drift/Drift/clients/CentralServerDrift/markets.d.ts +7 -0
- package/lib/drift/Drift/clients/CentralServerDrift/markets.js +16 -0
- package/lib/drift/Drift/clients/CentralServerDrift/markets.js.map +1 -0
- package/lib/drift/base/actions/trade/openPerpOrder/openPerpMarketOrder/index.js +3 -3
- package/lib/drift/base/actions/trade/openPerpOrder/openPerpMarketOrder/index.js.map +1 -1
- package/lib/drift/base/actions/trade/openPerpOrder/openPerpNonMarketOrder/index.js +2 -4
- package/lib/drift/base/actions/trade/openPerpOrder/openPerpNonMarketOrder/index.js.map +1 -1
- package/lib/drift/base/actions/user/delete.d.ts +4 -4
- package/lib/drift/base/actions/user/delete.js +4 -4
- package/lib/drift/base/actions/user/delete.js.map +1 -1
- package/lib/drift/cli.js +83 -0
- package/lib/drift/cli.js.map +1 -1
- package/lib/drift/example.js +2 -0
- package/lib/drift/example.js.map +1 -1
- package/lib/types/historyServer.d.ts +4 -0
- package/lib/types/historyServer.js.map +1 -1
- package/package.json +1 -1
package/lib/drift/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/drift/cli.ts"],"names":[],"mappings":"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","sourcesContent":["import * as anchor from '@coral-xyz/anchor';\nimport { PublicKey, VersionedTransaction } from '@solana/web3.js';\nimport {\n\tBN,\n\tloadKeypair,\n\tPositionDirection,\n\tOrderType,\n\tPostOnlyParams,\n\tSwapMode,\n\tBASE_PRECISION,\n\tQUOTE_PRECISION,\n\tPRICE_PRECISION,\n\tMainnetSpotMarkets,\n\tDevnetSpotMarkets,\n} from '@drift-labs/sdk';\nimport { sign } from 'tweetnacl';\nimport { CentralServerDrift } from './Drift/clients/CentralServerDrift';\nimport { CentralServerSwiftOrderOptions } from './Drift/clients/CentralServerDrift/types';\nimport { ENUM_UTILS } from '../utils';\nimport { API_URLS } from './constants/apiUrls';\nimport * as path from 'path';\nimport {\n\tNonMarketOrderType,\n\tLimitOrderParamsOrderConfig,\n\tNonMarketOrderParamsConfig,\n} from './base/actions/trade/openPerpOrder/types';\n\n// Load environment variables from .env file\nconst dotenv = require('dotenv');\ndotenv.config({ path: path.resolve(__dirname, '.env') });\n\n/**\n * CLI Tool for CentralServerDrift client\n *\n * This CLI tool allows you to execute various Drift protocol operations via command line\n * with human-readable parameters that are automatically converted to the proper precision.\n *\n * Prerequisites:\n * - Create a .env file in the same directory as this CLI file with:\n * ANCHOR_WALLET=[private key byte array]\n * ENDPOINT=https://your-rpc-endpoint.com\n *\n * Usage Examples:\n * ts-node cli.ts deposit --marketIndex=0 --amount=2 --userAccount=11111111111111111111111111111111\n * ts-node cli.ts withdraw --marketIndex=0 --amount=1.5 --userAccount=11111111111111111111111111111111\n * ts-node cli.ts settleFunding --userAccount=11111111111111111111111111111111\n * ts-node cli.ts settlePnl --marketIndexes=0,1 --userAccount=11111111111111111111111111111111\n * ts-node cli.ts openPerpMarketOrder --marketIndex=0 --direction=long --amount=0.1 --assetType=base --userAccount=11111111111111111111111111111111\n * ts-node cli.ts openPerpMarketOrderSwift --marketIndex=0 --direction=short --amount=100 --assetType=quote --userAccount=11111111111111111111111111111111\n * ts-node cli.ts openPerpNonMarketOrder --marketIndex=0 --direction=long --baseAssetAmount=0.1 --orderType=limit --limitPrice=100 --userAccount=11111111111111111111111111111111\n * ts-node cli.ts openPerpNonMarketOrderSwift --marketIndex=0 --direction=long --baseAssetAmount=0.1 --orderType=limit --limitPrice=99.5 --userAccount=11111111111111111111111111111111\n * ts-node cli.ts editOrder --userAccount=11111111111111111111111111111111 --orderId=123 --newLimitPrice=105.5\n * ts-node cli.ts cancelOrder --userAccount=11111111111111111111111111111111 --orderIds=123,456,789\n * ts-node cli.ts cancelAllOrders --userAccount=11111111111111111111111111111111 --marketType=perp\n * ts-node cli.ts swap --userAccount=11111111111111111111111111111111 --fromMarketIndex=1 --toMarketIndex=0 --fromAmount=1.5 --slippage=100 --swapMode=ExactIn\n * ts-node cli.ts swap --userAccount=11111111111111111111111111111111 --fromMarketIndex=1 --toMarketIndex=0 --toAmount=150 --slippage=100 --swapMode=ExactOut\n */\n\n// Shared configuration\nlet centralServerDrift: CentralServerDrift;\nlet wallet: anchor.Wallet;\n\ninterface CliArgs {\n\t[key: string]: string | string[];\n}\n\n/**\n * Parse command line arguments into a key-value object\n */\nfunction parseArgs(args: string[]): CliArgs {\n\tconst parsed: CliArgs = {};\n\n\tfor (let i = 0; i < args.length; i++) {\n\t\tconst arg = args[i];\n\t\tif (arg.startsWith('--')) {\n\t\t\tconst [key, value] = arg.substring(2).split('=');\n\t\t\tif (value !== undefined) {\n\t\t\t\t// Handle comma-separated arrays\n\t\t\t\tif (value.includes(',')) {\n\t\t\t\t\tparsed[key] = value.split(',');\n\t\t\t\t} else {\n\t\t\t\t\tparsed[key] = value;\n\t\t\t\t}\n\t\t\t} else if (i + 1 < args.length && !args[i + 1].startsWith('--')) {\n\t\t\t\t// Handle space-separated values\n\t\t\t\tconst nextValue = args[i + 1];\n\t\t\t\tif (nextValue.includes(',')) {\n\t\t\t\t\tparsed[key] = nextValue.split(',');\n\t\t\t\t} else {\n\t\t\t\t\tparsed[key] = nextValue;\n\t\t\t\t}\n\t\t\t\ti++; // Skip the next argument as it's the value\n\t\t\t} else {\n\t\t\t\tparsed[key] = 'true'; // Boolean flag\n\t\t\t}\n\t\t}\n\t}\n\n\treturn parsed;\n}\n\n/**\n * Convert human-readable amount to BN with proper precision\n */\nfunction parseAmount(amount: string, precision: BN = QUOTE_PRECISION): BN {\n\tconst floatAmount = parseFloat(amount);\n\tif (isNaN(floatAmount)) {\n\t\tthrow new Error(`Invalid amount: ${amount}`);\n\t}\n\n\t// Convert to the proper precision\n\tconst scaledAmount = Math.floor(floatAmount * precision.toNumber());\n\treturn new BN(scaledAmount);\n}\n\n/**\n * Parse direction string to PositionDirection\n */\nfunction parseDirection(direction: string): PositionDirection {\n\tconst normalized = direction.toLowerCase();\n\tif (normalized === 'long' || normalized === 'buy') {\n\t\treturn PositionDirection.LONG;\n\t} else if (normalized === 'short' || normalized === 'sell') {\n\t\treturn PositionDirection.SHORT;\n\t} else {\n\t\tthrow new Error(\n\t\t\t`Invalid direction: ${direction}. Use 'long', 'short', 'buy', or 'sell'`\n\t\t);\n\t}\n}\n\n/**\n * Parse order type string to OrderType\n */\nfunction _parseOrderType(orderType: string): OrderType {\n\tconst normalized = orderType.toLowerCase();\n\tswitch (normalized) {\n\t\tcase 'limit':\n\t\t\treturn OrderType.LIMIT;\n\t\tcase 'market':\n\t\t\treturn OrderType.MARKET;\n\t\tcase 'oracle':\n\t\t\treturn OrderType.ORACLE;\n\t\tcase 'trigger_market':\n\t\tcase 'stopmarket':\n\t\t\treturn OrderType.TRIGGER_MARKET;\n\t\tcase 'trigger_limit':\n\t\tcase 'stoplimit':\n\t\t\treturn OrderType.TRIGGER_LIMIT;\n\t\tdefault:\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid order type: ${orderType}. Use 'limit', 'market', 'oracle', 'trigger_market', or 'trigger_limit'`\n\t\t\t);\n\t}\n}\n\n/**\n * Parse post only string to PostOnlyParams\n */\nfunction parsePostOnly(postOnly: string): PostOnlyParams {\n\tconst normalized = postOnly.toLowerCase();\n\tswitch (normalized) {\n\t\tcase 'none':\n\t\tcase 'false':\n\t\t\treturn PostOnlyParams.NONE;\n\t\tcase 'must_post_only':\n\t\tcase 'true':\n\t\t\treturn PostOnlyParams.MUST_POST_ONLY;\n\t\tcase 'try_post_only':\n\t\t\treturn PostOnlyParams.TRY_POST_ONLY;\n\t\tcase 'slide':\n\t\t\treturn PostOnlyParams.SLIDE;\n\t\tdefault:\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid post only: ${postOnly}. Use 'none', 'must_post_only', 'try_post_only', or 'slide'`\n\t\t\t);\n\t}\n}\n\n/**\n * Parse swap mode string to SwapMode\n */\nfunction parseSwapMode(swapMode: string): SwapMode {\n\tconst normalized = swapMode.toLowerCase();\n\tswitch (normalized) {\n\t\tcase 'exactin':\n\t\tcase 'exact_in':\n\t\t\treturn 'ExactIn';\n\t\tcase 'exactout':\n\t\tcase 'exact_out':\n\t\t\treturn 'ExactOut';\n\t\tdefault:\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid swap mode: ${swapMode}. Use 'ExactIn' or 'ExactOut'`\n\t\t\t);\n\t}\n}\n\n/**\n * Get the precision for a spot market based on environment and market index\n */\nfunction getMarketPrecision(\n\tmarketIndex: number,\n\tisMainnet: boolean = true\n): BN {\n\tconst markets = isMainnet ? MainnetSpotMarkets : DevnetSpotMarkets;\n\tconst market = markets.find((m) => m.marketIndex === marketIndex);\n\n\tif (!market) {\n\t\tconsole.warn(\n\t\t\t`⚠️ Market ${marketIndex} not found, using QUOTE_PRECISION as fallback`\n\t\t);\n\t\treturn QUOTE_PRECISION;\n\t}\n\n\treturn market.precision;\n}\n\n/**\n * Initialize CentralServerDrift instance\n */\nasync function initializeCentralServerDrift(): Promise<void> {\n\tconsole.log('🚀 Initializing CentralServerDrift...\\n');\n\n\t// Validate required environment variables\n\tif (!process.env.ANCHOR_WALLET) {\n\t\tthrow new Error('ANCHOR_WALLET must be set in .env file');\n\t}\n\n\tif (!process.env.ENDPOINT) {\n\t\tthrow new Error(\n\t\t\t'ENDPOINT environment variable must be set to your Solana RPC endpoint'\n\t\t);\n\t}\n\n\t// Set up the wallet\n\twallet = new anchor.Wallet(loadKeypair(process.env.ANCHOR_WALLET as string));\n\n\tconsole.log(`✅ Wallet Public Key: ${wallet.publicKey.toString()}`);\n\tconsole.log(`✅ RPC Endpoint: ${process.env.ENDPOINT}\\n`);\n\n\t// Initialize CentralServerDrift\n\tconsole.log('🏗️ Initializing CentralServerDrift...');\n\tcentralServerDrift = new CentralServerDrift({\n\t\tsolanaRpcEndpoint: process.env.ENDPOINT as string,\n\t\tdriftEnv: 'mainnet-beta', // Change to 'devnet' for devnet testing\n\t\tadditionalDriftClientConfig: {\n\t\t\ttxVersion: 0,\n\t\t\ttxParams: {\n\t\t\t\tcomputeUnits: 200000,\n\t\t\t\tcomputeUnitsPrice: 1000,\n\t\t\t},\n\t\t},\n\t});\n\n\tconsole.log('✅ CentralServerDrift instance created successfully\\n');\n\n\t// Subscribe to market data\n\tconsole.log('📡 Subscribing to market data...');\n\tawait centralServerDrift.subscribe();\n\tconsole.log('✅ Successfully subscribed to market data\\n');\n}\n\n/**\n * Execute a regular transaction\n */\nasync function executeTransaction(\n\ttxn: VersionedTransaction,\n\ttransactionType: string\n): Promise<void> {\n\tconsole.log(`✅ ${transactionType} transaction created successfully`);\n\tconsole.log('\\n📝 Signing Transaction...');\n\n\ttxn.sign([wallet.payer]);\n\tconsole.log('✅ Transaction signed successfully');\n\n\tconsole.log('\\n🚀 Sending transaction to the network...');\n\tconst { txSig } = await centralServerDrift.sendSignedTransaction(txn);\n\n\tconsole.log('✅ Transaction sent successfully!');\n\tconsole.log(`📋 Transaction Signature: ${txSig?.toString()}`);\n\tconsole.log(`🔍 View on Solscan: https://solscan.io/tx/${txSig?.toString()}`);\n}\n\nconst createSwiftOrderCallbacks = (\n\torderType: string\n): CentralServerSwiftOrderOptions['callbacks'] => {\n\tconst terminalCall = () => {\n\t\tconsole.log('🏁 Order monitoring completed');\n\t};\n\n\treturn {\n\t\tonSigningExpiry: () => {\n\t\t\tconsole.log('Swift order signing expired');\n\t\t},\n\t\tonSigningSuccess: (signedMessage, orderUuid, orderParamsMessage) => {\n\t\t\tconsole.log(\n\t\t\t\t'Swift order signed successfully. Signed message:',\n\t\t\t\tsignedMessage,\n\t\t\t\torderUuid,\n\t\t\t\torderParamsMessage\n\t\t\t);\n\t\t},\n\t\tonSent: () => {\n\t\t\tconsole.log(`✅ ${orderType} Swift order submitted successfully`);\n\t\t},\n\t\tonConfirmed: (event) => {\n\t\t\tconsole.log('✅ Order confirmed!');\n\t\t\tconsole.log(`📋 Order ID: ${event.orderId}`);\n\t\t\tconsole.log(`📋 Hash: ${event.hash}`);\n\t\t\tterminalCall();\n\t\t},\n\t\tonExpired: (event) => {\n\t\t\tconsole.error('⏰ Order expired:', event.message);\n\t\t\tterminalCall();\n\t\t},\n\t\tonErrored: (event) => {\n\t\t\tconsole.error('❌ Order failed:', event.message);\n\t\t\tconsole.error(`📋 Status: ${event.status}`);\n\t\t\tterminalCall();\n\t\t},\n\t};\n};\n\n/**\n * CLI Command: deposit\n */\nasync function depositCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndex = parseInt(args.marketIndex as string);\n\tconst amount = args.amount as string;\n\n\tif (!userAccount || isNaN(marketIndex) || !amount) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndex, --amount'\n\t\t);\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst amountBN = parseAmount(amount, QUOTE_PRECISION); // Most deposits are USDC (quote precision)\n\n\tconsole.log('--- 📥 Deposit Transaction ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Index: ${marketIndex}`);\n\tconsole.log(`💰 Amount: ${amount} (${amountBN.toString()} raw units)`);\n\n\tconst depositTxn = await centralServerDrift.getDepositTxn(\n\t\tuserAccountPubkey,\n\t\tamountBN,\n\t\tmarketIndex\n\t);\n\n\tawait executeTransaction(depositTxn as VersionedTransaction, 'Deposit');\n}\n\n/**\n * CLI Command: withdraw\n */\nasync function withdrawCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndex = parseInt(args.marketIndex as string);\n\tconst amount = args.amount as string;\n\tconst isBorrow = args.isBorrow === 'true';\n\tconst isMax = args.isMax === 'true';\n\n\tif (!userAccount || isNaN(marketIndex) || !amount) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndex, --amount'\n\t\t);\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst amountBN = parseAmount(amount, QUOTE_PRECISION);\n\n\tconsole.log('--- 📤 Withdraw Transaction ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Index: ${marketIndex}`);\n\tconsole.log(`💰 Amount: ${amount} (${amountBN.toString()} raw units)`);\n\tconsole.log(`💳 Is Borrow: ${isBorrow}`);\n\tconsole.log(`📊 Is Max: ${isMax}`);\n\n\tconst withdrawTxn = await centralServerDrift.getWithdrawTxn(\n\t\tuserAccountPubkey,\n\t\tamountBN,\n\t\tmarketIndex,\n\t\t{ isBorrow, isMax }\n\t);\n\n\tawait executeTransaction(withdrawTxn as VersionedTransaction, 'Withdraw');\n}\n\n/**\n * CLI Command: settleFunding\n */\nasync function settleFundingCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\n\tif (!userAccount) {\n\t\tthrow new Error('Required arguments: --userAccount');\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\n\tconsole.log('--- 💰 Settle Funding Transaction ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\n\tconst settleFundingTxn = await centralServerDrift.getSettleFundingTxn(\n\t\tuserAccountPubkey\n\t);\n\n\tawait executeTransaction(\n\t\tsettleFundingTxn as VersionedTransaction,\n\t\t'Settle Funding'\n\t);\n}\n\n/**\n * CLI Command: settlePnl\n */\nasync function settlePnlCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndexesArg = args.marketIndexes;\n\n\tif (!userAccount || !marketIndexesArg) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndexes (comma-separated)'\n\t\t);\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst marketIndexes = Array.isArray(marketIndexesArg)\n\t\t? marketIndexesArg.map((idx) => parseInt(idx))\n\t\t: [parseInt(marketIndexesArg as string)];\n\n\tconsole.log('--- 📈 Settle PnL Transaction ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`📊 Market Indexes: ${marketIndexes.join(', ')}`);\n\n\tconst settlePnlTxn = await centralServerDrift.getSettlePnlTxn(\n\t\tuserAccountPubkey,\n\t\tmarketIndexes\n\t);\n\n\tawait executeTransaction(settlePnlTxn as VersionedTransaction, 'Settle PnL');\n}\n\n/**\n * CLI Command: openPerpMarketOrder (regular transaction)\n */\nasync function openPerpMarketOrderCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndex = parseInt(args.marketIndex as string);\n\tconst direction = args.direction as string;\n\tconst amount = args.amount as string;\n\tconst assetType = (args.assetType as string) || 'base';\n\tconst dlobServerHttpUrl = API_URLS.DLOB;\n\n\tif (!userAccount || isNaN(marketIndex) || !direction || !amount) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndex, --direction, --amount'\n\t\t);\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst directionEnum = parseDirection(direction);\n\tconst precision = assetType === 'base' ? BASE_PRECISION : QUOTE_PRECISION;\n\tconst amountBN = parseAmount(amount, precision);\n\n\tconsole.log('--- 🎯 Open Perp Order Transaction ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Index: ${marketIndex}`);\n\tconsole.log(\n\t\t`📊 Direction: ${direction} (${ENUM_UTILS.toStr(directionEnum)})`\n\t);\n\tconsole.log(`💰 Amount: ${amount} (${amountBN.toString()} raw units)`);\n\tconsole.log(`💱 Asset Type: ${assetType}`);\n\tconsole.log(`🌐 DLOB Server: ${dlobServerHttpUrl}`);\n\n\tconst orderTxn = await centralServerDrift.getOpenPerpMarketOrderTxn({\n\t\tuserAccountPublicKey: userAccountPubkey,\n\t\tassetType: assetType as 'base' | 'quote',\n\t\tmarketIndex,\n\t\tdirection: directionEnum,\n\t\tamount: amountBN,\n\t\tuseSwift: false,\n\t});\n\n\tawait executeTransaction(orderTxn as VersionedTransaction, 'Open Perp Order');\n}\n\n/**\n * CLI Command: openPerpMarketOrderSwift (Swift signed message order)\n */\nasync function openPerpMarketOrderSwiftCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndex = parseInt(args.marketIndex as string);\n\tconst direction = args.direction as string;\n\tconst amount = args.amount as string;\n\tconst assetType = (args.assetType as string) || 'base';\n\tconst dlobServerHttpUrl = API_URLS.DLOB;\n\tconst swiftServerUrl = (args.swiftServerUrl as string) || API_URLS.SWIFT;\n\n\tif (!userAccount || isNaN(marketIndex) || !direction || !amount) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndex, --direction, --amount'\n\t\t);\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst directionEnum = parseDirection(direction);\n\tconst precision = assetType === 'base' ? BASE_PRECISION : QUOTE_PRECISION;\n\tconst amountBN = parseAmount(amount, precision);\n\n\tconsole.log('--- ⚡ Open Perp Order Swift ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Index: ${marketIndex}`);\n\tconsole.log(\n\t\t`📊 Direction: ${direction} (${ENUM_UTILS.toStr(directionEnum)})`\n\t);\n\tconsole.log(`💰 Amount: ${amount} (${amountBN.toString()} raw units)`);\n\tconsole.log(`💱 Asset Type: ${assetType}`);\n\tconsole.log(`🌐 DLOB Server: ${dlobServerHttpUrl}`);\n\tconsole.log(`⚡ Swift Server: ${swiftServerUrl}`);\n\tconsole.log(`🔑 Wallet Public Key: ${wallet.publicKey.toString()}`);\n\n\tconsole.log('\\n👁️ Monitoring order status...');\n\n\ttry {\n\t\tawait centralServerDrift.getOpenPerpMarketOrderTxn({\n\t\t\tuserAccountPublicKey: userAccountPubkey,\n\t\t\tassetType: assetType as 'base' | 'quote',\n\t\t\tmarketIndex,\n\t\t\tdirection: directionEnum,\n\t\t\tamount: amountBN,\n\t\t\tuseSwift: true,\n\t\t\tswiftOptions: {\n\t\t\t\twallet: {\n\t\t\t\t\tsignMessage: async (message: Uint8Array) => {\n\t\t\t\t\t\tconst signature = sign.detached(message, wallet.payer.secretKey);\n\t\t\t\t\t\treturn new Uint8Array(signature);\n\t\t\t\t\t},\n\t\t\t\t\ttakerAuthority: wallet.publicKey,\n\t\t\t\t\tsigningAuthority: wallet.publicKey,\n\t\t\t\t},\n\t\t\t\tcallbacks: createSwiftOrderCallbacks('Open Perp Order'),\n\t\t\t},\n\t\t});\n\t\tconsole.log('✅ [CLI] Swift order finished');\n\t} catch (error) {\n\t\tconsole.error('❌ [CLI] Error creating Swift order:', error);\n\t\tthrow error;\n\t}\n}\n\n/**\n * CLI Command: openPerpNonMarketOrder (regular limit/oracle order)\n */\nasync function openPerpNonMarketOrderCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndex = parseInt(args.marketIndex as string);\n\tconst direction = args.direction as string;\n\tconst amount = args.amount as string;\n\tconst assetType = (args.assetType as string) || 'base';\n\tconst baseAssetAmount = args.baseAssetAmount as string;\n\tconst orderType = args.orderType as NonMarketOrderType;\n\tconst limitPrice = args.limitPrice as string;\n\tconst triggerPrice = args.triggerPrice as string;\n\tconst reduceOnly = (args.reduceOnly as string) === 'true';\n\tconst postOnly = (args.postOnly as string) || 'none';\n\tconst oraclePriceOffset = args.oraclePriceOffset as string;\n\n\tif (!userAccount || isNaN(marketIndex) || !direction || !orderType) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndex, --direction, --orderType'\n\t\t);\n\t}\n\n\tif (!amount && !baseAssetAmount) {\n\t\tthrow new Error('Either --amount or --baseAssetAmount must be provided');\n\t}\n\n\t// Validate price requirements based on order type\n\tif (orderType === 'limit') {\n\t\tif (!limitPrice) {\n\t\t\tthrow new Error(`Order type '${orderType}' requires --limitPrice`);\n\t\t}\n\t} else if (orderType === 'takeProfit' || orderType === 'stopLoss') {\n\t\tif (!triggerPrice) {\n\t\t\tthrow new Error(`Order type '${orderType}' requires --triggerPrice`);\n\t\t}\n\t} else if (orderType === 'oracleLimit') {\n\t\tif (!oraclePriceOffset) {\n\t\t\tthrow new Error(`Order type '${orderType}' requires --oraclePriceOffset`);\n\t\t}\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst directionEnum = parseDirection(direction);\n\tconst postOnlyEnum = parsePostOnly(postOnly);\n\tconst limitPriceBN = limitPrice\n\t\t? parseAmount(limitPrice, PRICE_PRECISION)\n\t\t: undefined;\n\tconst triggerPriceBN = triggerPrice\n\t\t? parseAmount(triggerPrice, PRICE_PRECISION)\n\t\t: undefined;\n\tconst oraclePriceOffsetBN = oraclePriceOffset\n\t\t? parseAmount(oraclePriceOffset, PRICE_PRECISION)\n\t\t: undefined;\n\n\tconst orderConfig: NonMarketOrderParamsConfig['orderConfig'] =\n\t\torderType === 'limit'\n\t\t\t? {\n\t\t\t\t\torderType,\n\t\t\t\t\tlimitPrice: limitPriceBN!,\n\t\t\t }\n\t\t\t: orderType === 'takeProfit' || orderType === 'stopLoss'\n\t\t\t? {\n\t\t\t\t\torderType,\n\t\t\t\t\ttriggerPrice: triggerPriceBN!,\n\t\t\t }\n\t\t\t: {\n\t\t\t\t\torderType,\n\t\t\t\t\toraclePriceOffset: oraclePriceOffsetBN!,\n\t\t\t };\n\n\tconsole.log('--- 📋 Open Perp Non-Market Order ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Index: ${marketIndex}`);\n\tconsole.log(\n\t\t`📊 Direction: ${direction} (${ENUM_UTILS.toStr(directionEnum)})`\n\t);\n\n\tlet amountBN: BN;\n\tif (amount) {\n\t\tconst precision = assetType === 'base' ? BASE_PRECISION : QUOTE_PRECISION;\n\t\tamountBN = parseAmount(amount, precision);\n\t\tconsole.log(`💰 Amount: ${amount} (${amountBN.toString()} raw units)`);\n\t\tconsole.log(`💱 Asset Type: ${assetType}`);\n\t} else {\n\t\tamountBN = parseAmount(baseAssetAmount, BASE_PRECISION);\n\t\tconsole.log(\n\t\t\t`💰 Base Asset Amount: ${baseAssetAmount} (${amountBN.toString()} raw units)`\n\t\t);\n\t}\n\n\tif (limitPriceBN) {\n\t\tconsole.log(\n\t\t\t`💵 Limit Price: ${limitPrice} (${limitPriceBN.toString()} raw units)`\n\t\t);\n\t}\n\tif (triggerPriceBN) {\n\t\tconsole.log(\n\t\t\t`🎯 Trigger Price: ${triggerPrice} (${triggerPriceBN.toString()} raw units)`\n\t\t);\n\t}\n\tconsole.log(`📝 Order Type: ${orderType}`);\n\tconsole.log(`🔄 Reduce Only: ${reduceOnly}`);\n\tconsole.log(`📌 Post Only: ${postOnly} (${ENUM_UTILS.toStr(postOnlyEnum)})`);\n\n\t// Just call the main method - it will handle both approaches internally\n\tconst orderTxn = await centralServerDrift.getOpenPerpNonMarketOrderTxn({\n\t\tuserAccountPublicKey: userAccountPubkey,\n\t\tmarketIndex,\n\t\tdirection: directionEnum,\n\t\torderConfig,\n\t\tuseSwift: false,\n\t\treduceOnly,\n\t\tpostOnly: postOnlyEnum,\n\t\tassetType: assetType as 'base' | 'quote',\n\t\tamount: amountBN,\n\t});\n\n\tawait executeTransaction(\n\t\torderTxn as VersionedTransaction,\n\t\t'Open Perp Non-Market Order'\n\t);\n}\n\n/**\n * CLI Command: openPerpNonMarketOrderSwift (Swift signed message limit order)\n */\nasync function openPerpNonMarketOrderSwiftCommand(\n\targs: CliArgs\n): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndex = parseInt(args.marketIndex as string);\n\tconst direction = args.direction as string;\n\tconst amount = args.amount as string;\n\tconst assetType = (args.assetType as string) || 'base';\n\tconst baseAssetAmount = args.baseAssetAmount as string;\n\tconst orderType = args.orderType as NonMarketOrderType;\n\tconst limitPrice = args.limitPrice as string;\n\tconst reduceOnly = (args.reduceOnly as string) === 'true';\n\tconst postOnly = (args.postOnly as string) || 'none';\n\tconst swiftServerUrl = API_URLS.SWIFT;\n\n\tif (!userAccount || isNaN(marketIndex) || !direction || !orderType) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndex, --direction, --orderType'\n\t\t);\n\t}\n\n\tif (!amount && !baseAssetAmount) {\n\t\tthrow new Error('Either --amount or --baseAssetAmount must be provided');\n\t}\n\n\t// Swift orders only support LIMIT order type\n\tif (orderType.toLowerCase() !== 'limit') {\n\t\tthrow new Error('Swift orders only support LIMIT order type');\n\t}\n\n\t// LIMIT orders require limitPrice\n\tif (!limitPrice) {\n\t\tthrow new Error('LIMIT orders require --limitPrice');\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst directionEnum = parseDirection(direction);\n\tconst postOnlyEnum = parsePostOnly(postOnly);\n\tconst limitPriceBN = parseAmount(limitPrice, PRICE_PRECISION);\n\n\tconst orderConfig: LimitOrderParamsOrderConfig = {\n\t\torderType: 'limit',\n\t\tlimitPrice: limitPriceBN!,\n\t};\n\n\tconsole.log('--- ⚡ Open Perp Non-Market Order Swift ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Index: ${marketIndex}`);\n\tconsole.log(\n\t\t`📊 Direction: ${direction} (${ENUM_UTILS.toStr(directionEnum)})`\n\t);\n\n\tlet amountBN: BN;\n\tif (amount) {\n\t\tconst precision = assetType === 'base' ? BASE_PRECISION : QUOTE_PRECISION;\n\t\tamountBN = parseAmount(amount, precision);\n\t\tconsole.log(`💰 Amount: ${amount} (${amountBN.toString()} raw units)`);\n\t\tconsole.log(`💱 Asset Type: ${assetType}`);\n\t} else {\n\t\tamountBN = parseAmount(baseAssetAmount, BASE_PRECISION);\n\t\tconsole.log(\n\t\t\t`💰 Base Asset Amount: ${baseAssetAmount} (${amountBN.toString()} raw units)`\n\t\t);\n\t}\n\n\tconsole.log(\n\t\t`💵 Limit Price: ${limitPrice} (${limitPriceBN.toString()} raw units)`\n\t);\n\tconsole.log(`📝 Order Type: ${orderType})`);\n\tconsole.log(`🔄 Reduce Only: ${reduceOnly}`);\n\tconsole.log(`📌 Post Only: ${postOnly} (${ENUM_UTILS.toStr(postOnlyEnum)})`);\n\tconsole.log(`⚡ Swift Server: ${swiftServerUrl}`);\n\tconsole.log(`🔑 Wallet Public Key: ${wallet.publicKey.toString()}`);\n\n\ttry {\n\t\tconst swiftOptions: CentralServerSwiftOrderOptions = {\n\t\t\twallet: {\n\t\t\t\tsignMessage: async (message: Uint8Array) => {\n\t\t\t\t\tconst signature = sign.detached(message, wallet.payer.secretKey);\n\t\t\t\t\treturn new Uint8Array(signature);\n\t\t\t\t},\n\t\t\t\ttakerAuthority: wallet.publicKey,\n\t\t\t\tsigningAuthority: wallet.publicKey,\n\t\t\t},\n\t\t\tcallbacks: createSwiftOrderCallbacks('Open Perp Non-Market Order'),\n\t\t};\n\n\t\tconsole.log('\\n👁️ Monitoring order status...');\n\n\t\t// Use the main method - it handles both approaches internally\n\t\tawait centralServerDrift.getOpenPerpNonMarketOrderTxn({\n\t\t\tuserAccountPublicKey: userAccountPubkey,\n\t\t\tmarketIndex,\n\t\t\tdirection: directionEnum,\n\t\t\torderConfig,\n\t\t\treduceOnly,\n\t\t\tpostOnly: postOnlyEnum,\n\t\t\tassetType: assetType as 'base' | 'quote',\n\t\t\tamount: amountBN,\n\t\t\tuseSwift: true,\n\t\t\tswiftOptions,\n\t\t});\n\n\t\tconsole.log('✅ [CLI] Swift order finished');\n\t} catch (error) {\n\t\tconsole.error('❌ [CLI] Error creating Swift non-market order:', error);\n\t\tthrow error;\n\t}\n}\n\n/**\n * Show CLI usage information\n */\nfunction showUsage(): void {\n\tconsole.log('📋 Drift CLI Usage');\n\tconsole.log('');\n\tconsole.log('Available Commands:');\n\tconsole.log('');\n\n\tconsole.log('💰 deposit');\n\tconsole.log(\n\t\t' ts-node cli.ts deposit --userAccount=<pubkey> --marketIndex=<num> --amount=<num>'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts deposit --userAccount=11111111111111111111111111111111 --marketIndex=0 --amount=100'\n\t);\n\tconsole.log('');\n\n\tconsole.log('💸 withdraw');\n\tconsole.log(\n\t\t' ts-node cli.ts withdraw --userAccount=<pubkey> --marketIndex=<num> --amount=<num> [--isBorrow=<bool>] [--isMax=<bool>]'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts withdraw --userAccount=11111111111111111111111111111111 --marketIndex=0 --amount=50'\n\t);\n\tconsole.log('');\n\n\tconsole.log('🏦 settleFunding');\n\tconsole.log(' ts-node cli.ts settleFunding --userAccount=<pubkey>');\n\tconsole.log(\n\t\t' Example: ts-node cli.ts settleFunding --userAccount=11111111111111111111111111111111'\n\t);\n\tconsole.log('');\n\n\tconsole.log('📊 settlePnl');\n\tconsole.log(\n\t\t' ts-node cli.ts settlePnl --userAccount=<pubkey> --marketIndexes=<comma-separated>'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts settlePnl --userAccount=11111111111111111111111111111111 --marketIndexes=0,1'\n\t);\n\tconsole.log('');\n\n\tconsole.log('🎯 openPerpMarketOrder');\n\tconsole.log(\n\t\t' ts-node cli.ts openPerpMarketOrder --userAccount=<pubkey> --marketIndex=<num> --direction=<long|short> --amount=<num> [--assetType=<base|quote>]'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts openPerpMarketOrder --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=long --amount=0.1 --assetType=base'\n\t);\n\tconsole.log('');\n\n\tconsole.log('⚡ openPerpMarketOrderSwift');\n\tconsole.log(\n\t\t' ts-node cli.ts openPerpMarketOrderSwift --userAccount=<pubkey> --marketIndex=<num> --direction=<long|short> --amount=<num> [--assetType=<base|quote>]'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts openPerpMarketOrderSwift --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=short --amount=100 --assetType=quote'\n\t);\n\tconsole.log('');\n\n\tconsole.log('📋 openPerpNonMarketOrder');\n\tconsole.log(\n\t\t' ts-node cli.ts openPerpNonMarketOrder --userAccount=<pubkey> --marketIndex=<num> --direction=<long|short> --amount=<num> [--assetType=<base|quote>] --orderType=<limit|trigger_limit|trigger_market|oracle> [--limitPrice=<num>] [--triggerPrice=<num>] [--reduceOnly=<true|false>] [--postOnly=<none|must_post_only|try_post_only|slide>]'\n\t);\n\tconsole.log(\n\t\t' New LIMIT: ts-node cli.ts openPerpNonMarketOrder --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=long --amount=0.1 --assetType=base --orderType=limit --limitPrice=100'\n\t);\n\tconsole.log(\n\t\t' New QUOTE: ts-node cli.ts openPerpNonMarketOrder --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=long --amount=100 --assetType=quote --orderType=limit --limitPrice=100'\n\t);\n\tconsole.log(\n\t\t' Legacy: ts-node cli.ts openPerpNonMarketOrder --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=long --baseAssetAmount=0.1 --orderType=limit --limitPrice=100'\n\t);\n\tconsole.log('');\n\n\tconsole.log('⚡ openPerpNonMarketOrderSwift');\n\tconsole.log(\n\t\t' ts-node cli.ts openPerpNonMarketOrderSwift --userAccount=<pubkey> --marketIndex=<num> --direction=<long|short> --amount=<num> [--assetType=<base|quote>] --orderType=limit --limitPrice=<num> [--reduceOnly=<true|false>] [--postOnly=<none|must_post_only|try_post_only|slide>]'\n\t);\n\tconsole.log(\n\t\t' New: ts-node cli.ts openPerpNonMarketOrderSwift --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=long --amount=0.1 --assetType=base --orderType=limit --limitPrice=99.5'\n\t);\n\tconsole.log(\n\t\t' Legacy: ts-node cli.ts openPerpNonMarketOrderSwift --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=long --baseAssetAmount=0.1 --orderType=limit --limitPrice=99.5'\n\t);\n\tconsole.log('');\n\n\tconsole.log('✏️ editOrder');\n\tconsole.log(\n\t\t' ts-node cli.ts editOrder --userAccount=<pubkey> --orderId=<num> [--newDirection=<long|short>] [--newBaseAmount=<num>] [--newLimitPrice=<num>] [--newTriggerPrice=<num>] [--reduceOnly=<true|false>] [--postOnly=<true|false>]'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts editOrder --userAccount=11111111111111111111111111111111 --orderId=123 --newLimitPrice=105.5'\n\t);\n\tconsole.log('');\n\n\tconsole.log('❌ cancelOrder');\n\tconsole.log(\n\t\t' ts-node cli.ts cancelOrder --userAccount=<pubkey> --orderIds=<comma-separated-list>'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts cancelOrder --userAccount=11111111111111111111111111111111 --orderIds=123,456,789'\n\t);\n\tconsole.log('');\n\n\tconsole.log('🧹 cancelAllOrders');\n\tconsole.log(\n\t\t' ts-node cli.ts cancelAllOrders --userAccount=<pubkey> [--marketType=<perp|spot>] [--marketIndex=<num>] [--direction=<long|short>]'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts cancelAllOrders --userAccount=11111111111111111111111111111111 --marketType=perp'\n\t);\n\tconsole.log('');\n\n\tconsole.log('🔄 swap');\n\tconsole.log(\n\t\t' ts-node cli.ts swap --userAccount=<pubkey> --fromMarketIndex=<num> --toMarketIndex=<num> [--fromAmount=<num>] [--toAmount=<num>] [--slippage=<bps>] [--swapMode=<ExactIn|ExactOut>]'\n\t);\n\tconsole.log(\n\t\t' ExactIn: ts-node cli.ts swap --userAccount=11111111111111111111111111111111 --fromMarketIndex=1 --toMarketIndex=0 --fromAmount=1.5 --swapMode=ExactIn'\n\t);\n\tconsole.log(\n\t\t' ExactOut: ts-node cli.ts swap --userAccount=11111111111111111111111111111111 --fromMarketIndex=1 --toMarketIndex=0 --toAmount=150 --swapMode=ExactOut'\n\t);\n\tconsole.log('');\n\n\tconsole.log('Options:');\n\tconsole.log(' --help, -h Show this help message');\n\tconsole.log('');\n\tconsole.log('Notes:');\n\tconsole.log(\n\t\t' - Amounts are in human-readable format (e.g., 1.5 USDC, 0.1 SOL)'\n\t);\n\tconsole.log(' - Direction can be: long, short, buy, sell');\n\tconsole.log(\n\t\t' - Asset type: base (for native tokens like SOL) or quote (for USDC amounts)'\n\t);\n\tconsole.log(' - Swap modes:');\n\tconsole.log(\n\t\t' * ExactIn: Specify --fromAmount (how much input token to swap)'\n\t);\n\tconsole.log(\n\t\t' * ExactOut: Specify --toAmount (how much output token to receive)'\n\t);\n\tconsole.log(' - Ensure your .env file contains ANCHOR_WALLET and ENDPOINT');\n}\n\n/**\n * CLI Command: editOrder\n */\nasync function editOrderCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst orderId = parseInt(args.orderId as string);\n\tconst newDirection = args.newDirection as string;\n\tconst newBaseAmount = args.newBaseAmount as string;\n\tconst newLimitPrice = args.newLimitPrice as string;\n\tconst newTriggerPrice = args.newTriggerPrice as string;\n\tconst reduceOnly = (args.reduceOnly as string) === 'true';\n\tconst postOnly = (args.postOnly as string) === 'true';\n\n\tif (!userAccount || isNaN(orderId)) {\n\t\tthrow new Error('Required arguments: --userAccount, --orderId');\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst editParams: any = {};\n\n\tif (newDirection) {\n\t\teditParams.newDirection = parseDirection(newDirection);\n\t}\n\n\tif (newBaseAmount) {\n\t\teditParams.newBaseAmount = parseAmount(newBaseAmount, BASE_PRECISION);\n\t}\n\n\tif (newLimitPrice) {\n\t\teditParams.newLimitPrice = parseAmount(newLimitPrice, PRICE_PRECISION);\n\t}\n\n\tif (newTriggerPrice) {\n\t\teditParams.newTriggerPrice = parseAmount(newTriggerPrice, PRICE_PRECISION);\n\t}\n\n\tif (reduceOnly) {\n\t\teditParams.reduceOnly = true;\n\t}\n\n\tif (postOnly) {\n\t\teditParams.postOnly = true;\n\t}\n\n\tconsole.log('--- ✏️ Edit Order ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🆔 Order ID: ${orderId}`);\n\tconsole.log(`📝 Edit Parameters:`, editParams);\n\n\tconst editOrderTxn = await centralServerDrift.getEditOrderTxn(\n\t\tuserAccountPubkey,\n\t\torderId,\n\t\teditParams\n\t);\n\n\tawait executeTransaction(editOrderTxn as VersionedTransaction, 'Edit Order');\n}\n\n/**\n * CLI Command: cancelOrder\n */\nasync function cancelOrderCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst orderIds = args.orderIds as string;\n\n\tif (!userAccount || !orderIds) {\n\t\tthrow new Error('Required arguments: --userAccount, --orderIds');\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst orderIdArray = orderIds.split(',').map((id) => parseInt(id.trim()));\n\n\tconsole.log('--- ❌ Cancel Orders ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🆔 Order IDs: ${orderIdArray.join(', ')}`);\n\n\tconst cancelOrderTxn = await centralServerDrift.getCancelOrdersTxn(\n\t\tuserAccountPubkey,\n\t\torderIdArray\n\t);\n\n\tawait executeTransaction(\n\t\tcancelOrderTxn as VersionedTransaction,\n\t\t'Cancel Orders'\n\t);\n}\n\n/**\n * CLI Command: cancelAllOrders\n */\nasync function cancelAllOrdersCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketType = args.marketType as string;\n\tconst marketIndex = args.marketIndex\n\t\t? parseInt(args.marketIndex as string)\n\t\t: undefined;\n\tconst direction = args.direction as string;\n\n\tif (!userAccount) {\n\t\tthrow new Error('Required arguments: --userAccount');\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tlet marketTypeEnum = undefined;\n\tlet directionEnum = undefined;\n\n\tif (marketType) {\n\t\tmarketTypeEnum =\n\t\t\tmarketType.toLowerCase() === 'perp' ? { perp: {} } : { spot: {} };\n\t}\n\n\tif (direction) {\n\t\tdirectionEnum = parseDirection(direction);\n\t}\n\n\tconsole.log('--- 🧹 Cancel All Orders ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Type Filter: ${marketType || 'none'}`);\n\tconsole.log(\n\t\t`📊 Market Index Filter: ${\n\t\t\tmarketIndex !== undefined ? marketIndex : 'none'\n\t\t}`\n\t);\n\tconsole.log(`📈 Direction Filter: ${direction || 'none'}`);\n\n\tconst cancelAllOrdersTxn = await centralServerDrift.getCancelAllOrdersTxn(\n\t\tuserAccountPubkey,\n\t\tmarketTypeEnum,\n\t\tmarketIndex,\n\t\tdirectionEnum\n\t);\n\n\tawait executeTransaction(\n\t\tcancelAllOrdersTxn as VersionedTransaction,\n\t\t'Cancel All Orders'\n\t);\n}\n\n/**\n * CLI Command: swap\n */\nasync function swapCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst fromMarketIndex = parseInt(args.fromMarketIndex as string);\n\tconst toMarketIndex = parseInt(args.toMarketIndex as string);\n\tconst fromAmount = args.fromAmount as string;\n\tconst toAmount = args.toAmount as string;\n\tconst slippage = args.slippage ? parseInt(args.slippage as string) : 10; // Default 0.1%\n\tconst swapMode = (args.swapMode as string) || 'ExactIn';\n\n\tif (!userAccount || isNaN(fromMarketIndex) || isNaN(toMarketIndex)) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --fromMarketIndex, --toMarketIndex'\n\t\t);\n\t}\n\n\tconst swapModeEnum = parseSwapMode(swapMode);\n\n\t// Validate amount parameters based on swap mode\n\tif (swapModeEnum === 'ExactIn') {\n\t\tif (!fromAmount) {\n\t\t\tthrow new Error('ExactIn swap mode requires --fromAmount');\n\t\t}\n\t\tif (toAmount) {\n\t\t\tconsole.warn(\n\t\t\t\t'⚠️ Warning: --toAmount ignored in ExactIn mode, using --fromAmount'\n\t\t\t);\n\t\t}\n\t} else if (swapModeEnum === 'ExactOut') {\n\t\tif (!toAmount) {\n\t\t\tthrow new Error('ExactOut swap mode requires --toAmount');\n\t\t}\n\t\tif (fromAmount) {\n\t\t\tconsole.warn(\n\t\t\t\t'⚠️ Warning: --fromAmount ignored in ExactOut mode, using --toAmount'\n\t\t\t);\n\t\t}\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\n\t// Use the appropriate amount based on swap mode\n\tconst amount = swapModeEnum === 'ExactIn' ? fromAmount : toAmount;\n\n\t// Determine which market to use for precision (input market for ExactIn, output market for ExactOut)\n\tconst precisionMarketIndex =\n\t\tswapModeEnum === 'ExactIn' ? fromMarketIndex : toMarketIndex;\n\n\t// Get the appropriate precision for the amount based on the market\n\tconst isMainnet = true; // Default to mainnet, could be made configurable\n\tconst precision = getMarketPrecision(precisionMarketIndex, isMainnet);\n\tconst amountBN = parseAmount(amount, precision);\n\n\tconsole.log('--- 🔄 Swap Transaction ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`📤 From Market Index: ${fromMarketIndex}`);\n\tconsole.log(`📥 To Market Index: ${toMarketIndex}`);\n\tconsole.log(`🔄 Swap Mode: ${swapMode}`);\n\tconsole.log(\n\t\t`🎯 Using precision from market ${precisionMarketIndex}: ${precision.toString()}`\n\t);\n\n\tif (swapModeEnum === 'ExactIn') {\n\t\tconsole.log(\n\t\t\t`💰 From Amount: ${fromAmount} (${amountBN.toString()} raw units)`\n\t\t);\n\t\tconsole.log(`💰 To Amount: Will be calculated based on quote`);\n\t} else {\n\t\tconsole.log(`💰 From Amount: Will be calculated based on quote`);\n\t\tconsole.log(`💰 To Amount: ${toAmount} (${amountBN.toString()} raw units)`);\n\t}\n\n\tconsole.log(`📊 Slippage: ${slippage} BPS (${slippage / 100}%)`);\n\n\tconst swapTxn = await centralServerDrift.getSwapTxn(\n\t\tuserAccountPubkey,\n\t\tfromMarketIndex,\n\t\ttoMarketIndex,\n\t\tamountBN,\n\t\t{\n\t\t\tslippageBps: slippage,\n\t\t\tswapMode: swapModeEnum,\n\t\t}\n\t);\n\n\tawait executeTransaction(swapTxn as VersionedTransaction, 'Swap');\n}\n\n/**\n * Main CLI entry point\n */\nasync function main(): Promise<void> {\n\tconst args = process.argv.slice(2);\n\n\tif (\n\t\targs.length === 0 ||\n\t\targs[0] === '--help' ||\n\t\targs[0] === '-h' ||\n\t\targs[0] === 'help'\n\t) {\n\t\tshowUsage();\n\t\treturn;\n\t}\n\n\tconst command = args[0];\n\tconst parsedArgs = parseArgs(args.slice(1));\n\n\t// Initialize the client first\n\tawait initializeCentralServerDrift();\n\n\t// Route to appropriate command\n\tswitch (command) {\n\t\tcase 'deposit':\n\t\t\tawait depositCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'withdraw':\n\t\t\tawait withdrawCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'settleFunding':\n\t\t\tawait settleFundingCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'settlePnl':\n\t\t\tawait settlePnlCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'openPerpMarketOrder':\n\t\t\tawait openPerpMarketOrderCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'openPerpMarketOrderSwift':\n\t\t\tawait openPerpMarketOrderSwiftCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'openPerpNonMarketOrder':\n\t\t\tawait openPerpNonMarketOrderCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'openPerpNonMarketOrderSwift':\n\t\t\tawait openPerpNonMarketOrderSwiftCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'editOrder':\n\t\t\tawait editOrderCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'cancelOrder':\n\t\t\tawait cancelOrderCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'cancelAllOrders':\n\t\t\tawait cancelAllOrdersCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'swap':\n\t\t\tawait swapCommand(parsedArgs);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tconsole.error(`❌ Unknown command: ${command}`);\n\t\t\tconsole.error('');\n\t\t\tshowUsage();\n\t\t\tprocess.exit(1);\n\t}\n}\n\n// Run CLI if this file is executed directly\nif (require.main === module) {\n\tmain()\n\t\t.then(() => {\n\t\t\tconsole.log('\\n✨ Command executed successfully!');\n\t\t\t// Don't exit immediately for Swift orders (they need time to process)\n\t\t\tsetTimeout(() => process.exit(0), 2000);\n\t\t})\n\t\t.catch((error) => {\n\t\t\tconsole.error('\\n💥 Command failed:', error.message || error);\n\t\t\tprocess.exit(1);\n\t\t});\n}\n\nexport { main, parseArgs, parseAmount, parseDirection, parseSwapMode };\n"]}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/drift/cli.ts"],"names":[],"mappings":"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","sourcesContent":["import * as anchor from '@coral-xyz/anchor';\nimport { PublicKey, VersionedTransaction } from '@solana/web3.js';\nimport {\n\tBN,\n\tloadKeypair,\n\tPositionDirection,\n\tOrderType,\n\tPostOnlyParams,\n\tSwapMode,\n\tBASE_PRECISION,\n\tQUOTE_PRECISION,\n\tPRICE_PRECISION,\n\tMainnetSpotMarkets,\n\tDevnetSpotMarkets,\n} from '@drift-labs/sdk';\nimport { sign } from 'tweetnacl';\nimport { CentralServerDrift } from './Drift/clients/CentralServerDrift';\nimport { CentralServerSwiftOrderOptions } from './Drift/clients/CentralServerDrift/types';\nimport { ENUM_UTILS } from '../utils';\nimport { API_URLS } from './constants/apiUrls';\nimport * as path from 'path';\nimport {\n\tNonMarketOrderType,\n\tLimitOrderParamsOrderConfig,\n\tNonMarketOrderParamsConfig,\n} from './base/actions/trade/openPerpOrder/types';\n\n// Load environment variables from .env file\nconst dotenv = require('dotenv');\ndotenv.config({ path: path.resolve(__dirname, '.env') });\n\n/**\n * CLI Tool for CentralServerDrift client\n *\n * This CLI tool allows you to execute various Drift protocol operations via command line\n * with human-readable parameters that are automatically converted to the proper precision.\n *\n * Prerequisites:\n * - Create a .env file in the same directory as this CLI file with:\n * ANCHOR_WALLET=[private key byte array]\n * ENDPOINT=https://your-rpc-endpoint.com\n *\n * Usage Examples:\n * ts-node cli.ts deposit --marketIndex=0 --amount=2 --userAccount=11111111111111111111111111111111\n * ts-node cli.ts withdraw --marketIndex=0 --amount=1.5 --userAccount=11111111111111111111111111111111\n * ts-node cli.ts settleFunding --userAccount=11111111111111111111111111111111\n * ts-node cli.ts settlePnl --marketIndexes=0,1 --userAccount=11111111111111111111111111111111\n * ts-node cli.ts openPerpMarketOrder --marketIndex=0 --direction=long --amount=0.1 --assetType=base --userAccount=11111111111111111111111111111111\n * ts-node cli.ts openPerpMarketOrderSwift --marketIndex=0 --direction=short --amount=100 --assetType=quote --userAccount=11111111111111111111111111111111\n * ts-node cli.ts openPerpNonMarketOrder --marketIndex=0 --direction=long --baseAssetAmount=0.1 --orderType=limit --limitPrice=100 --userAccount=11111111111111111111111111111111\n * ts-node cli.ts openPerpNonMarketOrderSwift --marketIndex=0 --direction=long --baseAssetAmount=0.1 --orderType=limit --limitPrice=99.5 --userAccount=11111111111111111111111111111111\n * ts-node cli.ts editOrder --userAccount=11111111111111111111111111111111 --orderId=123 --newLimitPrice=105.5\n * ts-node cli.ts cancelOrder --userAccount=11111111111111111111111111111111 --orderIds=123,456,789\n * ts-node cli.ts cancelAllOrders --userAccount=11111111111111111111111111111111 --marketType=perp\n * ts-node cli.ts swap --userAccount=11111111111111111111111111111111 --fromMarketIndex=1 --toMarketIndex=0 --fromAmount=1.5 --slippage=100 --swapMode=ExactIn\n * ts-node cli.ts swap --userAccount=11111111111111111111111111111111 --fromMarketIndex=1 --toMarketIndex=0 --toAmount=150 --slippage=100 --swapMode=ExactOut\n * ts-node cli.ts createUserAndDeposit --marketIndex=0 --amount=100 --accountName=\"Primary\"\n */\n\n// Shared configuration\nlet centralServerDrift: CentralServerDrift;\nlet wallet: anchor.Wallet;\n\ninterface CliArgs {\n\t[key: string]: string | string[];\n}\n\n/**\n * Parse command line arguments into a key-value object\n */\nfunction parseArgs(args: string[]): CliArgs {\n\tconst parsed: CliArgs = {};\n\n\tfor (let i = 0; i < args.length; i++) {\n\t\tconst arg = args[i];\n\t\tif (arg.startsWith('--')) {\n\t\t\tconst [key, value] = arg.substring(2).split('=');\n\t\t\tif (value !== undefined) {\n\t\t\t\t// Handle comma-separated arrays\n\t\t\t\tif (value.includes(',')) {\n\t\t\t\t\tparsed[key] = value.split(',');\n\t\t\t\t} else {\n\t\t\t\t\tparsed[key] = value;\n\t\t\t\t}\n\t\t\t} else if (i + 1 < args.length && !args[i + 1].startsWith('--')) {\n\t\t\t\t// Handle space-separated values\n\t\t\t\tconst nextValue = args[i + 1];\n\t\t\t\tif (nextValue.includes(',')) {\n\t\t\t\t\tparsed[key] = nextValue.split(',');\n\t\t\t\t} else {\n\t\t\t\t\tparsed[key] = nextValue;\n\t\t\t\t}\n\t\t\t\ti++; // Skip the next argument as it's the value\n\t\t\t} else {\n\t\t\t\tparsed[key] = 'true'; // Boolean flag\n\t\t\t}\n\t\t}\n\t}\n\n\treturn parsed;\n}\n\n/**\n * Convert human-readable amount to BN with proper precision\n */\nfunction parseAmount(amount: string, precision: BN = QUOTE_PRECISION): BN {\n\tconst floatAmount = parseFloat(amount);\n\tif (isNaN(floatAmount)) {\n\t\tthrow new Error(`Invalid amount: ${amount}`);\n\t}\n\n\t// Convert to the proper precision\n\tconst scaledAmount = Math.floor(floatAmount * precision.toNumber());\n\treturn new BN(scaledAmount);\n}\n\n/**\n * Parse direction string to PositionDirection\n */\nfunction parseDirection(direction: string): PositionDirection {\n\tconst normalized = direction.toLowerCase();\n\tif (normalized === 'long' || normalized === 'buy') {\n\t\treturn PositionDirection.LONG;\n\t} else if (normalized === 'short' || normalized === 'sell') {\n\t\treturn PositionDirection.SHORT;\n\t} else {\n\t\tthrow new Error(\n\t\t\t`Invalid direction: ${direction}. Use 'long', 'short', 'buy', or 'sell'`\n\t\t);\n\t}\n}\n\n/**\n * Parse order type string to OrderType\n */\nfunction _parseOrderType(orderType: string): OrderType {\n\tconst normalized = orderType.toLowerCase();\n\tswitch (normalized) {\n\t\tcase 'limit':\n\t\t\treturn OrderType.LIMIT;\n\t\tcase 'market':\n\t\t\treturn OrderType.MARKET;\n\t\tcase 'oracle':\n\t\t\treturn OrderType.ORACLE;\n\t\tcase 'trigger_market':\n\t\tcase 'stopmarket':\n\t\t\treturn OrderType.TRIGGER_MARKET;\n\t\tcase 'trigger_limit':\n\t\tcase 'stoplimit':\n\t\t\treturn OrderType.TRIGGER_LIMIT;\n\t\tdefault:\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid order type: ${orderType}. Use 'limit', 'market', 'oracle', 'trigger_market', or 'trigger_limit'`\n\t\t\t);\n\t}\n}\n\n/**\n * Parse post only string to PostOnlyParams\n */\nfunction parsePostOnly(postOnly: string): PostOnlyParams {\n\tconst normalized = postOnly.toLowerCase();\n\tswitch (normalized) {\n\t\tcase 'none':\n\t\tcase 'false':\n\t\t\treturn PostOnlyParams.NONE;\n\t\tcase 'must_post_only':\n\t\tcase 'true':\n\t\t\treturn PostOnlyParams.MUST_POST_ONLY;\n\t\tcase 'try_post_only':\n\t\t\treturn PostOnlyParams.TRY_POST_ONLY;\n\t\tcase 'slide':\n\t\t\treturn PostOnlyParams.SLIDE;\n\t\tdefault:\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid post only: ${postOnly}. Use 'none', 'must_post_only', 'try_post_only', or 'slide'`\n\t\t\t);\n\t}\n}\n\n/**\n * Parse swap mode string to SwapMode\n */\nfunction parseSwapMode(swapMode: string): SwapMode {\n\tconst normalized = swapMode.toLowerCase();\n\tswitch (normalized) {\n\t\tcase 'exactin':\n\t\tcase 'exact_in':\n\t\t\treturn 'ExactIn';\n\t\tcase 'exactout':\n\t\tcase 'exact_out':\n\t\t\treturn 'ExactOut';\n\t\tdefault:\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid swap mode: ${swapMode}. Use 'ExactIn' or 'ExactOut'`\n\t\t\t);\n\t}\n}\n\n/**\n * Get the precision for a spot market based on environment and market index\n */\nfunction getMarketPrecision(\n\tmarketIndex: number,\n\tisMainnet: boolean = true\n): BN {\n\tconst markets = isMainnet ? MainnetSpotMarkets : DevnetSpotMarkets;\n\tconst market = markets.find((m) => m.marketIndex === marketIndex);\n\n\tif (!market) {\n\t\tconsole.warn(\n\t\t\t`⚠️ Market ${marketIndex} not found, using QUOTE_PRECISION as fallback`\n\t\t);\n\t\treturn QUOTE_PRECISION;\n\t}\n\n\treturn market.precision;\n}\n\n/**\n * Initialize CentralServerDrift instance\n */\nasync function initializeCentralServerDrift(): Promise<void> {\n\tconsole.log('🚀 Initializing CentralServerDrift...\\n');\n\n\t// Validate required environment variables\n\tif (!process.env.ANCHOR_WALLET) {\n\t\tthrow new Error('ANCHOR_WALLET must be set in .env file');\n\t}\n\n\tif (!process.env.ENDPOINT) {\n\t\tthrow new Error(\n\t\t\t'ENDPOINT environment variable must be set to your Solana RPC endpoint'\n\t\t);\n\t}\n\n\t// Set up the wallet\n\twallet = new anchor.Wallet(loadKeypair(process.env.ANCHOR_WALLET as string));\n\n\tconsole.log(`✅ Wallet Public Key: ${wallet.publicKey.toString()}`);\n\tconsole.log(`✅ RPC Endpoint: ${process.env.ENDPOINT}\\n`);\n\n\t// Initialize CentralServerDrift\n\tconsole.log('🏗️ Initializing CentralServerDrift...');\n\tcentralServerDrift = new CentralServerDrift({\n\t\tsolanaRpcEndpoint: process.env.ENDPOINT as string,\n\t\tdriftEnv: 'mainnet-beta', // Change to 'devnet' for devnet testing\n\t\tsupportedPerpMarkets: [0, 1, 2], // SOL, BTC, ETH\n\t\tsupportedSpotMarkets: [0, 1], // USDC, SOL\n\t\tadditionalDriftClientConfig: {\n\t\t\ttxVersion: 0,\n\t\t\ttxParams: {\n\t\t\t\tcomputeUnits: 200000,\n\t\t\t\tcomputeUnitsPrice: 1000,\n\t\t\t},\n\t\t},\n\t});\n\n\tconsole.log('✅ CentralServerDrift instance created successfully\\n');\n\n\t// Subscribe to market data\n\tconsole.log('📡 Subscribing to market data...');\n\tawait centralServerDrift.subscribe();\n\tconsole.log('✅ Successfully subscribed to market data\\n');\n}\n\n/**\n * Execute a regular transaction\n */\nasync function executeTransaction(\n\ttxn: VersionedTransaction,\n\ttransactionType: string\n): Promise<void> {\n\tconsole.log(`✅ ${transactionType} transaction created successfully`);\n\tconsole.log('\\n📝 Signing Transaction...');\n\n\ttxn.sign([wallet.payer]);\n\tconsole.log('✅ Transaction signed successfully');\n\n\tconsole.log('\\n🚀 Sending transaction to the network...');\n\tconst { txSig } = await centralServerDrift.sendSignedTransaction(txn);\n\n\tconsole.log('✅ Transaction sent successfully!');\n\tconsole.log(`📋 Transaction Signature: ${txSig?.toString()}`);\n\tconsole.log(`🔍 View on Solscan: https://solscan.io/tx/${txSig?.toString()}`);\n}\n\nconst createSwiftOrderCallbacks = (\n\torderType: string\n): CentralServerSwiftOrderOptions['callbacks'] => {\n\tconst terminalCall = () => {\n\t\tconsole.log('🏁 Order monitoring completed');\n\t};\n\n\treturn {\n\t\tonSigningExpiry: () => {\n\t\t\tconsole.log('Swift order signing expired');\n\t\t},\n\t\tonSigningSuccess: (signedMessage, orderUuid, orderParamsMessage) => {\n\t\t\tconsole.log(\n\t\t\t\t'Swift order signed successfully. Signed message:',\n\t\t\t\tsignedMessage,\n\t\t\t\torderUuid,\n\t\t\t\torderParamsMessage\n\t\t\t);\n\t\t},\n\t\tonSent: () => {\n\t\t\tconsole.log(`✅ ${orderType} Swift order submitted successfully`);\n\t\t},\n\t\tonConfirmed: (event) => {\n\t\t\tconsole.log('✅ Order confirmed!');\n\t\t\tconsole.log(`📋 Order ID: ${event.orderId}`);\n\t\t\tconsole.log(`📋 Hash: ${event.hash}`);\n\t\t\tterminalCall();\n\t\t},\n\t\tonExpired: (event) => {\n\t\t\tconsole.error('⏰ Order expired:', event.message);\n\t\t\tterminalCall();\n\t\t},\n\t\tonErrored: (event) => {\n\t\t\tconsole.error('❌ Order failed:', event.message);\n\t\t\tconsole.error(`📋 Status: ${event.status}`);\n\t\t\tterminalCall();\n\t\t},\n\t};\n};\n\n/**\n * CLI Command: deposit\n */\nasync function depositCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndex = parseInt(args.marketIndex as string);\n\tconst amount = args.amount as string;\n\n\tif (!userAccount || isNaN(marketIndex) || !amount) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndex, --amount'\n\t\t);\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst amountBN = parseAmount(amount, QUOTE_PRECISION); // Most deposits are USDC (quote precision)\n\n\tconsole.log('--- 📥 Deposit Transaction ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Index: ${marketIndex}`);\n\tconsole.log(`💰 Amount: ${amount} (${amountBN.toString()} raw units)`);\n\n\tconst depositTxn = await centralServerDrift.getDepositTxn(\n\t\tuserAccountPubkey,\n\t\tamountBN,\n\t\tmarketIndex\n\t);\n\n\tawait executeTransaction(depositTxn as VersionedTransaction, 'Deposit');\n}\n\n/**\n * CLI Command: createUserAndDeposit\n */\nasync function createUserAndDepositCommand(args: CliArgs): Promise<void> {\n\tconst marketIndexArg = args.marketIndex as string;\n\tconst amountArg = args.amount as string;\n\tconst referrerName = args.referrerName as string | undefined;\n\tconst accountName = args.accountName as string | undefined;\n\tconst poolIdArg = args.poolId as string | undefined;\n\tconst fromSubAccountIdArg = args.fromSubAccountId as string | undefined;\n\tconst customMaxMarginRatioArg = args.customMaxMarginRatio as\n\t\t| string\n\t\t| undefined;\n\n\tif (!marketIndexArg || !amountArg) {\n\t\tthrow new Error('Required arguments: --marketIndex, --amount');\n\t}\n\n\tconst marketIndex = parseInt(marketIndexArg, 10);\n\tif (isNaN(marketIndex)) {\n\t\tthrow new Error(`Invalid marketIndex: ${marketIndexArg}`);\n\t}\n\n\tconst precision = getMarketPrecision(marketIndex, true);\n\tconst amountBN = parseAmount(amountArg, precision);\n\n\tconst options: {\n\t\treferrerName?: string;\n\t\taccountName?: string;\n\t\tpoolId?: number;\n\t\tfromSubAccountId?: number;\n\t\tcustomMaxMarginRatio?: number;\n\t} = {};\n\n\tif (referrerName) {\n\t\toptions.referrerName = referrerName;\n\t}\n\n\tif (accountName) {\n\t\toptions.accountName = accountName;\n\t}\n\n\tif (poolIdArg !== undefined) {\n\t\tconst poolId = parseInt(poolIdArg, 10);\n\t\tif (isNaN(poolId)) {\n\t\t\tthrow new Error(`Invalid poolId: ${poolIdArg}`);\n\t\t}\n\t\toptions.poolId = poolId;\n\t}\n\n\tif (fromSubAccountIdArg !== undefined) {\n\t\tconst fromSubAccountId = parseInt(fromSubAccountIdArg, 10);\n\t\tif (isNaN(fromSubAccountId)) {\n\t\t\tthrow new Error(`Invalid fromSubAccountId: ${fromSubAccountIdArg}`);\n\t\t}\n\t\toptions.fromSubAccountId = fromSubAccountId;\n\t}\n\n\tif (customMaxMarginRatioArg !== undefined) {\n\t\tconst customMaxMarginRatio = parseFloat(customMaxMarginRatioArg);\n\t\tif (isNaN(customMaxMarginRatio)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid customMaxMarginRatio: ${customMaxMarginRatioArg}`\n\t\t\t);\n\t\t}\n\t\toptions.customMaxMarginRatio = customMaxMarginRatio;\n\t}\n\n\tconsole.log('--- 🆕 Create User & Deposit Transaction ---');\n\tconsole.log(`🔑 Authority (wallet): ${wallet.publicKey.toString()}`);\n\tconsole.log(`🏪 Spot Market Index: ${marketIndex}`);\n\tconsole.log(\n\t\t`💰 Initial Deposit: ${amountArg} (${amountBN.toString()} raw units)`\n\t);\n\tif (options.accountName) {\n\t\tconsole.log(`📝 Account Name: ${options.accountName}`);\n\t}\n\tif (options.referrerName) {\n\t\tconsole.log(`🙌 Referrer Name: ${options.referrerName}`);\n\t}\n\tif (options.poolId !== undefined) {\n\t\tconsole.log(`🏊 Pool ID: ${options.poolId}`);\n\t}\n\tif (options.fromSubAccountId !== undefined) {\n\t\tconsole.log(`🔁 Funding From Subaccount ID: ${options.fromSubAccountId}`);\n\t}\n\tif (options.customMaxMarginRatio !== undefined) {\n\t\tconsole.log(`📐 Custom Max Margin Ratio: ${options.customMaxMarginRatio}`);\n\t}\n\n\tconst hasOptions = Object.keys(options).length > 0;\n\tconst { transaction, userAccountPublicKey, subAccountId } =\n\t\tawait centralServerDrift.getCreateAndDepositTxn(\n\t\t\twallet.publicKey,\n\t\t\tamountBN,\n\t\t\tmarketIndex,\n\t\t\thasOptions ? options : undefined\n\t\t);\n\n\tconsole.log(`🆔 New User Account: ${userAccountPublicKey.toString()}`);\n\tconsole.log(`🧾 Subaccount ID: ${subAccountId}`);\n\n\tawait executeTransaction(\n\t\ttransaction as VersionedTransaction,\n\t\t'Create User & Deposit'\n\t);\n}\n\n/**\n * CLI Command: withdraw\n */\nasync function withdrawCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndex = parseInt(args.marketIndex as string);\n\tconst amount = args.amount as string;\n\tconst isBorrow = args.isBorrow === 'true';\n\tconst isMax = args.isMax === 'true';\n\n\tif (!userAccount || isNaN(marketIndex) || !amount) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndex, --amount'\n\t\t);\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst amountBN = parseAmount(amount, QUOTE_PRECISION);\n\n\tconsole.log('--- 📤 Withdraw Transaction ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Index: ${marketIndex}`);\n\tconsole.log(`💰 Amount: ${amount} (${amountBN.toString()} raw units)`);\n\tconsole.log(`💳 Is Borrow: ${isBorrow}`);\n\tconsole.log(`📊 Is Max: ${isMax}`);\n\n\tconst withdrawTxn = await centralServerDrift.getWithdrawTxn(\n\t\tuserAccountPubkey,\n\t\tamountBN,\n\t\tmarketIndex,\n\t\t{ isBorrow, isMax }\n\t);\n\n\tawait executeTransaction(withdrawTxn as VersionedTransaction, 'Withdraw');\n}\n\n/**\n * CLI Command: settleFunding\n */\nasync function settleFundingCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\n\tif (!userAccount) {\n\t\tthrow new Error('Required arguments: --userAccount');\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\n\tconsole.log('--- 💰 Settle Funding Transaction ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\n\tconst settleFundingTxn = await centralServerDrift.getSettleFundingTxn(\n\t\tuserAccountPubkey\n\t);\n\n\tawait executeTransaction(\n\t\tsettleFundingTxn as VersionedTransaction,\n\t\t'Settle Funding'\n\t);\n}\n\n/**\n * CLI Command: settlePnl\n */\nasync function settlePnlCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndexesArg = args.marketIndexes;\n\n\tif (!userAccount || !marketIndexesArg) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndexes (comma-separated)'\n\t\t);\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst marketIndexes = Array.isArray(marketIndexesArg)\n\t\t? marketIndexesArg.map((idx) => parseInt(idx))\n\t\t: [parseInt(marketIndexesArg as string)];\n\n\tconsole.log('--- 📈 Settle PnL Transaction ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`📊 Market Indexes: ${marketIndexes.join(', ')}`);\n\n\tconst settlePnlTxn = await centralServerDrift.getSettlePnlTxn(\n\t\tuserAccountPubkey,\n\t\tmarketIndexes\n\t);\n\n\tawait executeTransaction(settlePnlTxn as VersionedTransaction, 'Settle PnL');\n}\n\n/**\n * CLI Command: openPerpMarketOrder (regular transaction)\n */\nasync function openPerpMarketOrderCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndex = parseInt(args.marketIndex as string);\n\tconst direction = args.direction as string;\n\tconst amount = args.amount as string;\n\tconst assetType = (args.assetType as string) || 'base';\n\tconst dlobServerHttpUrl = API_URLS.DLOB;\n\n\tif (!userAccount || isNaN(marketIndex) || !direction || !amount) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndex, --direction, --amount'\n\t\t);\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst directionEnum = parseDirection(direction);\n\tconst precision = assetType === 'base' ? BASE_PRECISION : QUOTE_PRECISION;\n\tconst amountBN = parseAmount(amount, precision);\n\n\tconsole.log('--- 🎯 Open Perp Order Transaction ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Index: ${marketIndex}`);\n\tconsole.log(\n\t\t`📊 Direction: ${direction} (${ENUM_UTILS.toStr(directionEnum)})`\n\t);\n\tconsole.log(`💰 Amount: ${amount} (${amountBN.toString()} raw units)`);\n\tconsole.log(`💱 Asset Type: ${assetType}`);\n\tconsole.log(`🌐 DLOB Server: ${dlobServerHttpUrl}`);\n\n\tconst orderTxn = await centralServerDrift.getOpenPerpMarketOrderTxn({\n\t\tuserAccountPublicKey: userAccountPubkey,\n\t\tassetType: assetType as 'base' | 'quote',\n\t\tmarketIndex,\n\t\tdirection: directionEnum,\n\t\tamount: amountBN,\n\t\tuseSwift: false,\n\t});\n\n\tawait executeTransaction(orderTxn as VersionedTransaction, 'Open Perp Order');\n}\n\n/**\n * CLI Command: openPerpMarketOrderSwift (Swift signed message order)\n */\nasync function openPerpMarketOrderSwiftCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndex = parseInt(args.marketIndex as string);\n\tconst direction = args.direction as string;\n\tconst amount = args.amount as string;\n\tconst assetType = (args.assetType as string) || 'base';\n\tconst dlobServerHttpUrl = API_URLS.DLOB;\n\tconst swiftServerUrl = (args.swiftServerUrl as string) || API_URLS.SWIFT;\n\n\tif (!userAccount || isNaN(marketIndex) || !direction || !amount) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndex, --direction, --amount'\n\t\t);\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst directionEnum = parseDirection(direction);\n\tconst precision = assetType === 'base' ? BASE_PRECISION : QUOTE_PRECISION;\n\tconst amountBN = parseAmount(amount, precision);\n\n\tconsole.log('--- ⚡ Open Perp Order Swift ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Index: ${marketIndex}`);\n\tconsole.log(\n\t\t`📊 Direction: ${direction} (${ENUM_UTILS.toStr(directionEnum)})`\n\t);\n\tconsole.log(`💰 Amount: ${amount} (${amountBN.toString()} raw units)`);\n\tconsole.log(`💱 Asset Type: ${assetType}`);\n\tconsole.log(`🌐 DLOB Server: ${dlobServerHttpUrl}`);\n\tconsole.log(`⚡ Swift Server: ${swiftServerUrl}`);\n\tconsole.log(`🔑 Wallet Public Key: ${wallet.publicKey.toString()}`);\n\n\tconsole.log('\\n👁️ Monitoring order status...');\n\n\ttry {\n\t\tawait centralServerDrift.getOpenPerpMarketOrderTxn({\n\t\t\tuserAccountPublicKey: userAccountPubkey,\n\t\t\tassetType: assetType as 'base' | 'quote',\n\t\t\tmarketIndex,\n\t\t\tdirection: directionEnum,\n\t\t\tamount: amountBN,\n\t\t\tuseSwift: true,\n\t\t\tswiftOptions: {\n\t\t\t\twallet: {\n\t\t\t\t\tsignMessage: async (message: Uint8Array) => {\n\t\t\t\t\t\tconst signature = sign.detached(message, wallet.payer.secretKey);\n\t\t\t\t\t\treturn new Uint8Array(signature);\n\t\t\t\t\t},\n\t\t\t\t\ttakerAuthority: wallet.publicKey,\n\t\t\t\t\tsigningAuthority: wallet.publicKey,\n\t\t\t\t},\n\t\t\t\tcallbacks: createSwiftOrderCallbacks('Open Perp Order'),\n\t\t\t},\n\t\t});\n\t\tconsole.log('✅ [CLI] Swift order finished');\n\t} catch (error) {\n\t\tconsole.error('❌ [CLI] Error creating Swift order:', error);\n\t\tthrow error;\n\t}\n}\n\n/**\n * CLI Command: openPerpNonMarketOrder (regular limit/oracle order)\n */\nasync function openPerpNonMarketOrderCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndex = parseInt(args.marketIndex as string);\n\tconst direction = args.direction as string;\n\tconst amount = args.amount as string;\n\tconst assetType = (args.assetType as string) || 'base';\n\tconst baseAssetAmount = args.baseAssetAmount as string;\n\tconst orderType = args.orderType as NonMarketOrderType;\n\tconst limitPrice = args.limitPrice as string;\n\tconst triggerPrice = args.triggerPrice as string;\n\tconst reduceOnly = (args.reduceOnly as string) === 'true';\n\tconst postOnly = (args.postOnly as string) || 'none';\n\tconst oraclePriceOffset = args.oraclePriceOffset as string;\n\n\tif (!userAccount || isNaN(marketIndex) || !direction || !orderType) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndex, --direction, --orderType'\n\t\t);\n\t}\n\n\tif (!amount && !baseAssetAmount) {\n\t\tthrow new Error('Either --amount or --baseAssetAmount must be provided');\n\t}\n\n\t// Validate price requirements based on order type\n\tif (orderType === 'limit') {\n\t\tif (!limitPrice) {\n\t\t\tthrow new Error(`Order type '${orderType}' requires --limitPrice`);\n\t\t}\n\t} else if (orderType === 'takeProfit' || orderType === 'stopLoss') {\n\t\tif (!triggerPrice) {\n\t\t\tthrow new Error(`Order type '${orderType}' requires --triggerPrice`);\n\t\t}\n\t} else if (orderType === 'oracleLimit') {\n\t\tif (!oraclePriceOffset) {\n\t\t\tthrow new Error(`Order type '${orderType}' requires --oraclePriceOffset`);\n\t\t}\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst directionEnum = parseDirection(direction);\n\tconst postOnlyEnum = parsePostOnly(postOnly);\n\tconst limitPriceBN = limitPrice\n\t\t? parseAmount(limitPrice, PRICE_PRECISION)\n\t\t: undefined;\n\tconst triggerPriceBN = triggerPrice\n\t\t? parseAmount(triggerPrice, PRICE_PRECISION)\n\t\t: undefined;\n\tconst oraclePriceOffsetBN = oraclePriceOffset\n\t\t? parseAmount(oraclePriceOffset, PRICE_PRECISION)\n\t\t: undefined;\n\n\tconst orderConfig: NonMarketOrderParamsConfig['orderConfig'] =\n\t\torderType === 'limit'\n\t\t\t? {\n\t\t\t\t\torderType,\n\t\t\t\t\tlimitPrice: limitPriceBN!,\n\t\t\t }\n\t\t\t: orderType === 'takeProfit' || orderType === 'stopLoss'\n\t\t\t? {\n\t\t\t\t\torderType,\n\t\t\t\t\ttriggerPrice: triggerPriceBN!,\n\t\t\t }\n\t\t\t: {\n\t\t\t\t\torderType,\n\t\t\t\t\toraclePriceOffset: oraclePriceOffsetBN!,\n\t\t\t };\n\n\tconsole.log('--- 📋 Open Perp Non-Market Order ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Index: ${marketIndex}`);\n\tconsole.log(\n\t\t`📊 Direction: ${direction} (${ENUM_UTILS.toStr(directionEnum)})`\n\t);\n\n\tlet amountBN: BN;\n\tif (amount) {\n\t\tconst precision = assetType === 'base' ? BASE_PRECISION : QUOTE_PRECISION;\n\t\tamountBN = parseAmount(amount, precision);\n\t\tconsole.log(`💰 Amount: ${amount} (${amountBN.toString()} raw units)`);\n\t\tconsole.log(`💱 Asset Type: ${assetType}`);\n\t} else {\n\t\tamountBN = parseAmount(baseAssetAmount, BASE_PRECISION);\n\t\tconsole.log(\n\t\t\t`💰 Base Asset Amount: ${baseAssetAmount} (${amountBN.toString()} raw units)`\n\t\t);\n\t}\n\n\tif (limitPriceBN) {\n\t\tconsole.log(\n\t\t\t`💵 Limit Price: ${limitPrice} (${limitPriceBN.toString()} raw units)`\n\t\t);\n\t}\n\tif (triggerPriceBN) {\n\t\tconsole.log(\n\t\t\t`🎯 Trigger Price: ${triggerPrice} (${triggerPriceBN.toString()} raw units)`\n\t\t);\n\t}\n\tconsole.log(`📝 Order Type: ${orderType}`);\n\tconsole.log(`🔄 Reduce Only: ${reduceOnly}`);\n\tconsole.log(`📌 Post Only: ${postOnly} (${ENUM_UTILS.toStr(postOnlyEnum)})`);\n\n\t// Just call the main method - it will handle both approaches internally\n\tconst orderTxn = await centralServerDrift.getOpenPerpNonMarketOrderTxn({\n\t\tuserAccountPublicKey: userAccountPubkey,\n\t\tmarketIndex,\n\t\tdirection: directionEnum,\n\t\torderConfig,\n\t\tuseSwift: false,\n\t\treduceOnly,\n\t\tpostOnly: postOnlyEnum,\n\t\tassetType: assetType as 'base' | 'quote',\n\t\tamount: amountBN,\n\t});\n\n\tawait executeTransaction(\n\t\torderTxn as VersionedTransaction,\n\t\t'Open Perp Non-Market Order'\n\t);\n}\n\n/**\n * CLI Command: openPerpNonMarketOrderSwift (Swift signed message limit order)\n */\nasync function openPerpNonMarketOrderSwiftCommand(\n\targs: CliArgs\n): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndex = parseInt(args.marketIndex as string);\n\tconst direction = args.direction as string;\n\tconst amount = args.amount as string;\n\tconst assetType = (args.assetType as string) || 'base';\n\tconst baseAssetAmount = args.baseAssetAmount as string;\n\tconst orderType = args.orderType as NonMarketOrderType;\n\tconst limitPrice = args.limitPrice as string;\n\tconst reduceOnly = (args.reduceOnly as string) === 'true';\n\tconst postOnly = (args.postOnly as string) || 'none';\n\tconst swiftServerUrl = API_URLS.SWIFT;\n\n\tif (!userAccount || isNaN(marketIndex) || !direction || !orderType) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndex, --direction, --orderType'\n\t\t);\n\t}\n\n\tif (!amount && !baseAssetAmount) {\n\t\tthrow new Error('Either --amount or --baseAssetAmount must be provided');\n\t}\n\n\t// Swift orders only support LIMIT order type\n\tif (orderType.toLowerCase() !== 'limit') {\n\t\tthrow new Error('Swift orders only support LIMIT order type');\n\t}\n\n\t// LIMIT orders require limitPrice\n\tif (!limitPrice) {\n\t\tthrow new Error('LIMIT orders require --limitPrice');\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst directionEnum = parseDirection(direction);\n\tconst postOnlyEnum = parsePostOnly(postOnly);\n\tconst limitPriceBN = parseAmount(limitPrice, PRICE_PRECISION);\n\n\tconst orderConfig: LimitOrderParamsOrderConfig = {\n\t\torderType: 'limit',\n\t\tlimitPrice: limitPriceBN!,\n\t};\n\n\tconsole.log('--- ⚡ Open Perp Non-Market Order Swift ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Index: ${marketIndex}`);\n\tconsole.log(\n\t\t`📊 Direction: ${direction} (${ENUM_UTILS.toStr(directionEnum)})`\n\t);\n\n\tlet amountBN: BN;\n\tif (amount) {\n\t\tconst precision = assetType === 'base' ? BASE_PRECISION : QUOTE_PRECISION;\n\t\tamountBN = parseAmount(amount, precision);\n\t\tconsole.log(`💰 Amount: ${amount} (${amountBN.toString()} raw units)`);\n\t\tconsole.log(`💱 Asset Type: ${assetType}`);\n\t} else {\n\t\tamountBN = parseAmount(baseAssetAmount, BASE_PRECISION);\n\t\tconsole.log(\n\t\t\t`💰 Base Asset Amount: ${baseAssetAmount} (${amountBN.toString()} raw units)`\n\t\t);\n\t}\n\n\tconsole.log(\n\t\t`💵 Limit Price: ${limitPrice} (${limitPriceBN.toString()} raw units)`\n\t);\n\tconsole.log(`📝 Order Type: ${orderType})`);\n\tconsole.log(`🔄 Reduce Only: ${reduceOnly}`);\n\tconsole.log(`📌 Post Only: ${postOnly} (${ENUM_UTILS.toStr(postOnlyEnum)})`);\n\tconsole.log(`⚡ Swift Server: ${swiftServerUrl}`);\n\tconsole.log(`🔑 Wallet Public Key: ${wallet.publicKey.toString()}`);\n\n\ttry {\n\t\tconst swiftOptions: CentralServerSwiftOrderOptions = {\n\t\t\twallet: {\n\t\t\t\tsignMessage: async (message: Uint8Array) => {\n\t\t\t\t\tconst signature = sign.detached(message, wallet.payer.secretKey);\n\t\t\t\t\treturn new Uint8Array(signature);\n\t\t\t\t},\n\t\t\t\ttakerAuthority: wallet.publicKey,\n\t\t\t\tsigningAuthority: wallet.publicKey,\n\t\t\t},\n\t\t\tcallbacks: createSwiftOrderCallbacks('Open Perp Non-Market Order'),\n\t\t};\n\n\t\tconsole.log('\\n👁️ Monitoring order status...');\n\n\t\t// Use the main method - it handles both approaches internally\n\t\tawait centralServerDrift.getOpenPerpNonMarketOrderTxn({\n\t\t\tuserAccountPublicKey: userAccountPubkey,\n\t\t\tmarketIndex,\n\t\t\tdirection: directionEnum,\n\t\t\torderConfig,\n\t\t\treduceOnly,\n\t\t\tpostOnly: postOnlyEnum,\n\t\t\tassetType: assetType as 'base' | 'quote',\n\t\t\tamount: amountBN,\n\t\t\tuseSwift: true,\n\t\t\tswiftOptions,\n\t\t});\n\n\t\tconsole.log('✅ [CLI] Swift order finished');\n\t} catch (error) {\n\t\tconsole.error('❌ [CLI] Error creating Swift non-market order:', error);\n\t\tthrow error;\n\t}\n}\n\n/**\n * Show CLI usage information\n */\nfunction showUsage(): void {\n\tconsole.log('📋 Drift CLI Usage');\n\tconsole.log('');\n\tconsole.log('Available Commands:');\n\tconsole.log('');\n\n\tconsole.log('💰 deposit');\n\tconsole.log(\n\t\t' ts-node cli.ts deposit --userAccount=<pubkey> --marketIndex=<num> --amount=<num>'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts deposit --userAccount=11111111111111111111111111111111 --marketIndex=0 --amount=100'\n\t);\n\tconsole.log('');\n\n\tconsole.log('🆕 createUserAndDeposit');\n\tconsole.log(\n\t\t' ts-node cli.ts createUserAndDeposit --marketIndex=<num> --amount=<num> [--accountName=<string>] [--referrerName=<string>] [--poolId=<num>] [--fromSubAccountId=<num>] [--customMaxMarginRatio=<num>]'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts createUserAndDeposit --marketIndex=0 --amount=100 --accountName=\"Primary\"'\n\t);\n\tconsole.log('');\n\n\tconsole.log('💸 withdraw');\n\tconsole.log(\n\t\t' ts-node cli.ts withdraw --userAccount=<pubkey> --marketIndex=<num> --amount=<num> [--isBorrow=<bool>] [--isMax=<bool>]'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts withdraw --userAccount=11111111111111111111111111111111 --marketIndex=0 --amount=50'\n\t);\n\tconsole.log('');\n\n\tconsole.log('🏦 settleFunding');\n\tconsole.log(' ts-node cli.ts settleFunding --userAccount=<pubkey>');\n\tconsole.log(\n\t\t' Example: ts-node cli.ts settleFunding --userAccount=11111111111111111111111111111111'\n\t);\n\tconsole.log('');\n\n\tconsole.log('📊 settlePnl');\n\tconsole.log(\n\t\t' ts-node cli.ts settlePnl --userAccount=<pubkey> --marketIndexes=<comma-separated>'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts settlePnl --userAccount=11111111111111111111111111111111 --marketIndexes=0,1'\n\t);\n\tconsole.log('');\n\n\tconsole.log('🎯 openPerpMarketOrder');\n\tconsole.log(\n\t\t' ts-node cli.ts openPerpMarketOrder --userAccount=<pubkey> --marketIndex=<num> --direction=<long|short> --amount=<num> [--assetType=<base|quote>]'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts openPerpMarketOrder --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=long --amount=0.1 --assetType=base'\n\t);\n\tconsole.log('');\n\n\tconsole.log('⚡ openPerpMarketOrderSwift');\n\tconsole.log(\n\t\t' ts-node cli.ts openPerpMarketOrderSwift --userAccount=<pubkey> --marketIndex=<num> --direction=<long|short> --amount=<num> [--assetType=<base|quote>]'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts openPerpMarketOrderSwift --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=short --amount=100 --assetType=quote'\n\t);\n\tconsole.log('');\n\n\tconsole.log('📋 openPerpNonMarketOrder');\n\tconsole.log(\n\t\t' ts-node cli.ts openPerpNonMarketOrder --userAccount=<pubkey> --marketIndex=<num> --direction=<long|short> --amount=<num> [--assetType=<base|quote>] --orderType=<limit|trigger_limit|trigger_market|oracle> [--limitPrice=<num>] [--triggerPrice=<num>] [--reduceOnly=<true|false>] [--postOnly=<none|must_post_only|try_post_only|slide>]'\n\t);\n\tconsole.log(\n\t\t' New LIMIT: ts-node cli.ts openPerpNonMarketOrder --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=long --amount=0.1 --assetType=base --orderType=limit --limitPrice=100'\n\t);\n\tconsole.log(\n\t\t' New QUOTE: ts-node cli.ts openPerpNonMarketOrder --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=long --amount=100 --assetType=quote --orderType=limit --limitPrice=100'\n\t);\n\tconsole.log(\n\t\t' Legacy: ts-node cli.ts openPerpNonMarketOrder --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=long --baseAssetAmount=0.1 --orderType=limit --limitPrice=100'\n\t);\n\tconsole.log('');\n\n\tconsole.log('⚡ openPerpNonMarketOrderSwift');\n\tconsole.log(\n\t\t' ts-node cli.ts openPerpNonMarketOrderSwift --userAccount=<pubkey> --marketIndex=<num> --direction=<long|short> --amount=<num> [--assetType=<base|quote>] --orderType=limit --limitPrice=<num> [--reduceOnly=<true|false>] [--postOnly=<none|must_post_only|try_post_only|slide>]'\n\t);\n\tconsole.log(\n\t\t' New: ts-node cli.ts openPerpNonMarketOrderSwift --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=long --amount=0.1 --assetType=base --orderType=limit --limitPrice=99.5'\n\t);\n\tconsole.log(\n\t\t' Legacy: ts-node cli.ts openPerpNonMarketOrderSwift --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=long --baseAssetAmount=0.1 --orderType=limit --limitPrice=99.5'\n\t);\n\tconsole.log('');\n\n\tconsole.log('✏️ editOrder');\n\tconsole.log(\n\t\t' ts-node cli.ts editOrder --userAccount=<pubkey> --orderId=<num> [--newDirection=<long|short>] [--newBaseAmount=<num>] [--newLimitPrice=<num>] [--newTriggerPrice=<num>] [--reduceOnly=<true|false>] [--postOnly=<true|false>]'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts editOrder --userAccount=11111111111111111111111111111111 --orderId=123 --newLimitPrice=105.5'\n\t);\n\tconsole.log('');\n\n\tconsole.log('❌ cancelOrder');\n\tconsole.log(\n\t\t' ts-node cli.ts cancelOrder --userAccount=<pubkey> --orderIds=<comma-separated-list>'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts cancelOrder --userAccount=11111111111111111111111111111111 --orderIds=123,456,789'\n\t);\n\tconsole.log('');\n\n\tconsole.log('🧹 cancelAllOrders');\n\tconsole.log(\n\t\t' ts-node cli.ts cancelAllOrders --userAccount=<pubkey> [--marketType=<perp|spot>] [--marketIndex=<num>] [--direction=<long|short>]'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts cancelAllOrders --userAccount=11111111111111111111111111111111 --marketType=perp'\n\t);\n\tconsole.log('');\n\n\tconsole.log('🔄 swap');\n\tconsole.log(\n\t\t' ts-node cli.ts swap --userAccount=<pubkey> --fromMarketIndex=<num> --toMarketIndex=<num> [--fromAmount=<num>] [--toAmount=<num>] [--slippage=<bps>] [--swapMode=<ExactIn|ExactOut>]'\n\t);\n\tconsole.log(\n\t\t' ExactIn: ts-node cli.ts swap --userAccount=11111111111111111111111111111111 --fromMarketIndex=1 --toMarketIndex=0 --fromAmount=1.5 --swapMode=ExactIn'\n\t);\n\tconsole.log(\n\t\t' ExactOut: ts-node cli.ts swap --userAccount=11111111111111111111111111111111 --fromMarketIndex=1 --toMarketIndex=0 --toAmount=150 --swapMode=ExactOut'\n\t);\n\tconsole.log('');\n\n\tconsole.log('Options:');\n\tconsole.log(' --help, -h Show this help message');\n\tconsole.log('');\n\tconsole.log('Notes:');\n\tconsole.log(\n\t\t' - Amounts are in human-readable format (e.g., 1.5 USDC, 0.1 SOL)'\n\t);\n\tconsole.log(' - Direction can be: long, short, buy, sell');\n\tconsole.log(\n\t\t' - Asset type: base (for native tokens like SOL) or quote (for USDC amounts)'\n\t);\n\tconsole.log(' - Swap modes:');\n\tconsole.log(\n\t\t' * ExactIn: Specify --fromAmount (how much input token to swap)'\n\t);\n\tconsole.log(\n\t\t' * ExactOut: Specify --toAmount (how much output token to receive)'\n\t);\n\tconsole.log(' - Ensure your .env file contains ANCHOR_WALLET and ENDPOINT');\n}\n\n/**\n * CLI Command: editOrder\n */\nasync function editOrderCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst orderId = parseInt(args.orderId as string);\n\tconst newDirection = args.newDirection as string;\n\tconst newBaseAmount = args.newBaseAmount as string;\n\tconst newLimitPrice = args.newLimitPrice as string;\n\tconst newTriggerPrice = args.newTriggerPrice as string;\n\tconst reduceOnly = (args.reduceOnly as string) === 'true';\n\tconst postOnly = (args.postOnly as string) === 'true';\n\n\tif (!userAccount || isNaN(orderId)) {\n\t\tthrow new Error('Required arguments: --userAccount, --orderId');\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst editParams: any = {};\n\n\tif (newDirection) {\n\t\teditParams.newDirection = parseDirection(newDirection);\n\t}\n\n\tif (newBaseAmount) {\n\t\teditParams.newBaseAmount = parseAmount(newBaseAmount, BASE_PRECISION);\n\t}\n\n\tif (newLimitPrice) {\n\t\teditParams.newLimitPrice = parseAmount(newLimitPrice, PRICE_PRECISION);\n\t}\n\n\tif (newTriggerPrice) {\n\t\teditParams.newTriggerPrice = parseAmount(newTriggerPrice, PRICE_PRECISION);\n\t}\n\n\tif (reduceOnly) {\n\t\teditParams.reduceOnly = true;\n\t}\n\n\tif (postOnly) {\n\t\teditParams.postOnly = true;\n\t}\n\n\tconsole.log('--- ✏️ Edit Order ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🆔 Order ID: ${orderId}`);\n\tconsole.log(`📝 Edit Parameters:`, editParams);\n\n\tconst editOrderTxn = await centralServerDrift.getEditOrderTxn(\n\t\tuserAccountPubkey,\n\t\torderId,\n\t\teditParams\n\t);\n\n\tawait executeTransaction(editOrderTxn as VersionedTransaction, 'Edit Order');\n}\n\n/**\n * CLI Command: cancelOrder\n */\nasync function cancelOrderCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst orderIds = args.orderIds as string;\n\n\tif (!userAccount || !orderIds) {\n\t\tthrow new Error('Required arguments: --userAccount, --orderIds');\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst orderIdArray = orderIds.split(',').map((id) => parseInt(id.trim()));\n\n\tconsole.log('--- ❌ Cancel Orders ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🆔 Order IDs: ${orderIdArray.join(', ')}`);\n\n\tconst cancelOrderTxn = await centralServerDrift.getCancelOrdersTxn(\n\t\tuserAccountPubkey,\n\t\torderIdArray\n\t);\n\n\tawait executeTransaction(\n\t\tcancelOrderTxn as VersionedTransaction,\n\t\t'Cancel Orders'\n\t);\n}\n\n/**\n * CLI Command: cancelAllOrders\n */\nasync function cancelAllOrdersCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketType = args.marketType as string;\n\tconst marketIndex = args.marketIndex\n\t\t? parseInt(args.marketIndex as string)\n\t\t: undefined;\n\tconst direction = args.direction as string;\n\n\tif (!userAccount) {\n\t\tthrow new Error('Required arguments: --userAccount');\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tlet marketTypeEnum = undefined;\n\tlet directionEnum = undefined;\n\n\tif (marketType) {\n\t\tmarketTypeEnum =\n\t\t\tmarketType.toLowerCase() === 'perp' ? { perp: {} } : { spot: {} };\n\t}\n\n\tif (direction) {\n\t\tdirectionEnum = parseDirection(direction);\n\t}\n\n\tconsole.log('--- 🧹 Cancel All Orders ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Type Filter: ${marketType || 'none'}`);\n\tconsole.log(\n\t\t`📊 Market Index Filter: ${\n\t\t\tmarketIndex !== undefined ? marketIndex : 'none'\n\t\t}`\n\t);\n\tconsole.log(`📈 Direction Filter: ${direction || 'none'}`);\n\n\tconst cancelAllOrdersTxn = await centralServerDrift.getCancelAllOrdersTxn(\n\t\tuserAccountPubkey,\n\t\tmarketTypeEnum,\n\t\tmarketIndex,\n\t\tdirectionEnum\n\t);\n\n\tawait executeTransaction(\n\t\tcancelAllOrdersTxn as VersionedTransaction,\n\t\t'Cancel All Orders'\n\t);\n}\n\n/**\n * CLI Command: swap\n */\nasync function swapCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst fromMarketIndex = parseInt(args.fromMarketIndex as string);\n\tconst toMarketIndex = parseInt(args.toMarketIndex as string);\n\tconst fromAmount = args.fromAmount as string;\n\tconst toAmount = args.toAmount as string;\n\tconst slippage = args.slippage ? parseInt(args.slippage as string) : 10; // Default 0.1%\n\tconst swapMode = (args.swapMode as string) || 'ExactIn';\n\n\tif (!userAccount || isNaN(fromMarketIndex) || isNaN(toMarketIndex)) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --fromMarketIndex, --toMarketIndex'\n\t\t);\n\t}\n\n\tconst swapModeEnum = parseSwapMode(swapMode);\n\n\t// Validate amount parameters based on swap mode\n\tif (swapModeEnum === 'ExactIn') {\n\t\tif (!fromAmount) {\n\t\t\tthrow new Error('ExactIn swap mode requires --fromAmount');\n\t\t}\n\t\tif (toAmount) {\n\t\t\tconsole.warn(\n\t\t\t\t'⚠️ Warning: --toAmount ignored in ExactIn mode, using --fromAmount'\n\t\t\t);\n\t\t}\n\t} else if (swapModeEnum === 'ExactOut') {\n\t\tif (!toAmount) {\n\t\t\tthrow new Error('ExactOut swap mode requires --toAmount');\n\t\t}\n\t\tif (fromAmount) {\n\t\t\tconsole.warn(\n\t\t\t\t'⚠️ Warning: --fromAmount ignored in ExactOut mode, using --toAmount'\n\t\t\t);\n\t\t}\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\n\t// Use the appropriate amount based on swap mode\n\tconst amount = swapModeEnum === 'ExactIn' ? fromAmount : toAmount;\n\n\t// Determine which market to use for precision (input market for ExactIn, output market for ExactOut)\n\tconst precisionMarketIndex =\n\t\tswapModeEnum === 'ExactIn' ? fromMarketIndex : toMarketIndex;\n\n\t// Get the appropriate precision for the amount based on the market\n\tconst isMainnet = true; // Default to mainnet, could be made configurable\n\tconst precision = getMarketPrecision(precisionMarketIndex, isMainnet);\n\tconst amountBN = parseAmount(amount, precision);\n\n\tconsole.log('--- 🔄 Swap Transaction ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`📤 From Market Index: ${fromMarketIndex}`);\n\tconsole.log(`📥 To Market Index: ${toMarketIndex}`);\n\tconsole.log(`🔄 Swap Mode: ${swapMode}`);\n\tconsole.log(\n\t\t`🎯 Using precision from market ${precisionMarketIndex}: ${precision.toString()}`\n\t);\n\n\tif (swapModeEnum === 'ExactIn') {\n\t\tconsole.log(\n\t\t\t`💰 From Amount: ${fromAmount} (${amountBN.toString()} raw units)`\n\t\t);\n\t\tconsole.log(`💰 To Amount: Will be calculated based on quote`);\n\t} else {\n\t\tconsole.log(`💰 From Amount: Will be calculated based on quote`);\n\t\tconsole.log(`💰 To Amount: ${toAmount} (${amountBN.toString()} raw units)`);\n\t}\n\n\tconsole.log(`📊 Slippage: ${slippage} BPS (${slippage / 100}%)`);\n\n\tconst swapTxn = await centralServerDrift.getSwapTxn(\n\t\tuserAccountPubkey,\n\t\tfromMarketIndex,\n\t\ttoMarketIndex,\n\t\tamountBN,\n\t\t{\n\t\t\tslippageBps: slippage,\n\t\t\tswapMode: swapModeEnum,\n\t\t}\n\t);\n\n\tawait executeTransaction(swapTxn as VersionedTransaction, 'Swap');\n}\n\n/**\n * Main CLI entry point\n */\nasync function main(): Promise<void> {\n\tconst args = process.argv.slice(2);\n\n\tif (\n\t\targs.length === 0 ||\n\t\targs[0] === '--help' ||\n\t\targs[0] === '-h' ||\n\t\targs[0] === 'help'\n\t) {\n\t\tshowUsage();\n\t\treturn;\n\t}\n\n\tconst command = args[0];\n\tconst parsedArgs = parseArgs(args.slice(1));\n\n\t// Initialize the client first\n\tawait initializeCentralServerDrift();\n\n\t// Route to appropriate command\n\tswitch (command) {\n\t\tcase 'createUserAndDeposit':\n\t\t\tawait createUserAndDepositCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'deposit':\n\t\t\tawait depositCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'withdraw':\n\t\t\tawait withdrawCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'settleFunding':\n\t\t\tawait settleFundingCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'settlePnl':\n\t\t\tawait settlePnlCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'openPerpMarketOrder':\n\t\t\tawait openPerpMarketOrderCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'openPerpMarketOrderSwift':\n\t\t\tawait openPerpMarketOrderSwiftCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'openPerpNonMarketOrder':\n\t\t\tawait openPerpNonMarketOrderCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'openPerpNonMarketOrderSwift':\n\t\t\tawait openPerpNonMarketOrderSwiftCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'editOrder':\n\t\t\tawait editOrderCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'cancelOrder':\n\t\t\tawait cancelOrderCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'cancelAllOrders':\n\t\t\tawait cancelAllOrdersCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'swap':\n\t\t\tawait swapCommand(parsedArgs);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tconsole.error(`❌ Unknown command: ${command}`);\n\t\t\tconsole.error('');\n\t\t\tshowUsage();\n\t\t\tprocess.exit(1);\n\t}\n}\n\n// Run CLI if this file is executed directly\nif (require.main === module) {\n\tmain()\n\t\t.then(() => {\n\t\t\tconsole.log('\\n✨ Command executed successfully!');\n\t\t\t// Don't exit immediately for Swift orders (they need time to process)\n\t\t\tsetTimeout(() => process.exit(0), 2000);\n\t\t})\n\t\t.catch((error) => {\n\t\t\tconsole.error('\\n💥 Command failed:', error.message || error);\n\t\t\tprocess.exit(1);\n\t\t});\n}\n\nexport { main, parseArgs, parseAmount, parseDirection, parseSwapMode };\n"]}
|
package/lib/drift/example.js
CHANGED
|
@@ -72,6 +72,8 @@ async function initializeCentralServerDrift() {
|
|
|
72
72
|
centralServerDrift = new CentralServerDrift_1.CentralServerDrift({
|
|
73
73
|
solanaRpcEndpoint: process.env.ENDPOINT,
|
|
74
74
|
driftEnv: 'mainnet-beta', // Change to 'devnet' for devnet testing
|
|
75
|
+
supportedPerpMarkets: [0, 1, 2], // SOL, BTC, ETH
|
|
76
|
+
supportedSpotMarkets: [0, 1], // USDC, SOL
|
|
75
77
|
additionalDriftClientConfig: {
|
|
76
78
|
// Optional: Add additional DriftClient configuration
|
|
77
79
|
txVersion: 0,
|
package/lib/drift/example.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"example.js","sourceRoot":"","sources":["../../src/drift/example.ts"],"names":[],"mappings":"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","sourcesContent":["import * as anchor from '@coral-xyz/anchor';\nimport { PublicKey, VersionedTransaction } from '@solana/web3.js';\nimport { BN, loadKeypair } from '@drift-labs/sdk';\nimport { CentralServerDrift } from './Drift/clients/CentralServerDrift';\nimport * as path from 'path';\n\n// Load environment variables from .env file\nconst dotenv = require('dotenv');\ndotenv.config({ path: path.resolve(__dirname, '.env') });\n\n/**\n * Example usage of CentralServerDrift client\n *\n * This file contains multiple examples demonstrating how to:\n * 1. Set up an Anchor wallet with a private key\n * 2. Initialize a CentralServerDrift instance\n * 3. Create and execute various transaction types\n *\n * Prerequisites:\n * - Create a .env file in the same directory as this example file with:\n * ANCHOR_WALLET=[private key byte array]\n * ENDPOINT=https://your-rpc-endpoint.com\n *\n * Usage:\n * - Run all examples: ts-node example.ts\n * - Run specific example: ts-node example.ts <example-name>\n * Available examples: depositWithdraw, settleFunding, settlePnl\n */\n\n// Shared configuration and setup\nlet centralServerDrift: CentralServerDrift;\nlet wallet: anchor.Wallet;\nconst userAccountPublicKey = new PublicKey('11111111111111111111111111111111'); // enter the publickey for the drift account here\n\nasync function initializeCentralServerDrift(): Promise<void> {\n\tconsole.log('🚀 Initializing CentralServerDrift...\\n');\n\n\t// Validate required environment variables\n\tif (!process.env.ANCHOR_WALLET) {\n\t\tthrow new Error('ANCHOR_WALLET must be set');\n\t}\n\n\tif (!process.env.ENDPOINT) {\n\t\tthrow new Error(\n\t\t\t'ENDPOINT environment variable must be set to your Solana RPC endpoint'\n\t\t);\n\t}\n\n\t// Set up the wallet\n\twallet = new anchor.Wallet(loadKeypair(process.env.ANCHOR_WALLET as string));\n\n\tconsole.log(`✅ Wallet Public Key: ${wallet.publicKey.toString()}`);\n\tconsole.log(`✅ RPC Endpoint: ${process.env.ENDPOINT}\\n`);\n\n\t// Initialize CentralServerDrift\n\tconsole.log('🏗️ Initializing CentralServerDrift...');\n\tcentralServerDrift = new CentralServerDrift({\n\t\tsolanaRpcEndpoint: process.env.ENDPOINT as string,\n\t\tdriftEnv: 'mainnet-beta', // Change to 'devnet' for devnet testing\n\t\tadditionalDriftClientConfig: {\n\t\t\t// Optional: Add additional DriftClient configuration\n\t\t\ttxVersion: 0,\n\t\t\ttxParams: {\n\t\t\t\tcomputeUnits: 200000,\n\t\t\t\tcomputeUnitsPrice: 1000,\n\t\t\t},\n\t\t},\n\t});\n\n\tconsole.log('✅ CentralServerDrift instance created successfully\\n');\n\n\t// Subscribe to market data\n\tconsole.log('📡 Subscribing to market data...');\n\tawait centralServerDrift.subscribe();\n\tconsole.log('✅ Successfully subscribed to market data\\n');\n}\n\n/**\n * Reusable function to handle transaction signing and sending\n */\nasync function executeVersionedTransaction(\n\ttxn: VersionedTransaction,\n\ttransactionType: string\n): Promise<void> {\n\tconsole.log(`✅ ${transactionType} transaction created successfully`);\n\tconsole.log(`📋 Transaction Type: ${txn.constructor.name}`);\n\tconsole.log('\\n📝 Signing Transaction...');\n\t// Sign with the wallet's keypair\n\ttxn.sign([wallet.payer]);\n\n\tconsole.log('✅ Transaction signed successfully');\n\tconsole.log(` Signatures Count After Signing: ${txn.signatures.length}`);\n\tconsole.log(\n\t\t` First Signature Present: ${\n\t\t\ttxn.signatures[0] && txn.signatures[0].length > 0\n\t\t}`\n\t);\n\n\tconsole.log('\\n🚀 Sending transaction to the network...');\n\n\tconst txSig = await centralServerDrift.sendSignedTransaction(txn);\n\n\tconsole.log('✅ Transaction sent successfully!');\n\tconsole.log(`📋 Transaction Signature: ${txSig}`);\n\tconsole.log(`🔍 View on Solscan: https://solscan.io/tx/${txSig}`);\n}\n\n/**\n * Example 1: Deposit and Withdraw transactions\n */\nasync function depositWithdrawExample() {\n\tconsole.log('🚀 Starting Deposit/Withdraw Example...\\n');\n\n\t// Configuration for this example\n\tconst amount = new BN(1000000); // 1 USDC (6 decimals)\n\tconst spotMarketIndex = 0; // USDC market index\n\n\t// Example 1: Create a deposit transaction\n\tconsole.log('--- 📥 Creating Deposit Transaction ---');\n\n\ttry {\n\t\tconsole.log(`💰 Deposit Amount: ${amount.toString()} raw units`);\n\t\tconsole.log(`🏪 Spot Market Index: ${spotMarketIndex}`);\n\n\t\tconst depositTxn = await centralServerDrift.getDepositTxn(\n\t\t\tuserAccountPublicKey,\n\t\t\tamount,\n\t\t\tspotMarketIndex\n\t\t);\n\n\t\tawait executeVersionedTransaction(\n\t\t\tdepositTxn as VersionedTransaction,\n\t\t\t'Deposit'\n\t\t);\n\t} catch (error) {\n\t\tconsole.error('❌ Error during deposit transaction flow:', error);\n\t}\n\n\t// Example 2: Create a withdraw transaction\n\tconsole.log('\\n--- 📤 Creating Withdraw Transaction ---');\n\n\ttry {\n\t\tconsole.log(`💰 Withdraw Amount: ${amount.toString()} raw units`);\n\t\tconsole.log(`🏪 Spot Market Index: ${spotMarketIndex}`);\n\n\t\tconst withdrawTxn = await centralServerDrift.getWithdrawTxn(\n\t\t\tuserAccountPublicKey,\n\t\t\tamount,\n\t\t\tspotMarketIndex,\n\t\t\t{\n\t\t\t\tisBorrow: false, // true = borrow, false = reduce-only withdraw\n\t\t\t\tisMax: false, // true = withdraw maximum available\n\t\t\t}\n\t\t);\n\n\t\tawait executeVersionedTransaction(\n\t\t\twithdrawTxn as VersionedTransaction,\n\t\t\t'Withdraw'\n\t\t);\n\t} catch (error) {\n\t\tconsole.error('❌ Error during withdraw transaction flow:', error);\n\t}\n}\n\n/**\n * Example 2: Settle Funding Payments\n */\nasync function settleFundingExample() {\n\tconsole.log('🚀 Starting Settle Funding Example...\\n');\n\n\tconsole.log('--- 💰 Creating Settle Funding Transaction ---');\n\n\ttry {\n\t\tconsole.log(`👤 User Account: ${userAccountPublicKey.toString()}`);\n\t\tconsole.log('📋 Settling funding payments for all perp positions...');\n\n\t\tconst settleFundingTxn = await centralServerDrift.getSettleFundingTxn(\n\t\t\tuserAccountPublicKey\n\t\t);\n\n\t\tawait executeVersionedTransaction(\n\t\t\tsettleFundingTxn as VersionedTransaction,\n\t\t\t'Settle Funding'\n\t\t);\n\t} catch (error) {\n\t\tconsole.error('❌ Error during settle funding transaction flow:', error);\n\t}\n}\n\n/**\n * Example 3: Settle PnL for Multiple Markets\n */\nasync function settlePnlExample() {\n\tconsole.log('🚀 Starting Settle PnL Example...\\n');\n\n\t// Configuration for this example\n\tconst marketIndexes = [1]; // BTC-PERP\n\n\tconsole.log('--- 📈 Creating Settle PnL Transaction ---');\n\n\ttry {\n\t\tconsole.log(`👤 User Account: ${userAccountPublicKey.toString()}`);\n\t\tconsole.log(`📊 Market Indexes: ${marketIndexes.join(', ')}`);\n\n\t\tconst settlePnlTxn = await centralServerDrift.getSettlePnlTxn(\n\t\t\tuserAccountPublicKey,\n\t\t\tmarketIndexes\n\t\t);\n\n\t\tawait executeVersionedTransaction(\n\t\t\tsettlePnlTxn as VersionedTransaction,\n\t\t\t'Settle PnL'\n\t\t);\n\t} catch (error) {\n\t\tconsole.error('❌ Error during settle PnL transaction flow:', error);\n\t}\n}\n\n/**\n * Run all examples in sequence\n */\nasync function runAllExamples() {\n\tconsole.log('🚀 Running All CentralServerDrift Examples...\\n');\n\n\tawait initializeCentralServerDrift();\n\n\tconsole.log('='.repeat(50));\n\tawait depositWithdrawExample();\n\n\tconsole.log('\\n' + '='.repeat(50));\n\tawait settleFundingExample();\n\n\tconsole.log('\\n' + '='.repeat(50));\n\tawait settlePnlExample();\n}\n\n// Export example functions for use in other files\nexport {\n\tinitializeCentralServerDrift,\n\tdepositWithdrawExample,\n\tsettleFundingExample,\n\tsettlePnlExample,\n\trunAllExamples,\n};\n\n// Legacy export for backward compatibility\nexport const runCentralServerDriftExample = runAllExamples;\n\n// Helper functions for command line handling\nfunction showUsage() {\n\tconsole.log('📋 Usage: ts-node example.ts [example-name]');\n\tconsole.log('\\nAvailable examples:');\n\tconsole.log(\n\t\t' depositWithdraw - Run deposit and withdraw transaction examples'\n\t);\n\tconsole.log(\n\t\t' settleFunding - Run settle funding payment transaction example'\n\t);\n\tconsole.log(' settlePnl - Run settle PnL transaction example');\n\tconsole.log(' all - Run all examples in sequence (default)');\n\tconsole.log('\\nExamples:');\n\tconsole.log(' ts-node example.ts # Run all examples');\n\tconsole.log(\n\t\t' ts-node example.ts depositWithdraw # Run only deposit/withdraw example'\n\t);\n\tconsole.log(\n\t\t' ts-node example.ts settleFunding # Run only settle funding example'\n\t);\n\tconsole.log(\n\t\t' ts-node example.ts settlePnl # Run only settle PnL example'\n\t);\n}\n\nasync function runCliExample(exampleName: string) {\n\tconst availableExamples = {\n\t\tdepositWithdraw: () =>\n\t\t\tinitializeCentralServerDrift().then(() => depositWithdrawExample()),\n\t\tsettleFunding: () =>\n\t\t\tinitializeCentralServerDrift().then(() => settleFundingExample()),\n\t\tsettlePnl: () =>\n\t\t\tinitializeCentralServerDrift().then(() => settlePnlExample()),\n\t\tall: runAllExamples,\n\t};\n\n\tif (\n\t\texampleName === 'help' ||\n\t\texampleName === '--help' ||\n\t\texampleName === '-h'\n\t) {\n\t\tshowUsage();\n\t\treturn;\n\t}\n\n\tconst exampleToRun = exampleName\n\t\t? availableExamples[exampleName]\n\t\t: availableExamples['all'];\n\n\tif (!exampleToRun) {\n\t\tconsole.error(`❌ Unknown example: ${exampleName}`);\n\t\tconsole.error('');\n\t\tshowUsage();\n\t\tprocess.exit(1);\n\t}\n\n\tconsole.log(`🚀 Running example: ${exampleName || 'all'}\\n`);\n\tawait exampleToRun();\n}\n\n// Command line argument handling\nif (require.main === module) {\n\tconst args = process.argv.slice(2);\n\tconst exampleName = args[0];\n\n\trunCliExample(exampleName)\n\t\t.then(() => {\n\t\t\tconsole.log('\\n✨ Example execution completed successfully!');\n\t\t\tprocess.exit(0);\n\t\t})\n\t\t.catch((error) => {\n\t\t\tconsole.error('\\n💥 Example execution failed:', error);\n\t\t\tprocess.exit(1);\n\t\t});\n}\n"]}
|
|
1
|
+
{"version":3,"file":"example.js","sourceRoot":"","sources":["../../src/drift/example.ts"],"names":[],"mappings":"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","sourcesContent":["import * as anchor from '@coral-xyz/anchor';\nimport { PublicKey, VersionedTransaction } from '@solana/web3.js';\nimport { BN, loadKeypair } from '@drift-labs/sdk';\nimport { CentralServerDrift } from './Drift/clients/CentralServerDrift';\nimport * as path from 'path';\n\n// Load environment variables from .env file\nconst dotenv = require('dotenv');\ndotenv.config({ path: path.resolve(__dirname, '.env') });\n\n/**\n * Example usage of CentralServerDrift client\n *\n * This file contains multiple examples demonstrating how to:\n * 1. Set up an Anchor wallet with a private key\n * 2. Initialize a CentralServerDrift instance\n * 3. Create and execute various transaction types\n *\n * Prerequisites:\n * - Create a .env file in the same directory as this example file with:\n * ANCHOR_WALLET=[private key byte array]\n * ENDPOINT=https://your-rpc-endpoint.com\n *\n * Usage:\n * - Run all examples: ts-node example.ts\n * - Run specific example: ts-node example.ts <example-name>\n * Available examples: depositWithdraw, settleFunding, settlePnl\n */\n\n// Shared configuration and setup\nlet centralServerDrift: CentralServerDrift;\nlet wallet: anchor.Wallet;\nconst userAccountPublicKey = new PublicKey('11111111111111111111111111111111'); // enter the publickey for the drift account here\n\nasync function initializeCentralServerDrift(): Promise<void> {\n\tconsole.log('🚀 Initializing CentralServerDrift...\\n');\n\n\t// Validate required environment variables\n\tif (!process.env.ANCHOR_WALLET) {\n\t\tthrow new Error('ANCHOR_WALLET must be set');\n\t}\n\n\tif (!process.env.ENDPOINT) {\n\t\tthrow new Error(\n\t\t\t'ENDPOINT environment variable must be set to your Solana RPC endpoint'\n\t\t);\n\t}\n\n\t// Set up the wallet\n\twallet = new anchor.Wallet(loadKeypair(process.env.ANCHOR_WALLET as string));\n\n\tconsole.log(`✅ Wallet Public Key: ${wallet.publicKey.toString()}`);\n\tconsole.log(`✅ RPC Endpoint: ${process.env.ENDPOINT}\\n`);\n\n\t// Initialize CentralServerDrift\n\tconsole.log('🏗️ Initializing CentralServerDrift...');\n\tcentralServerDrift = new CentralServerDrift({\n\t\tsolanaRpcEndpoint: process.env.ENDPOINT as string,\n\t\tdriftEnv: 'mainnet-beta', // Change to 'devnet' for devnet testing\n\t\tsupportedPerpMarkets: [0, 1, 2], // SOL, BTC, ETH\n\t\tsupportedSpotMarkets: [0, 1], // USDC, SOL\n\t\tadditionalDriftClientConfig: {\n\t\t\t// Optional: Add additional DriftClient configuration\n\t\t\ttxVersion: 0,\n\t\t\ttxParams: {\n\t\t\t\tcomputeUnits: 200000,\n\t\t\t\tcomputeUnitsPrice: 1000,\n\t\t\t},\n\t\t},\n\t});\n\n\tconsole.log('✅ CentralServerDrift instance created successfully\\n');\n\n\t// Subscribe to market data\n\tconsole.log('📡 Subscribing to market data...');\n\tawait centralServerDrift.subscribe();\n\tconsole.log('✅ Successfully subscribed to market data\\n');\n}\n\n/**\n * Reusable function to handle transaction signing and sending\n */\nasync function executeVersionedTransaction(\n\ttxn: VersionedTransaction,\n\ttransactionType: string\n): Promise<void> {\n\tconsole.log(`✅ ${transactionType} transaction created successfully`);\n\tconsole.log(`📋 Transaction Type: ${txn.constructor.name}`);\n\tconsole.log('\\n📝 Signing Transaction...');\n\t// Sign with the wallet's keypair\n\ttxn.sign([wallet.payer]);\n\n\tconsole.log('✅ Transaction signed successfully');\n\tconsole.log(` Signatures Count After Signing: ${txn.signatures.length}`);\n\tconsole.log(\n\t\t` First Signature Present: ${\n\t\t\ttxn.signatures[0] && txn.signatures[0].length > 0\n\t\t}`\n\t);\n\n\tconsole.log('\\n🚀 Sending transaction to the network...');\n\n\tconst txSig = await centralServerDrift.sendSignedTransaction(txn);\n\n\tconsole.log('✅ Transaction sent successfully!');\n\tconsole.log(`📋 Transaction Signature: ${txSig}`);\n\tconsole.log(`🔍 View on Solscan: https://solscan.io/tx/${txSig}`);\n}\n\n/**\n * Example 1: Deposit and Withdraw transactions\n */\nasync function depositWithdrawExample() {\n\tconsole.log('🚀 Starting Deposit/Withdraw Example...\\n');\n\n\t// Configuration for this example\n\tconst amount = new BN(1000000); // 1 USDC (6 decimals)\n\tconst spotMarketIndex = 0; // USDC market index\n\n\t// Example 1: Create a deposit transaction\n\tconsole.log('--- 📥 Creating Deposit Transaction ---');\n\n\ttry {\n\t\tconsole.log(`💰 Deposit Amount: ${amount.toString()} raw units`);\n\t\tconsole.log(`🏪 Spot Market Index: ${spotMarketIndex}`);\n\n\t\tconst depositTxn = await centralServerDrift.getDepositTxn(\n\t\t\tuserAccountPublicKey,\n\t\t\tamount,\n\t\t\tspotMarketIndex\n\t\t);\n\n\t\tawait executeVersionedTransaction(\n\t\t\tdepositTxn as VersionedTransaction,\n\t\t\t'Deposit'\n\t\t);\n\t} catch (error) {\n\t\tconsole.error('❌ Error during deposit transaction flow:', error);\n\t}\n\n\t// Example 2: Create a withdraw transaction\n\tconsole.log('\\n--- 📤 Creating Withdraw Transaction ---');\n\n\ttry {\n\t\tconsole.log(`💰 Withdraw Amount: ${amount.toString()} raw units`);\n\t\tconsole.log(`🏪 Spot Market Index: ${spotMarketIndex}`);\n\n\t\tconst withdrawTxn = await centralServerDrift.getWithdrawTxn(\n\t\t\tuserAccountPublicKey,\n\t\t\tamount,\n\t\t\tspotMarketIndex,\n\t\t\t{\n\t\t\t\tisBorrow: false, // true = borrow, false = reduce-only withdraw\n\t\t\t\tisMax: false, // true = withdraw maximum available\n\t\t\t}\n\t\t);\n\n\t\tawait executeVersionedTransaction(\n\t\t\twithdrawTxn as VersionedTransaction,\n\t\t\t'Withdraw'\n\t\t);\n\t} catch (error) {\n\t\tconsole.error('❌ Error during withdraw transaction flow:', error);\n\t}\n}\n\n/**\n * Example 2: Settle Funding Payments\n */\nasync function settleFundingExample() {\n\tconsole.log('🚀 Starting Settle Funding Example...\\n');\n\n\tconsole.log('--- 💰 Creating Settle Funding Transaction ---');\n\n\ttry {\n\t\tconsole.log(`👤 User Account: ${userAccountPublicKey.toString()}`);\n\t\tconsole.log('📋 Settling funding payments for all perp positions...');\n\n\t\tconst settleFundingTxn = await centralServerDrift.getSettleFundingTxn(\n\t\t\tuserAccountPublicKey\n\t\t);\n\n\t\tawait executeVersionedTransaction(\n\t\t\tsettleFundingTxn as VersionedTransaction,\n\t\t\t'Settle Funding'\n\t\t);\n\t} catch (error) {\n\t\tconsole.error('❌ Error during settle funding transaction flow:', error);\n\t}\n}\n\n/**\n * Example 3: Settle PnL for Multiple Markets\n */\nasync function settlePnlExample() {\n\tconsole.log('🚀 Starting Settle PnL Example...\\n');\n\n\t// Configuration for this example\n\tconst marketIndexes = [1]; // BTC-PERP\n\n\tconsole.log('--- 📈 Creating Settle PnL Transaction ---');\n\n\ttry {\n\t\tconsole.log(`👤 User Account: ${userAccountPublicKey.toString()}`);\n\t\tconsole.log(`📊 Market Indexes: ${marketIndexes.join(', ')}`);\n\n\t\tconst settlePnlTxn = await centralServerDrift.getSettlePnlTxn(\n\t\t\tuserAccountPublicKey,\n\t\t\tmarketIndexes\n\t\t);\n\n\t\tawait executeVersionedTransaction(\n\t\t\tsettlePnlTxn as VersionedTransaction,\n\t\t\t'Settle PnL'\n\t\t);\n\t} catch (error) {\n\t\tconsole.error('❌ Error during settle PnL transaction flow:', error);\n\t}\n}\n\n/**\n * Run all examples in sequence\n */\nasync function runAllExamples() {\n\tconsole.log('🚀 Running All CentralServerDrift Examples...\\n');\n\n\tawait initializeCentralServerDrift();\n\n\tconsole.log('='.repeat(50));\n\tawait depositWithdrawExample();\n\n\tconsole.log('\\n' + '='.repeat(50));\n\tawait settleFundingExample();\n\n\tconsole.log('\\n' + '='.repeat(50));\n\tawait settlePnlExample();\n}\n\n// Export example functions for use in other files\nexport {\n\tinitializeCentralServerDrift,\n\tdepositWithdrawExample,\n\tsettleFundingExample,\n\tsettlePnlExample,\n\trunAllExamples,\n};\n\n// Legacy export for backward compatibility\nexport const runCentralServerDriftExample = runAllExamples;\n\n// Helper functions for command line handling\nfunction showUsage() {\n\tconsole.log('📋 Usage: ts-node example.ts [example-name]');\n\tconsole.log('\\nAvailable examples:');\n\tconsole.log(\n\t\t' depositWithdraw - Run deposit and withdraw transaction examples'\n\t);\n\tconsole.log(\n\t\t' settleFunding - Run settle funding payment transaction example'\n\t);\n\tconsole.log(' settlePnl - Run settle PnL transaction example');\n\tconsole.log(' all - Run all examples in sequence (default)');\n\tconsole.log('\\nExamples:');\n\tconsole.log(' ts-node example.ts # Run all examples');\n\tconsole.log(\n\t\t' ts-node example.ts depositWithdraw # Run only deposit/withdraw example'\n\t);\n\tconsole.log(\n\t\t' ts-node example.ts settleFunding # Run only settle funding example'\n\t);\n\tconsole.log(\n\t\t' ts-node example.ts settlePnl # Run only settle PnL example'\n\t);\n}\n\nasync function runCliExample(exampleName: string) {\n\tconst availableExamples = {\n\t\tdepositWithdraw: () =>\n\t\t\tinitializeCentralServerDrift().then(() => depositWithdrawExample()),\n\t\tsettleFunding: () =>\n\t\t\tinitializeCentralServerDrift().then(() => settleFundingExample()),\n\t\tsettlePnl: () =>\n\t\t\tinitializeCentralServerDrift().then(() => settlePnlExample()),\n\t\tall: runAllExamples,\n\t};\n\n\tif (\n\t\texampleName === 'help' ||\n\t\texampleName === '--help' ||\n\t\texampleName === '-h'\n\t) {\n\t\tshowUsage();\n\t\treturn;\n\t}\n\n\tconst exampleToRun = exampleName\n\t\t? availableExamples[exampleName]\n\t\t: availableExamples['all'];\n\n\tif (!exampleToRun) {\n\t\tconsole.error(`❌ Unknown example: ${exampleName}`);\n\t\tconsole.error('');\n\t\tshowUsage();\n\t\tprocess.exit(1);\n\t}\n\n\tconsole.log(`🚀 Running example: ${exampleName || 'all'}\\n`);\n\tawait exampleToRun();\n}\n\n// Command line argument handling\nif (require.main === module) {\n\tconst args = process.argv.slice(2);\n\tconst exampleName = args[0];\n\n\trunCliExample(exampleName)\n\t\t.then(() => {\n\t\t\tconsole.log('\\n✨ Example execution completed successfully!');\n\t\t\tprocess.exit(0);\n\t\t})\n\t\t.catch((error) => {\n\t\t\tconsole.error('\\n💥 Example execution failed:', error);\n\t\t\tprocess.exit(1);\n\t\t});\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { MarketType } from '@drift-labs/sdk';
|
|
2
2
|
import { UISerializableAccountSnapshot, UISerializableAllTimePnlData } from 'src/serializableTypes';
|
|
3
|
+
import { AccountSnapshot } from './leaderboard';
|
|
3
4
|
export type MarketDetails24H = {
|
|
4
5
|
marketType: MarketType;
|
|
5
6
|
marketIndex: number;
|
|
@@ -31,6 +32,9 @@ export type UISnapshotHistory = {
|
|
|
31
32
|
[HistoryResolution.ALL]: UISerializableAccountSnapshot[];
|
|
32
33
|
dailyAllTimePnls: UISerializableAllTimePnlData[];
|
|
33
34
|
};
|
|
35
|
+
export type SnapshotHistory = {
|
|
36
|
+
[key in HistoryResolution]: AccountSnapshot[];
|
|
37
|
+
};
|
|
34
38
|
export type MarketMakerRewardRecord = {
|
|
35
39
|
ts: number;
|
|
36
40
|
amount: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"historyServer.js","sourceRoot":"","sources":["../../src/types/historyServer.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"historyServer.js","sourceRoot":"","sources":["../../src/types/historyServer.ts"],"names":[],"mappings":";;;AA0BA,IAAY,iBAKX;AALD,WAAY,iBAAiB;IAC5B,gCAAW,CAAA;IACX,kCAAa,CAAA;IACb,oCAAe,CAAA;IACf,gCAAW,CAAA;AACZ,CAAC,EALW,iBAAiB,iCAAjB,iBAAiB,QAK5B","sourcesContent":["import { MarketType } from '@drift-labs/sdk';\nimport {\n\tUISerializableAccountSnapshot,\n\tUISerializableAllTimePnlData,\n} from 'src/serializableTypes';\nimport { AccountSnapshot } from './leaderboard';\n\nexport type MarketDetails24H = {\n\tmarketType: MarketType;\n\tmarketIndex: number;\n\tsymbol: string;\n\tbaseVolume: number;\n\tquoteVolume: number;\n\tbaseVolume30D: number;\n\tquoteVolume30D: number;\n\tprice24hAgo: number;\n\tpricePercentChange: number;\n\tpriceHigh: number;\n\tpriceLow: number;\n\tavgFunding?: number;\n\tavgLongFunding?: number;\n\tavgShortFunding?: number;\n\tmarketCap: number;\n\tdailyVolumeIncreaseZScore: number;\n};\n\nexport enum HistoryResolution {\n\tDAY = 'DAY',\n\tWEEK = 'WEEK',\n\tMONTH = 'MONTH',\n\tALL = 'ALL',\n}\n\nexport type UISnapshotHistory = {\n\t[HistoryResolution.DAY]: UISerializableAccountSnapshot[];\n\t[HistoryResolution.WEEK]: UISerializableAccountSnapshot[];\n\t[HistoryResolution.MONTH]: UISerializableAccountSnapshot[];\n\t[HistoryResolution.ALL]: UISerializableAccountSnapshot[];\n\tdailyAllTimePnls: UISerializableAllTimePnlData[];\n};\n\nexport type SnapshotHistory = {\n\t[key in HistoryResolution]: AccountSnapshot[];\n};\n\nexport type MarketMakerRewardRecord = {\n\tts: number;\n\tamount: number;\n\tsymbol: string;\n};\n"]}
|