@lavarage/sdk 8.0.12 → 8.0.13
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/crossbar.ts +3 -6
- package/dist/index.js +104 -80
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +39 -15
- package/dist/index.mjs.map +1 -1
- package/index.ts +20 -8
- package/package.json +1 -1
- package/switchboard.ts +18 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../index.ts","../idl/userVault.json","../idl/lavarageUSDC.json","../constants.ts","../switchboard.ts","../crossbar.ts","../idl/lavarageSOL.json","../utils.ts","../evm.ts","../abi/borrowerOperations.ts","../abi/tokenHolderAbi.ts","../lending.ts","../idl/lavarageUSDC.ts"],"sourcesContent":["/**\n * @packageDocumentation\n * @module Lavarage SDK\n * \n * The main entry point for the Lavarage SDK, providing functionality for interacting\n * with the Lavarage DeFi protocol on both Solana and EVM chains.\n * \n * @example\n * ```typescript\n * import { getPda, getPositionAccountPDA } from '@lavarage/sdk';\n * import * as lending from '@lavarage/sdk/lending';\n * ```\n */\n\nimport { BN, Program, ProgramAccount } from \"@coral-xyz/anchor\";\nimport { Lavarage as LavarageSOL } from \"./idl/lavarageSOL\";\nimport { Lavarage as LavarageUSDC } from \"./idl/lavarageUSDC\";\nimport { UserVault } from \"./idl/userVault\";\nimport userVaultIDL from \"./idl/userVault.json\";\nimport lavarageUSDCJson from \"./idl/lavarageUSDC.json\";\nimport bs58 from \"bs58\";\nimport {\n AccountInfo,\n AddressLookupTableAccount,\n ComputeBudgetProgram,\n Keypair,\n PublicKey,\n SystemProgram,\n SYSVAR_CLOCK_PUBKEY,\n SYSVAR_INSTRUCTIONS_PUBKEY,\n SYSVAR_SLOT_HASHES_PUBKEY,\n Transaction,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport {\n ASSOCIATED_TOKEN_PROGRAM_ID,\n createAssociatedTokenAccountIdempotentInstruction,\n createAssociatedTokenAccountInstruction,\n getAssociatedTokenAddressSync,\n NATIVE_MINT,\n TOKEN_PROGRAM_ID,\n} from \"@solana/spl-token\";\nimport { queuePubkey, USDC_MINT } from \"./constants\";\nimport { getOracleQuoteForCollateralType, getOracleQuoteForFeedId } from \"./switchboard\";\nimport { u8ArrayToString } from \"./utils\";\nimport { ApiKeys } from \"./crossbar\";\n\nexport * from \"./evm\";\nexport * as lending from \"./lending\";\n\n\ntype OptionalRPCResults = {\n addressLookupTableAccounts?: AccountInfo<Buffer>[];\n latestBlockhash?: string;\n tokenAccountConfirmCreatedAddresses?: PublicKey[];\n quoteMintAccountInfo?: AccountInfo<Buffer>;\n}\nconst REFFERAL_VAULT_PROGRAM_ID = new PublicKey(\"FFe8xWs9iBdWB6vsxg8yBLirZHsbACFNbXqAM4K3fPPB\");\n\n/**\n * Derives a Program Derived Address (PDA) for the given seed(s) and program ID\n * \n * @group Traders\n * @category Utilities\n * \n * @param seed - Single buffer or array of buffers to use as seeds\n * @param programId - The Solana program ID to derive the PDA from\n * @returns The derived public key address\n * \n * @example\n * ```typescript\n * const seed = Buffer.from(\"position\");\n * const pda = getPda(seed, programId);\n * ```\n */\nexport function getPda(seed: Buffer | Buffer[], programId: PublicKey) {\n const seedsBuffer = Array.isArray(seed) ? seed : [seed];\n\n return PublicKey.findProgramAddressSync(seedsBuffer, programId)[0];\n}\n\n/**\n * Generates a Position Account PDA for a specific offer and user\n *\n * @group Traders\n * @category Utilities\n *\n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @param offer - The offer program account\n * @param seed - Additional seed for uniqueness (typically a public key)\n * @returns The Position Account PDA public key\n * \n * @example\n * ```typescript\n * const positionPDA = getPositionAccountPDA(\n * lavarageProgram,\n * offerAccount,\n * userPublicKey\n * );\n * ```\n */\n\nexport function getPositionAccountPDA(\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n offer: ProgramAccount,\n seed: PublicKey\n) {\n return getPda(\n [\n Buffer.from(\"position\"),\n lavarageProgram.provider.publicKey!.toBuffer(),\n offer.publicKey.toBuffer(),\n seed.toBuffer(),\n ],\n lavarageProgram.programId\n );\n}\n/**\n * Gets an associated token account or creates the instruction to create one if it doesn't exist\n * \n * @group Solana\n * @category Token Accounts\n * @internal\n * \n * @param lavarageProgram - The Lavarage program instance\n * @param ownerPublicKey - The owner of the token account\n * @param tokenAddress - The mint address of the token\n * @param tokenProgram - Optional token program ID (defaults to TOKEN_PROGRAM_ID)\n * @param confirmCreatedAddresses - Optional array of addresses to confirm creation of token accounts\n * @returns Object containing the account address and creation instruction\n */\n\nasync function getTokenAccountOrCreateIfNotExists(\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n ownerPublicKey: PublicKey,\n tokenAddress: PublicKey,\n tokenProgram?: PublicKey,\n confirmCreatedAddresses?: PublicKey[]\n) {\n const associatedTokenAddress = getAssociatedTokenAddressSync(\n tokenAddress,\n ownerPublicKey,\n true,\n tokenProgram,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n\n if (confirmCreatedAddresses?.includes(associatedTokenAddress)) {\n return {\n account: {\n address: associatedTokenAddress,\n },\n instruction: undefined,\n };\n }\n\n const instruction = createAssociatedTokenAccountIdempotentInstruction(\n lavarageProgram.provider.publicKey!,\n associatedTokenAddress,\n ownerPublicKey,\n tokenAddress,\n tokenProgram,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n\n return {\n account: {\n address: associatedTokenAddress,\n },\n instruction,\n };\n}\n/**\n * Re-exports all types and interfaces from the Lavarage V1 IDL\n * @group Solana\n */\nexport * from \"./idl/lavarageSOL\";\n/**\n * Namespace containing all types and interfaces from the Lavarage V2 IDL\n * @group Solana\n */\nexport * as IDLV2 from \"./idl/lavarageUSDC\";\n/**\n * Fetches all available lending offers from the Lavarage protocol\n * \n * @group Traders\n * @category Queries\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @returns Promise resolving to an array of all pool/offer accounts\n * \n * @example\n * ```typescript\n * // Fetch all offers\n * const offers = await getOffers(lavarageProgram);\n * \n * // Process each offer\n * offers.forEach(offer => {\n * console.log('Offer:', offer.publicKey.toString());\n * console.log('Data:', offer.account);\n * });\n * ```\n */\n\nexport const getOffers = (\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>\n) => {\n return lavarageProgram.account.pool.all();\n};\n/**\n * Fetches all open positions from the Lavarage protocol\n * \n * This function filters for positions with a specific data structure size (178 bytes)\n * and checks for positions that are currently open.\n *\n * @group Traders\n * @category Queries\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @returns Promise resolving to an array of open position accounts\n * \n * @example\n * ```typescript\n * // Get all open positions\n * const openPositions = await getOpenPositions(lavarageProgram);\n * \n * console.log(`Found ${openPositions.length} open positions`);\n * \n * // Filter positions by user\n * const userPositions = openPositions.filter(pos => \n * pos.account.owner.equals(userPublicKey)\n * );\n * ```\n * \n * @remarks\n * The function query only open positions\n * without fetching closed or liquidated positions.\n */\n\nexport const getOpenPositions = (\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>\n) => {\n return lavarageProgram.account.position.all([\n { dataSize: 178 },\n {\n memcmp: {\n offset: 40,\n bytes: bs58.encode(new Uint8Array(8)),\n },\n },\n ]);\n};\n/**\n * Fetches all closed positions from the Lavarage protocol\n * \n * \n * @group Traders\n * @category Queries\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @returns Promise resolving to an array of all closed position accounts from all three states\n * \n * @example\n * ```typescript\n * // Get all closed positions\n * const closedPositions = await getClosedPositions(lavarageProgram);\n * \n * console.log(`Found ${closedPositions.length} closed positions`);\n * \n * // Filter by specific user\n * const userClosedPositions = closedPositions.filter(pos =>\n * pos.account.owner.equals(userPublicKey)\n * );\n * ```\n * \n */\n\nexport const getClosedPositions = async (\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>\n) => {\n const value = BigInt(9997);\n const valueBuffer = Buffer.alloc(8);\n valueBuffer.writeBigUInt64LE(value);\n const value2 = BigInt(9998);\n const valueBuffer2 = Buffer.alloc(8);\n valueBuffer2.writeBigUInt64LE(value2);\n const value3 = BigInt(9996);\n const valueBuffer3 = Buffer.alloc(8);\n valueBuffer3.writeBigUInt64LE(value3);\n return (\n await lavarageProgram.account.position.all([\n { dataSize: 178 },\n {\n memcmp: {\n offset: 40,\n bytes: bs58.encode(Uint8Array.from(valueBuffer)),\n },\n },\n ])\n )\n .concat(\n await lavarageProgram.account.position.all([\n { dataSize: 178 },\n {\n memcmp: {\n offset: 40,\n bytes: bs58.encode(Uint8Array.from(valueBuffer2)),\n },\n },\n ])\n )\n .concat(\n await lavarageProgram.account.position.all([\n { dataSize: 178 },\n {\n memcmp: {\n offset: 40,\n bytes: bs58.encode(Uint8Array.from(valueBuffer3)),\n },\n },\n ])\n );\n};\n/**\n * Fetches all liquidated positions from the Lavarage protocol\n * \n * Liquidated positions are positions that were forcefully closed due to \n * insufficient collateral or health factor falling below the threshold.\n * \n * @group Traders\n * @category Queries\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @returns Promise resolving to an array of liquidated position accounts\n * \n * @example\n * ```typescript\n * // Get all liquidated positions\n * const liquidatedPositions = await getLiquidatedPositions(lavarageProgram);\n * \n * console.log(`Found ${liquidatedPositions.length} liquidated positions`);\n * \n * // Analyze liquidation data\n * liquidatedPositions.forEach(pos => {\n * console.log('Position:', pos.publicKey.toString());\n * console.log('Liquidated amount:', pos.account.amount);\n * });\n * ```\n * \n * \n * @see {@link getClosedPositions} - For other types of closed positions\n * @see {@link getOpenPositions} - For currently active positions\n */\n\nexport const getLiquidatedPositions = (\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>\n) => {\n const value = BigInt(9999);\n const valueBuffer = Buffer.alloc(8);\n valueBuffer.writeBigUInt64LE(value);\n return lavarageProgram.account.position.all([\n { dataSize: 178 },\n {\n memcmp: {\n offset: 40,\n bytes: bs58.encode(Uint8Array.from(valueBuffer)),\n },\n },\n ]);\n};\n/**\n * Fetches all positions from the Lavarage protocol\n * \n * This function retrieves all position accounts regardless of their state (open, closed, liquidated).\n *\n * @group Traders\n * @category Queries\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @returns Promise resolving to an array of position accounts\n * \n * @example\n * ```typescript\n * // Get all positions\n * const allPositions = await getAllPositions(lavarageProgram);\n * \n * console.log(`Found ${allPositions.length} total positions`);\n * \n * // Filter positions by user\n * const userPositions = allPositions.filter(pos => \n * pos.account.owner.equals(userPublicKey)\n * );\n * ```\n * \n * @remarks\n * Unlike other position query functions, this returns ALL positions without\n * filtering by status. Use more specific functions like `getOpenPositions`,\n * `getClosedPositions`, or `getLiquidatedPositions` if you only need positions\n * with a specific status.\n * \n * @see {@link getOpenPositions} - For only open positions\n * @see {@link getClosedPositions} - For only closed positions\n * @see {@link getLiquidatedPositions} - For only liquidated positions\n */\n\nexport const getAllPositions = (\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>\n) => {\n return lavarageProgram.account.position.all([{ dataSize: 178 }]);\n};\n\nexport const borrowV1 = async (\n lavarageProgram: Program<LavarageSOL>,\n offer: ProgramAccount<{\n nodeWallet: PublicKey;\n interestRate: number;\n collateralType: PublicKey;\n }>,\n marginSOL: BN,\n leverage: number,\n randomSeed: Keypair,\n tokenProgram: PublicKey,\n partnerFeeRecipient?: PublicKey,\n partnerFeeMarkup?: number,\n computeBudgetMicroLamports?: number,\n discountBps?: number,\n referralBps?: number,\n referralVaultProgram?: Program<UserVault>,\n) => {\n let partnerFeeMarkupAsPkey;\n if (partnerFeeMarkup) {\n const feeBuffer = Buffer.alloc(8);\n feeBuffer.writeBigUInt64LE(BigInt(partnerFeeMarkup));\n const feeBuffer32 = Buffer.alloc(32);\n feeBuffer32.set(feeBuffer, 0);\n partnerFeeMarkupAsPkey = new PublicKey(feeBuffer32);\n }\n // assuming all token accounts are created prior\n const positionAccount = getPositionAccountPDA(\n lavarageProgram,\n offer,\n randomSeed.publicKey\n );\n\n const fromTokenAccount = await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n lavarageProgram.provider.publicKey!,\n offer.account.collateralType,\n tokenProgram\n );\n\n const toTokenAccount = await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n positionAccount,\n offer.account.collateralType,\n tokenProgram\n );\n\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const useReferral = discountBps !== undefined && referralBps !== undefined;\n\n // Check if partner fee recipient vault needs to be initialized via referralVaultProgram\n let partnerFeeRecipientCreateIx: TransactionInstruction | undefined;\n let userVaultPda: PublicKey | undefined;\n if (partnerFeeRecipient && referralBps !== undefined && referralVaultProgram) {\n [userVaultPda] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"user_vault\"), new PublicKey(partnerFeeRecipient).toBuffer()],\n referralVaultProgram.programId\n );\n const vaultAccountInfo = await lavarageProgram.provider.connection.getAccountInfo(userVaultPda);\n if (!vaultAccountInfo) {\n // Initialize the vault using referralVaultProgram\n partnerFeeRecipientCreateIx = await referralVaultProgram.methods\n .initializeVault()\n .accountsStrict({\n userVault: userVaultPda,\n user: partnerFeeRecipient!,\n funder: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n }\n }\n\n const tradingOpenBorrowInstruction = useReferral\n ? await lavarageProgram.methods\n .tradingOpenBorrowWithReferral(\n new BN((marginSOL.toNumber() * leverage).toFixed(0)),\n marginSOL,\n new BN(discountBps),\n new BN(referralBps)\n )\n .accountsStrict({\n nodeWallet: offer.account.nodeWallet,\n instructions: SYSVAR_INSTRUCTIONS_PUBKEY,\n tradingPool: offer.publicKey,\n positionAccount,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: randomSeed.publicKey.toBase58(),\n feeReceipient: \"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\",\n positionTokenAccount: toTokenAccount.account!.address,\n collateralTokenProgram: tokenProgram,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n collateralMint: offer.account.collateralType,\n usersTokenAccount: fromTokenAccount.account.address,\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey && userVaultPda\n ? [\n {\n pubkey: userVaultPda,\n isSigner: false,\n isWritable: true,\n }\n ]\n : []\n )\n .instruction()\n : await lavarageProgram.methods\n .tradingOpenBorrow(\n new BN((marginSOL.toNumber() * leverage).toFixed(0)),\n marginSOL\n )\n .accountsStrict({\n nodeWallet: offer.account.nodeWallet,\n instructions: SYSVAR_INSTRUCTIONS_PUBKEY,\n tradingPool: offer.publicKey,\n positionAccount,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: randomSeed.publicKey.toBase58(),\n feeReceipient: \"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\",\n positionTokenAccount: toTokenAccount.account!.address,\n collateralTokenProgram: tokenProgram,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n collateralMint: offer.account.collateralType,\n usersTokenAccount: fromTokenAccount.account.address,\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey\n ? [\n {\n pubkey: partnerFeeRecipient,\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: partnerFeeMarkupAsPkey,\n isSigner: false,\n isWritable: false,\n },\n ]\n : []\n )\n .instruction();\n\n const openAddCollateralInstruction = await lavarageProgram.methods\n .tradingOpenAddCollateral(offer.account.interestRate)\n .accountsStrict({\n tradingPool: offer.publicKey,\n trader: lavarageProgram.provider.publicKey!,\n mint: offer.account.collateralType,\n toTokenAccount: toTokenAccount.account!.address,\n systemProgram: SystemProgram.programId,\n positionAccount,\n randomAccountAsId: randomSeed.publicKey.toBase58(),\n tokenProgram: tokenProgram,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n })\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: computeBudgetMicroLamports ?? 100000,\n });\n\n const allInstructions = [\n // fromTokenAccount.instruction!,\n // toTokenAccount.instruction!,\n partnerFeeRecipientCreateIx,\n tradingOpenBorrowInstruction!,\n openAddCollateralInstruction!,\n computeBudgetMicroLamports ? computeFeeIx : undefined,\n ].filter(Boolean) as TransactionInstruction[];\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: allInstructions,\n }).compileToV0Message();\n\n const tx = new VersionedTransaction(messageV0);\n\n return tx;\n};\n\nexport const borrowV2 = async (\n lavarageProgram: Program<LavarageUSDC>,\n offer: ProgramAccount<{\n nodeWallet: PublicKey;\n interestRate: number;\n collateralType: PublicKey;\n feedId: number[];\n }>,\n marginSOL: BN,\n leverage: number,\n randomSeed: Keypair,\n quoteToken: PublicKey,\n tokenProgram: PublicKey,\n partnerFeeRecipient?: PublicKey,\n partnerFeeMarkup?: number,\n computeBudgetMicroLamports?: number,\n discountBps?: number,\n referralBps?: number,\n referralVaultProgram?: Program<UserVault>,\n) => {\n let partnerFeeMarkupAsPkey;\n if (partnerFeeMarkup) {\n const feeBuffer = Buffer.alloc(8);\n feeBuffer.writeBigUInt64LE(BigInt(partnerFeeMarkup));\n const feeBuffer32 = Buffer.alloc(32);\n feeBuffer32.set(feeBuffer, 0);\n partnerFeeMarkupAsPkey = new PublicKey(feeBuffer32);\n }\n // assuming all token accounts are created prior\n const positionAccount = getPositionAccountPDA(\n lavarageProgram,\n offer,\n randomSeed.publicKey\n );\n\n const quoteMintAccount =\n await lavarageProgram.provider.connection.getAccountInfo(quoteToken);\n const quoteTokenProgram = quoteMintAccount?.owner;\n\n const fromTokenAccount = await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n lavarageProgram.provider.publicKey!,\n offer.account.collateralType,\n tokenProgram\n );\n\n const toTokenAccount = await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n positionAccount,\n offer.account.collateralType,\n tokenProgram\n );\n\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const useReferral = discountBps !== undefined && referralBps !== undefined;\n\n // Check if partner fee recipient vault and token account need to be created\n let partnerFeeRecipientVaultCreateIx: TransactionInstruction | undefined;\n let partnerFeeRecipientTokenAccountCreateIx: TransactionInstruction | undefined;\n let userVaultPda: PublicKey | undefined;\n \n if (partnerFeeRecipient && partnerFeeMarkupAsPkey && referralVaultProgram) {\n // Derive the userVault PDA\n [userVaultPda] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"user_vault\"), new PublicKey(partnerFeeRecipient).toBuffer()],\n referralVaultProgram.programId\n );\n \n // Get the vault's associated token account\n const vaultTokenAccount = getAssociatedTokenAddressSync(\n quoteToken,\n userVaultPda,\n true, // allowOwnerOffCurve for PDA\n quoteTokenProgram\n );\n \n // Check both accounts at the same time\n const [vaultAccountInfo, vaultTokenAccountInfo] = await lavarageProgram.provider.connection.getMultipleAccountsInfo([\n userVaultPda,\n vaultTokenAccount\n ]);\n \n // Create vault if it doesn't exist\n if (!vaultAccountInfo) {\n partnerFeeRecipientVaultCreateIx = await referralVaultProgram.methods\n .initializeVault()\n .accountsStrict({\n userVault: userVaultPda,\n user: partnerFeeRecipient!,\n funder: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n }\n \n // Create token account if it doesn't exist\n if (!vaultTokenAccountInfo) {\n partnerFeeRecipientTokenAccountCreateIx = createAssociatedTokenAccountIdempotentInstruction(\n lavarageProgram.provider.publicKey!,\n vaultTokenAccount,\n userVaultPda,\n quoteToken,\n quoteTokenProgram,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n }\n }\n\n const tradingOpenBorrowInstruction = useReferral\n ? await lavarageProgram.methods\n .tradingOpenBorrow(\n new BN((marginSOL.toNumber() * leverage).toFixed(0)),\n marginSOL,\n new BN(discountBps),\n new BN(referralBps)\n )\n .accountsStrict({\n nodeWallet: offer.account.nodeWallet,\n instructions: SYSVAR_INSTRUCTIONS_PUBKEY,\n tradingPool: offer.publicKey,\n positionAccount,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: randomSeed.publicKey.toBase58(),\n feeTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\"),\n true,\n quoteTokenProgram\n ),\n toTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n lavarageProgram.provider.publicKey!,\n true,\n quoteTokenProgram\n ),\n tokenProgram: quoteTokenProgram!,\n fromTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n offer.account.nodeWallet,\n true,\n quoteTokenProgram\n ),\n positionTokenAccount: toTokenAccount.account!.address,\n collateralTokenProgram: tokenProgram,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n collateralMint: offer.account.collateralType,\n quoteMint: quoteToken,\n feeRecipient: new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\"),\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey && userVaultPda\n ? [\n {\n pubkey: getAssociatedTokenAddressSync(\n quoteToken,\n userVaultPda,\n true, // allowOwnerOffCurve for PDA\n quoteTokenProgram\n ),\n isSigner: false,\n isWritable: true,\n }\n ]\n : []\n )\n .instruction()\n : await lavarageProgram.methods\n .tradingOpenBorrow(\n new BN((marginSOL.toNumber() * leverage).toFixed(0)),\n marginSOL,\n null,\n null,\n )\n .accountsStrict({\n nodeWallet: offer.account.nodeWallet,\n instructions: SYSVAR_INSTRUCTIONS_PUBKEY,\n tradingPool: offer.publicKey,\n positionAccount,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: randomSeed.publicKey.toBase58(),\n feeTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\"),\n true,\n quoteTokenProgram\n ),\n toTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n lavarageProgram.provider.publicKey!,\n true,\n quoteTokenProgram\n ),\n tokenProgram: quoteTokenProgram!,\n fromTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n offer.account.nodeWallet,\n true,\n quoteTokenProgram\n ),\n positionTokenAccount: toTokenAccount.account!.address,\n collateralTokenProgram: tokenProgram,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n collateralMint: offer.account.collateralType,\n quoteMint: quoteToken,\n feeRecipient: new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\"),\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey && userVaultPda\n ? [\n {\n pubkey: getAssociatedTokenAddressSync(\n quoteToken,\n userVaultPda,\n true, // allowOwnerOffCurve for PDA\n quoteTokenProgram\n ),\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: partnerFeeMarkupAsPkey,\n isSigner: false,\n isWritable: false,\n },\n ]\n : []\n )\n .instruction();\n\n const baseOracleQuote = getOracleQuoteForFeedId(u8ArrayToString(offer.account.feedId));\n\n const quoteOracleQuote = getOracleQuoteForCollateralType(USDC_MINT);\n\n const openAddCollateralInstruction = await lavarageProgram.methods\n .tradingOpenAddCollateral(offer.account.interestRate < 255 ? offer.account.interestRate + 1 : 255)\n .accountsStrict({\n tradingPool: offer.publicKey,\n trader: lavarageProgram.provider.publicKey!,\n mint: offer.account.collateralType,\n toTokenAccount: toTokenAccount.account!.address,\n systemProgram: SystemProgram.programId,\n positionAccount,\n randomAccountAsId: randomSeed.publicKey.toBase58(),\n tokenProgram: tokenProgram,\n baseOracleQuote,\n quoteOracleQuote,\n clockSysvar: SYSVAR_CLOCK_PUBKEY,\n instructionsSysvar: SYSVAR_INSTRUCTIONS_PUBKEY,\n oracleQueue: queuePubkey,\n slotHashesSysvar: SYSVAR_SLOT_HASHES_PUBKEY,\n })\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: computeBudgetMicroLamports ?? 100000,\n });\n\n const allInstructions = [\n fromTokenAccount.instruction!,\n partnerFeeRecipientVaultCreateIx,\n partnerFeeRecipientTokenAccountCreateIx,\n tradingOpenBorrowInstruction!,\n openAddCollateralInstruction!,\n computeBudgetMicroLamports ? computeFeeIx : undefined,\n ].filter(Boolean) as TransactionInstruction[];\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: allInstructions,\n }).compileToV0Message();\n\n const tx = new VersionedTransaction(messageV0);\n\n return tx;\n};\n\n/**\n * Opens a leveraged trading position on Lavarage V1\n * \n * This function executes a complete leveraged trade by:\n * 1. Borrowing funds from the lending pool based on leverage\n * 2. Swapping tokens through Jupiter DEX\n * 3. Depositing the swapped tokens as collateral\n * \n * @group Traders\n * @category Trading\n * \n * @param lavarageProgram - The Lavarage V1 program instance\n * @param offer - The lending offer containing terms (interest rate, collateral type, node wallet)\n * @param jupInstruction - Jupiter swap instructions including setup and swap details\n * @param marginSOL - The user's margin amount in SOL (as BN)\n * @param leverage - The leverage multiplier (e.g., 2 for 2x leverage)\n * @param randomSeed - A keypair used to generate unique position account address\n * @param tokenProgram - The SPL token program ID\n * @param partnerFeeRecipient - Optional wallet to receive partner fees\n * @param partnerFeeMarkup - Optional partner fee amount in basis points\n * @param computeBudgetMicroLamports - Optional compute budget for priority fees\n * @param platformFeeRecipient - Optional wallet to receive platform fees (jup, okx)\n * @param splitTransactions - Optional boolean to split the transaction into multiple transactions (jito bundle)\n * @param discountBps - Optional discount basis points for the referral program\n * @param referralBps - Optional referral basis points for the referral program\n * @param optionalRPCResults - Optional RPC results to use for the transaction (speeds up the transaction building)\n * \n * @returns A versioned transaction ready to be signed and sent\n * \n * @example\n * ```typescript\n * // Open a 2x leveraged position with 1 SOL margin\n * const marginSOL = new BN(1_000_000_000); // 1 SOL in lamports\n * const leverage = 2;\n * const randomSeed = Keypair.generate();\n * \n * const tx = await openTradeV1(\n * lavarageProgram,\n * offerAccount,\n * jupiterInstructions,\n * marginSOL,\n * leverage,\n * randomSeed,\n * TOKEN_PROGRAM_ID\n * );\n * \n * // Sign and send transaction\n * const signature = await sendAndConfirmTransaction(connection, tx, [wallet, randomSeed]);\n * ```\n * \n * @remarks\n * - The function creates token accounts if they don't exist\n * \n * @throws Will throw if token accounts cannot be created or if Jupiter instructions are invalid\n */\n\nexport const openTradeV1 = async (\n lavarageProgram: Program<LavarageSOL>,\n offer: ProgramAccount<{\n nodeWallet: PublicKey;\n interestRate: number;\n collateralType: PublicKey;\n }>,\n jupInstruction: {\n instructions: {\n setupInstructions: Record<string, unknown>[];\n swapInstruction: Record<string, unknown>;\n addressLookupTableAddresses: string[];\n };\n },\n marginSOL: BN,\n leverage: number,\n randomSeed: Keypair,\n tokenProgram: PublicKey,\n partnerFeeRecipient?: PublicKey,\n partnerFeeMarkup?: number,\n computeBudgetMicroLamports?: number,\n platformFeeRecipient?: PublicKey,\n splitTransactions?: boolean,\n discountBps?: number,\n referralBps?: number,\n optionalRPCResults?: OptionalRPCResults,\n) => {\n let partnerFeeMarkupAsPkey;\n const referralVaultProgram = new Program<UserVault>(userVaultIDL, lavarageProgram.provider);\n if (partnerFeeMarkup) {\n const feeBuffer = Buffer.alloc(8);\n feeBuffer.writeBigUInt64LE(BigInt(partnerFeeMarkup));\n const feeBuffer32 = Buffer.alloc(32);\n feeBuffer32.set(feeBuffer, 0);\n partnerFeeMarkupAsPkey = new PublicKey(feeBuffer32);\n }\n // assuming all token accounts are created prior\n const positionAccount = getPositionAccountPDA(\n lavarageProgram,\n offer,\n randomSeed.publicKey\n );\n\n const fromTokenAccount = await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n lavarageProgram.provider.publicKey!,\n offer.account.collateralType,\n tokenProgram,\n optionalRPCResults?.tokenAccountConfirmCreatedAddresses\n );\n\n const toTokenAccount = await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n positionAccount,\n offer.account.collateralType,\n tokenProgram,\n optionalRPCResults?.tokenAccountConfirmCreatedAddresses\n );\n\n const platformFeeRecipientAccount = platformFeeRecipient ? await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n platformFeeRecipient,\n offer.account.collateralType,\n tokenProgram,\n optionalRPCResults?.tokenAccountConfirmCreatedAddresses\n ) : undefined;\n\n const tokenAccountCreationTx = new Transaction();\n\n if (fromTokenAccount.instruction) {\n tokenAccountCreationTx.add(fromTokenAccount.instruction);\n }\n\n if (toTokenAccount.instruction) {\n tokenAccountCreationTx.add(toTokenAccount.instruction);\n }\n\n if (platformFeeRecipientAccount?.instruction) {\n tokenAccountCreationTx.add(platformFeeRecipientAccount.instruction);\n }\n\n const instructionsJup = jupInstruction.instructions;\n\n const {\n setupInstructions,\n swapInstruction: swapInstructionPayload,\n addressLookupTableAddresses,\n } = instructionsJup;\n\n const deserializeInstruction = (instruction: any) => {\n return new TransactionInstruction({\n programId: new PublicKey(instruction.programId),\n\n keys: instruction.accounts.map((key: any) => ({\n pubkey: new PublicKey(key.pubkey),\n isSigner: key.isSigner,\n isWritable: key.isWritable,\n })),\n data: Buffer.from(instruction.data, \"base64\"),\n });\n };\n\n const getAddressLookupTableAccounts = async (\n keys: string[]\n ): Promise<AddressLookupTableAccount[]> => {\n const addressLookupTableAccountInfos = optionalRPCResults?.addressLookupTableAccounts ??\n await lavarageProgram.provider.connection.getMultipleAccountsInfo(\n keys.map((key) => new PublicKey(key))\n );\n\n return addressLookupTableAccountInfos.reduce((acc, accountInfo, index) => {\n const addressLookupTableAddress = keys[index];\n if (accountInfo) {\n const addressLookupTableAccount = new AddressLookupTableAccount({\n key: new PublicKey(addressLookupTableAddress),\n state: AddressLookupTableAccount.deserialize(\n Uint8Array.from(accountInfo.data)\n ),\n });\n acc.push(addressLookupTableAccount);\n }\n\n return acc;\n }, new Array<AddressLookupTableAccount>());\n };\n\n const addressLookupTableAccounts: AddressLookupTableAccount[] = [];\n\n addressLookupTableAccounts.push(\n ...(await getAddressLookupTableAccounts([\n \"5LEAB3owNUSKvECm7vkr58tDtQpzbngQ2NYpc7qmRFdi\",\n ...addressLookupTableAddresses,\n ]))\n );\n\n const blockhash =\n optionalRPCResults?.latestBlockhash ?? (await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\")).blockhash;\n\n const useReferral = discountBps !== undefined && referralBps !== undefined;\n\n // Check if partner fee recipient vault needs to be initialized via referralVaultProgram\n let partnerFeeRecipientCreateIx: TransactionInstruction | undefined;\n let userVaultPda: PublicKey | undefined;\n if (partnerFeeRecipient && referralBps !== undefined && referralVaultProgram) {\n [userVaultPda] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"user_vault\"), new PublicKey(partnerFeeRecipient).toBuffer()],\n referralVaultProgram.programId\n );\n const vaultAccountInfo = await lavarageProgram.provider.connection.getAccountInfo(userVaultPda);\n if (!vaultAccountInfo) {\n // Initialize the vault using referralVaultProgram\n partnerFeeRecipientCreateIx = await referralVaultProgram.methods\n .initializeVault()\n .accountsStrict({\n userVault: userVaultPda,\n user: partnerFeeRecipient!,\n funder: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n }\n }\n\n const tradingOpenBorrowInstruction = useReferral\n ? await lavarageProgram.methods\n .tradingOpenBorrowWithReferral(\n new BN((marginSOL.toNumber() * leverage).toFixed(0)),\n marginSOL,\n new BN(discountBps),\n new BN(referralBps)\n )\n .accountsStrict({\n nodeWallet: offer.account.nodeWallet,\n instructions: SYSVAR_INSTRUCTIONS_PUBKEY,\n tradingPool: offer.publicKey,\n positionAccount,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: randomSeed.publicKey.toBase58(),\n feeReceipient: \"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\",\n positionTokenAccount: toTokenAccount.account!.address,\n collateralTokenProgram: tokenProgram,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n collateralMint: offer.account.collateralType,\n usersTokenAccount: fromTokenAccount.account.address,\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey && userVaultPda\n ? [\n {\n pubkey: userVaultPda,\n isSigner: false,\n isWritable: true,\n }\n ]\n : []\n )\n .instruction()\n : await lavarageProgram.methods\n .tradingOpenBorrow(\n new BN((marginSOL.toNumber() * leverage).toFixed(0)),\n marginSOL\n )\n .accountsStrict({\n nodeWallet: offer.account.nodeWallet,\n instructions: SYSVAR_INSTRUCTIONS_PUBKEY,\n tradingPool: offer.publicKey,\n positionAccount,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: randomSeed.publicKey.toBase58(),\n feeReceipient: \"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\",\n positionTokenAccount: toTokenAccount.account!.address,\n collateralTokenProgram: tokenProgram,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n collateralMint: offer.account.collateralType,\n usersTokenAccount: fromTokenAccount.account.address,\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey\n ? [\n {\n pubkey: partnerFeeRecipient,\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: partnerFeeMarkupAsPkey,\n isSigner: false,\n isWritable: false,\n },\n ]\n : []\n )\n .instruction();\n\n const openAddCollateralInstruction = await lavarageProgram.methods\n .tradingOpenAddCollateral(offer.account.interestRate)\n .accountsStrict({\n tradingPool: offer.publicKey,\n trader: lavarageProgram.provider.publicKey!,\n mint: offer.account.collateralType,\n toTokenAccount: toTokenAccount.account!.address,\n systemProgram: SystemProgram.programId,\n positionAccount,\n randomAccountAsId: randomSeed.publicKey.toBase58(),\n tokenProgram: tokenProgram,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n })\n .instruction();\n\n const jupiterIxs = [\n ...setupInstructions.map(deserializeInstruction),\n deserializeInstruction(swapInstructionPayload),\n ];\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: computeBudgetMicroLamports ?? 100000,\n });\n\n if (splitTransactions) {\n const setUpInstructions = [\n fromTokenAccount.instruction!,\n toTokenAccount.instruction!,\n partnerFeeRecipientCreateIx,\n ...setupInstructions.map(deserializeInstruction),\n ].filter(Boolean) as TransactionInstruction[];\n\n const allInstructions = [\n tradingOpenBorrowInstruction!,\n deserializeInstruction(swapInstructionPayload), ,\n openAddCollateralInstruction!,\n computeBudgetMicroLamports ? computeFeeIx : undefined,\n ].filter(Boolean) as TransactionInstruction[];\n\n const messageV01 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: setUpInstructions,\n }).compileToV0Message(addressLookupTableAccounts);\n\n const tx2 = new VersionedTransaction(messageV01);\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: allInstructions,\n }).compileToV0Message(addressLookupTableAccounts);\n\n const tx = new VersionedTransaction(messageV0);\n\n return [tx2, tx];\n }\n\n const allInstructions = [\n // fromTokenAccount.instruction!,\n // toTokenAccount.instruction!,\n partnerFeeRecipientCreateIx,\n tradingOpenBorrowInstruction!,\n ...jupiterIxs,\n openAddCollateralInstruction!,\n computeBudgetMicroLamports ? computeFeeIx : undefined,\n ].filter(Boolean) as TransactionInstruction[];\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: allInstructions,\n }).compileToV0Message(addressLookupTableAccounts);\n\n const tx = new VersionedTransaction(messageV0);\n\n return tx;\n};\n\n/**\n * Opens a leveraged trading position on Lavarage V2\n * \n * This function executes a complete leveraged trade similar to V1, but with \n * enhanced support for multiple quote tokens (not limited to SOL).\n * The process includes:\n * 1. Borrowing funds from the lending pool based on leverage\n * 2. Swapping tokens through Jupiter DEX\n * 3. Depositing the swapped tokens as collateral\n * \n * @group Traders\n * @category Trading\n * \n * @param lavarageProgram - The Lavarage V2 program instance\n * @param offer - The lending offer containing terms (interest rate, collateral type, node wallet)\n * @param jupInstruction - Jupiter swap instructions including setup and swap details\n * @param marginSOL - The user's margin amount in SOL (as BN)\n * @param leverage - The leverage multiplier (e.g., 2 for 2x leverage)\n * @param randomSeed - A keypair used to generate unique position account address\n * @param quoteToken - The quote token mint address (e.g., USDC, USDT, or SOL)\n * @param tokenProgram - The SPL token program ID for the collateral token\n * @param partnerFeeRecipient - Optional wallet to receive partner fees\n * @param partnerFeeMarkup - Optional partner fee amount in basis points\n * @param computeBudgetMicroLamports - Optional compute budget for priority fees\n * @param platformFeeRecipient - Optional wallet to receive platform fees (jup, okx)\n * @param splitTransactions - Optional boolean to split the transaction into multiple transactions (jito bundle)\n * @param discountBps - Optional discount basis points for the referral program\n * @param referralBps - Optional referral basis points for the referral program\n * @param optionalRPCResults - Optional RPC results to use for the transaction (speeds up the transaction building)\n * \n * @returns A versioned transaction ready to be signed and sent\n * \n * @example\n * ```typescript\n * // Open a 3x leveraged position with USDC as quote token\n * const marginSOL = new BN(1_000_000_000); // 1 SOL equivalent\n * const leverage = 3;\n * const randomSeed = Keypair.generate();\n * const usdcMint = new PublicKey(\"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\");\n * \n * const tx = await openTradeV2(\n * lavarageProgram,\n * offerAccount,\n * jupiterInstructions,\n * marginSOL,\n * leverage,\n * randomSeed,\n * usdcMint, // Quote token\n * TOKEN_PROGRAM_ID\n * );\n * \n * // Sign and send transaction\n * const signature = await sendAndConfirmTransaction(connection, tx, [wallet, randomSeed]);\n * ```\n * \n * @remarks\n * - V2 supports multiple quote tokens while V1 only supports SOL\n * \n * @see {@link openTradeV1} - The V1 version limited to SOL as quote token\n */\n\nexport const openTradeV2 = async (\n lavarageProgram: Program<LavarageUSDC>,\n offer: ProgramAccount<{\n nodeWallet: PublicKey;\n interestRate: number;\n collateralType: PublicKey;\n feedId: number[];\n }>,\n jupInstruction: {\n instructions: {\n setupInstructions: Record<string, unknown>[];\n swapInstruction: Record<string, unknown>;\n addressLookupTableAddresses: string[];\n };\n },\n marginSOL: BN,\n leverage: number,\n randomSeed: Keypair,\n quoteToken: PublicKey,\n tokenProgram: PublicKey,\n partnerFeeRecipient?: PublicKey,\n partnerFeeMarkup?: number,\n computeBudgetMicroLamports?: number,\n platformFeeRecipient?: PublicKey,\n splitTransactions?: boolean,\n discountBps?: number,\n referralBps?: number,\n optionalRPCResults?: OptionalRPCResults,\n) => {\n let partnerFeeMarkupAsPkey;\n const referralVaultProgram = new Program<UserVault>(userVaultIDL, lavarageProgram.provider);\n const program = new Program<LavarageUSDC>(lavarageUSDCJson, lavarageProgram.provider);\n\n if (partnerFeeMarkup) {\n const feeBuffer = Buffer.alloc(8);\n feeBuffer.writeBigUInt64LE(BigInt(partnerFeeMarkup));\n const feeBuffer32 = Buffer.alloc(32);\n feeBuffer32.set(feeBuffer, 0);\n partnerFeeMarkupAsPkey = new PublicKey(feeBuffer32);\n }\n // assuming all token accounts are created prior\n const positionAccount = getPositionAccountPDA(\n program,\n offer,\n randomSeed.publicKey\n );\n\n const quoteMintAccount = optionalRPCResults?.quoteMintAccountInfo ??\n await program.provider.connection.getAccountInfo(quoteToken);\n const quoteTokenProgram = quoteMintAccount?.owner;\n\n const fromTokenAccount = await getTokenAccountOrCreateIfNotExists(\n program,\n program.provider.publicKey!,\n offer.account.collateralType,\n tokenProgram,\n optionalRPCResults?.tokenAccountConfirmCreatedAddresses\n );\n\n const toTokenAccount = await getTokenAccountOrCreateIfNotExists(\n program,\n positionAccount,\n offer.account.collateralType,\n tokenProgram,\n optionalRPCResults?.tokenAccountConfirmCreatedAddresses\n );\n\n const platformFeeRecipientAccount = platformFeeRecipient ? await getTokenAccountOrCreateIfNotExists(\n program,\n platformFeeRecipient,\n offer.account.collateralType,\n tokenProgram,\n optionalRPCResults?.tokenAccountConfirmCreatedAddresses\n ) : undefined;\n\n const tokenAccountCreationTx = new Transaction();\n\n if (fromTokenAccount.instruction) {\n tokenAccountCreationTx.add(fromTokenAccount.instruction);\n }\n\n if (toTokenAccount.instruction) {\n tokenAccountCreationTx.add(toTokenAccount.instruction);\n }\n\n if (platformFeeRecipientAccount?.instruction) {\n tokenAccountCreationTx.add(platformFeeRecipientAccount.instruction);\n }\n\n const instructionsJup = jupInstruction.instructions;\n\n const {\n setupInstructions,\n swapInstruction: swapInstructionPayload,\n addressLookupTableAddresses,\n } = instructionsJup;\n\n const deserializeInstruction = (instruction: any) => {\n return new TransactionInstruction({\n programId: new PublicKey(instruction.programId),\n\n keys: instruction.accounts.map((key: any) => ({\n pubkey: new PublicKey(key.pubkey),\n isSigner: key.isSigner,\n isWritable: key.isWritable,\n })),\n data: Buffer.from(instruction.data, \"base64\"),\n });\n };\n\n const getAddressLookupTableAccounts = async (\n keys: string[]\n ): Promise<AddressLookupTableAccount[]> => {\n const addressLookupTableAccountInfos =\n optionalRPCResults?.addressLookupTableAccounts ?? await program.provider.connection.getMultipleAccountsInfo(\n keys.map((key) => new PublicKey(key))\n );\n\n return addressLookupTableAccountInfos.reduce((acc, accountInfo, index) => {\n const addressLookupTableAddress = keys[index];\n if (accountInfo) {\n const addressLookupTableAccount = new AddressLookupTableAccount({\n key: new PublicKey(addressLookupTableAddress),\n state: AddressLookupTableAccount.deserialize(\n Uint8Array.from(accountInfo.data)\n ),\n });\n acc.push(addressLookupTableAccount);\n }\n\n return acc;\n }, new Array<AddressLookupTableAccount>());\n };\n\n const addressLookupTableAccounts: AddressLookupTableAccount[] = [];\n\n addressLookupTableAccounts.push(\n ...(await getAddressLookupTableAccounts([\n ...addressLookupTableAddresses,\n getQuoteCurrencySpecificAddressLookupTable(quoteToken.toBase58()),\n \"5LEAB3owNUSKvECm7vkr58tDtQpzbngQ2NYpc7qmRFdi\",\n ]))\n );\n\n const { blockhash } =\n await program.provider.connection.getLatestBlockhash(\"finalized\");\n\n const useReferral = discountBps !== undefined && referralBps !== undefined;\n\n // Check if partner fee recipient vault and token account need to be created\n let partnerFeeRecipientVaultCreateIx: TransactionInstruction | undefined;\n let partnerFeeRecipientTokenAccountCreateIx: TransactionInstruction | undefined;\n let userVaultPda: PublicKey | undefined;\n\n const partnerDirectAta = partnerFeeRecipient ? getAssociatedTokenAddressSync(\n quoteToken,\n partnerFeeRecipient,\n true,\n quoteTokenProgram\n ) : undefined;\n \n if (partnerFeeRecipient && partnerFeeMarkupAsPkey && referralVaultProgram) {\n // Derive the userVault PDA\n [userVaultPda] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"user_vault\"), new PublicKey(partnerFeeRecipient).toBuffer()],\n referralVaultProgram.programId\n );\n \n // Get the vault's associated token account\n const vaultTokenAccount = getAssociatedTokenAddressSync(\n quoteToken,\n userVaultPda,\n true, // allowOwnerOffCurve for PDA\n quoteTokenProgram\n );\n \n // Check both accounts at the same time\n const [vaultAccountInfo, vaultTokenAccountInfo] = await program.provider.connection.getMultipleAccountsInfo([\n userVaultPda,\n vaultTokenAccount\n ]);\n \n // Create vault if it doesn't exist\n if (!vaultAccountInfo) {\n partnerFeeRecipientVaultCreateIx = await referralVaultProgram.methods\n .initializeVault()\n .accountsStrict({\n userVault: userVaultPda,\n user: partnerFeeRecipient!,\n funder: program.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n }\n \n // Create token account if it doesn't exist\n if (!vaultTokenAccountInfo) {\n partnerFeeRecipientTokenAccountCreateIx = createAssociatedTokenAccountIdempotentInstruction(\n program.provider.publicKey!,\n vaultTokenAccount,\n userVaultPda,\n quoteToken,\n quoteTokenProgram,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n }\n } else if (partnerFeeRecipient && partnerDirectAta) {\n const [partnerDirectAtaInfo] = await program.provider.connection.getMultipleAccountsInfo([\n partnerDirectAta\n ]);\n if (!partnerDirectAtaInfo) {\n partnerFeeRecipientTokenAccountCreateIx = createAssociatedTokenAccountIdempotentInstruction(\n program.provider.publicKey!,\n partnerDirectAta,\n partnerFeeRecipient!,\n quoteToken,\n quoteTokenProgram,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n }\n }\n\n const tradingOpenBorrowInstruction = useReferral\n ? await program.methods\n .tradingOpenBorrow(\n new BN((marginSOL.toNumber() * leverage).toFixed(0)),\n marginSOL,\n new BN(discountBps),\n new BN(referralBps)\n )\n .accountsStrict({\n nodeWallet: offer.account.nodeWallet,\n instructions: SYSVAR_INSTRUCTIONS_PUBKEY,\n tradingPool: offer.publicKey,\n positionAccount,\n trader: program.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: randomSeed.publicKey.toBase58(),\n feeTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\"),\n true,\n quoteTokenProgram\n ),\n toTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n program.provider.publicKey!,\n true,\n quoteTokenProgram\n ),\n tokenProgram: quoteTokenProgram!,\n fromTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n offer.account.nodeWallet,\n true,\n quoteTokenProgram\n ),\n positionTokenAccount: toTokenAccount.account!.address,\n collateralTokenProgram: tokenProgram,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n collateralMint: offer.account.collateralType,\n quoteMint: quoteToken,\n feeRecipient: new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\"),\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey && userVaultPda\n ? [\n {\n pubkey: getAssociatedTokenAddressSync(\n quoteToken,\n userVaultPda,\n true, // allowOwnerOffCurve for PDA\n quoteTokenProgram\n ),\n isSigner: false,\n isWritable: true,\n }\n ]\n : []\n )\n .instruction()\n : await program.methods\n .tradingOpenBorrow(\n new BN((marginSOL.toNumber() * leverage).toFixed(0)),\n marginSOL,\n null,\n null,\n )\n .accountsStrict({\n nodeWallet: offer.account.nodeWallet,\n instructions: SYSVAR_INSTRUCTIONS_PUBKEY,\n tradingPool: offer.publicKey,\n positionAccount,\n trader: program.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: randomSeed.publicKey.toBase58(),\n feeTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\"),\n true,\n quoteTokenProgram\n ),\n toTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n program.provider.publicKey!,\n true,\n quoteTokenProgram\n ),\n tokenProgram: quoteTokenProgram!,\n fromTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n offer.account.nodeWallet,\n true,\n quoteTokenProgram\n ),\n positionTokenAccount: toTokenAccount.account!.address,\n collateralTokenProgram: tokenProgram,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n collateralMint: offer.account.collateralType,\n quoteMint: quoteToken,\n feeRecipient: new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\"),\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey && partnerDirectAta\n ? [\n {\n pubkey: partnerDirectAta,\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: partnerFeeMarkupAsPkey,\n isSigner: false,\n isWritable: false,\n },\n ]\n : []\n )\n .instruction();\n\n const baseOracleQuote = getOracleQuoteForFeedId(u8ArrayToString(offer.account.feedId));\n\n const quoteOracleQuote = getOracleQuoteForCollateralType(USDC_MINT);\n\n const openAddCollateralInstruction = await program.methods\n .tradingOpenAddCollateral(offer.account.interestRate < 255 ? offer.account.interestRate + 1 : 255)\n .accountsStrict({\n tradingPool: offer.publicKey,\n trader: program.provider.publicKey!,\n mint: offer.account.collateralType,\n toTokenAccount: toTokenAccount.account!.address,\n systemProgram: SystemProgram.programId,\n positionAccount,\n randomAccountAsId: randomSeed.publicKey.toBase58(),\n tokenProgram: tokenProgram,\n baseOracleQuote,\n quoteOracleQuote,\n clockSysvar: SYSVAR_CLOCK_PUBKEY,\n slotHashesSysvar: SYSVAR_SLOT_HASHES_PUBKEY,\n instructionsSysvar: SYSVAR_INSTRUCTIONS_PUBKEY,\n oracleQueue: queuePubkey,\n })\n .instruction();\n\n const jupiterIxs = [\n ...setupInstructions.map(deserializeInstruction),\n deserializeInstruction(swapInstructionPayload),\n ];\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: computeBudgetMicroLamports ?? 100000,\n });\n\n if (splitTransactions) {\n const setUpInstructions = [\n // fromTokenAccount.instruction!,\n // toTokenAccount.instruction!,\n partnerFeeRecipientVaultCreateIx,\n partnerFeeRecipientTokenAccountCreateIx,\n ...setupInstructions.map(deserializeInstruction),\n ].filter(Boolean) as TransactionInstruction[];\n\n const allInstructions = [\n tradingOpenBorrowInstruction!,\n deserializeInstruction(swapInstructionPayload), ,\n openAddCollateralInstruction!,\n computeBudgetMicroLamports ? computeFeeIx : undefined,\n ].filter(Boolean) as TransactionInstruction[];\n\n const messageV01 = new TransactionMessage({\n payerKey: program.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: setUpInstructions,\n }).compileToV0Message(addressLookupTableAccounts);\n\n const tx2 = new VersionedTransaction(messageV01);\n\n const messageV0 = new TransactionMessage({\n payerKey: program.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: allInstructions,\n }).compileToV0Message(addressLookupTableAccounts);\n\n const tx = new VersionedTransaction(messageV0);\n\n return [tx2, tx];\n }\n\n const allInstructions = [\n // fromTokenAccount.instruction!,\n // toTokenAccount.instruction!,\n partnerFeeRecipientVaultCreateIx,\n partnerFeeRecipientTokenAccountCreateIx,\n tradingOpenBorrowInstruction!,\n ...jupiterIxs,\n openAddCollateralInstruction!,\n computeBudgetMicroLamports ? computeFeeIx : undefined,\n ].filter(Boolean) as TransactionInstruction[];\n\n const messageV0 = new TransactionMessage({\n payerKey: program.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: allInstructions,\n }).compileToV0Message(addressLookupTableAccounts);\n\n const tx = new VersionedTransaction(messageV0);\n\n return tx;\n};\n\n/**\n * Creates a take-profit delegate for automated position closing\n * \n * \n * @group Traders\n * @category Automation\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @param position - The position account to set take-profit for\n * @param tpPrice - The target price at which to take profit (as BN)\n * @param tpTolerence - Price tolerance/slippage allowed when executing (as BN)\n * @param prioFee - Priority fee in microlamports for transaction execution\n * @param quoteToken - The quote token mint address (e.g., USDC, SOL)\n * @param partnerFeeRecipient - Optional wallet to receive partner fees\n * \n * @returns A versioned transaction to create the take-profit delegate\n * \n * @example\n * ```typescript\n * // Set take-profit at $150 for a position\n * const position = await getPositionAccount(positionPubkey);\n * const tpPrice = new BN(150 * 1e6); // $150 with 6 decimals\n * const tolerance = new BN(1 * 1e6); // $1 tolerance\n * const prioFee = new BN(100000); // 0.1 SOL priority fee\n * \n * const tx = await createTpDelegate(\n * lavarageProgram,\n * position,\n * tpPrice,\n * tolerance,\n * prioFee,\n * usdcMint\n * );\n * \n * // Sign and send\n * const signature = await sendAndConfirmTransaction(connection, tx, [wallet]);\n * console.log('Take-profit delegate created:', signature);\n * ```\n * \n * @see {@link modifyTpDelegate} - Modify take-profit settings\n * @see {@link removeTpDelegate} - Remove take-profit without replacement\n */\n\nexport const createTpDelegate = async (\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n position: ProgramAccount<{\n pool: PublicKey;\n seed: PublicKey;\n userPaid: BN;\n amount: BN;\n }>,\n tpPrice: BN,\n tpTolerence: BN,\n prioFee: BN,\n quoteToken: PublicKey,\n partnerFeeRecipient?: PublicKey\n) => {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n const ix = await lavarageProgram.methods\n .tradingCreateTpDelegate(\n tpPrice,\n tpTolerence,\n new PublicKey(\"6dA5GTDPWxnw3gvjoy3vYBDyY7iETxcTJzt8RqF9i9MV\"),\n new BN(10000)\n )\n .accountsStrict({\n delegate: getPda(\n [Buffer.from(\"delegate\"), position.publicKey.toBuffer()],\n lavarageProgram.programId\n ),\n originalOperator: lavarageProgram.provider.publicKey!,\n delegatedAccount: position.publicKey,\n systemProgram: SystemProgram.programId,\n })\n .remainingAccounts(\n partnerFeeRecipient\n ? [\n {\n pubkey:\n quoteToken.toBase58() ==\n \"So11111111111111111111111111111111111111112\"\n ? partnerFeeRecipient\n : getAssociatedTokenAddressSync(\n quoteToken,\n partnerFeeRecipient,\n false\n ),\n isSigner: false,\n isWritable: true,\n },\n ]\n : []\n )\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: prioFee.toNumber(),\n });\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [ix, computeFeeIx].filter(Boolean),\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n};\n\n/**\n * Modifies take-profit setting for an existing position. \n * \n * \n * @group Traders\n * @category Automation\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @param position - The position account to modify take-profit for\n * @param tpPrice - The new target price for take-profit (as BN)\n * @param tpTolerence - The new price tolerance/slippage allowed (as BN)\n * @param prioFee - Priority fee in microlamports for transaction execution\n * @param quoteToken - The quote token mint address (e.g., USDC, SOL)\n * @param partnerFeeRecipient - Optional wallet to receive partner fees\n * \n * @returns Transaction to update the take-profit settings. \n * \n * @example\n * ```typescript\n * const tx = await modifyTpDelegate(\n * program,\n * position,\n * new BN(160 * 1e6), // New target: $160\n * new BN(2 * 1e6), // Tolerance: $2\n * new BN(100000), // Priority fee\n * usdcMint\n * );\n * ```\n * \n * @see {@link createTpDelegate} - Initial creation of take-profit\n * @see {@link removeTpDelegate} - Remove take-profit without replacement\n */\n\nexport const modifyTpDelegate = async (\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n position: ProgramAccount<{\n pool: PublicKey;\n seed: PublicKey;\n userPaid: BN;\n amount: BN;\n }>,\n tpPrice: BN,\n tpTolerence: BN,\n prioFee: BN,\n quoteToken: PublicKey,\n partnerFeeRecipient?: PublicKey\n) => {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n const delegatePda = getPda(\n [Buffer.from(\"delegate\"), position.publicKey.toBuffer()],\n lavarageProgram.programId\n );\n const removeIx = await lavarageProgram.methods\n .tradingRemoveTpDelegate()\n .accountsStrict({\n delegate: delegatePda,\n originalOperator: lavarageProgram.provider.publicKey!,\n delegatedAccount: position.publicKey,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n const ix = await lavarageProgram.methods\n .tradingCreateTpDelegate(\n tpPrice,\n tpTolerence,\n new PublicKey(\"6dA5GTDPWxnw3gvjoy3vYBDyY7iETxcTJzt8RqF9i9MV\"),\n new BN(10000)\n )\n .accountsStrict({\n delegate: delegatePda,\n originalOperator: lavarageProgram.provider.publicKey!,\n delegatedAccount: position.publicKey,\n systemProgram: SystemProgram.programId,\n })\n .remainingAccounts(\n partnerFeeRecipient\n ? [\n {\n pubkey:\n quoteToken.toBase58() ==\n \"So11111111111111111111111111111111111111112\"\n ? partnerFeeRecipient\n : getAssociatedTokenAddressSync(\n quoteToken,\n partnerFeeRecipient,\n false\n ),\n isSigner: false,\n isWritable: true,\n },\n ]\n : []\n )\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: prioFee.toNumber(),\n });\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [removeIx, ix, computeFeeIx].filter(Boolean),\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n};\n\n/**\n * Removes take-profit settings from a position\n * \n * @group Traders\n * @category Automation\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @param position - The position account to remove take-profit from\n * @param prioFee - Priority fee in microlamports for transaction execution\n * \n * @returns Transaction to remove take-profit settings\n * \n * @example\n * ```typescript\n * const tx = await removeTpDelegate(\n * lavarageProgram,\n * position,\n * new BN(100000) // Priority fee\n * );\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n *\n * @see {@link createTpDelegate} - Initial creation of take-profit\n * @see {@link modifyTpDelegate} - Modify existing take-profit settings\n */\n\nexport const removeTpDelegate = async (\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n position: ProgramAccount<{\n pool: PublicKey;\n seed: PublicKey;\n userPaid: BN;\n amount: BN;\n }>,\n prioFee: BN\n) => {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n const delegatePda = getPda(\n [Buffer.from(\"delegate\"), position.publicKey.toBuffer()],\n lavarageProgram.programId\n );\n const removeIx = await lavarageProgram.methods\n .tradingRemoveTpDelegate()\n .accountsStrict({\n delegate: delegatePda,\n originalOperator: lavarageProgram.provider.publicKey!,\n delegatedAccount: position.publicKey,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: prioFee.toNumber(),\n });\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [removeIx, computeFeeIx].filter(Boolean),\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n};\n/**\n * Partially repays a position on Lavarage V1\n * \n * @group Traders\n * @category Trading\n * \n * @param lavarageProgram - The Lavarage V1 program instance\n * @param position - The position account to partially repay\n * @param repaymentBps - Repayment amount in basis points (10000 = 100%)\n * \n * @returns Transaction for partial repayment\n * \n * @example\n * ```typescript\n * // Repay 50% of the position\n * const tx = await partialRepayV1(\n * lavarageProgram,\n * position,\n * 5000 // 50% in basis points\n * );\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n * \n * @see {@link partialRepayV2} - The V2 version supporting multiple quote tokens\n */\n\nexport const partialRepayV1 = async (\n lavarageProgram: Program<LavarageSOL>,\n position: ProgramAccount<{\n pool: PublicKey;\n seed: PublicKey;\n userPaid: BN;\n amount: BN;\n }>,\n repaymentBps: number\n) => {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n const pool = await lavarageProgram.account.pool.fetch(position.account.pool);\n const positionAccountPDA = position.publicKey;\n const ix = await lavarageProgram.methods\n .tradingClosePartialRepaySol(new BN(repaymentBps))\n .accountsStrict({\n systemProgram: SystemProgram.programId,\n positionAccount: positionAccountPDA,\n tradingPool: position.account.pool,\n nodeWallet: pool.nodeWallet,\n trader: lavarageProgram.provider.publicKey!,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: position.account.seed,\n feeReceipient: \"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\",\n })\n .instruction();\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [ix],\n }).compileToV0Message();\n return new VersionedTransaction(messageV0);\n};\n\n/**\n * Partially repays a position on Lavarage V2\n * \n * @group Traders\n * @category Trading\n * \n * @param lavarageProgram - The Lavarage V2 program instance\n * @param position - The position account to partially repay\n * @param repaymentBps - Repayment amount in basis points (10000 = 100%)\n * \n * @returns Transaction for partial repayment\n * \n * @example\n * ```typescript\n * // Repay 30% of the position\n * const tx = await partialRepayV2(\n * lavarageProgram,\n * position,\n * 3000 // 30% in basis points\n * );\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n * \n * @see {@link partialRepayV1} - The V1 version supporting SOL as quote token\n */\nexport const partialRepayV2 = async (\n lavarageProgram: Program<LavarageUSDC>,\n position: ProgramAccount<{\n pool: PublicKey;\n seed: PublicKey;\n userPaid: BN;\n amount: BN;\n }>,\n repaymentBps: number\n) => {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n const pool = await lavarageProgram.account.pool.fetch(position.account.pool);\n const positionAccountPDA = position.publicKey;\n const ix = await lavarageProgram.methods\n .tradingPartialRepaySol(new BN(repaymentBps))\n .accountsStrict({\n systemProgram: SystemProgram.programId,\n positionAccount: positionAccountPDA,\n tradingPool: position.account.pool,\n nodeWallet: pool.nodeWallet,\n trader: lavarageProgram.provider.publicKey!,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: position.account.seed,\n fromTokenAccount: getAssociatedTokenAddressSync(\n pool.qtType,\n lavarageProgram.provider.publicKey!\n ),\n toTokenAccount: getAssociatedTokenAddressSync(\n pool.qtType,\n pool.nodeWallet,\n true\n ),\n mint: pool.qtType,\n feeTokenAccount: getAssociatedTokenAddressSync(\n pool.qtType,\n new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\")\n ),\n tokenProgram: TOKEN_PROGRAM_ID,\n })\n .instruction();\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [ix],\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n};\n\n/**\n * Closes a trading position on Lavarage V1\n * \n * @group Traders\n * @category Trading\n * \n * @param lavarageProgram - The Lavarage V1 program instance\n * @param position - The position account to close\n * @param offer - The offer/pool account associated with the position\n * @param jupInstruction - Jupiter swap instructions and quote for closing\n * @param partnerFeeRecipient - Optional wallet to receive partner fees\n * @param partnerFeeMarkup - Optional partner fee amount in basis points\n * @param computeBudgetMicroLamports - Optional compute budget for priority fees\n * @param platformFeeRecipient - Optional wallet to receive platform fees (jup, okx)\n * @param splitTransactions - Optional boolean to split the transaction into multiple transactions (jito bundle)\n * @param discountBps - Optional discount basis points for the referral program\n * @param referralBps - Optional referral basis points for the referral program\n * \n * @returns Transaction to close the position\n * \n * @example\n * ```typescript\n * const jupQuote = await getJupiterQuote(...);\n * const tx = await closeTradeV1(\n * lavarageProgram,\n * position,\n * offer,\n * jupQuote,\n * partnerWallet, // optional\n * 100, // optional fee in bps\n * 150000 // optional priority fee\n * );\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n * @see {@link openTradeV1} - The V1 version for opening positions\n * @see {@link partialRepayV1} - Partial repayments on V1 \n */\nexport const closeTradeV1 = async (\n lavarageProgram: Program<LavarageSOL>,\n position: ProgramAccount<{\n pool: PublicKey;\n seed: PublicKey;\n userPaid: BN;\n amount: BN;\n }>,\n offer: ProgramAccount<{\n nodeWallet: PublicKey;\n interestRate: number;\n collateralType: PublicKey;\n }>,\n jupInstruction: {\n instructions?: {\n setupInstructions: Record<string, unknown>[];\n swapInstruction: Record<string, unknown>;\n cleanupInstruction: Record<string, unknown>;\n addressLookupTableAddresses: string[];\n tokenLedgerInstruction?: Record<string, unknown>;\n };\n quoteResponse: any;\n },\n partnerFeeRecipient?: PublicKey,\n partnerFeeMarkup?: number,\n computeBudgetMicroLamports?: number,\n platformFeeRecipient?: PublicKey,\n splitTransactions?: boolean,\n discountBps?: number,\n referralBps?: number,\n) => {\n let partnerFeeMarkupAsPkey;\n const referralVaultProgram = new Program<UserVault>(userVaultIDL, lavarageProgram.provider);\n \n if (partnerFeeMarkup) {\n const feeBuffer = Buffer.alloc(8);\n feeBuffer.writeBigUInt64LE(BigInt(partnerFeeMarkup));\n const feeBuffer32 = Buffer.alloc(32);\n feeBuffer32.set(feeBuffer, 0);\n partnerFeeMarkupAsPkey = new PublicKey(feeBuffer32);\n }\n if (position.account.pool.toBase58() != offer.publicKey.toBase58())\n throw \"Mismatch offer\";\n const pool = offer;\n const poolPubKey = offer.publicKey;\n\n const tokenAddressPubKey = new PublicKey(offer.account.collateralType);\n\n const mintAccount = await lavarageProgram.provider.connection.getAccountInfo(\n offer.account.collateralType\n );\n const tokenProgram = mintAccount?.owner;\n\n const positionAccountPDA = position.publicKey;\n\n const fromTokenAccount = await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n positionAccountPDA,\n tokenAddressPubKey,\n tokenProgram\n );\n\n const toTokenAccount = await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n lavarageProgram.provider.publicKey!,\n tokenAddressPubKey,\n tokenProgram\n );\n\n const platformFeeRecipientAccount = platformFeeRecipient ? await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n platformFeeRecipient,\n offer.account.collateralType,\n tokenProgram\n ) : undefined;\n\n const jupiterSellIx = jupInstruction!.instructions;\n\n const deserializeInstruction = (instruction: any) => {\n return new TransactionInstruction({\n programId: new PublicKey(instruction.programId),\n\n keys: instruction.accounts.map((key: any) => ({\n pubkey: new PublicKey(key.pubkey),\n isSigner: key.isSigner,\n isWritable: key.isWritable,\n })),\n data: Buffer.from(instruction.data, \"base64\"),\n });\n };\n\n const getAddressLookupTableAccounts = async (\n keys: string[]\n ): Promise<AddressLookupTableAccount[]> => {\n const addressLookupTableAccountInfos =\n await lavarageProgram.provider.connection.getMultipleAccountsInfo(\n keys.map((key) => new PublicKey(key))\n );\n\n return addressLookupTableAccountInfos.reduce((acc, accountInfo, index) => {\n const addressLookupTableAddress = keys[index];\n if (accountInfo) {\n const addressLookupTableAccount = new AddressLookupTableAccount({\n key: new PublicKey(addressLookupTableAddress),\n state: AddressLookupTableAccount.deserialize(\n Uint8Array.from(accountInfo.data)\n ),\n });\n acc.push(addressLookupTableAccount);\n }\n\n return acc;\n }, new Array<AddressLookupTableAccount>());\n };\n\n const addressLookupTableAccounts: AddressLookupTableAccount[] = [];\n\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const useReferral = discountBps !== undefined && referralBps !== undefined;\n\n // Check if partner fee recipient vault needs to be initialized via referralVaultProgram\n let partnerFeeRecipientCreateIx: TransactionInstruction | undefined;\n let userVaultPda: PublicKey | undefined;\n if (partnerFeeRecipient && referralBps !== undefined && referralVaultProgram) {\n [userVaultPda] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"user_vault\"), new PublicKey(partnerFeeRecipient).toBuffer()],\n referralVaultProgram.programId\n );\n const vaultAccountInfo = await lavarageProgram.provider.connection.getAccountInfo(userVaultPda);\n if (!vaultAccountInfo) {\n // Initialize the vault using referralVaultProgram\n partnerFeeRecipientCreateIx = await referralVaultProgram.methods\n .initializeVault()\n .accountsStrict({\n userVault: userVaultPda,\n user: partnerFeeRecipient!,\n funder: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n }\n }\n\n const closePositionIx = await lavarageProgram.methods\n .tradingCloseBorrowCollateral()\n .accountsStrict({\n tradingPool: poolPubKey,\n instructions: SYSVAR_INSTRUCTIONS_PUBKEY,\n mint: offer.account.collateralType,\n fromTokenAccount: fromTokenAccount.account!.address,\n toTokenAccount: toTokenAccount.account!.address,\n positionAccount: positionAccountPDA,\n clock: SYSVAR_CLOCK_PUBKEY,\n systemProgram: SystemProgram.programId,\n trader: lavarageProgram.provider.publicKey!,\n tokenProgram: tokenProgram!,\n randomAccountAsId: position.account.seed,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n })\n .instruction();\n\n let repaySolIx: TransactionInstruction | null = null;\n let jupiterIxs: TransactionInstruction[] = [];\n if (jupInstruction.instructions == undefined) {\n repaySolIx = useReferral\n ? await lavarageProgram.methods\n .tradingCloseRepaySolWithReferral(\n new BN(jupInstruction.quoteResponse.outAmount),\n new BN(9997),\n new BN(discountBps),\n new BN(referralBps)\n )\n .accountsStrict({\n nodeWallet: pool.account.nodeWallet,\n positionAccount: positionAccountPDA,\n tradingPool: poolPubKey,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: position.account.seed,\n feeReceipient: \"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\",\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey && userVaultPda\n ? [\n {\n pubkey: userVaultPda,\n isSigner: false,\n isWritable: true,\n }\n ]\n : []\n )\n .instruction()\n : await lavarageProgram.methods\n .tradingCloseRepaySol(\n new BN(jupInstruction.quoteResponse.outAmount),\n new BN(9997)\n )\n .accountsStrict({\n nodeWallet: pool.account.nodeWallet,\n positionAccount: positionAccountPDA,\n tradingPool: poolPubKey,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: position.account.seed,\n feeReceipient: \"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\",\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey\n ? [\n {\n pubkey: partnerFeeRecipient,\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: partnerFeeMarkupAsPkey,\n isSigner: false,\n isWritable: false,\n },\n ]\n : []\n )\n .instruction();\n } else {\n repaySolIx = useReferral\n ? await lavarageProgram.methods\n .tradingCloseRepaySolWithReferral(\n new BN(jupInstruction.quoteResponse.outAmount),\n new BN(9998),\n new BN(discountBps),\n new BN(referralBps)\n )\n .accountsStrict({\n nodeWallet: pool.account.nodeWallet,\n positionAccount: positionAccountPDA,\n tradingPool: poolPubKey,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: position.account.seed,\n feeReceipient: \"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\",\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey && userVaultPda\n ? [\n {\n pubkey: userVaultPda,\n isSigner: false,\n isWritable: true,\n }\n ]\n : []\n )\n .instruction()\n : await lavarageProgram.methods\n .tradingCloseRepaySol(\n new BN(jupInstruction.quoteResponse.outAmount),\n new BN(9998)\n )\n .accountsStrict({\n nodeWallet: pool.account.nodeWallet,\n positionAccount: positionAccountPDA,\n tradingPool: poolPubKey,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: position.account.seed,\n feeReceipient: \"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\",\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey\n ? [\n {\n pubkey: partnerFeeRecipient,\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: partnerFeeMarkupAsPkey,\n isSigner: false,\n isWritable: false,\n },\n ]\n : []\n )\n .instruction();\n\n const {\n setupInstructions,\n swapInstruction: swapInstructionPayload,\n cleanupInstruction,\n addressLookupTableAddresses,\n } = jupiterSellIx!;\n jupiterIxs = [\n ...setupInstructions.map(deserializeInstruction),\n deserializeInstruction(swapInstructionPayload),\n deserializeInstruction(cleanupInstruction),\n ].filter((i) => !!i);\n addressLookupTableAccounts.push(\n ...(await getAddressLookupTableAccounts([\n \"5LEAB3owNUSKvECm7vkr58tDtQpzbngQ2NYpc7qmRFdi\",\n ...addressLookupTableAddresses,\n ]))\n );\n }\n const profit = new BN(jupInstruction.quoteResponse.outAmount)\n .sub(position.account.amount)\n .sub(position.account.userPaid);\n\n let createAssociatedTokenAccountInstruction =\n createAssociatedTokenAccountIdempotentInstruction(\n lavarageProgram.provider.publicKey!,\n toTokenAccount.account!.address,\n lavarageProgram.provider.publicKey!,\n offer.account.collateralType,\n tokenProgram!\n );\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: computeBudgetMicroLamports ?? 100000,\n });\n\n if (splitTransactions) {\n const setUpInstructions = [\n partnerFeeRecipientCreateIx,\n jupInstruction.instructions && platformFeeRecipientAccount?.instruction ? platformFeeRecipientAccount.instruction : null,\n ].filter((i) => !!i);\n\n const allInstructions = [\n jupInstruction.instructions?.tokenLedgerInstruction\n ? deserializeInstruction(\n jupInstruction.instructions.tokenLedgerInstruction\n )\n : null,\n closePositionIx,\n ...jupiterIxs,\n repaySolIx,\n computeBudgetMicroLamports ? computeFeeIx : undefined,\n ].filter((i) => !!i);\n\n const messageV01 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: setUpInstructions,\n }).compileToV0Message(addressLookupTableAccounts);\n\n const tx = new VersionedTransaction(messageV01);\n\n const messageV02 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: allInstructions,\n }).compileToV0Message(addressLookupTableAccounts);\n\n const tx2 = new VersionedTransaction(messageV02);\n\n return [tx, tx2];\n }\n\n const allInstructions = [\n partnerFeeRecipientCreateIx,\n jupInstruction.instructions && platformFeeRecipientAccount?.instruction ? platformFeeRecipientAccount.instruction : null,\n jupInstruction.instructions?.tokenLedgerInstruction\n ? deserializeInstruction(\n jupInstruction.instructions.tokenLedgerInstruction\n )\n : null,\n closePositionIx,\n ...jupiterIxs,\n repaySolIx,\n computeBudgetMicroLamports ? computeFeeIx : undefined,\n ].filter((i) => !!i);\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: allInstructions,\n }).compileToV0Message(addressLookupTableAccounts);\n\n const tx = new VersionedTransaction(messageV0);\n\n return tx;\n};\n\n/**\n * Closes a trading position on Lavarage V2\n * \n * @group Traders\n * @category Trading\n * \n * @param lavarageProgram - The Lavarage V2 program instance\n * @param position - The position account to close\n * @param offer - The offer/pool account associated with the position\n * @param jupInstruction - Jupiter swap instructions and quote for closing\n * @param quoteToken - The quote token mint address for this position\n * @param partnerFeeRecipient - Optional wallet to receive partner fees\n * @param partnerFeeMarkup - Optional partner fee amount in basis points\n * @param computeBudgetMicroLamports - Optional compute budget for priority fees\n* @param platformFeeRecipient - Optional wallet to receive platform fees (jup, okx)\n * @param splitTransactions - Optional boolean to split the transaction into multiple transactions (jito bundle)\n * @param discountBps - Optional discount basis points for the referral program\n * @param referralBps - Optional referral basis points for the referral program\n * \n * @returns Transaction to close the position\n * \n * @example\n * ```typescript\n * const jupQuote = await getJupiterQuote(...);\n * const tx = await closeTradeV2(\n * lavarageProgram,\n * position,\n * offer,\n * jupQuote,\n * usdcMint, // quote token\n * partnerWallet, // optional\n * 100, // optional fee in bps\n * 150000 // optional priority fee\n * );\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n * @see {@link openTradeV2} - The V2 version for opening positions\n * @see {@link partialRepayV2} - Partial repay a V2 position \n */\nexport const closeTradeV2 = async (\n lavarageProgram: Program<LavarageUSDC>,\n position: ProgramAccount<{\n pool: PublicKey;\n seed: PublicKey;\n userPaid: BN;\n amount: BN;\n }>,\n offer: ProgramAccount<{\n nodeWallet: PublicKey;\n interestRate: number;\n collateralType: PublicKey;\n }>,\n jupInstruction: {\n instructions?: {\n setupInstructions: Record<string, unknown>[];\n swapInstruction: Record<string, unknown>;\n cleanupInstruction: Record<string, unknown>;\n addressLookupTableAddresses: string[];\n tokenLedgerInstruction?: Record<string, unknown>;\n };\n quoteResponse: any;\n },\n quoteToken: PublicKey,\n partnerFeeRecipient?: PublicKey,\n partnerFeeMarkup?: number,\n computeBudgetMicroLamports?: number,\n platformFeeRecipient?: PublicKey,\n splitTransactions?: boolean,\n discountBps?: number,\n referralBps?: number,\n) => {\n let partnerFeeMarkupAsPkey;\n const referralVaultProgram = new Program<UserVault>(userVaultIDL, lavarageProgram.provider);\n \n if (partnerFeeMarkup) {\n const feeBuffer = Buffer.alloc(8);\n feeBuffer.writeBigUInt64LE(BigInt(partnerFeeMarkup));\n const feeBuffer32 = Buffer.alloc(32);\n feeBuffer32.set(feeBuffer, 0);\n partnerFeeMarkupAsPkey = new PublicKey(feeBuffer32);\n }\n if (position.account.pool.toBase58() != offer.publicKey.toBase58())\n throw \"Mismatch offer\";\n const pool = offer;\n const poolPubKey = offer.publicKey;\n\n const tokenAddressPubKey = new PublicKey(offer.account.collateralType);\n\n const mintAccount = await lavarageProgram.provider.connection.getAccountInfo(\n offer.account.collateralType\n );\n const tokenProgram = mintAccount?.owner;\n\n const quoteMintAccount =\n await lavarageProgram.provider.connection.getAccountInfo(quoteToken);\n const quoteTokenProgram = quoteMintAccount?.owner;\n\n const positionAccountPDA = position.publicKey;\n\n const fromTokenAccount = await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n positionAccountPDA,\n tokenAddressPubKey,\n tokenProgram\n );\n\n const toTokenAccount = await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n lavarageProgram.provider.publicKey!,\n tokenAddressPubKey,\n tokenProgram\n );\n\n const platformFeeRecipientAccount = platformFeeRecipient ? await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n platformFeeRecipient,\n offer.account.collateralType,\n tokenProgram\n ) : undefined;\n\n const jupiterSellIx = jupInstruction!.instructions;\n\n const deserializeInstruction = (instruction: any) => {\n return new TransactionInstruction({\n programId: new PublicKey(instruction.programId),\n\n keys: instruction.accounts.map((key: any) => ({\n pubkey: new PublicKey(key.pubkey),\n isSigner: key.isSigner,\n isWritable: key.isWritable,\n })),\n data: Buffer.from(instruction.data, \"base64\"),\n });\n };\n\n const getAddressLookupTableAccounts = async (\n keys: string[]\n ): Promise<AddressLookupTableAccount[]> => {\n const addressLookupTableAccountInfos =\n await lavarageProgram.provider.connection.getMultipleAccountsInfo(\n keys.map((key) => new PublicKey(key))\n );\n\n return addressLookupTableAccountInfos.reduce((acc, accountInfo, index) => {\n const addressLookupTableAddress = keys[index];\n if (accountInfo) {\n const addressLookupTableAccount = new AddressLookupTableAccount({\n key: new PublicKey(addressLookupTableAddress),\n state: AddressLookupTableAccount.deserialize(\n Uint8Array.from(accountInfo.data)\n ),\n });\n acc.push(addressLookupTableAccount);\n }\n\n return acc;\n }, new Array<AddressLookupTableAccount>());\n };\n\n const addressLookupTableAccounts: AddressLookupTableAccount[] = [];\n\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const useReferral = discountBps !== undefined && referralBps !== undefined;\n\n // Check if partner fee recipient vault and token account need to be created\n let partnerFeeRecipientVaultCreateIx: TransactionInstruction | undefined;\n let partnerFeeRecipientTokenAccountCreateIx: TransactionInstruction | undefined;\n let userVaultPda: PublicKey | undefined;\n \n if (partnerFeeRecipient && partnerFeeMarkupAsPkey && referralVaultProgram) {\n // Derive the userVault PDA\n [userVaultPda] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"user_vault\"), new PublicKey(partnerFeeRecipient).toBuffer()],\n referralVaultProgram.programId\n );\n \n // Get the vault's associated token account\n const vaultTokenAccount = getAssociatedTokenAddressSync(\n quoteToken,\n userVaultPda,\n true, // allowOwnerOffCurve for PDA\n quoteTokenProgram\n );\n \n // Check both accounts at the same time\n const [vaultAccountInfo, vaultTokenAccountInfo] = await lavarageProgram.provider.connection.getMultipleAccountsInfo([\n userVaultPda,\n vaultTokenAccount\n ]);\n \n // Create vault if it doesn't exist\n if (!vaultAccountInfo) {\n partnerFeeRecipientVaultCreateIx = await referralVaultProgram.methods\n .initializeVault()\n .accountsStrict({\n userVault: userVaultPda,\n user: partnerFeeRecipient!,\n funder: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n }\n \n // Create token account if it doesn't exist\n if (!vaultTokenAccountInfo) {\n partnerFeeRecipientTokenAccountCreateIx = createAssociatedTokenAccountIdempotentInstruction(\n lavarageProgram.provider.publicKey!,\n vaultTokenAccount,\n userVaultPda,\n quoteToken,\n quoteTokenProgram,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n }\n }\n\n const closePositionIx = await lavarageProgram.methods\n .tradingCloseBorrowCollateral()\n .accountsStrict({\n tradingPool: poolPubKey,\n instructions: SYSVAR_INSTRUCTIONS_PUBKEY,\n mint: offer.account.collateralType,\n fromTokenAccount: fromTokenAccount.account!.address,\n toTokenAccount: toTokenAccount.account!.address,\n positionAccount: positionAccountPDA,\n clock: SYSVAR_CLOCK_PUBKEY,\n systemProgram: SystemProgram.programId,\n trader: lavarageProgram.provider.publicKey!,\n tokenProgram: tokenProgram!,\n randomAccountAsId: position.account.seed,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n })\n .instruction();\n\n let repaySolIx: TransactionInstruction | null = null;\n let jupiterIxs: TransactionInstruction[] = [];\n if (jupInstruction.instructions == undefined) {\n repaySolIx = useReferral\n ? await lavarageProgram.methods\n .tradingCloseRepaySol(\n new BN(jupInstruction.quoteResponse.outAmount),\n new BN(9997),\n new BN(discountBps),\n new BN(referralBps)\n )\n .accountsStrict({\n nodeWallet: pool.account.nodeWallet,\n positionAccount: positionAccountPDA,\n tradingPool: poolPubKey,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: position.account.seed,\n feeTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\"),\n false,\n quoteTokenProgram\n ),\n fromTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n lavarageProgram.provider.publicKey!,\n false,\n quoteTokenProgram\n ),\n tokenProgram: quoteTokenProgram!,\n toTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n pool.account.nodeWallet,\n true,\n quoteTokenProgram\n ),\n mint: quoteToken,\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey && userVaultPda\n ? [\n {\n pubkey: getAssociatedTokenAddressSync(\n quoteToken,\n userVaultPda,\n true, // allowOwnerOffCurve for PDA\n quoteTokenProgram\n ),\n isSigner: false,\n isWritable: true,\n }\n ]\n : []\n )\n .instruction()\n : await lavarageProgram.methods\n .tradingCloseRepaySol(\n new BN(jupInstruction.quoteResponse.outAmount),\n new BN(9997)\n )\n .accountsStrict({\n nodeWallet: pool.account.nodeWallet,\n positionAccount: positionAccountPDA,\n tradingPool: poolPubKey,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: position.account.seed,\n feeTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\"),\n false,\n quoteTokenProgram\n ),\n fromTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n lavarageProgram.provider.publicKey!,\n false,\n quoteTokenProgram\n ),\n tokenProgram: quoteTokenProgram!,\n toTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n pool.account.nodeWallet,\n true,\n quoteTokenProgram\n ),\n mint: quoteToken,\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey\n ? [\n {\n pubkey: getAssociatedTokenAddressSync(\n quoteToken,\n partnerFeeRecipient,\n false,\n quoteTokenProgram\n ),\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: partnerFeeMarkupAsPkey,\n isSigner: false,\n isWritable: false,\n },\n ]\n : []\n )\n .instruction();\n } else {\n repaySolIx = useReferral\n ? await lavarageProgram.methods\n .tradingCloseRepaySol(\n new BN(jupInstruction.quoteResponse.outAmount),\n new BN(9998),\n new BN(discountBps),\n new BN(referralBps)\n )\n .accountsStrict({\n nodeWallet: pool.account.nodeWallet,\n positionAccount: positionAccountPDA,\n tradingPool: poolPubKey,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: position.account.seed,\n feeTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\"),\n false,\n quoteTokenProgram\n ),\n fromTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n lavarageProgram.provider.publicKey!,\n false,\n quoteTokenProgram\n ),\n tokenProgram: quoteTokenProgram!,\n toTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n pool.account.nodeWallet,\n true,\n quoteTokenProgram\n ),\n mint: quoteToken,\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey && userVaultPda\n ? [\n {\n pubkey: getAssociatedTokenAddressSync(\n quoteToken,\n userVaultPda,\n true, // allowOwnerOffCurve for PDA\n quoteTokenProgram\n ),\n isSigner: false,\n isWritable: true,\n }\n ]\n : []\n )\n .instruction()\n : await lavarageProgram.methods\n .tradingCloseRepaySol(\n new BN(jupInstruction.quoteResponse.outAmount),\n new BN(9998)\n )\n .accountsStrict({\n nodeWallet: pool.account.nodeWallet,\n positionAccount: positionAccountPDA,\n tradingPool: poolPubKey,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: position.account.seed,\n feeTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\"),\n false,\n quoteTokenProgram\n ),\n fromTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n lavarageProgram.provider.publicKey!,\n false,\n quoteTokenProgram\n ),\n tokenProgram: quoteTokenProgram!,\n toTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n pool.account.nodeWallet,\n true,\n quoteTokenProgram\n ),\n mint: quoteToken,\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey\n ? [\n {\n pubkey: getAssociatedTokenAddressSync(\n quoteToken,\n partnerFeeRecipient,\n false,\n quoteTokenProgram\n ),\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: partnerFeeMarkupAsPkey,\n isSigner: false,\n isWritable: false,\n },\n ]\n : []\n )\n .instruction();\n const {\n setupInstructions,\n swapInstruction: swapInstructionPayload,\n cleanupInstruction,\n addressLookupTableAddresses,\n } = jupiterSellIx!;\n jupiterIxs = [\n ...setupInstructions.filter((i) => !!i).map(deserializeInstruction),\n swapInstructionPayload\n ? deserializeInstruction(swapInstructionPayload)\n : null,\n cleanupInstruction ? deserializeInstruction(cleanupInstruction) : null,\n ].filter((i) => !!i);\n addressLookupTableAccounts.push(\n ...(await getAddressLookupTableAccounts([\n ...addressLookupTableAddresses,\n getQuoteCurrencySpecificAddressLookupTable(quoteToken.toBase58()),\n \"5LEAB3owNUSKvECm7vkr58tDtQpzbngQ2NYpc7qmRFdi\",\n ]))\n );\n }\n const profit = new BN(jupInstruction.quoteResponse.outAmount)\n .sub(position.account.amount)\n .sub(position.account.userPaid);\n\n let createAssociatedTokenAccountInstruction =\n createAssociatedTokenAccountIdempotentInstruction(\n lavarageProgram.provider.publicKey!,\n toTokenAccount.account!.address,\n lavarageProgram.provider.publicKey!,\n offer.account.collateralType,\n tokenProgram!\n );\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: computeBudgetMicroLamports ?? 100000,\n });\n\n if (splitTransactions) {\n const setUpInstructions = [\n partnerFeeRecipientVaultCreateIx,\n partnerFeeRecipientTokenAccountCreateIx,\n jupInstruction.instructions && platformFeeRecipientAccount?.instruction ? platformFeeRecipientAccount.instruction : null,\n createAssociatedTokenAccountInstruction,\n ].filter((i) => !!i);\n\n const allInstructions = [\n jupInstruction.instructions?.tokenLedgerInstruction\n ? deserializeInstruction(\n jupInstruction.instructions.tokenLedgerInstruction\n )\n : null,\n closePositionIx,\n ...jupiterIxs,\n repaySolIx,\n computeBudgetMicroLamports ? computeFeeIx : undefined,\n ].filter((i) => !!i);\n\n const messageV01 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: setUpInstructions,\n }).compileToV0Message(addressLookupTableAccounts);\n\n const tx = new VersionedTransaction(messageV01);\n\n const messageV02 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: allInstructions,\n }).compileToV0Message(addressLookupTableAccounts);\n\n const tx2 = new VersionedTransaction(messageV02);\n\n return [tx, tx2];\n }\n\n const allInstructions = [\n partnerFeeRecipientVaultCreateIx,\n partnerFeeRecipientTokenAccountCreateIx,\n jupInstruction.instructions && platformFeeRecipientAccount?.instruction ? platformFeeRecipientAccount.instruction : null,\n createAssociatedTokenAccountInstruction,\n jupInstruction.instructions?.tokenLedgerInstruction\n ? deserializeInstruction(\n jupInstruction.instructions.tokenLedgerInstruction\n )\n : null,\n closePositionIx,\n ...jupiterIxs,\n repaySolIx,\n computeBudgetMicroLamports ? computeFeeIx : undefined,\n ].filter((i) => !!i);\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: allInstructions,\n }).compileToV0Message(addressLookupTableAccounts);\n\n const tx = new VersionedTransaction(messageV0);\n\n return tx;\n};\n\n/**\n * Retrieves delegate accounts for automated position management\n * \n * @group Traders\n * @category Queries\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @param userPubKey - Optional user public key to filter delegates\n * \n * @returns Array of delegate accounts with parsed price data\n * \n * @example\n * ```typescript\n * // Get all delegates for a specific user\n * const userDelegates = await getDelegateAccounts(\n * lavarageProgram,\n * userPublicKey\n * );\n * \n * // Get all delegates (no filter)\n * const allDelegates = await getDelegateAccounts(lavarageProgram);\n * \n * // Access parsed data\n * userDelegates.forEach(delegate => {\n * console.log('TP Price:', delegate.parsed.tpPrice.toString());\n * console.log('Threshold:', delegate.parsed.tpThreshold.toString());\n * });\n * ```\n * @see {@link createTpDelegate} - Create a new take-profit delegate\n * @see {@link modifyTpDelegate} - Modify existing take-profit settings\n * @see {@link removeTpDelegate} - Remove take-profit settings\n */\nexport const getDelegateAccounts = async (\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n userPubKey?: PublicKey\n) => {\n const delegateAccounts = await lavarageProgram.account.delegate.all(\n userPubKey\n ? [\n {\n memcmp: {\n offset: 104,\n bytes: userPubKey.toBase58(),\n },\n },\n ]\n : undefined\n );\n return delegateAccounts.map((d) => ({\n ...d,\n parsed: {\n tpPrice: new BN(d.account.field1),\n tpThreshold: new BN(d.account.field2),\n },\n }));\n};\n\nconst getQuoteCurrencySpecificAddressLookupTable = (quoteCurrency: string) => {\n switch (quoteCurrency) {\n case \"J9BcrQfX4p9D1bvLzRNCbMDv8f44a9LFdeqNE4Yk2WMD\":\n return \"2EdNtwVhyjkEgkKDC7GShfSSczZYMKLuJraeoJzG4E4R\";\n case \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\":\n return \"CxLE1LRaZg2eYygzFfVRhgmSACsvqzyhySDrMHq3QSab\";\n default:\n return \"2EdNtwVhyjkEgkKDC7GShfSSczZYMKLuJraeoJzG4E4R\";\n }\n};\n\n/**\n * Splits a position into two separate positions on Lavarage V2\n * \n * @group Traders\n * @category PositionManagement\n * \n * @param lavarageProgram - The Lavarage V2 or V1 program instance\n * @param position - The original position to split\n * @param offer - The offer/pool account associated with the position\n * @param quoteToken - The quote token mint address\n * @param propotionBps - Split ratio in basis points (5000 = 50/50 split)\n * @param computeBudgetMicroLamports - Optional compute budget for priority fees\n * \n * @returns Object containing transaction and new position addresses\n * \n * @example\n * ```typescript\n * // Split position 70/30\n * const result = await splitPositionV2(\n * lavarageProgram,\n * position,\n * offer,\n * usdcMint,\n * 7000 // 70% to first position, 30% to second\n * );\n * \n * const tx = result.transaction;\n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * \n * console.log('New positions:', result.newPositionAddresses);\n * ```\n * @see {@link mergePositionV2} - Merge two positions into one\n */\nexport const splitPositionV2 = async (\n lavarageProgram: Program<LavarageUSDC> | Program<LavarageSOL>,\n position: ProgramAccount<{\n pool: PublicKey;\n seed: PublicKey;\n userPaid: BN;\n amount: BN;\n }>,\n offer: ProgramAccount<{\n nodeWallet: PublicKey;\n interestRate: number;\n collateralType: PublicKey;\n }>,\n quoteToken: PublicKey,\n propotionBps: number,\n computeBudgetMicroLamports?: number\n) => {\n const positionAccountPDA = position.publicKey;\n\n const newPosition1Seed = Keypair.generate().publicKey;\n const newPosition2Seed = Keypair.generate().publicKey;\n\n const newPosition1AccountPDA = getPositionAccountPDA(\n lavarageProgram,\n offer,\n newPosition1Seed\n );\n const newPosition2AccountPDA = getPositionAccountPDA(\n lavarageProgram,\n offer,\n newPosition2Seed\n );\n\n const mintAccount = await lavarageProgram.provider.connection.getAccountInfo(\n offer.account.collateralType\n );\n const tokenProgram = mintAccount?.owner;\n\n const newPosition1TokenAccount = getAssociatedTokenAddressSync(\n offer.account.collateralType,\n newPosition1AccountPDA,\n true,\n tokenProgram\n );\n const newPosition2TokenAccount = getAssociatedTokenAddressSync(\n offer.account.collateralType,\n newPosition2AccountPDA,\n true,\n tokenProgram\n );\n\n const createNewPosition1TokenAccountIx =\n createAssociatedTokenAccountInstruction(\n lavarageProgram.provider.publicKey!,\n newPosition1TokenAccount,\n newPosition1AccountPDA,\n offer.account.collateralType,\n tokenProgram!\n );\n\n const createNewPosition2TokenAccountIx =\n createAssociatedTokenAccountInstruction(\n lavarageProgram.provider.publicKey!,\n newPosition2TokenAccount,\n newPosition2AccountPDA,\n offer.account.collateralType,\n tokenProgram!\n );\n\n const ix = await lavarageProgram.methods\n .tradingManagementSplitPosition(\n new BN(propotionBps),\n newPosition1Seed,\n newPosition2Seed\n )\n .accountsStrict({\n originalPosition: positionAccountPDA,\n newPositionOne: newPosition1AccountPDA,\n newPositionTwo: newPosition2AccountPDA,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n mint: offer.account.collateralType,\n tokenProgram: tokenProgram!,\n originalPositionTokenAccount: getAssociatedTokenAddressSync(\n offer.account.collateralType,\n positionAccountPDA,\n true,\n tokenProgram\n ),\n newPositionTokenAccountOne: newPosition1TokenAccount,\n newPositionTokenAccountTwo: newPosition2TokenAccount,\n })\n .instruction();\n\n const computeBudgetIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: computeBudgetMicroLamports ?? 100000,\n });\n\n const allInstructions = [\n createNewPosition1TokenAccountIx,\n createNewPosition2TokenAccountIx,\n ix,\n computeBudgetIx,\n ].filter((i) => !!i);\n\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: allInstructions,\n }).compileToV0Message();\n\n const tx = new VersionedTransaction(messageV0);\n\n return {\n transaction: tx,\n newPositionAddresses: [\n newPosition1AccountPDA.toBase58(),\n newPosition2AccountPDA.toBase58(),\n ],\n newPositionSeeds: [\n newPosition1Seed.toBase58(),\n newPosition2Seed.toBase58(),\n ],\n };\n};\n\n/**\n * Merges two positions into a single position on Lavarage V2\n * \n * @group Traders\n * @category PositionManagement\n * \n * @param lavarageProgram - The Lavarage V2 program instance\n * @param position1 - The first position to merge\n * @param position2 - The second position to merge\n * @param offer - The offer/pool account (must be same for both positions)\n * @param quoteToken - The quote token mint address\n * @param computeBudgetMicroLamports - Optional compute budget for priority fees\n * \n * @returns Transaction to merge the positions\n * \n * @example\n * ```typescript\n * // Merge two positions into one\n * const tx = await mergePositionV2(\n * lavarageProgram,\n * position1,\n * position2,\n * offer,\n * usdcMint\n * );\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n * \n * @see {@link splitPositionV2} - Split a position into two\n */\nexport const mergePositionV2 = async (\n lavarageProgram: Program<LavarageUSDC>,\n position1: ProgramAccount<{\n pool: PublicKey;\n seed: PublicKey;\n userPaid: BN;\n amount: BN;\n }>,\n position2: ProgramAccount<{\n pool: PublicKey;\n seed: PublicKey;\n userPaid: BN;\n amount: BN;\n }>,\n offer: ProgramAccount<{\n nodeWallet: PublicKey;\n interestRate: number;\n collateralType: PublicKey;\n }>,\n quoteToken: PublicKey,\n computeBudgetMicroLamports?: number\n) => {\n const positionAccountPDA1 = position1.publicKey;\n const positionAccountPDA2 = position2.publicKey;\n\n const newPositionSeed = Keypair.generate().publicKey;\n\n const newPositionAccountPDA = getPositionAccountPDA(\n lavarageProgram,\n offer,\n newPositionSeed\n );\n\n const mintAccount = await lavarageProgram.provider.connection.getAccountInfo(\n offer.account.collateralType\n );\n const tokenProgram = mintAccount?.owner;\n\n const newPositionTokenAccount = getAssociatedTokenAddressSync(\n offer.account.collateralType,\n newPositionAccountPDA,\n true,\n tokenProgram\n );\n\n const createNewPositionTokenAccountIx =\n createAssociatedTokenAccountInstruction(\n lavarageProgram.provider.publicKey!,\n newPositionTokenAccount,\n newPositionAccountPDA,\n offer.account.collateralType,\n tokenProgram!\n );\n\n const ix = await lavarageProgram.methods\n .tradingManagementMergePositions(newPositionSeed)\n .accountsStrict({\n mergedPosition: newPositionAccountPDA,\n positionOne: positionAccountPDA1,\n positionTwo: positionAccountPDA2,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n mint: offer.account.collateralType,\n tokenProgram: tokenProgram!,\n positionOneTokenAccount: getAssociatedTokenAddressSync(\n offer.account.collateralType,\n positionAccountPDA1,\n true,\n tokenProgram\n ),\n positionTwoTokenAccount: getAssociatedTokenAddressSync(\n offer.account.collateralType,\n positionAccountPDA2,\n true,\n tokenProgram\n ),\n mergedPositionTokenAccount: newPositionTokenAccount,\n })\n .instruction();\n\n const computeBudgetIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: computeBudgetMicroLamports ?? 100000,\n });\n\n const allInstructions = [\n createNewPositionTokenAccountIx,\n ix,\n computeBudgetIx,\n ].filter((i) => !!i);\n\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: allInstructions,\n }).compileToV0Message();\n\n const tx = new VersionedTransaction(messageV0);\n\n return tx;\n};\n","{\n \"address\": \"F7L3T5fjHbD13SH8UhNuYxCdabHX9CRg2zxbPjmiwU7R\",\n \"metadata\": {\n \"name\": \"user_vault\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"User vault program for holding SOL and SPL tokens\"\n },\n \"instructions\": [\n {\n \"name\": \"claim_sol\",\n \"discriminator\": [\n 139,\n 113,\n 179,\n 189,\n 190,\n 30,\n 132,\n 195\n ],\n \"accounts\": [\n {\n \"name\": \"user_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 117,\n 115,\n 101,\n 114,\n 95,\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"user_vault.user\",\n \"account\": \"UserVault\"\n }\n ]\n }\n },\n {\n \"name\": \"signer\",\n \"signer\": true\n },\n {\n \"name\": \"recipient\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"claim_token\",\n \"discriminator\": [\n 116,\n 206,\n 27,\n 191,\n 166,\n 19,\n 0,\n 73\n ],\n \"accounts\": [\n {\n \"name\": \"user_vault\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 117,\n 115,\n 101,\n 114,\n 95,\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"user_vault.user\",\n \"account\": \"UserVault\"\n }\n ]\n }\n },\n {\n \"name\": \"vault_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"recipient_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"signer\",\n \"signer\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"initialize_vault\",\n \"discriminator\": [\n 48,\n 191,\n 163,\n 44,\n 71,\n 129,\n 63,\n 164\n ],\n \"accounts\": [\n {\n \"name\": \"user_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 117,\n 115,\n 101,\n 114,\n 95,\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"user\"\n }\n ]\n }\n },\n {\n \"name\": \"user\",\n \"writable\": true\n },\n {\n \"name\": \"funder\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n }\n ],\n \"accounts\": [\n {\n \"name\": \"UserVault\",\n \"discriminator\": [\n 23,\n 76,\n 96,\n 159,\n 210,\n 10,\n 5,\n 22\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"UnauthorizedClaim\",\n \"msg\": \"Unauthorized: Only user or authority can claim\"\n },\n {\n \"code\": 6001,\n \"name\": \"InsufficientFunds\",\n \"msg\": \"Insufficient funds: Vault must maintain rent-exempt balance\"\n }\n ],\n \"types\": [\n {\n \"name\": \"UserVault\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"user\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"total_sol_claimed\",\n \"type\": \"u64\"\n }\n ]\n }\n }\n ]\n}","{\n \"address\": \"8AD6AnnkdD3MMqQE2v3V7HLaxocSr8kZb1uHNX19PnwF\",\n \"metadata\": {\n \"name\": \"lavarage\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"Created with Anchor\"\n },\n \"instructions\": [\n {\n \"name\": \"add_withdrawal_access\",\n \"discriminator\": [\n 45,\n 247,\n 214,\n 153,\n 224,\n 115,\n 136,\n 178\n ],\n \"accounts\": [\n {\n \"name\": \"withdrawal_access_list\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 119,\n 105,\n 116,\n 104,\n 100,\n 114,\n 97,\n 119,\n 97,\n 108,\n 95,\n 97,\n 99,\n 99,\n 101,\n 115,\n 115,\n 95,\n 108,\n 105,\n 115,\n 116\n ]\n }\n ]\n }\n },\n {\n \"name\": \"node_wallet\"\n },\n {\n \"name\": \"authority\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"to_pubkey\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"delegate_close_position\",\n \"discriminator\": [\n 100,\n 249,\n 236,\n 96,\n 249,\n 195,\n 17,\n 157\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"writable\": true\n },\n {\n \"name\": \"delegate_operator\",\n \"signer\": true\n },\n {\n \"name\": \"account\",\n \"writable\": true,\n \"relations\": [\n \"delegate\"\n ]\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"node_wallet_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.node_wallet\",\n \"account\": \"Pool\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"delegate_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"delegate_operator\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"fee_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 117,\n 98,\n 107,\n 101,\n 121,\n 33,\n 32,\n 40,\n 34,\n 54,\n 74,\n 102,\n 84,\n 111,\n 98,\n 68,\n 118,\n 119,\n 117,\n 119,\n 90,\n 120,\n 90,\n 80,\n 54,\n 70,\n 82,\n 53,\n 74,\n 80,\n 109,\n 106,\n 100,\n 118,\n 81,\n 52,\n 104,\n 52,\n 77,\n 111,\n 118,\n 107,\n 69,\n 86,\n 72,\n 50,\n 70,\n 80,\n 115,\n 77,\n 83,\n 114,\n 70,\n 34,\n 41\n ]\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"profit_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"account.trader\",\n \"account\": \"Position\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"qt_mint\"\n }\n ],\n \"args\": [\n {\n \"name\": \"closing_position_size\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"delegate_execute_tp\",\n \"discriminator\": [\n 207,\n 251,\n 148,\n 38,\n 214,\n 153,\n 54,\n 242\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"writable\": true\n },\n {\n \"name\": \"delegate_operator\",\n \"signer\": true\n },\n {\n \"name\": \"account\",\n \"writable\": true,\n \"relations\": [\n \"delegate\"\n ]\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"position_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"account\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.collateral_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"delegate_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"delegate_operator\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.collateral_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"mint\"\n }\n ],\n \"args\": [\n {\n \"name\": \"seed\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"init_withdrawal_access_list\",\n \"discriminator\": [\n 118,\n 110,\n 194,\n 104,\n 220,\n 145,\n 69,\n 31\n ],\n \"accounts\": [\n {\n \"name\": \"withdrawal_access_list\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 119,\n 105,\n 116,\n 104,\n 100,\n 114,\n 97,\n 119,\n 97,\n 108,\n 95,\n 97,\n 99,\n 99,\n 101,\n 115,\n 115,\n 95,\n 108,\n 105,\n 115,\n 116\n ]\n }\n ]\n }\n },\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"lp_collect_interest\",\n \"discriminator\": [\n 181,\n 55,\n 21,\n 23,\n 53,\n 171,\n 73,\n 115\n ],\n \"accounts\": [\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"position_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"random_account_as_id\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"from_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"position_account\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"oracle\",\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"oracle_queue\",\n \"address\": \"A43DyUGA7s8eXPxqEjJY6EBu1KKbNgfxF8h17VAHn13w\"\n },\n {\n \"name\": \"base_oracle_quote\"\n },\n {\n \"name\": \"clock_sysvar\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"slot_hashes_sysvar\",\n \"address\": \"SysvarS1otHashes111111111111111111111111111\"\n },\n {\n \"name\": \"instructions_sysvar\",\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"lp_liquidate\",\n \"discriminator\": [\n 36,\n 244,\n 70,\n 20,\n 135,\n 159,\n 86,\n 149\n ],\n \"accounts\": [\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"position_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"random_account_as_id\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"from_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"position_account\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"operator\",\n \"signer\": true\n },\n {\n \"name\": \"oracle\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"position_size\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lp_operator_create_node_wallet\",\n \"discriminator\": [\n 193,\n 83,\n 139,\n 125,\n 229,\n 111,\n 150,\n 164\n ],\n \"accounts\": [\n {\n \"name\": \"node_wallet\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 110,\n 111,\n 100,\n 101,\n 95,\n 119,\n 97,\n 108,\n 108,\n 101,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"operator\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ]\n }\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"mint\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidation_ltv\",\n \"type\": \"u16\"\n }\n ]\n },\n {\n \"name\": \"lp_operator_create_trading_pool\",\n \"discriminator\": [\n 182,\n 99,\n 232,\n 188,\n 202,\n 38,\n 71,\n 211\n ],\n \"accounts\": [\n {\n \"name\": \"trading_pool\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 116,\n 114,\n 97,\n 100,\n 105,\n 110,\n 103,\n 95,\n 112,\n 111,\n 111,\n 108\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"node_wallet\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ]\n }\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"node_wallet\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"CreateTradingPoolArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"lp_operator_update_interest_rate\",\n \"discriminator\": [\n 25,\n 217,\n 30,\n 158,\n 210,\n 240,\n 173,\n 10\n ],\n \"accounts\": [\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"lp_operator_update_max_exposure\",\n \"discriminator\": [\n 43,\n 226,\n 68,\n 201,\n 78,\n 18,\n 155,\n 107\n ],\n \"accounts\": [\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lp_operator_update_open_ltv\",\n \"discriminator\": [\n 164,\n 5,\n 214,\n 18,\n 130,\n 13,\n 165,\n 21\n ],\n \"accounts\": [\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"open_ltv\",\n \"type\": \"u16\"\n }\n ]\n },\n {\n \"name\": \"lp_operator_update_trading_pool\",\n \"discriminator\": [\n 99,\n 179,\n 6,\n 181,\n 30,\n 148,\n 30,\n 204\n ],\n \"accounts\": [\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"UpdatePoolArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"lp_operator_withdraw_from_node_wallet\",\n \"discriminator\": [\n 162,\n 244,\n 237,\n 100,\n 96,\n 130,\n 60,\n 117\n ],\n \"accounts\": [\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"funder\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"from_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"node_wallet\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"withdrawal_access_list\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"migrate_pool\",\n \"discriminator\": [\n 55,\n 170,\n 171,\n 123,\n 210,\n 69,\n 39,\n 172\n ],\n \"accounts\": [\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"MigratePoolArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"realloc_pool\",\n \"discriminator\": [\n 114,\n 128,\n 37,\n 167,\n 71,\n 227,\n 40,\n 178\n ],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"remove_withdrawal_access\",\n \"discriminator\": [\n 218,\n 186,\n 7,\n 130,\n 180,\n 40,\n 111,\n 122\n ],\n \"accounts\": [\n {\n \"name\": \"withdrawal_access_list\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 119,\n 105,\n 116,\n 104,\n 100,\n 114,\n 97,\n 119,\n 97,\n 108,\n 95,\n 97,\n 99,\n 99,\n 101,\n 115,\n 115,\n 95,\n 108,\n 105,\n 115,\n 116\n ]\n }\n ]\n }\n },\n {\n \"name\": \"authority\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"from_pubkey\",\n \"type\": \"string\"\n }\n ]\n },\n {\n \"name\": \"rescue_stuck_tokens\",\n \"discriminator\": [\n 104,\n 17,\n 134,\n 60,\n 192,\n 138,\n 94,\n 244\n ],\n \"accounts\": [\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"position_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"trader_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"position.trader\",\n \"account\": \"Position\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"position_mint\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"trading_close_borrow_collateral\",\n \"discriminator\": [\n 160,\n 104,\n 113,\n 179,\n 42,\n 80,\n 8,\n 16\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"random_account_as_id\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"instructions\",\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"from_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"position_account\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"associated_token_program\",\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"trading_close_repay_sol\",\n \"discriminator\": [\n 74,\n 90,\n 5,\n 111,\n 35,\n 171,\n 135,\n 56\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"random_account_as_id\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"from_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"node_wallet\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"fee_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 117,\n 98,\n 107,\n 101,\n 121,\n 33,\n 32,\n 40,\n 34,\n 54,\n 74,\n 102,\n 84,\n 111,\n 98,\n 68,\n 118,\n 119,\n 117,\n 119,\n 90,\n 120,\n 90,\n 80,\n 54,\n 70,\n 82,\n 53,\n 74,\n 80,\n 109,\n 106,\n 100,\n 118,\n 81,\n 52,\n 104,\n 52,\n 77,\n 111,\n 118,\n 107,\n 69,\n 86,\n 72,\n 50,\n 70,\n 80,\n 115,\n 77,\n 83,\n 114,\n 70,\n 34,\n 41\n ]\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"closing_position_size\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"close_type\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"discount_bps\",\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"referral_bps\",\n \"type\": {\n \"option\": \"u64\"\n }\n }\n ]\n },\n {\n \"name\": \"trading_create_tp_delegate\",\n \"discriminator\": [\n 174,\n 200,\n 59,\n 127,\n 100,\n 216,\n 183,\n 8\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 100,\n 101,\n 108,\n 101,\n 103,\n 97,\n 116,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"delegated_account\"\n }\n ]\n }\n },\n {\n \"name\": \"original_operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"delegated_account\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"price\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"lower_threshold\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"delegate_operator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"partial_percentage\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"trading_data_accrued_interest\",\n \"discriminator\": [\n 227,\n 39,\n 217,\n 0,\n 88,\n 3,\n 25,\n 115\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"random_account_as_id\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"from_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"node_wallet\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"fee_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 117,\n 98,\n 107,\n 101,\n 121,\n 33,\n 32,\n 40,\n 34,\n 54,\n 74,\n 102,\n 84,\n 111,\n 98,\n 68,\n 118,\n 119,\n 117,\n 119,\n 90,\n 120,\n 90,\n 80,\n 54,\n 70,\n 82,\n 53,\n 74,\n 80,\n 109,\n 106,\n 100,\n 118,\n 81,\n 52,\n 104,\n 52,\n 77,\n 111,\n 118,\n 107,\n 69,\n 86,\n 72,\n 50,\n 70,\n 80,\n 115,\n 77,\n 83,\n 114,\n 70,\n 34,\n 41\n ]\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": [],\n \"returns\": \"u64\"\n },\n {\n \"name\": \"trading_management_merge_positions\",\n \"discriminator\": [\n 220,\n 145,\n 59,\n 236,\n 80,\n 58,\n 112,\n 127\n ],\n \"accounts\": [\n {\n \"name\": \"position_one\",\n \"writable\": true\n },\n {\n \"name\": \"position_two\",\n \"writable\": true\n },\n {\n \"name\": \"merged_position\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_one.trader\",\n \"account\": \"Position\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_one.pool\",\n \"account\": \"Position\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"seed\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"position_one_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"position_one\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"position_two_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"position_two\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"merged_position_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"merged_position\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"seed\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"trading_management_split_position\",\n \"discriminator\": [\n 230,\n 180,\n 252,\n 200,\n 8,\n 246,\n 131,\n 54\n ],\n \"accounts\": [\n {\n \"name\": \"original_position\",\n \"writable\": true\n },\n {\n \"name\": \"new_position_one\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"original_position.pool\",\n \"account\": \"Position\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"seed1\"\n }\n ]\n }\n },\n {\n \"name\": \"new_position_two\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"original_position.pool\",\n \"account\": \"Position\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"seed2\"\n }\n ]\n }\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"original_position_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"original_position\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"new_position_token_account_one\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"new_position_one\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"new_position_token_account_two\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"new_position_two\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"split_ratio_bps\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"seed1\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"seed2\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"trading_open_add_collateral\",\n \"discriminator\": [\n 21,\n 160,\n 90,\n 163,\n 189,\n 122,\n 164,\n 50\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"random_account_as_id\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"position_account\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"oracle_queue\",\n \"address\": \"A43DyUGA7s8eXPxqEjJY6EBu1KKbNgfxF8h17VAHn13w\"\n },\n {\n \"name\": \"base_oracle_quote\"\n },\n {\n \"name\": \"quote_oracle_quote\"\n },\n {\n \"name\": \"clock_sysvar\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"slot_hashes_sysvar\",\n \"address\": \"SysvarS1otHashes111111111111111111111111111\"\n },\n {\n \"name\": \"instructions_sysvar\",\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"max_interest_rate\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"trading_open_borrow\",\n \"discriminator\": [\n 53,\n 88,\n 1,\n 144,\n 58,\n 65,\n 182,\n 60\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"random_account_as_id\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"instructions\",\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"fee_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"fee_recipient\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"quote_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"from_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"node_wallet\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"quote_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"quote_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"position_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"position_account\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"collateral_token_program\"\n },\n {\n \"name\": \"associated_token_program\",\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"collateral_mint\"\n },\n {\n \"name\": \"quote_mint\"\n },\n {\n \"name\": \"fee_recipient\"\n }\n ],\n \"args\": [\n {\n \"name\": \"position_size\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"user_pays\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"discount_bps\",\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"referral_bps\",\n \"type\": {\n \"option\": \"u64\"\n }\n }\n ]\n },\n {\n \"name\": \"trading_partial_repay_sol\",\n \"discriminator\": [\n 98,\n 78,\n 144,\n 144,\n 103,\n 34,\n 40,\n 162\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"random_account_as_id\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"from_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"node_wallet\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"fee_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 117,\n 98,\n 107,\n 101,\n 121,\n 33,\n 32,\n 40,\n 34,\n 54,\n 74,\n 102,\n 84,\n 111,\n 98,\n 68,\n 118,\n 119,\n 117,\n 119,\n 90,\n 120,\n 90,\n 80,\n 54,\n 70,\n 82,\n 53,\n 74,\n 80,\n 109,\n 106,\n 100,\n 118,\n 81,\n 52,\n 104,\n 52,\n 77,\n 111,\n 118,\n 107,\n 69,\n 86,\n 72,\n 50,\n 70,\n 80,\n 115,\n 77,\n 83,\n 114,\n 70,\n 34,\n 41\n ]\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"percentage\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"trading_remove_tp_delegate\",\n \"discriminator\": [\n 88,\n 18,\n 149,\n 143,\n 124,\n 43,\n 68,\n 178\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 100,\n 101,\n 108,\n 101,\n 103,\n 97,\n 116,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"delegated_account\"\n }\n ]\n }\n },\n {\n \"name\": \"original_operator\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\n \"delegate\"\n ]\n },\n {\n \"name\": \"delegated_account\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n }\n ],\n \"accounts\": [\n {\n \"name\": \"Delegate\",\n \"discriminator\": [\n 92,\n 145,\n 166,\n 111,\n 11,\n 38,\n 38,\n 247\n ]\n },\n {\n \"name\": \"NodeWallet\",\n \"discriminator\": [\n 48,\n 117,\n 214,\n 115,\n 125,\n 23,\n 94,\n 246\n ]\n },\n {\n \"name\": \"Pool\",\n \"discriminator\": [\n 241,\n 154,\n 109,\n 4,\n 17,\n 177,\n 109,\n 188\n ]\n },\n {\n \"name\": \"Position\",\n \"discriminator\": [\n 170,\n 188,\n 143,\n 228,\n 122,\n 64,\n 247,\n 208\n ]\n },\n {\n \"name\": \"WithdrawalAccessList\",\n \"discriminator\": [\n 29,\n 144,\n 191,\n 76,\n 108,\n 26,\n 73,\n 234\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"PositionCloseEvent\",\n \"discriminator\": [\n 85,\n 5,\n 166,\n 100,\n 218,\n 87,\n 230,\n 129\n ]\n },\n {\n \"name\": \"PositionOpenEvent\",\n \"discriminator\": [\n 84,\n 127,\n 249,\n 160,\n 99,\n 95,\n 120,\n 120\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"AddressMismatch\",\n \"msg\": \"Address Mismatch\"\n },\n {\n \"code\": 6001,\n \"name\": \"ProgramMismatch\",\n \"msg\": \"Program Mismatch\"\n },\n {\n \"code\": 6002,\n \"name\": \"MissingRepay\",\n \"msg\": \"Missing Repay\"\n },\n {\n \"code\": 6003,\n \"name\": \"IncorrectOwner\",\n \"msg\": \"Incorrect Owner\"\n },\n {\n \"code\": 6004,\n \"name\": \"IncorrectProgramAuthority\",\n \"msg\": \"Incorrect Program Authority\"\n },\n {\n \"code\": 6005,\n \"name\": \"CannotBorrowBeforeRepay\",\n \"msg\": \"Cannot Borrow Before Repay\"\n },\n {\n \"code\": 6006,\n \"name\": \"UnknownInstruction\",\n \"msg\": \"Unknown Instruction\"\n },\n {\n \"code\": 6007,\n \"name\": \"ExpectedCollateralNotEnough\",\n \"msg\": \"Expected collateral not enough\"\n },\n {\n \"code\": 6008,\n \"name\": \"ForTesting\",\n \"msg\": \"TestError\"\n },\n {\n \"code\": 6009,\n \"name\": \"BlacklistedAccount\",\n \"msg\": \"Account is blacklisted\"\n },\n {\n \"code\": 6010,\n \"name\": \"AccessEntryAlreadyExists\",\n \"msg\": \"Access entry already exists\"\n },\n {\n \"code\": 6011,\n \"name\": \"AccessEntryNotFound\",\n \"msg\": \"Access entry not found\"\n },\n {\n \"code\": 6012,\n \"name\": \"UnauthorizedWithdrawal\",\n \"msg\": \"Unauthorized Withdrawal\"\n },\n {\n \"code\": 6013,\n \"name\": \"AccountAlreadyInitialized\",\n \"msg\": \"Account already initialized\"\n },\n {\n \"code\": 6014,\n \"name\": \"InvalidSignature\",\n \"msg\": \"The provided signature is invalid.\"\n },\n {\n \"code\": 6015,\n \"name\": \"InvalidOracle\",\n \"msg\": \"The provided oracle is invalid.\"\n },\n {\n \"code\": 6016,\n \"name\": \"InvalidSplitRatio\",\n \"msg\": \"Invalid split ratio. Must be between 1 and 99\"\n },\n {\n \"code\": 6017,\n \"name\": \"PositionsNotMergeable\",\n \"msg\": \"Positions cannot be merged - must have same pool, trader, and interest rate\"\n },\n {\n \"code\": 6018,\n \"name\": \"OnlyDelegateOperator\",\n \"msg\": \"Only delegate operator can execute TP\"\n },\n {\n \"code\": 6019,\n \"name\": \"InvalidDelegateType\",\n \"msg\": \"Invalid delegate type\"\n },\n {\n \"code\": 6020,\n \"name\": \"MissingRequiredPriceFeed\",\n \"msg\": \"Missing required price feed\"\n },\n {\n \"code\": 6021,\n \"name\": \"InvalidPrice\",\n \"msg\": \"Price must be greater than 0\"\n },\n {\n \"code\": 6022,\n \"name\": \"MathOverflow\",\n \"msg\": \"Arithmetic operation overflow\"\n }\n ],\n \"types\": [\n {\n \"name\": \"CreateTradingPoolArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"interest_rate\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"feed_id\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"max_exposure\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"open_ltv\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"Delegate\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"delegate_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"field_1\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"field_2\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"field_3\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"field_4\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"field_5\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"original_operator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"delegate_operator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"account\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"MigratePoolArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"feed_id\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"open_ltv\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"NodeWallet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"total_funds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_borrowed\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"maintenance_ltv\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"liquidation_ltv\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"node_operator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"Pool\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"interest_rate\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"collateral_type\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"max_borrow\",\n \"docs\": [\n \"Previously max_borrow. Can be repurposed again.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"node_wallet\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"max_exposure\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"current_exposure\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"qt_type\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"feed_id\",\n \"docs\": [\n \"Switchboard Oracle Quote Feed ID\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"open_ltv\",\n \"docs\": [\n \"The max loan-to-value (LTV) used to determine how much SOL can be borrowed per token (denoted in basis points).\"\n ],\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"Position\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"close_status_recall_timestamp\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"user_paid\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"collateral_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"trader\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"seed\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"close_timestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"closing_position_size\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"interest_rate\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"last_interest_collect\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"PositionCloseEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"user_paid\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"collateral_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"open_timestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"trader\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"close_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"close_timestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"closing_position_size\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"PositionOpenEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"user_paid\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"collateral_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"open_timestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"trader\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"UpdatePoolArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"open_ltv\",\n \"type\": {\n \"option\": \"u16\"\n }\n },\n {\n \"name\": \"interest_rate\",\n \"type\": {\n \"option\": \"u8\"\n }\n },\n {\n \"name\": \"max_exposure\",\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"feed_id\",\n \"type\": {\n \"option\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"WithdrawalAccessEntry\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"from_pubkey\",\n \"type\": \"string\"\n },\n {\n \"name\": \"to_pubkey\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"WithdrawalAccessList\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"access_entries\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"WithdrawalAccessEntry\"\n }\n }\n }\n }\n ]\n }\n }\n ],\n \"constants\": [\n {\n \"name\": \"MAX_BASIS_POINTS\",\n \"type\": \"u16\",\n \"value\": \"10000\"\n },\n {\n \"name\": \"ORACLE_MAX_AGE\",\n \"type\": \"u16\",\n \"value\": \"100\"\n },\n {\n \"name\": \"ORACLE_PUB_KEY\",\n \"type\": \"pubkey\",\n \"value\": \"joPUhu4So61QnYoGKy8yPDQsrq5xemKtyByHKwqQ7r4\"\n }\n ]\n}","import { PublicKey } from \"@solana/web3.js\";\nimport { ON_DEMAND_MAINNET_QUEUE } from \"@switchboard-xyz/on-demand\";\n\nexport const queuePubkey = ON_DEMAND_MAINNET_QUEUE;\n\nexport const USDC_MINT = new PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v');","import { OracleQuote } from \"@switchboard-xyz/on-demand\";\nimport { queuePubkey } from \"./constants\";\nimport { PublicKey } from \"@solana/web3.js\";\nimport { SURGE_FEEDS } from \"./crossbar\";\n\nexport function getOracleQuoteForFeedId(feedId: string) {\n const [oracleQuote] = OracleQuote.getCanonicalPubkey(\n queuePubkey,\n [feedId]\n )\n\n return oracleQuote;\n}\n\nexport function getOracleQuoteForCollateralType(collateralType: PublicKey) {\n const feed = SURGE_FEEDS.find(feed => feed.address === collateralType.toBase58());\n \n if (!feed) {\n throw new Error(`Quote feed not found for ${collateralType.toBase58()}`);\n }\n\n return getOracleQuoteForFeedId(feed.feedId);\n}","import { NATIVE_MINT } from \"@solana/spl-token\";\nimport { USDC_MINT } from \"./constants\";\nimport { Program } from \"@coral-xyz/anchor\";\nimport { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport { getQueue, isMainnetConnection, ON_DEMAND_DEVNET_QUEUE, ON_DEMAND_MAINNET_QUEUE } from \"@switchboard-xyz/on-demand\";\nimport { CrossbarClient } from \"@switchboard-xyz/common\";\nimport { retryWithBackoff } from \"./utils\";\nimport { Lavarage as LavarageSOL } from \"./idl/lavarageSOL\";\nimport { Lavarage as LavarageUSDC } from \"./idl/lavarageUSDC\";\n\nexport type ApiKeys = {\n birdeyeApiKey: string;\n};\n\nexport const SURGE_FEEDS = [\n {\n address: NATIVE_MINT.toBase58(),\n feedId: '0x822512ee9add93518eca1c105a38422841a76c590db079eebb283deb2c14caa9',\n label: 'SOL-USD',\n },\n {\n address: USDC_MINT.toBase58(),\n feedId: '0x883ea8295f70ae506e894679d124196bb07064ea530cefd835b58c33a5ab6549',\n label: 'USDC-USD',\n },\n];\n\n// TODO: should not be hardcoded, use class-based approach\nconst crossbarClient = new CrossbarClient(\"https://crossbar.switchboard.xyz\");\n\nfunction getVariableOverrides(apiKeys: ApiKeys) {\n return {\n BIRDEYE_API_KEY: apiKeys.birdeyeApiKey,\n };\n}\n\nexport async function getUpdateOracleIxs(program: Program<LavarageSOL | LavarageUSDC>, feedId: string, payer: PublicKey, apiKeys: ApiKeys): Promise<TransactionInstruction[]> {\n const queue = await getQueue({\n // @ts-expect-error @coral-xyz/anchor versions mismatch\n program,\n queueAddress: await isMainnetConnection(program.provider.connection) ? ON_DEMAND_MAINNET_QUEUE : ON_DEMAND_DEVNET_QUEUE,\n });\n\n return await retryWithBackoff(async () => await queue.fetchManagedUpdateIxs(\n crossbarClient,\n [feedId],\n {\n numSignatures: 1,\n variableOverrides: getVariableOverrides(apiKeys),\n instructionIdx: 0,\n payer,\n }\n ));\n}\n","{\n \"address\": \"CRSeeBqjDnm3UPefJ9gxrtngTsnQRhEJiTA345Q83X3v\",\n \"metadata\": {\n \"name\": \"lavarage\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\"\n },\n \"instructions\": [\n {\n \"name\": \"lp_operator_create_trading_pool\",\n \"discriminator\": [\n 182,\n 99,\n 232,\n 188,\n 202,\n 38,\n 71,\n 211\n ],\n \"accounts\": [\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"node_wallet\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"interest_rate\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"lp_operator_create_node_wallet\",\n \"discriminator\": [\n 193,\n 83,\n 139,\n 125,\n 229,\n 111,\n 150,\n 164\n ],\n \"accounts\": [\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"lp_operator_fund_node_wallet\",\n \"discriminator\": [\n 204,\n 29,\n 191,\n 156,\n 11,\n 132,\n 135,\n 61\n ],\n \"accounts\": [\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"funder\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lp_operator_withdraw_from_node_wallet\",\n \"discriminator\": [\n 162,\n 244,\n 237,\n 100,\n 96,\n 130,\n 60,\n 117\n ],\n \"accounts\": [\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"funder\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"withdrawal_access_list\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lp_operator_update_max_borrow\",\n \"discriminator\": [\n 47,\n 66,\n 56,\n 156,\n 203,\n 107,\n 44,\n 148\n ],\n \"accounts\": [\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lp_operator_update_max_exposure\",\n \"discriminator\": [\n 43,\n 226,\n 68,\n 201,\n 78,\n 18,\n 155,\n 107\n ],\n \"accounts\": [\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lp_operator_update_interest_rate\",\n \"discriminator\": [\n 25,\n 217,\n 30,\n 158,\n 210,\n 240,\n 173,\n 10\n ],\n \"accounts\": [\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"lp_liquidate\",\n \"discriminator\": [\n 36,\n 244,\n 70,\n 20,\n 135,\n 159,\n 86,\n 149\n ],\n \"accounts\": [\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"position_account\",\n \"writable\": true\n },\n {\n \"name\": \"trader\",\n \"writable\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"from_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"clock\"\n },\n {\n \"name\": \"operator\",\n \"signer\": true\n },\n {\n \"name\": \"oracle\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"position_size\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lp_collect_interest\",\n \"discriminator\": [\n 181,\n 55,\n 21,\n 23,\n 53,\n 171,\n 73,\n 115\n ],\n \"accounts\": [\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"position_account\",\n \"writable\": true\n },\n {\n \"name\": \"trader\",\n \"writable\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"from_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"clock\"\n },\n {\n \"name\": \"operator\",\n \"signer\": true\n },\n {\n \"name\": \"oracle\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"price\",\n \"type\": \"u128\"\n }\n ]\n },\n {\n \"name\": \"trading_open_borrow\",\n \"discriminator\": [\n 53,\n 88,\n 1,\n 144,\n 58,\n 65,\n 182,\n 60\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"instructions\"\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"clock\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"fee_receipient\",\n \"writable\": true\n },\n {\n \"name\": \"position_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"collateral_token_program\"\n },\n {\n \"name\": \"associated_token_program\"\n },\n {\n \"name\": \"collateral_mint\"\n },\n {\n \"name\": \"users_token_account\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"position_size\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"user_pays\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"trading_open_borrow_with_referral\",\n \"discriminator\": [\n 126,\n 119,\n 109,\n 0,\n 131,\n 111,\n 251,\n 238\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"instructions\"\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"clock\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"fee_receipient\",\n \"writable\": true\n },\n {\n \"name\": \"position_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"collateral_token_program\"\n },\n {\n \"name\": \"associated_token_program\"\n },\n {\n \"name\": \"collateral_mint\"\n },\n {\n \"name\": \"users_token_account\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"position_size\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"user_pays\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"discount_bps\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"referral_bps\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"trading_open_add_collateral\",\n \"discriminator\": [\n 21,\n 160,\n 90,\n 163,\n 189,\n 122,\n 164,\n 50\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"associated_token_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"max_interest_rate\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"trading_close_borrow_collateral\",\n \"discriminator\": [\n 160,\n 104,\n 113,\n 179,\n 42,\n 80,\n 8,\n 16\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"instructions\"\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"from_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"clock\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"associated_token_program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"trading_data_accrued_interest\",\n \"discriminator\": [\n 227,\n 39,\n 217,\n 0,\n 88,\n 3,\n 25,\n 115\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"clock\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"fee_receipient\",\n \"writable\": true\n }\n ],\n \"args\": [],\n \"returns\": \"u64\"\n },\n {\n \"name\": \"trading_close_repay_sol\",\n \"discriminator\": [\n 74,\n 90,\n 5,\n 111,\n 35,\n 171,\n 135,\n 56\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"clock\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"fee_receipient\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"closing_position_size\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"close_type\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"trading_close_repay_sol_with_referral\",\n \"discriminator\": [\n 113,\n 176,\n 203,\n 24,\n 224,\n 228,\n 31,\n 35\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"clock\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"fee_receipient\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"closing_position_size\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"close_type\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"discount_bps\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"referral_bps\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"trading_close_partial_repay_sol\",\n \"discriminator\": [\n 29,\n 236,\n 62,\n 88,\n 170,\n 105,\n 68,\n 2\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"clock\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"fee_receipient\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"repay_percentage\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"trading_close_position_account\",\n \"discriminator\": [\n 112,\n 178,\n 77,\n 58,\n 204,\n 138,\n 62,\n 85\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"fee_receipient\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"trading_close_pool_account\",\n \"discriminator\": [\n 226,\n 22,\n 159,\n 126,\n 37,\n 223,\n 57,\n 107\n ],\n \"accounts\": [\n {\n \"name\": \"pool_account\",\n \"writable\": true\n },\n {\n \"name\": \"operator\",\n \"signer\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"fee_receipient\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"sync_node_wallet\",\n \"discriminator\": [\n 185,\n 205,\n 57,\n 48,\n 112,\n 135,\n 240,\n 250\n ],\n \"accounts\": [\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"funder\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"trading_create_tp_delegate\",\n \"discriminator\": [\n 174,\n 200,\n 59,\n 127,\n 100,\n 216,\n 183,\n 8\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"writable\": true\n },\n {\n \"name\": \"original_operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"delegated_account\"\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"price\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"lower_threshold\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"delegate_operator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"partial_percentage\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"trading_remove_tp_delegate\",\n \"discriminator\": [\n 88,\n 18,\n 149,\n 143,\n 124,\n 43,\n 68,\n 178\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"writable\": true\n },\n {\n \"name\": \"original_operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"delegated_account\"\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"delegate_execute_tp\",\n \"discriminator\": [\n 207,\n 251,\n 148,\n 38,\n 214,\n 153,\n 54,\n 242\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"writable\": true\n },\n {\n \"name\": \"delegate_operator\",\n \"signer\": true\n },\n {\n \"name\": \"account\",\n \"writable\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"position_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"delegate_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"mint\"\n }\n ],\n \"args\": [\n {\n \"name\": \"seed\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"delegate_close_position\",\n \"discriminator\": [\n 100,\n 249,\n 236,\n 96,\n 249,\n 195,\n 17,\n 157\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"writable\": true\n },\n {\n \"name\": \"delegate_operator\",\n \"signer\": true\n },\n {\n \"name\": \"account\",\n \"writable\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"node_wallet_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"delegate_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"fee_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"profit_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"qt_mint\"\n }\n ],\n \"args\": [\n {\n \"name\": \"closing_position_size\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"trading_management_split_position\",\n \"discriminator\": [\n 230,\n 180,\n 252,\n 200,\n 8,\n 246,\n 131,\n 54\n ],\n \"accounts\": [\n {\n \"name\": \"original_position\",\n \"writable\": true\n },\n {\n \"name\": \"new_position_one\",\n \"writable\": true\n },\n {\n \"name\": \"new_position_two\",\n \"writable\": true\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"original_position_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"new_position_token_account_one\",\n \"writable\": true\n },\n {\n \"name\": \"new_position_token_account_two\",\n \"writable\": true\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"split_ratio_bps\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"seed1\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"seed2\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"init_withdrawal_access_list\",\n \"discriminator\": [\n 118,\n 110,\n 194,\n 104,\n 220,\n 145,\n 69,\n 31\n ],\n \"accounts\": [\n {\n \"name\": \"withdrawal_access_list\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"add_withdrawal_access\",\n \"discriminator\": [\n 45,\n 247,\n 214,\n 153,\n 224,\n 115,\n 136,\n 178\n ],\n \"accounts\": [\n {\n \"name\": \"withdrawal_access_list\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\"\n },\n {\n \"name\": \"authority\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"to_pubkey\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"remove_withdrawal_access\",\n \"discriminator\": [\n 218,\n 186,\n 7,\n 130,\n 180,\n 40,\n 111,\n 122\n ],\n \"accounts\": [\n {\n \"name\": \"withdrawal_access_list\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"from_pubkey\",\n \"type\": \"string\"\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"Delegate\",\n \"discriminator\": [\n 92,\n 145,\n 166,\n 111,\n 11,\n 38,\n 38,\n 247\n ]\n },\n {\n \"name\": \"NodeWallet\",\n \"discriminator\": [\n 48,\n 117,\n 214,\n 115,\n 125,\n 23,\n 94,\n 246\n ]\n },\n {\n \"name\": \"Pool\",\n \"discriminator\": [\n 241,\n 154,\n 109,\n 4,\n 17,\n 177,\n 109,\n 188\n ]\n },\n {\n \"name\": \"Position\",\n \"discriminator\": [\n 170,\n 188,\n 143,\n 228,\n 122,\n 64,\n 247,\n 208\n ]\n },\n {\n \"name\": \"WithdrawalAccessList\",\n \"discriminator\": [\n 29,\n 144,\n 191,\n 76,\n 108,\n 26,\n 73,\n 234\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"PositionCloseEvent\",\n \"discriminator\": [\n 85,\n 5,\n 166,\n 100,\n 218,\n 87,\n 230,\n 129\n ]\n },\n {\n \"name\": \"PositionOpenEvent\",\n \"discriminator\": [\n 84,\n 127,\n 249,\n 160,\n 99,\n 95,\n 120,\n 120\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"AddressMismatch\",\n \"msg\": \"Address Mismatch\"\n },\n {\n \"code\": 6001,\n \"name\": \"ProgramMismatch\",\n \"msg\": \"Program Mismatch\"\n },\n {\n \"code\": 6002,\n \"name\": \"MissingRepay\",\n \"msg\": \"Missing Repay\"\n },\n {\n \"code\": 6003,\n \"name\": \"IncorrectOwner\",\n \"msg\": \"Incorrect Owner\"\n },\n {\n \"code\": 6004,\n \"name\": \"IncorrectProgramAuthority\",\n \"msg\": \"Incorrect Program Authority\"\n },\n {\n \"code\": 6005,\n \"name\": \"CannotBorrowBeforeRepay\",\n \"msg\": \"Cannot Borrow Before Repay\"\n },\n {\n \"code\": 6006,\n \"name\": \"UnknownInstruction\",\n \"msg\": \"Unknown Instruction\"\n },\n {\n \"code\": 6007,\n \"name\": \"ExpectedCollateralNotEnough\",\n \"msg\": \"Expected collateral not enough\"\n },\n {\n \"code\": 6008,\n \"name\": \"ForTesting\",\n \"msg\": \"TestError\"\n },\n {\n \"code\": 6009,\n \"name\": \"BlacklistedAccount\",\n \"msg\": \"Account is blacklisted\"\n },\n {\n \"code\": 6010,\n \"name\": \"CloseStatusRecallTimestampZero\",\n \"msg\": \"Close status recall timestamp is zero\"\n }\n ],\n \"types\": [\n {\n \"name\": \"WithdrawalAccessEntry\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"from_pubkey\",\n \"type\": \"string\"\n },\n {\n \"name\": \"to_pubkey\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"LendingErrors\",\n \"docs\": [\n \"Errors for this program\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"AddressMismatch\"\n },\n {\n \"name\": \"ProgramMismatch\"\n },\n {\n \"name\": \"MissingRepay\"\n },\n {\n \"name\": \"IncorrectOwner\"\n },\n {\n \"name\": \"IncorrectProgramAuthority\"\n },\n {\n \"name\": \"CannotBorrowBeforeRepay\"\n },\n {\n \"name\": \"UnknownInstruction\"\n },\n {\n \"name\": \"ExpectedCollateralNotEnough\"\n },\n {\n \"name\": \"AccessEntryAlreadyExists\"\n },\n {\n \"name\": \"AccessEntryNotFound\"\n },\n {\n \"name\": \"UnauthorizedWithdrawal\"\n },\n {\n \"name\": \"AccountAlreadyInitialized\"\n }\n ]\n }\n },\n {\n \"name\": \"ErrorCode\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"InvalidSignature\"\n },\n {\n \"name\": \"InvalidOracle\"\n }\n ]\n }\n },\n {\n \"name\": \"ErrorCode\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"InvalidSplitRatio\"\n },\n {\n \"name\": \"PositionsNotMergeable\"\n }\n ]\n }\n },\n {\n \"name\": \"ErrorCode\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"OnlyDelegateOperator\"\n },\n {\n \"name\": \"AddressMismatch\"\n },\n {\n \"name\": \"InvalidDelegateType\"\n }\n ]\n }\n },\n {\n \"name\": \"PositionCloseType\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"ClosedByUser\"\n },\n {\n \"name\": \"Liquidated\"\n }\n ]\n }\n },\n {\n \"name\": \"Delegate\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"delegate_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"field1\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"field2\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"field3\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"field4\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"field5\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"original_operator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"delegate_operator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"account\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"NodeWallet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"total_funds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_borrowed\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"maintenance_ltv\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"liquidation_ltv\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"node_operator\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"Pool\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"interest_rate\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"collateral_type\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"max_borrow\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"node_wallet\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"max_exposure\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"current_exposure\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"Position\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"close_status_recall_timestamp\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"user_paid\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"collateral_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"trader\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"seed\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"close_timestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"closing_position_size\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"interest_rate\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"last_interest_collect\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"WithdrawalAccessList\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"access_entries\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"WithdrawalAccessEntry\"\n }\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"PositionCloseEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"user_paid\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"collateral_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"open_timestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"trader\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"close_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"close_timestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"closing_position_size\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"PositionOpenEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"user_paid\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"collateral_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"open_timestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"trader\",\n \"type\": \"pubkey\"\n }\n ]\n }\n }\n ]\n}","import { Program } from \"@coral-xyz/anchor\";\nimport LavarageSOLIdl from \"./idl/lavarageSOL.json\";\n\nexport async function retryWithBackoff<T>(\n fn: () => Promise<T>,\n maxRetries: number = 5,\n initialDelay: number = 1000,\n): Promise<T> {\n let lastError: any;\n\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error;\n\n if (attempt < maxRetries - 1) {\n // exponentially increase delay\n const delay = initialDelay * Math.pow(2, attempt);\n await new Promise(resolve => setTimeout(resolve, delay));\n }\n }\n }\n\n throw lastError;\n}\n\nexport function stringToU8Array(input: string): number[] {\n const encoder = new TextEncoder();\n const encoded = encoder.encode(input);\n \n if (encoded.length > 32) {\n throw new Error(`String too long: ${encoded.length} bytes (max 32)`);\n }\n \n // Create array of 32 zeros and fill with encoded bytes\n const result = new Array(32).fill(0);\n for (let i = 0; i < encoded.length; i++) {\n result[i] = encoded[i];\n }\n \n return result;\n}\n\nexport function u8ArrayToString(input: number[]): string {\n // Strip trailing zero-padding and decode\n const end = input.indexOf(0);\n const bytes = new Uint8Array(end === -1 ? input : input.slice(0, end));\n const decoder = new TextDecoder(\"utf-8\", { fatal: true });\n try {\n return decoder.decode(bytes);\n } catch {\n // Not valid UTF-8 (e.g. raw binary/hash); return hex\n return '0x' + Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n }\n}\n\nexport function isSolProgram(program: Program<any>): boolean {\n return program.programId.toBase58() === LavarageSOLIdl.address;\n}","import {\n BigNumberish,\n Contract,\n ContractTransaction,\n Provider,\n ZeroAddress,\n} from \"ethers\";\nimport { borrowerOperationsAbi } from \"./abi/borrowerOperations\";\nimport { tokenHolderAbi } from \"./abi/tokenHolderAbi\";\nimport {\n BuyEvent,\n SellEvent,\n LiquidationEvent,\n Loan,\n Collateral,\n} from \"./interfaces/evm\";\n\n/**\n * Creates an unsigned transaction to open a trading position on EVM chain\n * @group EVM\n * @category Trading\n * @param provider - Ethers provider\n * @param borrowerOpsContractAddress - BorrowerOperations contract address\n * @param params - Trading parameters\n * @returns Unsigned transaction object\n * \n * @example\n * ```typescript\n * const tx = await openPositionEvm(\n * provider,\n * \"0x123...\", // contract address\n * {\n * buyingCode: \"0x...\", // 1inch swap data\n * tokenCollateral: \"0x456...\", // USDC address\n * borrowAmount: ethers.parseEther(\"2\"),\n * tokenHolder: \"0x789...\",\n * inchRouter: \"0xabc...\",\n * buyerContribution: ethers.parseEther(\"1\") // 1 ETH margin\n * }\n * );\n * \n * const receipt = await signer.sendTransaction(tx);\n * ```\n */\nexport const openPositionEvm = async (\n provider: Provider,\n borrowerOpsContractAddress: string,\n {\n buyingCode,\n tokenCollateral,\n borrowAmount,\n tokenHolder,\n inchRouter,\n integratorFeeAddress = ZeroAddress,\n buyerContribution,\n tokenApproval,\n gasLimit,\n gasPrice,\n }: {\n buyingCode: string;\n tokenCollateral: string;\n borrowAmount: BigNumberish;\n tokenHolder: string;\n inchRouter: string;\n integratorFeeAddress?: string;\n buyerContribution: BigNumberish;\n tokenApproval: string;\n gasLimit?: string | number;\n gasPrice?: string | number;\n }\n): Promise<ContractTransaction> => {\n const contract = new Contract(\n borrowerOpsContractAddress,\n borrowerOperationsAbi,\n provider\n );\n\n const txOptions: {\n value: BigNumberish;\n gasLimit?: BigNumberish;\n gasPrice?: BigNumberish;\n } = {\n value: buyerContribution,\n };\n\n if (gasLimit) txOptions.gasLimit = gasLimit;\n if (gasPrice) txOptions.gasPrice = gasPrice;\n\n return contract.buy.populateTransaction(\n buyingCode,\n tokenCollateral,\n borrowAmount,\n tokenHolder,\n inchRouter,\n integratorFeeAddress,\n tokenApproval,\n txOptions\n );\n};\n\n/**\n * Creates an unsigned transaction to close a trading position on EVM chain\n * @group EVM\n * @category Trading\n * @param provider - Ethers provider\n * @param borrowerOpsContractAddress - BorrowerOperations contract address\n * @param params - Trading parameters\n * @returns Unsigned transaction object\n * \n * @example\n * ```typescript\n * const tx = await closePositionEvm(\n * provider,\n * \"0x123...\", // contract address\n * {\n * loanId: 1,\n * sellingCode: \"0x...\", // 1inch swap data for selling\n * tokenHolder: \"0x789...\",\n * inchRouter: \"0xabc...\",\n * integratorFeeAddress: \"0xdef...\" // optional\n * }\n * );\n * \n * const receipt = await signer.sendTransaction(tx);\n * ```\n */\nexport const closePositionEvm = async (\n provider: Provider,\n borrowerOpsContractAddress: string,\n {\n loanId,\n sellingCode,\n tokenHolder,\n inchRouter,\n integratorFeeAddress = ZeroAddress,\n gasLimit,\n gasPrice,\n tokenApproval,\n }: {\n loanId: BigNumberish;\n sellingCode: string;\n tokenHolder: string;\n inchRouter: string;\n integratorFeeAddress?: string;\n gasLimit?: string | number;\n gasPrice?: string | number;\n tokenApproval: string;\n }\n): Promise<ContractTransaction> => {\n const contract = new Contract(\n borrowerOpsContractAddress,\n borrowerOperationsAbi,\n provider\n );\n\n const txOptions: { gasLimit?: BigNumberish; gasPrice?: BigNumberish } = {};\n\n if (gasLimit) txOptions.gasLimit = gasLimit;\n if (gasPrice) txOptions.gasPrice = gasPrice;\n\n return contract.sell.populateTransaction(\n loanId,\n sellingCode,\n tokenHolder,\n inchRouter,\n integratorFeeAddress,\n tokenApproval,\n Object.keys(txOptions).length > 0 ? txOptions : {}\n );\n};\n\n/**\n * Get all positions from active loans\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param tokenHolderContractAddress - TokenHolder contract address\n * @returns Array of active positions\n * \n * @example\n * ```typescript\n * const positions = await getPositionsEvm(\n * provider,\n * \"0x123...\" // TokenHolder address\n * );\n * \n * console.log(`Found ${positions.length} active positions`);\n * \n * positions.forEach(pos => {\n * console.log(`Loan #${pos.loanId}: ${pos.collateralAmount} collateral`);\n * });\n * ```\n */\nexport async function getPositionsEvm(\n provider: Provider,\n tokenHolderContractAddress: string\n): Promise<BuyEvent[]> {\n const contract = new Contract(\n tokenHolderContractAddress,\n tokenHolderAbi,\n provider\n );\n\n const activeLoanCount = await contract.getActiveLoanCount();\n const batchSize = 100; // Process in batches to avoid gas limits\n const positions: BuyEvent[] = [];\n\n // Fetch loans in batches\n for (let i = 0; i < activeLoanCount; i += batchSize) {\n const currentBatchSize = Math.min(Number(activeLoanCount) - i, batchSize);\n const loans = await contract.getActiveLoansBatch(i, currentBatchSize);\n\n // Convert each loan to a BuyEvent format\n for (const loan of loans) {\n positions.push({\n trader: loan.borrower,\n tokenCollateral: loan.collateral.collateralAddress,\n loanId: loan.id,\n openingPositionSize: loan.amount + loan.userPaid,\n collateralAmount: loan.collateralAmount,\n initialMargin: loan.userPaid,\n transactionHash: \"\", // Not available from loan data\n timestamp: Number(loan.timestamp),\n interestRate: loan.collateral.interestRate,\n });\n }\n }\n\n return positions;\n}\n\n/**\n * Get closed positions from events\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param borrowerOpsContractAddress - BorrowerOperations contract address\n * @param fromBlock - Block to start searching from\n * @returns Array of Sell events representing closed positions\n * \n * @example\n * ```typescript\n * const closedPositions = await getClosedPositionsEvm(\n * provider,\n * \"0x123...\", // BorrowerOps address\n * 50000000 // optional: custom start block\n * );\n * \n * console.log(`Found ${closedPositions.length} closed positions`);\n * \n * // Check profit/loss\n * closedPositions.forEach(pos => {\n * console.log(`Loan #${pos.loanId}: ${pos.profit > 0 ? 'Profit' : 'Loss'}`);\n * });\n */\nexport async function getClosedPositionsEvm(\n provider: Provider,\n borrowerOpsContractAddress: string,\n fromBlock: number = 42960845 // block contract was initialized\n): Promise<SellEvent[]> {\n const contract = new Contract(\n borrowerOpsContractAddress,\n borrowerOperationsAbi,\n provider\n );\n\n const currentBlock = await provider.getBlockNumber();\n const filter = contract.filters.Sell();\n const allEvents: any[] = [];\n \n // Query in chunks of 10,000 blocks\n for (let start = fromBlock; start <= currentBlock; start += 10000) {\n const end = Math.min(start + 9999, currentBlock);\n const events = await contract.queryFilter(filter, start, end);\n allEvents.push(...events);\n }\n\n return Promise.all(\n allEvents.map(async (event: any) => {\n const { buyer, tokenHolder, tokenCollateral, loanId, closingPositionSize, profit } =\n event.args as unknown as any;\n\n const block = await provider.getBlock(event.blockNumber);\n const timestamp = block ? Number(block.timestamp) : 0;\n\n return {\n trader: buyer,\n tokenCollateral: tokenHolder,\n loanId,\n closingPositionSize,\n profit,\n transactionHash: event.transactionHash,\n timestamp,\n };\n })\n );\n}\n\n/**\n * Get liquidated positions from events\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param borrowerOpsContractAddress - BorrowerOperations contract address\n * @param fromBlock - Block to start searching from\n * @returns Array of Liquidation events representing liquidated positions\n * @example\n * ```typescript\n * const liquidations = await getLiquidatedPositionsEvm(\n * provider,\n * \"0x123...\", // BorrowerOps address\n * 50000000 // optional: custom start block\n * );\n * \n * console.log(`Found ${liquidations.length} liquidated positions`);\n * \n * // Analyze liquidation data\n * liquidations.forEach(liq => {\n * console.log(`Loan #${liq.loanId}: liquidated ${liq.closingPositionSize}`);\n * console.log(`Liquidator repaid: ${liq.liquidatorRepaidAmount}`);\n * });\n * ```\n */\nexport async function getLiquidatedPositionsEvm(\n provider: Provider,\n borrowerOpsContractAddress: string,\n fromBlock: number = 42960845 // block contract was initialized\n): Promise<LiquidationEvent[]> {\n const contract = new Contract(\n borrowerOpsContractAddress,\n borrowerOperationsAbi,\n provider\n );\n\n const currentBlock = await provider.getBlockNumber();\n const filter = contract.filters.Liquidation();\n const allEvents: any[] = [];\n \n // Query in chunks of 10,000 blocks\n for (let start = fromBlock; start <= currentBlock; start += 10000) {\n const end = Math.min(start + 9999, currentBlock);\n const events = await contract.queryFilter(filter, start, end);\n allEvents.push(...events);\n }\n\n return Promise.all(\n allEvents.map(async (event: any) => {\n const {\n borrower,\n tokenCollateral,\n loanId,\n closingPositionSize,\n liquidatorRepaidAmount,\n } = event.args as unknown as any;\n\n const block = await provider.getBlock(event.blockNumber);\n const timestamp = block ? Number(block.timestamp) : 0;\n\n return {\n trader: borrower,\n tokenCollateral,\n loanId,\n closingPositionSize,\n liquidatorRepaidAmount,\n transactionHash: event.transactionHash,\n timestamp,\n };\n })\n );\n}\n\n/**\n * Get a loan by its ID from TokenHolder contract\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param tokenHolderContractAddress - Address of the TokenHolder contract\n * @param loanId - ID of the loan to retrieve\n * @returns Loan object\n * \n * @example\n * ```typescript\n * const loan = await getLoanEvm(\n * provider,\n * \"0x123...\", // TokenHolder address\n * 42 // loan ID\n * );\n * \n * console.log(`Loan #${loan.id}`);\n * console.log(`Borrower: ${loan.borrower}`);\n * console.log(`Amount: ${loan.amount}`);\n * console.log(`Collateral: ${loan.collateralAmount}`);\n * ```\n */\nexport async function getLoanEvm(\n provider: Provider,\n tokenHolderContractAddress: string,\n loanId: BigNumberish\n): Promise<Loan> {\n const contract = new Contract(\n tokenHolderContractAddress,\n tokenHolderAbi,\n provider\n );\n return contract.loans(loanId);\n}\n\n/**\n * Get all active loans for a user\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param tokenHolderContractAddress - Address of the TokenHolder contract\n * @param userAddress - Address of the user to get loans for\n * @returns Array of loans belonging to the user\n * \n * @example\n * ```typescript\n * const userLoans = await getUserLoansEvm(\n * provider,\n * \"0x123...\", // TokenHolder address\n * \"0x456...\" // user address\n * );\n * \n * console.log(`User has ${userLoans.length} active loans`);\n * \n * userLoans.forEach(loan => {\n * console.log(`Loan #${loan.id}: ${loan.amount} borrowed`);\n * });\n * ```\n */\nexport async function getUserLoansEvm(\n provider: Provider,\n tokenHolderContractAddress: string,\n userAddress: string\n): Promise<Loan[]> {\n const contract = new Contract(\n tokenHolderContractAddress,\n tokenHolderAbi,\n provider\n );\n const nextLoanId = await contract.nextLoanId();\n const userLoans: Loan[] = [];\n\n // Iterate through all loans to find the ones belonging to the user\n for (let i = 0; i < nextLoanId; i++) {\n const loan = await contract.loans(i);\n if (loan.borrower.toLowerCase() === userAddress.toLowerCase()) {\n userLoans.push(loan);\n }\n }\n\n return userLoans;\n}\n\n/**\n * Get collateral information for a specific token\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param tokenHolderContractAddress - Address of the TokenHolder contract\n * @param collateralAddress - Address of the collateral token\n * @returns Collateral object\n * \n * @example\n * ```typescript\n * const collateralInfo = await getCollateralInfoEvm(\n * provider,\n * \"0x123...\", // TokenHolder address\n * \"0x456...\" // USDC or other collateral token address\n * );\n * \n * console.log(`Collateral: ${collateralInfo.symbol}`);\n * console.log(`Max LTV: ${collateralInfo.maxLTV}`);\n * console.log(`Liquidation threshold: ${collateralInfo.liquidationThreshold}`);\n * ```\n */\nexport async function getCollateralInfoEvm(\n provider: Provider,\n tokenHolderContractAddress: string,\n collateralAddress: string\n): Promise<Collateral> {\n const contract = new Contract(\n tokenHolderContractAddress,\n tokenHolderAbi,\n provider\n );\n return contract.collateralMapping(collateralAddress);\n}\n\n/**\n * Get all available collateral information\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param tokenHolderContractAddress - Address of the TokenHolder contract\n * @param collateralAddresses - Array of collateral token addresses\n * @returns Array of active collaterals\n * \n * @example\n * ```typescript\n * const collaterals = await getOffersEvm(\n * provider,\n * \"0x123...\", // TokenHolder address\n * [\"0x456...\", \"0x789...\", \"0xabc...\"] // token addresses to check\n * );\n * \n * console.log(`Found ${collaterals.length} available collaterals`);\n * \n * collaterals.forEach(({ address, collateral }) => {\n * console.log(`Token ${address}: LTV ${collateral.maxLTV}%`);\n * });\n * ```\n */\nexport async function getOffersEvm(\n provider: Provider,\n tokenHolderContractAddress: string,\n collateralAddresses: string[]\n): Promise<Array<{ address: string; collateral: Collateral }>> {\n const contract = new Contract(\n tokenHolderContractAddress,\n tokenHolderAbi,\n provider\n );\n const activeCollaterals = [];\n\n for (const address of collateralAddresses) {\n const collateral = await contract.collateralMapping(address);\n //if (collateral.active) {\n activeCollaterals.push({\n address,\n collateral,\n });\n //}\n }\n\n return activeCollaterals;\n}\n\n/**\n * Get the opening fee percentage\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param borrowerOpsContractAddress - BorrowerOperations contract address\n * @returns Opening fee as a BigNumber\n * \n * @example\n * ```typescript\n * const openingFee = await getOpeningFeeEvm(\n * provider,\n * \"0x123...\" // BorrowerOps address\n * );\n * \n * // Convert to percentage (assuming 18 decimals)\n * const feePercent = Number(openingFee) / 1e16; // e.g., 0.5%\n * console.log(`Opening fee: ${feePercent}%`);\n * ```\n */\nexport async function getOpeningFeeEvm(\n provider: Provider,\n borrowerOpsContractAddress: string\n): Promise<bigint> {\n const contract = new Contract(\n borrowerOpsContractAddress,\n borrowerOperationsAbi,\n provider\n );\n return contract.openingFee();\n}\n\n/**\n * Get the profit fee percentage\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param borrowerOpsContractAddress - BorrowerOperations contract address\n * @returns Profit fee as a BigNumber\n * \n * @example\n * ```typescript\n * const profitFee = await getProfitFeeEvm(\n * provider,\n * \"0x123...\" // BorrowerOps address\n * );\n * \n * // Convert to percentage (assuming 18 decimals)\n * const feePercent = Number(profitFee) / 1e16; // e.g., 1%\n * console.log(`Profit fee: ${feePercent}%`);\n * ```\n */\nexport async function getProfitFeeEvm(\n provider: Provider,\n borrowerOpsContractAddress: string\n): Promise<bigint> {\n const contract = new Contract(\n borrowerOpsContractAddress,\n borrowerOperationsAbi,\n provider\n );\n return contract.profitFee();\n}\n\n/**\n * Get the token balance of the token holder contract\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param tokenHolderContractAddress - Address of the TokenHolder contract\n * @returns Token balance as a BigNumber\n * \n * @example\n * ```typescript\n * const balance = await getTokenBalanceEvm(\n * provider,\n * \"0x123...\" // TokenHolder address\n * );\n * \n * // Format for display (assuming 18 decimals)\n * const formatted = ethers.formatEther(balance);\n * console.log(`Contract balance: ${formatted} ETH`);\n * ```\n */\nexport async function getTokenBalanceEvm(\n provider: Provider,\n tokenHolderContractAddress: string\n): Promise<bigint> {\n const contract = new Contract(\n tokenHolderContractAddress,\n tokenHolderAbi,\n provider\n );\n return contract.getBalance();\n}\n\n/**\n * Get the active loan count\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param tokenHolderContractAddress - Address of the TokenHolder contract\n * @returns Number of active loans\n * \n * @example\n * ```typescript\n * const loanCount = await getActiveLoanCountEvm(\n * provider,\n * \"0x123...\" // TokenHolder address\n * );\n * \n * console.log(`Total active loans: ${loanCount}`);\n * \n * // Use for statistics or monitoring\n * if (loanCount > 1000n) {\n * console.log(\"High activity detected\");\n * }\n * ```\n */\nexport async function getActiveLoanCountEvm(\n provider: Provider,\n tokenHolderContractAddress: string\n): Promise<bigint> {\n const contract = new Contract(\n tokenHolderContractAddress,\n tokenHolderAbi,\n provider\n );\n return contract.getActiveLoanCount();\n}\n\n/**\n * Get a batch of active loans\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param tokenHolderContractAddress - Address of the TokenHolder contract\n * @param startIndex - Starting index in the activeLoanIds array\n * @param batchSize - Number of loans to retrieve\n * @returns Array of active loans\n * \n * @example\n * ```typescript\n * const loans = await getActiveLoansBatchEvm(\n * provider,\n * \"0x123...\", // TokenHolder address\n * 0, // start from first loan\n * 100 // get 100 loans\n * );\n * \n * console.log(`Retrieved ${loans.length} loans`);\n * \n * // Process batch\n * loans.forEach(loan => {\n * console.log(`Loan #${loan.id}: ${loan.borrower}`);\n * });\n * ```\n */\nexport async function getActiveLoansBatchEvm(\n provider: Provider,\n tokenHolderContractAddress: string,\n startIndex: BigNumberish,\n batchSize: BigNumberish\n): Promise<Loan[]> {\n const contract = new Contract(\n tokenHolderContractAddress,\n tokenHolderAbi,\n provider\n );\n return contract.getActiveLoansBatch(startIndex, batchSize);\n}\n\n/**\n * Get all loans for a specific borrower\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param tokenHolderContractAddress - Address of the TokenHolder contract\n * @param borrowerAddress - Address of the borrower\n * @returns Array of loans belonging to the borrower\n * \n * @example\n * ```typescript\n * const userLoans = await getLoansByBorrowerEvm(\n * provider,\n * \"0x123...\", // TokenHolder address\n * \"0x456...\" // borrower address\n * );\n * \n * console.log(`Borrower has ${userLoans.length} loans`);\n * \n * userLoans.forEach(loan => {\n * console.log(`Loan #${loan.id}: ${loan.collateralAmount} collateral`);\n * });\n * ```\n */\nexport async function getLoansByBorrowerEvm(\n provider: Provider,\n tokenHolderContractAddress: string,\n borrowerAddress: string\n): Promise<Loan[]> {\n const contract = new Contract(\n tokenHolderContractAddress,\n tokenHolderAbi,\n provider\n );\n return contract.getLoansByBorrower(borrowerAddress);\n}\n\n/**\n * Get current exposure for a collateral\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param tokenHolderContractAddress - Address of the TokenHolder contract\n * @param collateralAddress - Address of the collateral token\n * @returns Current exposure as a BigNumber\n * \n * @example\n * ```typescript\n * const exposure = await getCollateralExposureEvm(\n * provider,\n * \"0x123...\", // TokenHolder address\n * \"0x456...\" // collateral token address\n * );\n * \n * console.log(`Current exposure: ${ethers.formatEther(exposure)}`);\n * \n * // Check if near limit\n * const maxExposure = 1000000n;\n * if (exposure > maxExposure * 90n / 100n) {\n * console.log(\"Warning: 90% exposure reached\");\n * }\n * ```\n */\nexport async function getCollateralExposureEvm(\n provider: Provider,\n tokenHolderContractAddress: string,\n collateralAddress: string\n): Promise<bigint> {\n const contract = new Contract(\n tokenHolderContractAddress,\n tokenHolderAbi,\n provider\n );\n return contract.getCollateralExposure(collateralAddress);\n}\n\n/**\n * Get available exposure for a collateral\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param tokenHolderContractAddress - Address of the TokenHolder contract\n * @param collateralAddress - Address of the collateral token\n * @returns Available exposure as a BigNumber\n * \n * @example\n * ```typescript\n * const available = await getAvailableExposureEvm(\n * provider,\n * \"0x123...\", // TokenHolder address\n * \"0x456...\" // collateral token address\n * );\n * \n * console.log(`Available exposure: ${ethers.formatEther(available)}`);\n * \n * // Check if can open new position\n * const newPositionSize = ethers.parseEther(\"10\");\n * if (available >= newPositionSize) {\n * console.log(\"Sufficient exposure available\");\n * }\n * ```\n */\nexport async function getAvailableExposureEvm(\n provider: Provider,\n tokenHolderContractAddress: string,\n collateralAddress: string\n): Promise<bigint> {\n const contract = new Contract(\n tokenHolderContractAddress,\n tokenHolderAbi,\n provider\n );\n return contract.getAvailableExposure(collateralAddress);\n}\n\n/**\n * Creates an unsigned transaction to liquidate a trading position on EVM chain\n * @param provider - Ethers provider\n * @param borrowerOpsContractAddress - BorrowerOperations contract address\n * @param params - Liquidation parameters\n * @returns Unsigned transaction object\n */\nexport const liquidatePositionEvm = async (\n provider: Provider,\n borrowerOpsContractAddress: string,\n {\n loanId,\n tokenHolder,\n closingPositionSize,\n gasLimit,\n gasPrice,\n }: {\n loanId: BigNumberish;\n tokenHolder: string;\n closingPositionSize: BigNumberish;\n gasLimit?: string | number;\n gasPrice?: string | number;\n }\n): Promise<ContractTransaction> => {\n const contract = new Contract(\n borrowerOpsContractAddress,\n borrowerOperationsAbi,\n provider\n );\n\n const txOptions: { gasLimit?: BigNumberish; gasPrice?: BigNumberish } = {};\n\n if (gasLimit) txOptions.gasLimit = gasLimit;\n if (gasPrice) txOptions.gasPrice = gasPrice;\n\n return contract.liquidate.populateTransaction(\n loanId,\n tokenHolder,\n closingPositionSize,\n Object.keys(txOptions).length > 0 ? txOptions : {}\n );\n};\n\n/**\n * Update max lend per token for multiple collaterals in batch\n * @group EVM\n * @category Operations\n * @param provider - Ethers provider\n * @param tokenHolderContractAddress - Address of the TokenHolder contract\n * @param collateralAddresses - Array of collateral token addresses\n * @param newMaxLendPerTokens - Array of new max lend per token values\n * @param gasLimit - Optional gas limit\n * @param gasPrice - Optional gas price\n * @returns Unsigned transaction object\n * \n * @example\n * ```typescript\n * const tx = await updateMaxLendPerTokenBatchEvm(\n * provider,\n * \"0x123...\", // TokenHolder address\n * {\n * collateralAddresses: [\"0x456...\", \"0x789...\"],\n * newMaxLendPerTokens: [\n * ethers.parseEther(\"1000\"),\n * ethers.parseEther(\"500\")\n * ]\n * }\n * );\n * \n * const receipt = await signer.sendTransaction(tx);\n * console.log(\"Max lend limits updated\");\n * ```\n */\nexport const updateMaxLendPerTokenBatchEvm = async (\n provider: Provider,\n tokenHolderContractAddress: string,\n {\n collateralAddresses,\n newMaxLendPerTokens,\n gasLimit,\n gasPrice,\n }: {\n collateralAddresses: string[];\n newMaxLendPerTokens: BigNumberish[];\n gasLimit?: string | number;\n gasPrice?: string | number;\n }\n): Promise<ContractTransaction> => {\n const contract = new Contract(\n tokenHolderContractAddress,\n tokenHolderAbi,\n provider\n );\n\n const txOptions: { gasLimit?: BigNumberish; gasPrice?: BigNumberish } = {};\n\n if (gasLimit) txOptions.gasLimit = gasLimit;\n if (gasPrice) txOptions.gasPrice = gasPrice;\n\n return contract.updateMaxLendPerTokenBulk.populateTransaction(\n collateralAddresses,\n newMaxLendPerTokens,\n Object.keys(txOptions).length > 0 ? txOptions : {}\n );\n};\n","export const borrowerOperationsAbi = [{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"buyer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenHolder\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenCollateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"openingPositionSize\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"collateralAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialMargin\",\"type\":\"uint256\"}],\"name\":\"Buy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dex\",\"type\":\"address\"}],\"name\":\"DexAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dex\",\"type\":\"address\"}],\"name\":\"DexRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenHolder\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenCollateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"closingPositionSize\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidatorRepaidAmount\",\"type\":\"uint256\"}],\"name\":\"Liquidation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newAmount\",\"type\":\"uint256\"}],\"name\":\"MaxApprovalAmountUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"buyer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenHolder\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenCollateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"closingPositionSize\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"profit\",\"type\":\"uint256\"}],\"name\":\"Sell\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenRemoved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dex\",\"type\":\"address\"}],\"name\":\"addWhitelistedDex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"addWhitelistedToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"buyingCode\",\"type\":\"bytes\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenCollateral\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"borrowAmount\",\"type\":\"uint256\"},{\"internalType\":\"contract TokenHolder\",\"name\":\"tokenHolder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"inchRouter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"integratorFeeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"whitelistedDex\",\"type\":\"address\"}],\"name\":\"buy\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_weth\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dex\",\"type\":\"address\"}],\"name\":\"isWhitelistedDex\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isWhitelistedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"},{\"internalType\":\"contract TokenHolder\",\"name\":\"tokenHolder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"closingPositionSize\",\"type\":\"uint256\"}],\"name\":\"liquidate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"loanRecords\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenHolder\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxApprovalAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"openingFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"profitFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dex\",\"type\":\"address\"}],\"name\":\"removeWhitelistedDex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"removeWhitelistedToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sellingCode\",\"type\":\"bytes\"},{\"internalType\":\"contract TokenHolder\",\"name\":\"tokenHolder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"inchRouter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"integratorFeeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"whitelistedDex\",\"type\":\"address\"}],\"name\":\"sell\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"name\":\"setAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxApprovalAmount\",\"type\":\"uint256\"}],\"name\":\"setMaxApprovalAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_openingFee\",\"type\":\"uint256\"}],\"name\":\"setOpeningFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_profitFee\",\"type\":\"uint256\"}],\"name\":\"setProfitFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"whitelistedDexes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"whitelistedTokens\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]","export const tokenHolderAbi = [\n { inputs: [], name: \"AccessControlBadConfirmation\", type: \"error\" },\n {\n inputs: [\n { internalType: \"address\", name: \"account\", type: \"address\" },\n { internalType: \"bytes32\", name: \"neededRole\", type: \"bytes32\" },\n ],\n name: \"AccessControlUnauthorizedAccount\",\n type: \"error\",\n },\n { inputs: [], name: \"InvalidInitialization\", type: \"error\" },\n { inputs: [], name: \"NotInitializing\", type: \"error\" },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint64\",\n name: \"version\",\n type: \"uint64\",\n },\n ],\n name: \"Initialized\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"newInterestRate\",\n type: \"uint256\",\n },\n ],\n name: \"InterestRateSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"loanId\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"timestamp\",\n type: \"uint256\",\n },\n { indexed: false, internalType: \"bool\", name: \"repaid\", type: \"bool\" },\n ],\n name: \"LoanCreated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"loanId\",\n type: \"uint256\",\n },\n ],\n name: \"LoanRepaid\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"collateralAddress\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"oldValue\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"newValue\",\n type: \"uint256\",\n },\n ],\n name: \"MaxLendPerTokenUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"borrower\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"PrivilegedLoan\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"borrower\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"PrivilegedLoanRepaid\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"role\", type: \"bytes32\" },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"previousAdminRole\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"newAdminRole\",\n type: \"bytes32\",\n },\n ],\n name: \"RoleAdminChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"role\", type: \"bytes32\" },\n {\n indexed: true,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n ],\n name: \"RoleGranted\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"role\", type: \"bytes32\" },\n {\n indexed: true,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n ],\n name: \"RoleRevoked\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"BORROWER_ROUTER_ROLE\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"DEFAULT_ADMIN_ROLE\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"collateralAddress\", type: \"address\" },\n { internalType: \"uint256\", name: \"_interestRate\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"maxLendPerToken\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"minAmount\", type: \"uint256\" },\n ],\n name: \"addCollateral\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n name: \"collateralMapping\",\n outputs: [\n { internalType: \"address\", name: \"collateralAddress\", type: \"address\" },\n { internalType: \"uint256\", name: \"maxLendPerToken\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"interestRate\", type: \"uint256\" },\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n { internalType: \"uint256\", name: \"minAmount\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"maxExposure\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"currentExposure\", type: \"uint256\" },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"amount\", type: \"uint256\" }],\n name: \"deposit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBalance\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"role\", type: \"bytes32\" }],\n name: \"getRoleAdmin\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"account\", type: \"address\" }],\n name: \"grantBorrowerRouterRole\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"role\", type: \"bytes32\" },\n { internalType: \"address\", name: \"account\", type: \"address\" },\n ],\n name: \"grantRole\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"role\", type: \"bytes32\" },\n { internalType: \"address\", name: \"account\", type: \"address\" },\n ],\n name: \"hasRole\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"_tokenAddress\", type: \"address\" },\n ],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"collateralAmount\", type: \"uint256\" },\n { internalType: \"address\", name: \"collateralAddress\", type: \"address\" },\n { internalType: \"address\", name: \"borrower\", type: \"address\" },\n { internalType: \"uint256\", name: \"userPaid\", type: \"uint256\" },\n ],\n name: \"loanConfirmation\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n name: \"loans\",\n outputs: [\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n {\n components: [\n {\n internalType: \"address\",\n name: \"collateralAddress\",\n type: \"address\",\n },\n { internalType: \"uint256\", name: \"maxLendPerToken\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"interestRate\", type: \"uint256\" },\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n { internalType: \"uint256\", name: \"minAmount\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"maxExposure\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"currentExposure\", type: \"uint256\" },\n ],\n internalType: \"struct Collateral\",\n name: \"collateral\",\n type: \"tuple\",\n },\n { internalType: \"uint256\", name: \"collateralAmount\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"timestamp\", type: \"uint256\" },\n { internalType: \"address\", name: \"borrower\", type: \"address\" },\n { internalType: \"uint256\", name: \"userPaid\", type: \"uint256\" },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"nextLoanId\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"flashLoanToken\",\n type: \"address\",\n },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n ],\n name: \"privilegedLoan\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"collateralAddress\", type: \"address\" },\n ],\n name: \"removeCollateral\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"role\", type: \"bytes32\" },\n { internalType: \"address\", name: \"callerConfirmation\", type: \"address\" },\n ],\n name: \"renounceRole\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"loanId\", type: \"uint256\" }],\n name: \"repayLoan\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"account\", type: \"address\" }],\n name: \"revokeBorrowerRouterRole\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"role\", type: \"bytes32\" },\n { internalType: \"address\", name: \"account\", type: \"address\" },\n ],\n name: \"revokeRole\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes4\", name: \"interfaceId\", type: \"bytes4\" }],\n name: \"supportsInterface\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"tokenHolded\",\n outputs: [{ internalType: \"contract IERC20\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"collateralAddresses\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"newMaxLendPerTokens\",\n type: \"uint256[]\",\n },\n ],\n name: \"updateMaxLendPerTokenBulk\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"amount\", type: \"uint256\" }],\n name: \"withdraw\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n name: \"activeLoanIds\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getActiveLoanCount\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"startIndex\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"batchSize\", type: \"uint256\" },\n ],\n name: \"getActiveLoansBatch\",\n outputs: [\n {\n components: [\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n {\n components: [\n {\n internalType: \"address\",\n name: \"collateralAddress\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"maxLendPerToken\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"interestRate\",\n type: \"uint256\",\n },\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n { internalType: \"uint256\", name: \"minAmount\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"maxExposure\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"currentExposure\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct Collateral\",\n name: \"collateral\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"collateralAmount\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"timestamp\", type: \"uint256\" },\n { internalType: \"address\", name: \"borrower\", type: \"address\" },\n { internalType: \"uint256\", name: \"userPaid\", type: \"uint256\" },\n ],\n internalType: \"struct Loan[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"borrower\", type: \"address\" }],\n name: \"getLoansByBorrower\",\n outputs: [\n {\n components: [\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n {\n components: [\n {\n internalType: \"address\",\n name: \"collateralAddress\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"maxLendPerToken\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"interestRate\",\n type: \"uint256\",\n },\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n { internalType: \"uint256\", name: \"minAmount\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"maxExposure\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"currentExposure\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct Collateral\",\n name: \"collateral\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"collateralAmount\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"timestamp\", type: \"uint256\" },\n { internalType: \"address\", name: \"borrower\", type: \"address\" },\n { internalType: \"uint256\", name: \"userPaid\", type: \"uint256\" },\n ],\n internalType: \"struct Loan[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"collateralAddress\", type: \"address\" },\n ],\n name: \"getCollateralExposure\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"collateralAddress\", type: \"address\" },\n ],\n name: \"getAvailableExposure\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"collateralAddress\", type: \"address\" },\n { internalType: \"uint256\", name: \"_interestRate\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"maxLendPerToken\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"minAmount\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"maxExposure\", type: \"uint256\" },\n ],\n name: \"addCollateral\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"collateralAddress\", type: \"address\" },\n { internalType: \"uint256\", name: \"newMaxExposure\", type: \"uint256\" },\n ],\n name: \"updateMaxExposure\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"collateralAddress\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"currentExposure\",\n type: \"uint256\",\n },\n ],\n name: \"ExposureUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"collateralAddress\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"oldMaxExposure\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"newMaxExposure\",\n type: \"uint256\",\n },\n ],\n name: \"MaxExposureUpdated\",\n type: \"event\",\n },\n];\n","import { BN, Program } from \"@coral-xyz/anchor\";\nimport { Lavarage as LavarageSOL } from \"./idl/lavarageSOL\";\nimport { Lavarage as LavarageUSDC } from \"./idl/lavarageUSDC\";\nimport {\n ComputeBudgetProgram,\n Keypair,\n LAMPORTS_PER_SOL,\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport {\n TOKEN_PROGRAM_ID,\n createAssociatedTokenAccountIdempotentInstruction,\n createTransferCheckedInstruction,\n getAssociatedTokenAddressSync,\n getMint,\n} from \"@solana/spl-token\";\nimport { getPda } from \"./index\";\nimport { isSolProgram } from \"./utils\";\n\n/**\n * Derives a node wallet PDA for lending operations\n * \n * @group Lending\n * @category Utilities\n * \n * @param operatorPublicKey - The operator's public key\n * @param mintPublicKey - The token mint public key\n * @param programId - The Lavarage program ID\n * \n * @returns The derived node wallet PDA\n * \n * @example\n * ```typescript\n * const nodeWallet = getNodeWalletPDA(\n * operatorPublicKey,\n * usdcMint,\n * programId\n * );\n * ```\n */\nexport function getNodeWalletPDA(\n operatorPublicKey: PublicKey,\n mintPublicKey: PublicKey,\n programId: PublicKey\n): PublicKey {\n return getPda(\n [\n Buffer.from(\"node_wallet\"),\n operatorPublicKey.toBuffer(),\n mintPublicKey.toBuffer(),\n ],\n programId\n );\n}\n\n/**\n * Derives a trading pool PDA for lending operations\n * \n * @group Lending\n * @category Utilities\n * \n * @param poolOwnerPublicKey - The pool owner's public key\n * @param tokenPublicKey - The token mint public key\n * @param programId - The Lavarage program ID\n * \n * @returns The derived trading pool PDA\n * \n * @example\n * ```typescript\n * const poolPDA = getTradingPoolPDA(\n * poolOwnerPublicKey,\n * usdcMint,\n * programId\n * );\n * ```\n */\nexport function getTradingPoolPDA(\n poolOwnerPublicKey: PublicKey,\n tokenPublicKey: PublicKey,\n programId: PublicKey\n): PublicKey {\n return getPda(\n [\n Buffer.from(\"trading_pool\"),\n poolOwnerPublicKey.toBuffer(),\n tokenPublicKey.toBuffer(),\n ],\n programId\n );\n}\n\nexport function getWithdrawalAccessListPDA(\n programId: PublicKey\n): PublicKey {\n return getPda(\n [\n Buffer.from(\"withdrawal_access_list\"),\n ],\n programId\n );\n}\n\nasync function createNodeWallet(\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n params: {\n operator: PublicKey;\n mint?: string; // Required for V2, optional for V1\n liquidationLtv?: number; // Required for V2, optional for V1\n }\n): Promise<{\n instructions: TransactionInstruction[];\n nodeWallet: Keypair | undefined;\n nodeWalletAccount: PublicKey;\n}> {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n let instructions: TransactionInstruction[] = [];\n let nodeWallet;\n\n // Check if this is V2 program (has mint and liquidationLtv parameters)\n if (params.mint !== undefined && params.liquidationLtv !== undefined) {\n nodeWallet = getNodeWalletPDA(\n new PublicKey(params.operator),\n new PublicKey(params.mint),\n lavarageProgram.programId\n );\n // V2 version\n instructions.push(await (lavarageProgram as Program<LavarageUSDC>).methods\n .lpOperatorCreateNodeWallet(params.liquidationLtv)\n .accounts({\n operator: new PublicKey(params.operator),\n mint: new PublicKey(params.mint),\n })\n .instruction());\n } else {\n const seed = params.operator.toBase58().slice(0, 32);\n\n const auxAccountPubkey = await PublicKey.createWithSeed(\n params.operator,\n seed,\n lavarageProgram.programId\n );\n\n nodeWallet = auxAccountPubkey;\n\n instructions.push(SystemProgram.createAccountWithSeed({\n fromPubkey: params.operator,\n basePubkey: params.operator,\n seed,\n newAccountPubkey: auxAccountPubkey,\n lamports: 1300000,\n space: 58,\n programId: lavarageProgram.programId,\n }));// Some code\n \n // V1 version\n instructions.push(await (lavarageProgram as Program<LavarageSOL>).methods\n .lpOperatorCreateNodeWallet()\n .accounts({\n nodeWallet: auxAccountPubkey,\n operator: new PublicKey(params.operator),\n systemProgram: SystemProgram.programId,\n })\n .instruction());\n }\n\n return {\n instructions ,\n nodeWallet: nodeWallet instanceof Keypair ? nodeWallet : undefined,\n nodeWalletAccount:\n nodeWallet instanceof Keypair ? nodeWallet.publicKey : nodeWallet,\n };\n}\n\n/**\n * Deposits funds into a node wallet for lending operations\n * \n * @group Lending\n * @category Operations\n * \n * @param lavarageProgram - The Lavarage V1 program instance\n * @param params - Deposit parameters\n * @param params.nodeWallet - The node wallet PDA to deposit into\n * @param params.mint - Token mint address (optional for V1 SOL deposits)\n * @param params.funder - The account providing the funds\n * @param params.amount - Amount to deposit (in lamports for SOL or token units)\n * @param params.computeBudgetMicroLamports - Optional compute budget for priority fees\n * \n * @returns Transaction to deposit funds\n * \n * @example\n * ```typescript\n * // Deposit SOL\n * const tx = await depositFunds(lavarageProgram, {\n * nodeWallet: nodeWalletPDA,\n * funder: lenderPublicKey,\n * amount: 1000000000 // 1 SOL\n * });\n * \n * // Deposit USDC\n * const tx = await depositFunds(lavarageProgram, {\n * nodeWallet: nodeWalletPDA,\n * mint: usdcMint.toString(),\n * funder: lenderPublicKey,\n * amount: 1000000 // 1 USDC (6 decimals)\n * });\n * ```\n * \n * @see {@link withdrawFundsV1} - Withdraw funds from a node wallet\n * @see {@link withdrawFunds} - Unified withdraw function for both V1 and V2\n */\nexport async function depositFunds(\n lavarageProgram: Program<LavarageSOL>,\n params: {\n nodeWallet: PublicKey;\n mint?: string; // Required for V2, optional for V1\n funder: PublicKey;\n amount: number;\n computeBudgetMicroLamports?: number;\n }\n): Promise<VersionedTransaction> {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n let instruction, createTokenAccountIx;\n if (params.mint === undefined) {\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n instruction = await lavarageProgram.methods\n .lpOperatorFundNodeWallet(new BN(params.amount))\n .accounts({\n nodeWallet: params.nodeWallet,\n funder: params.funder,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n } else {\n const mintPubkey = new PublicKey(params.mint);\n const mintOwner = await lavarageProgram.provider.connection.getAccountInfo(\n mintPubkey\n );\n const mintAccount = await getMint(\n lavarageProgram.provider.connection,\n mintPubkey,\n \"confirmed\",\n mintOwner?.owner\n );\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n const destinationTokenAccount = getAssociatedTokenAddressSync(\n mintPubkey,\n new PublicKey(params.nodeWallet),\n true,\n mintOwner?.owner\n )\n createTokenAccountIx = createAssociatedTokenAccountIdempotentInstruction(\n lavarageProgram.provider.publicKey!,\n destinationTokenAccount,\n params.nodeWallet,\n new PublicKey(params.mint),\n mintOwner?.owner\n );\n instruction = createTransferCheckedInstruction(\n getAssociatedTokenAddressSync(\n mintPubkey,\n new PublicKey(params.funder),\n true,\n mintOwner?.owner\n ),\n new PublicKey(params.mint),\n destinationTokenAccount,\n lavarageProgram.provider.publicKey!,\n params.amount,\n mintAccount.decimals,\n [],\n mintOwner?.owner\n );\n }\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [createTokenAccountIx, instruction, computeFeeIx].filter(Boolean) as TransactionInstruction[],\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n}\n\n/**\n * Withdraws funds from a node wallet on Lavarage V1\n * \n * @group Lending\n * @category Operations\n * \n * @param lavarageProgram - The Lavarage V1 program instance\n * @param params - Withdrawal parameters\n * @param params.nodeWallet - The node wallet PDA to withdraw from\n * @param params.funder - The account receiving the withdrawn funds\n * @param params.amount - Amount to withdraw in lamports\n * @param params.computeBudgetMicroLamports - Optional compute budget for priority fees\n * \n * @returns Transaction to withdraw funds\n * \n * @example\n * ```typescript\n * const tx = await withdrawFundsV1(lavarageProgram, {\n * nodeWallet: nodeWalletPDA,\n * funder: lenderPublicKey,\n * amount: 1000000000 // 1 SOL\n * });\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n * @see {@link depositFunds} - Deposit funds into a node wallet\n * @see {@link withdrawFunds} - Unified withdraw function for both V1 and V2\n */\nexport async function withdrawFundsV1(\n lavarageProgram: Program<LavarageSOL>,\n params: {\n nodeWallet: PublicKey;\n funder: PublicKey;\n amount: number;\n computeBudgetMicroLamports?: number;\n }\n): Promise<VersionedTransaction> {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const withdrawalAccessList = getWithdrawalAccessListPDA(lavarageProgram.programId);\n\n const instruction = await lavarageProgram.methods\n .lpOperatorWithdrawFromNodeWallet(new BN(params.amount))\n .accountsStrict({\n nodeWallet: params.nodeWallet,\n funder: params.funder,\n systemProgram: SystemProgram.programId,\n withdrawalAccessList: withdrawalAccessList,\n })\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [instruction, computeFeeIx],\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n}\n\n/**\n * Withdraws funds from a node wallet on Lavarage V2\n * \n * @group Lending\n * @category Operations\n * \n * @param lavarageProgram - The Lavarage V2 program instance\n * @param params - Withdrawal parameters\n * @param params.nodeWallet - The node wallet PDA to withdraw from\n * @param params.funder - The account receiving the withdrawn funds\n * @param params.mint - Token mint address\n * @param params.amount - Amount to withdraw in token units\n * @param params.fromTokenAccount - Optional source token account (auto-derived if not provided)\n * @param params.toTokenAccount - Optional destination token account (auto-derived if not provided)\n * @param params.computeBudgetMicroLamports - Optional compute budget for priority fees\n * \n * @returns Transaction to withdraw funds\n * \n * @example\n * ```typescript\n * // Withdraw USDC\n * const tx = await withdrawFundsV2(lavarageProgram, {\n * nodeWallet: nodeWalletPDA,\n * funder: lenderPublicKey,\n * mint: usdcMint.toString(),\n * amount: 1000000 // 1 USDC (6 decimals)\n * });\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n * @see {@link depositFunds} - Deposit funds into a node wallet\n * @see {@link withdrawFunds} - Unified withdraw function for both V1 and V2\n */\nexport async function withdrawFundsV2(\n lavarageProgram: Program<LavarageUSDC>,\n params: {\n nodeWallet: PublicKey;\n funder: PublicKey;\n mint: string;\n amount: number;\n fromTokenAccount?: PublicKey; // Optional, will be derived if not provided\n toTokenAccount?: PublicKey; // Optional, will be derived if not provided\n computeBudgetMicroLamports?: number;\n }\n): Promise<VersionedTransaction> {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const mintPubkey = new PublicKey(params.mint);\n\n // Derive token accounts if not provided\n const fromTokenAccount =\n params.fromTokenAccount ||\n getAssociatedTokenAddressSync(mintPubkey, params.nodeWallet, true);\n const toTokenAccount =\n params.toTokenAccount ||\n getAssociatedTokenAddressSync(mintPubkey, params.funder);\n const withdrawalAccessList = getWithdrawalAccessListPDA(lavarageProgram.programId);\n\n const instruction = await lavarageProgram.methods\n .lpOperatorWithdrawFromNodeWallet(new BN(params.amount))\n .accountsStrict({\n nodeWallet: params.nodeWallet,\n funder: params.funder,\n systemProgram: SystemProgram.programId,\n mint: mintPubkey,\n fromTokenAccount,\n toTokenAccount,\n tokenProgram: TOKEN_PROGRAM_ID,\n withdrawalAccessList: withdrawalAccessList,\n })\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [instruction, computeFeeIx],\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n}\n/**\n * Withdraws funds from a node wallet (supports both V1 and V2)\n * \n * @group Lending\n * @category Operations\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @param params - Withdrawal parameters\n * @param params.nodeWallet - The node wallet PDA to withdraw from\n * @param params.funder - The account receiving the withdrawn funds\n * @param params.amount - Amount to withdraw\n * @param params.mint - Token mint address (required for V2, omit for V1 SOL withdrawal)\n * @param params.fromTokenAccount - Optional source token account (V2 only)\n * @param params.toTokenAccount - Optional destination token account (V2 only)\n * @param params.computeBudgetMicroLamports - Optional compute budget for priority fees\n * \n * @returns Transaction to withdraw funds\n * \n * @example\n * ```typescript\n * // V1: Withdraw SOL\n * const tx = await withdrawFunds(lavarageProgram, {\n * nodeWallet: nodeWalletPDA,\n * funder: lenderPublicKey,\n * amount: 1000000000 // 1 SOL\n * });\n * \n * // V2: Withdraw USDC\n * const tx = await withdrawFunds(lavarageProgram, {\n * nodeWallet: nodeWalletPDA,\n * funder: lenderPublicKey,\n * mint: usdcMint.toString(),\n * amount: 1000000 // 1 USDC\n * });\n * ```\n * @see {@link depositFunds} - Deposit funds into a node wallet\n * @see {@link withdrawFundsV1} - V1 specific implementation\n * @see {@link withdrawFundsV2} - V2 specific implementation\n */\n// Unified withdraw function that works with both V1 and V2\nexport async function withdrawFunds(\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n params: {\n nodeWallet: PublicKey;\n funder: PublicKey;\n amount: number;\n mint?: string; // Required for V2, optional for V1\n fromTokenAccount?: PublicKey; // Only used for V2\n toTokenAccount?: PublicKey; // Only used for V2\n computeBudgetMicroLamports?: number;\n }\n): Promise<VersionedTransaction> {\n // Check if mint is provided to determine if this is V2\n if (params.mint) {\n return withdrawFundsV2(lavarageProgram as Program<LavarageUSDC>, {\n nodeWallet: params.nodeWallet,\n funder: params.funder,\n mint: params.mint,\n amount: params.amount,\n fromTokenAccount: params.fromTokenAccount,\n toTokenAccount: params.toTokenAccount,\n computeBudgetMicroLamports: params.computeBudgetMicroLamports,\n });\n } else {\n return withdrawFundsV1(lavarageProgram as Program<LavarageSOL>, {\n nodeWallet: params.nodeWallet,\n funder: params.funder,\n amount: params.amount,\n computeBudgetMicroLamports: params.computeBudgetMicroLamports,\n });\n }\n}\n\n/**\n * Creates a lending offer/pool on Lavarage\n * \n * @group Lending\n * @category Operations\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @param params - Offer creation parameters\n * @param params.tradingPool - The trading pool PDA\n * @param params.poolOwner - The pool owner's public key\n * @param params.mint - The collateral token mint address\n * @param params.quoteMint - The quote token mint address\n * @param params.interestRate - Interest rate for the pool\n * @param params.maxExposure - Maximum exposure limit\n * @param params.computeBudgetMicroLamports - Optional compute budget for priority fees\n * \n * @returns Transaction to create the offer\n * \n * @example\n * ```typescript\n * const tx = await createOffer(lavarageProgram, {\n * tradingPool: poolPDA,\n * poolOwner: lenderPublicKey,\n * mint: collateralMint.toString(),\n * quoteMint: usdcMint.toString(),\n * interestRate: 500, // 5%\n * maxExposure: 1000000\n * });\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n */\nexport async function createOffer(\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n params: {\n tradingPool: PublicKey;\n poolOwner: PublicKey;\n // the collateral mint\n mint: string;\n // the quote mint\n quoteMint: string;\n interestRate: number;\n maxExposure: number;\n computeBudgetMicroLamports?: number;\n maxBorrow?: number;\n openLtv?: number;\n feedId?: string;\n }\n): Promise<VersionedTransaction> {\n \n let nodeWalletAccount, nodeWalletSigner, createNodeWalletInstruction: TransactionInstruction[] =[], nodeWalletPubKey;\n\n if (params.quoteMint === \"So11111111111111111111111111111111111111112\") {\n const nodeWallets = await lavarageProgram.account.nodeWallet.all();\n nodeWalletAccount = nodeWallets.find((wallet) =>\n wallet.account.nodeOperator.equals(new PublicKey(params.poolOwner)),\n );\n } else {\n const nodeWalletPda = getNodeWalletPDA(\n new PublicKey(params.poolOwner),\n new PublicKey(params.quoteMint),\n lavarageProgram.programId\n );\n const nodeWalletAccountInfo = await lavarageProgram.provider.connection.getAccountInfo(nodeWalletPda);\n if (nodeWalletAccountInfo) {\n nodeWalletAccount = {\n publicKey: nodeWalletPda,\n };\n }\n }\n\n if (!nodeWalletAccount?.account) {\n // Determine if this is V2 based on mint (SOL = V1, others = V2)\n const isSOL = params.quoteMint === \"So11111111111111111111111111111111111111112\";\n\n const {\n instructions,\n nodeWallet,\n nodeWalletAccount: nodeWalletPublicKey,\n } = await createNodeWallet(lavarageProgram, {\n operator: new PublicKey(params.poolOwner.toBase58()),\n mint: isSOL ? undefined : params.quoteMint, // Only pass mint for V2 (non-SOL)\n liquidationLtv: isSOL ? undefined : 90, // Only pass liquidationLtv for V2 (non-SOL)\n });\n nodeWalletSigner = nodeWallet;\n createNodeWalletInstruction = instructions;\n nodeWalletPubKey = nodeWalletPublicKey;\n } else {\n nodeWalletPubKey = nodeWalletAccount.publicKey;\n }\n\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n // Both V1 and V2 lpOperatorCreateTradingPool require mint parameter\n const instruction = isSolProgram(lavarageProgram)\n ? await (lavarageProgram as Program<LavarageSOL>).methods\n .lpOperatorCreateTradingPool(params.interestRate)\n .accounts({\n tradingPool: params.tradingPool,\n operator: params.poolOwner,\n nodeWallet: nodeWalletPubKey,\n mint: new PublicKey(params.mint),\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n : await (lavarageProgram as Program<LavarageUSDC>).methods\n .lpOperatorCreateTradingPool({\n interestRate: params.interestRate,\n feedId: params.feedId,\n openLtv: params.openLtv,\n maxExposure: new BN(params.maxExposure),\n })\n .accounts({\n operator: params.poolOwner,\n nodeWallet: nodeWalletPubKey,\n mint: new PublicKey(params.mint),\n })\n .instruction();\n\n const updateMaxExposureInstruction = isSolProgram(lavarageProgram)\n ? await (lavarageProgram as Program<LavarageSOL>).methods\n .lpOperatorUpdateMaxExposure({\n maxExposure: new BN(params.maxExposure),\n interestRate: null,\n openLtv: null,\n feedId: null,\n })\n .accounts({\n tradingPool: params.tradingPool,\n nodeWallet: nodeWalletPubKey,\n operator: params.poolOwner,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n : undefined;\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n\n const transferInstruction = SystemProgram.transfer({\n fromPubkey: lavarageProgram.provider.publicKey!,\n toPubkey: new PublicKey(\"BMME51pfWdBfakTEMuQbNP4NG3wCY4Fo47dKatThhXGQ\"),\n lamports: 0.3 * LAMPORTS_PER_SOL\n });\n\n const updateMaxBorrowInstruction = isSolProgram(lavarageProgram) && params.maxBorrow && params.maxBorrow > 0\n ? await (lavarageProgram as Program<LavarageSOL>).methods\n .lpOperatorUpdateMaxBorrow(new BN(params.maxBorrow))\n .accountsStrict({\n tradingPool: params.tradingPool,\n nodeWallet: nodeWalletPubKey,\n operator: params.poolOwner,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n : undefined\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [\n ...createNodeWalletInstruction,\n instruction,\n updateMaxExposureInstruction,\n updateMaxBorrowInstruction,\n computeFeeIx,\n ].filter(Boolean) as TransactionInstruction[],\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n}\n\n/**\n * Updates the maximum exposure limit for a trading pool\n * \n * @group Lending\n * @category Operations\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @param params - Update parameters\n * @param params.tradingPool - The trading pool PDA\n * @param params.nodeWallet - The node wallet address\n * @param params.poolOwner - The pool owner's public key\n * @param params.maxExposure - New maximum exposure limit\n * @param params.computeBudgetMicroLamports - Optional compute budget for priority fees\n * \n * @returns Transaction to update max exposure\n * \n * @example\n * ```typescript\n * const tx = await updateMaxExposure(lavarageProgram, {\n * tradingPool: poolPDA,\n * nodeWallet: nodeWalletAddress,\n * poolOwner: lenderPublicKey,\n * maxExposure: 2000000 // New limit\n * });\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n */\nexport async function updateMaxExposure(\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n params: {\n tradingPool: PublicKey;\n nodeWallet: string;\n poolOwner: PublicKey;\n maxExposure: number;\n computeBudgetMicroLamports?: number;\n }\n): Promise<VersionedTransaction> {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const instruction = isSolProgram(lavarageProgram)\n ? await (lavarageProgram as Program<LavarageSOL>).methods\n .lpOperatorUpdateMaxExposure(new BN(params.maxExposure))\n .accountsStrict({\n tradingPool: params.tradingPool,\n nodeWallet: new PublicKey(params.nodeWallet),\n operator: params.poolOwner,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n : await (lavarageProgram as Program<LavarageUSDC>).methods\n .lpOperatorUpdateTradingPool({\n maxExposure: new BN(params.maxExposure),\n interestRate: null,\n openLtv: null,\n feedId: null,\n })\n .accounts({\n tradingPool: params.tradingPool,\n nodeWallet: new PublicKey(params.nodeWallet),\n operator: params.poolOwner,\n })\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [instruction, computeFeeIx],\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n}\n\n/**\n * Updates the interest rate for a trading pool\n * \n * @group Lending\n * @category Operations\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @param params - Update parameters\n * @param params.tradingPool - The trading pool PDA\n * @param params.nodeWallet - The node wallet address\n * @param params.poolOwner - The pool owner's public key\n * @param params.interestRate - New interest rate\n * @param params.computeBudgetMicroLamports - Optional compute budget for priority fees\n * \n * @returns Transaction to update interest rate\n * \n * @example\n * ```typescript\n * const tx = await updateInterestRate(lavarageProgram, {\n * tradingPool: poolPDA,\n * nodeWallet: nodeWalletAddress,\n * poolOwner: lenderPublicKey,\n * interestRate: 750 // 7.5%\n * });\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n */\nexport async function updateInterestRate(\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n params: {\n tradingPool: PublicKey;\n nodeWallet: string;\n poolOwner: PublicKey;\n interestRate: number;\n computeBudgetMicroLamports?: number;\n }\n): Promise<VersionedTransaction> {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const instruction = isSolProgram(lavarageProgram)\n ? await (lavarageProgram as Program<LavarageSOL>).methods\n .lpOperatorUpdateInterestRate(new BN(params.interestRate))\n .accountsStrict({\n tradingPool: params.tradingPool,\n nodeWallet: new PublicKey(params.nodeWallet),\n operator: params.poolOwner,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n : await (lavarageProgram as Program<LavarageUSDC>).methods\n .lpOperatorUpdateTradingPool({\n maxExposure: null,\n interestRate: new BN(params.interestRate),\n openLtv: null,\n feedId: null,\n })\n .accounts({\n tradingPool: params.tradingPool,\n nodeWallet: new PublicKey(params.nodeWallet),\n operator: params.poolOwner,\n })\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [instruction, computeFeeIx],\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n}\n\n/**\n * Updates multiple parameters of a trading pool in a single transaction\n * \n * @group Lending\n * @category Operations\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @param params - Update parameters\n * @param params.tradingPool - The trading pool PDA\n * @param params.poolOwner - The pool owner's public key\n * @param params.nodeWallet - The node wallet address\n * @param params.mint - The token mint address\n * @param params.interestRate - New interest rate\n * @param params.maxExposure - New maximum exposure limit\n * @param params.computeBudgetMicroLamports - Optional compute budget for priority fees\n * \n * @returns Transaction to update pool parameters\n * \n * @example\n * ```typescript\n * const tx = await updateOffer(lavarageProgram, {\n * tradingPool: poolPDA,\n * poolOwner: lenderPublicKey,\n * nodeWallet: nodeWalletAddress,\n * mint: collateralMint.toString(),\n * interestRate: 600, // 6%\n * maxExposure: 3000000\n * });\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n * \n * @see {@link updateInterestRate} - Update only interest rate\n * @see {@link updateMaxExposure} - Update only max exposure\n */\nexport async function updateOffer(\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n params: {\n tradingPool: PublicKey;\n poolOwner: PublicKey;\n nodeWallet: string;\n mint: string;\n interestRate: number;\n maxExposure: number;\n computeBudgetMicroLamports?: number;\n //includeCreatePool?: boolean; // Optional flag to include pool creation\n }\n): Promise<VersionedTransaction> {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const instructions = [];\n\n // // Optionally include pool creation instruction\n // if (params.includeCreatePool) {\n // const createPoolInstruction = await lavarageProgram.methods\n // .lpOperatorCreateTradingPool(new BN(params.interestRate))\n // .accounts({\n // tradingPool: params.tradingPool,\n // operator: params.poolOwner,\n // nodeWallet: new PublicKey(params.nodeWallet),\n // mint: new PublicKey(params.mint),\n // systemProgram: SystemProgram.programId,\n // })\n // .instruction();\n\n // instructions.push(createPoolInstruction);\n // }\n\n if (isSolProgram(lavarageProgram)) {\n instructions.push(\n await (lavarageProgram as Program<LavarageSOL>).methods\n .lpOperatorUpdateMaxExposure(new BN(params.maxExposure))\n .accountsStrict({\n tradingPool: params.tradingPool,\n nodeWallet: new PublicKey(params.nodeWallet),\n operator: params.poolOwner,\n systemProgram: SystemProgram.programId,\n })\n .instruction(),\n await (lavarageProgram as Program<LavarageSOL>).methods\n .lpOperatorUpdateInterestRate(new BN(params.interestRate))\n .accountsStrict({\n tradingPool: params.tradingPool,\n nodeWallet: new PublicKey(params.nodeWallet),\n operator: params.poolOwner,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n );\n } else {\n instructions.push(\n await (lavarageProgram as Program<LavarageUSDC>).methods\n .lpOperatorUpdateTradingPool({\n maxExposure: new BN(params.maxExposure),\n interestRate: new BN(params.interestRate),\n openLtv: null,\n feedId: null,\n })\n .accounts({\n tradingPool: params.tradingPool,\n nodeWallet: new PublicKey(params.nodeWallet),\n operator: params.poolOwner,\n })\n .instruction()\n );\n }\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n\n instructions.push(\n computeFeeIx\n );\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions,\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n}\n\n/**\n * Updates the maximum borrow limit for a trading pool\n *\n * @group Lending\n * @category Operations\n *\n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @param params - Update parameters\n * @param params.tradingPool - The trading pool PDA\n * @param params.nodeWallet - The node wallet address\n * @param params.oracle - The oracle public key authorized to update\n * @param params.maxBorrow - New maximum borrow limit\n * @param params.computeBudgetMicroLamports - Optional compute budget for priority fees\n *\n * @returns Transaction to update max borrow limit\n *\n * @example\n * ```typescript\n * const tx = await updateMaxBorrow(lavarageProgram, {\n * tradingPool: poolPDA,\n * nodeWallet: nodeWalletAddress,\n * oracle: oraclePublicKey,\n * maxBorrow: 5000000\n * });\n *\n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n */\nexport async function updateMaxBorrow(\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n params: {\n tradingPool: PublicKey;\n nodeWallet: string;\n oracle: PublicKey;\n maxBorrow: number;\n computeBudgetMicroLamports?: number;\n }\n): Promise<VersionedTransaction> {\n if (!isSolProgram(lavarageProgram)) {\n throw new Error(\"updateMaxBorrow is only supported for the SOL program\");\n }\n\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const instruction = await (lavarageProgram as Program<LavarageSOL>).methods\n .lpOperatorUpdateMaxBorrow(new BN(params.maxBorrow))\n .accountsStrict({\n tradingPool: params.tradingPool,\n nodeWallet: new PublicKey(params.nodeWallet),\n operator: params.oracle,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [instruction, computeFeeIx],\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n}\n\n/**\n * Updates the open LTV for a trading pool\n * \n * @group Lending\n * @category Operations\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @param params - Update parameters\n * @param params.tradingPool - The trading pool PDA\n * @param params.nodeWallet - The node wallet address\n * @param params.oracle - The oracle public key authorized to update\n * @param params.openLtv - New open LTV\n * @param params.computeBudgetMicroLamports - Optional compute budget for priority fees\n * \n * @returns Transaction to update open LTV\n * \n * @example\n * ```typescript\n * const tx = await updateOpenLtv(lavarageProgram, {\n * tradingPool: poolPDA,\n * nodeWallet: nodeWalletAddress,\n * oracle: oraclePublicKey,\n * openLtv: 7500\n * });\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n */\nexport async function updateOpenLtv(\n lavarageProgram: Program<LavarageUSDC>,\n params: {\n tradingPool: PublicKey;\n nodeWallet: string;\n oracle: PublicKey;\n openLtv: number;\n computeBudgetMicroLamports?: number;\n }\n): Promise<VersionedTransaction> {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const instruction = await lavarageProgram.methods\n .lpOperatorUpdateTradingPool({\n maxExposure: null,\n interestRate: null,\n openLtv: new BN(params.openLtv),\n feedId: null,\n })\n .accounts({\n tradingPool: params.tradingPool,\n nodeWallet: new PublicKey(params.nodeWallet),\n operator: params.oracle,\n })\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [instruction, computeFeeIx],\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n}\n\nexport async function addToWithdrawalAccessList(\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n params: {\n nodeWallet: PublicKey;\n authority: PublicKey;\n toPubkey: PublicKey;\n computeBudgetMicroLamports?: number;\n }\n): Promise<VersionedTransaction> {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const withdrawalAccessList = getWithdrawalAccessListPDA(lavarageProgram.programId);\n const instruction = await lavarageProgram.methods\n .addWithdrawalAccess(params.toPubkey)\n .accounts({\n withdrawalAccessList: withdrawalAccessList,\n nodeWallet: params.nodeWallet,\n authority: params.authority,\n })\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [instruction, computeFeeIx],\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n}\n\n\nexport async function removeFromWithdrawalAccessList(\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n params: {\n authority: PublicKey;\n nodeWallet: string; // This is a string in the IDL\n computeBudgetMicroLamports?: number;\n }\n): Promise<VersionedTransaction> {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const withdrawalAccessList = getWithdrawalAccessListPDA(lavarageProgram.programId);\n\n const instruction = await lavarageProgram.methods\n .removeWithdrawalAccess(params.nodeWallet)\n .accounts({\n withdrawalAccessList: withdrawalAccessList,\n authority: params.authority,\n })\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [instruction, computeFeeIx],\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n}\n\n\nexport async function getWithdrawalAccessList(\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n params: {\n nodeWallet: string;\n }\n): Promise<PublicKey | undefined> {\n const withdrawalAccessList = getWithdrawalAccessListPDA(lavarageProgram.programId);\n const withdrawalAccessListAccount = await lavarageProgram.account.withdrawalAccessList.fetch(withdrawalAccessList);\n return withdrawalAccessListAccount.accessEntries.find((entry) => entry.fromPubkey.toString() === params.nodeWallet)?.toPubkey;\n}","/**\n * Program IDL in camelCase format in order to be used in JS/TS.\n *\n * Note that this is only a type helper and is not the actual IDL. The original\n * IDL can be found at `target/idl/lavarage.json`.\n */\nexport type Lavarage = {\n \"address\": \"1avaAUcjccXCjSZzwUvB2gS3DzkkieV2Mw8CjdN65uu\",\n \"metadata\": {\n \"name\": \"lavarage\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"Created with Anchor\"\n },\n \"instructions\": [\n {\n \"name\": \"addWithdrawalAccess\",\n \"discriminator\": [\n 45,\n 247,\n 214,\n 153,\n 224,\n 115,\n 136,\n 178\n ],\n \"accounts\": [\n {\n \"name\": \"withdrawalAccessList\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 119,\n 105,\n 116,\n 104,\n 100,\n 114,\n 97,\n 119,\n 97,\n 108,\n 95,\n 97,\n 99,\n 99,\n 101,\n 115,\n 115,\n 95,\n 108,\n 105,\n 115,\n 116\n ]\n }\n ]\n }\n },\n {\n \"name\": \"nodeWallet\"\n },\n {\n \"name\": \"authority\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"toPubkey\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"delegateClosePosition\",\n \"discriminator\": [\n 100,\n 249,\n 236,\n 96,\n 249,\n 195,\n 17,\n 157\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"writable\": true\n },\n {\n \"name\": \"delegateOperator\",\n \"signer\": true\n },\n {\n \"name\": \"account\",\n \"writable\": true,\n \"relations\": [\n \"delegate\"\n ]\n },\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"nodeWallet\",\n \"writable\": true\n },\n {\n \"name\": \"tokenProgram\"\n },\n {\n \"name\": \"nodeWalletTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.node_wallet\",\n \"account\": \"pool\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"delegateTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"delegateOperator\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"feeTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 117,\n 98,\n 107,\n 101,\n 121,\n 33,\n 32,\n 40,\n 34,\n 54,\n 74,\n 102,\n 84,\n 111,\n 98,\n 68,\n 118,\n 119,\n 117,\n 119,\n 90,\n 120,\n 90,\n 80,\n 54,\n 70,\n 82,\n 53,\n 74,\n 80,\n 109,\n 106,\n 100,\n 118,\n 81,\n 52,\n 104,\n 52,\n 77,\n 111,\n 118,\n 107,\n 69,\n 86,\n 72,\n 50,\n 70,\n 80,\n 115,\n 77,\n 83,\n 114,\n 70,\n 34,\n 41\n ]\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"profitTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"account.trader\",\n \"account\": \"position\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"qtMint\"\n }\n ],\n \"args\": [\n {\n \"name\": \"closingPositionSize\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"delegateExecuteTp\",\n \"discriminator\": [\n 207,\n 251,\n 148,\n 38,\n 214,\n 153,\n 54,\n 242\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"writable\": true\n },\n {\n \"name\": \"delegateOperator\",\n \"signer\": true\n },\n {\n \"name\": \"account\",\n \"writable\": true,\n \"relations\": [\n \"delegate\"\n ]\n },\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"tokenProgram\"\n },\n {\n \"name\": \"positionTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"account\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.collateral_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"delegateTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"delegateOperator\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.collateral_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"mint\"\n }\n ],\n \"args\": [\n {\n \"name\": \"seed\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"initWithdrawalAccessList\",\n \"discriminator\": [\n 118,\n 110,\n 194,\n 104,\n 220,\n 145,\n 69,\n 31\n ],\n \"accounts\": [\n {\n \"name\": \"withdrawalAccessList\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 119,\n 105,\n 116,\n 104,\n 100,\n 114,\n 97,\n 119,\n 97,\n 108,\n 95,\n 97,\n 99,\n 99,\n 101,\n 115,\n 115,\n 95,\n 108,\n 105,\n 115,\n 116\n ]\n }\n ]\n }\n },\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"lpCollectInterest\",\n \"discriminator\": [\n 181,\n 55,\n 21,\n 23,\n 53,\n 171,\n 73,\n 115\n ],\n \"accounts\": [\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"positionAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tradingPool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"randomAccountAsId\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true\n },\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"fromTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"positionAccount\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"toTokenAccount\",\n \"writable\": true\n },\n {\n \"name\": \"nodeWallet\",\n \"writable\": true\n },\n {\n \"name\": \"tokenProgram\"\n },\n {\n \"name\": \"randomAccountAsId\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"oracle\",\n \"signer\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"oracleQueue\",\n \"address\": \"A43DyUGA7s8eXPxqEjJY6EBu1KKbNgfxF8h17VAHn13w\"\n },\n {\n \"name\": \"baseOracleQuote\"\n },\n {\n \"name\": \"clockSysvar\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"slotHashesSysvar\",\n \"address\": \"SysvarS1otHashes111111111111111111111111111\"\n },\n {\n \"name\": \"instructionsSysvar\",\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"lpLiquidate\",\n \"discriminator\": [\n 36,\n 244,\n 70,\n 20,\n 135,\n 159,\n 86,\n 149\n ],\n \"accounts\": [\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"positionAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tradingPool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"randomAccountAsId\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true\n },\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"fromTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"positionAccount\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"toTokenAccount\",\n \"writable\": true\n },\n {\n \"name\": \"nodeWallet\",\n \"writable\": true\n },\n {\n \"name\": \"tokenProgram\"\n },\n {\n \"name\": \"randomAccountAsId\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"operator\",\n \"signer\": true\n },\n {\n \"name\": \"oracle\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"positionSize\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lpOperatorCreateNodeWallet\",\n \"discriminator\": [\n 193,\n 83,\n 139,\n 125,\n 229,\n 111,\n 150,\n 164\n ],\n \"accounts\": [\n {\n \"name\": \"nodeWallet\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 110,\n 111,\n 100,\n 101,\n 95,\n 119,\n 97,\n 108,\n 108,\n 101,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"operator\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ]\n }\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"mint\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidationLtv\",\n \"type\": \"u16\"\n }\n ]\n },\n {\n \"name\": \"lpOperatorCreateTradingPool\",\n \"discriminator\": [\n 182,\n 99,\n 232,\n 188,\n 202,\n 38,\n 71,\n 211\n ],\n \"accounts\": [\n {\n \"name\": \"tradingPool\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 116,\n 114,\n 97,\n 100,\n 105,\n 110,\n 103,\n 95,\n 112,\n 111,\n 111,\n 108\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"nodeWallet\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ]\n }\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"nodeWallet\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"createTradingPoolArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"lpOperatorUpdateInterestRate\",\n \"discriminator\": [\n 25,\n 217,\n 30,\n 158,\n 210,\n 240,\n 173,\n 10\n ],\n \"accounts\": [\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"nodeWallet\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"lpOperatorUpdateMaxExposure\",\n \"discriminator\": [\n 43,\n 226,\n 68,\n 201,\n 78,\n 18,\n 155,\n 107\n ],\n \"accounts\": [\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"nodeWallet\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lpOperatorUpdateOpenLtv\",\n \"discriminator\": [\n 164,\n 5,\n 214,\n 18,\n 130,\n 13,\n 165,\n 21\n ],\n \"accounts\": [\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"nodeWallet\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"openLtv\",\n \"type\": \"u16\"\n }\n ]\n },\n {\n \"name\": \"lpOperatorUpdateTradingPool\",\n \"discriminator\": [\n 99,\n 179,\n 6,\n 181,\n 30,\n 148,\n 30,\n 204\n ],\n \"accounts\": [\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"nodeWallet\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"updatePoolArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"lpOperatorWithdrawFromNodeWallet\",\n \"discriminator\": [\n 162,\n 244,\n 237,\n 100,\n 96,\n 130,\n 60,\n 117\n ],\n \"accounts\": [\n {\n \"name\": \"nodeWallet\",\n \"writable\": true\n },\n {\n \"name\": \"funder\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"fromTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"nodeWallet\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"toTokenAccount\",\n \"writable\": true\n },\n {\n \"name\": \"tokenProgram\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"withdrawalAccessList\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"migratePool\",\n \"discriminator\": [\n 55,\n 170,\n 171,\n 123,\n 210,\n 69,\n 39,\n 172\n ],\n \"accounts\": [\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"migratePoolArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"reallocPool\",\n \"discriminator\": [\n 114,\n 128,\n 37,\n 167,\n 71,\n 227,\n 40,\n 178\n ],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"removeWithdrawalAccess\",\n \"discriminator\": [\n 218,\n 186,\n 7,\n 130,\n 180,\n 40,\n 111,\n 122\n ],\n \"accounts\": [\n {\n \"name\": \"withdrawalAccessList\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 119,\n 105,\n 116,\n 104,\n 100,\n 114,\n 97,\n 119,\n 97,\n 108,\n 95,\n 97,\n 99,\n 99,\n 101,\n 115,\n 115,\n 95,\n 108,\n 105,\n 115,\n 116\n ]\n }\n ]\n }\n },\n {\n \"name\": \"authority\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"fromPubkey\",\n \"type\": \"string\"\n }\n ]\n },\n {\n \"name\": \"rescueStuckTokens\",\n \"discriminator\": [\n 104,\n 17,\n 134,\n 60,\n 192,\n 138,\n 94,\n 244\n ],\n \"accounts\": [\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"nodeWallet\",\n \"writable\": true\n },\n {\n \"name\": \"positionTokenAccount\",\n \"writable\": true\n },\n {\n \"name\": \"traderTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"position.trader\",\n \"account\": \"position\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"positionMint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"positionMint\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"tokenProgram\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"tradingCloseBorrowCollateral\",\n \"discriminator\": [\n 160,\n 104,\n 113,\n 179,\n 42,\n 80,\n 8,\n 16\n ],\n \"accounts\": [\n {\n \"name\": \"positionAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tradingPool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"randomAccountAsId\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"instructions\",\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"fromTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"positionAccount\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"toTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tokenProgram\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"tokenProgram\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"randomAccountAsId\"\n },\n {\n \"name\": \"associatedTokenProgram\",\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"tradingCloseRepaySol\",\n \"discriminator\": [\n 74,\n 90,\n 5,\n 111,\n 35,\n 171,\n 135,\n 56\n ],\n \"accounts\": [\n {\n \"name\": \"positionAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tradingPool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"randomAccountAsId\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"nodeWallet\",\n \"writable\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"randomAccountAsId\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"fromTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"toTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"nodeWallet\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"feeTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 117,\n 98,\n 107,\n 101,\n 121,\n 33,\n 32,\n 40,\n 34,\n 54,\n 74,\n 102,\n 84,\n 111,\n 98,\n 68,\n 118,\n 119,\n 117,\n 119,\n 90,\n 120,\n 90,\n 80,\n 54,\n 70,\n 82,\n 53,\n 74,\n 80,\n 109,\n 106,\n 100,\n 118,\n 81,\n 52,\n 104,\n 52,\n 77,\n 111,\n 118,\n 107,\n 69,\n 86,\n 72,\n 50,\n 70,\n 80,\n 115,\n 77,\n 83,\n 114,\n 70,\n 34,\n 41\n ]\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"tokenProgram\"\n }\n ],\n \"args\": [\n {\n \"name\": \"closingPositionSize\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"closeType\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"discountBps\",\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"referralBps\",\n \"type\": {\n \"option\": \"u64\"\n }\n }\n ]\n },\n {\n \"name\": \"tradingCreateTpDelegate\",\n \"discriminator\": [\n 174,\n 200,\n 59,\n 127,\n 100,\n 216,\n 183,\n 8\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 100,\n 101,\n 108,\n 101,\n 103,\n 97,\n 116,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"delegatedAccount\"\n }\n ]\n }\n },\n {\n \"name\": \"originalOperator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"delegatedAccount\"\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"price\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"lowerThreshold\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"delegateOperator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"partialPercentage\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"tradingDataAccruedInterest\",\n \"discriminator\": [\n 227,\n 39,\n 217,\n 0,\n 88,\n 3,\n 25,\n 115\n ],\n \"accounts\": [\n {\n \"name\": \"positionAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tradingPool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"randomAccountAsId\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"nodeWallet\",\n \"writable\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"randomAccountAsId\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"fromTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"toTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"nodeWallet\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"feeTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 117,\n 98,\n 107,\n 101,\n 121,\n 33,\n 32,\n 40,\n 34,\n 54,\n 74,\n 102,\n 84,\n 111,\n 98,\n 68,\n 118,\n 119,\n 117,\n 119,\n 90,\n 120,\n 90,\n 80,\n 54,\n 70,\n 82,\n 53,\n 74,\n 80,\n 109,\n 106,\n 100,\n 118,\n 81,\n 52,\n 104,\n 52,\n 77,\n 111,\n 118,\n 107,\n 69,\n 86,\n 72,\n 50,\n 70,\n 80,\n 115,\n 77,\n 83,\n 114,\n 70,\n 34,\n 41\n ]\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"tokenProgram\"\n }\n ],\n \"args\": [],\n \"returns\": \"u64\"\n },\n {\n \"name\": \"tradingManagementMergePositions\",\n \"discriminator\": [\n 220,\n 145,\n 59,\n 236,\n 80,\n 58,\n 112,\n 127\n ],\n \"accounts\": [\n {\n \"name\": \"positionOne\",\n \"writable\": true\n },\n {\n \"name\": \"positionTwo\",\n \"writable\": true\n },\n {\n \"name\": \"mergedPosition\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_one.trader\",\n \"account\": \"position\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_one.pool\",\n \"account\": \"position\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"seed\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"tokenProgram\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"positionOneTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"positionOne\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"positionTwoTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"positionTwo\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"mergedPositionTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"mergedPosition\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"seed\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"tradingManagementSplitPosition\",\n \"discriminator\": [\n 230,\n 180,\n 252,\n 200,\n 8,\n 246,\n 131,\n 54\n ],\n \"accounts\": [\n {\n \"name\": \"originalPosition\",\n \"writable\": true\n },\n {\n \"name\": \"newPositionOne\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"original_position.pool\",\n \"account\": \"position\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"seed1\"\n }\n ]\n }\n },\n {\n \"name\": \"newPositionTwo\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"original_position.pool\",\n \"account\": \"position\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"seed2\"\n }\n ]\n }\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"originalPositionTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"originalPosition\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"newPositionTokenAccountOne\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"newPositionOne\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"newPositionTokenAccountTwo\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"newPositionTwo\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"tokenProgram\"\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"splitRatioBps\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"seed1\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"seed2\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"tradingOpenAddCollateral\",\n \"discriminator\": [\n 21,\n 160,\n 90,\n 163,\n 189,\n 122,\n 164,\n 50\n ],\n \"accounts\": [\n {\n \"name\": \"positionAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tradingPool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"randomAccountAsId\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"toTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"positionAccount\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tokenProgram\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"randomAccountAsId\"\n },\n {\n \"name\": \"oracleQueue\",\n \"address\": \"A43DyUGA7s8eXPxqEjJY6EBu1KKbNgfxF8h17VAHn13w\"\n },\n {\n \"name\": \"baseOracleQuote\"\n },\n {\n \"name\": \"quoteOracleQuote\"\n },\n {\n \"name\": \"clockSysvar\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"slotHashesSysvar\",\n \"address\": \"SysvarS1otHashes111111111111111111111111111\"\n },\n {\n \"name\": \"instructionsSysvar\",\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n },\n {\n \"name\": \"tokenProgram\"\n }\n ],\n \"args\": [\n {\n \"name\": \"maxInterestRate\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"tradingOpenBorrow\",\n \"discriminator\": [\n 53,\n 88,\n 1,\n 144,\n 58,\n 65,\n 182,\n 60\n ],\n \"accounts\": [\n {\n \"name\": \"positionAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tradingPool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"randomAccountAsId\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"nodeWallet\",\n \"writable\": true\n },\n {\n \"name\": \"instructions\",\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"randomAccountAsId\"\n },\n {\n \"name\": \"feeTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"feeRecipient\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tokenProgram\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"quoteMint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"fromTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"nodeWallet\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tokenProgram\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"quoteMint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"toTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tokenProgram\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"quoteMint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"tokenProgram\"\n },\n {\n \"name\": \"positionTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"positionAccount\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateralTokenProgram\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateralMint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"collateralTokenProgram\"\n },\n {\n \"name\": \"associatedTokenProgram\",\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"collateralMint\"\n },\n {\n \"name\": \"quoteMint\"\n },\n {\n \"name\": \"feeRecipient\"\n }\n ],\n \"args\": [\n {\n \"name\": \"positionSize\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"userPays\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"discountBps\",\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"referralBps\",\n \"type\": {\n \"option\": \"u64\"\n }\n }\n ]\n },\n {\n \"name\": \"tradingPartialRepaySol\",\n \"discriminator\": [\n 98,\n 78,\n 144,\n 144,\n 103,\n 34,\n 40,\n 162\n ],\n \"accounts\": [\n {\n \"name\": \"positionAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tradingPool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"randomAccountAsId\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"nodeWallet\",\n \"writable\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"randomAccountAsId\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"fromTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"toTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"nodeWallet\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"feeTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 117,\n 98,\n 107,\n 101,\n 121,\n 33,\n 32,\n 40,\n 34,\n 54,\n 74,\n 102,\n 84,\n 111,\n 98,\n 68,\n 118,\n 119,\n 117,\n 119,\n 90,\n 120,\n 90,\n 80,\n 54,\n 70,\n 82,\n 53,\n 74,\n 80,\n 109,\n 106,\n 100,\n 118,\n 81,\n 52,\n 104,\n 52,\n 77,\n 111,\n 118,\n 107,\n 69,\n 86,\n 72,\n 50,\n 70,\n 80,\n 115,\n 77,\n 83,\n 114,\n 70,\n 34,\n 41\n ]\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"tokenProgram\"\n }\n ],\n \"args\": [\n {\n \"name\": \"percentage\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"tradingRemoveTpDelegate\",\n \"discriminator\": [\n 88,\n 18,\n 149,\n 143,\n 124,\n 43,\n 68,\n 178\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 100,\n 101,\n 108,\n 101,\n 103,\n 97,\n 116,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"delegatedAccount\"\n }\n ]\n }\n },\n {\n \"name\": \"originalOperator\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\n \"delegate\"\n ]\n },\n {\n \"name\": \"delegatedAccount\"\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n }\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"discriminator\": [\n 92,\n 145,\n 166,\n 111,\n 11,\n 38,\n 38,\n 247\n ]\n },\n {\n \"name\": \"nodeWallet\",\n \"discriminator\": [\n 48,\n 117,\n 214,\n 115,\n 125,\n 23,\n 94,\n 246\n ]\n },\n {\n \"name\": \"pool\",\n \"discriminator\": [\n 241,\n 154,\n 109,\n 4,\n 17,\n 177,\n 109,\n 188\n ]\n },\n {\n \"name\": \"position\",\n \"discriminator\": [\n 170,\n 188,\n 143,\n 228,\n 122,\n 64,\n 247,\n 208\n ]\n },\n {\n \"name\": \"withdrawalAccessList\",\n \"discriminator\": [\n 29,\n 144,\n 191,\n 76,\n 108,\n 26,\n 73,\n 234\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"positionCloseEvent\",\n \"discriminator\": [\n 85,\n 5,\n 166,\n 100,\n 218,\n 87,\n 230,\n 129\n ]\n },\n {\n \"name\": \"positionOpenEvent\",\n \"discriminator\": [\n 84,\n 127,\n 249,\n 160,\n 99,\n 95,\n 120,\n 120\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"addressMismatch\",\n \"msg\": \"Address Mismatch\"\n },\n {\n \"code\": 6001,\n \"name\": \"programMismatch\",\n \"msg\": \"Program Mismatch\"\n },\n {\n \"code\": 6002,\n \"name\": \"missingRepay\",\n \"msg\": \"Missing Repay\"\n },\n {\n \"code\": 6003,\n \"name\": \"incorrectOwner\",\n \"msg\": \"Incorrect Owner\"\n },\n {\n \"code\": 6004,\n \"name\": \"incorrectProgramAuthority\",\n \"msg\": \"Incorrect Program Authority\"\n },\n {\n \"code\": 6005,\n \"name\": \"cannotBorrowBeforeRepay\",\n \"msg\": \"Cannot Borrow Before Repay\"\n },\n {\n \"code\": 6006,\n \"name\": \"unknownInstruction\",\n \"msg\": \"Unknown Instruction\"\n },\n {\n \"code\": 6007,\n \"name\": \"expectedCollateralNotEnough\",\n \"msg\": \"Expected collateral not enough\"\n },\n {\n \"code\": 6008,\n \"name\": \"forTesting\",\n \"msg\": \"testError\"\n },\n {\n \"code\": 6009,\n \"name\": \"blacklistedAccount\",\n \"msg\": \"Account is blacklisted\"\n },\n {\n \"code\": 6010,\n \"name\": \"accessEntryAlreadyExists\",\n \"msg\": \"Access entry already exists\"\n },\n {\n \"code\": 6011,\n \"name\": \"accessEntryNotFound\",\n \"msg\": \"Access entry not found\"\n },\n {\n \"code\": 6012,\n \"name\": \"unauthorizedWithdrawal\",\n \"msg\": \"Unauthorized Withdrawal\"\n },\n {\n \"code\": 6013,\n \"name\": \"accountAlreadyInitialized\",\n \"msg\": \"Account already initialized\"\n },\n {\n \"code\": 6014,\n \"name\": \"invalidSignature\",\n \"msg\": \"The provided signature is invalid.\"\n },\n {\n \"code\": 6015,\n \"name\": \"invalidOracle\",\n \"msg\": \"The provided oracle is invalid.\"\n },\n {\n \"code\": 6016,\n \"name\": \"invalidSplitRatio\",\n \"msg\": \"Invalid split ratio. Must be between 1 and 99\"\n },\n {\n \"code\": 6017,\n \"name\": \"positionsNotMergeable\",\n \"msg\": \"Positions cannot be merged - must have same pool, trader, and interest rate\"\n },\n {\n \"code\": 6018,\n \"name\": \"onlyDelegateOperator\",\n \"msg\": \"Only delegate operator can execute TP\"\n },\n {\n \"code\": 6019,\n \"name\": \"invalidDelegateType\",\n \"msg\": \"Invalid delegate type\"\n },\n {\n \"code\": 6020,\n \"name\": \"missingRequiredPriceFeed\",\n \"msg\": \"Missing required price feed\"\n },\n {\n \"code\": 6021,\n \"name\": \"invalidPrice\",\n \"msg\": \"Price must be greater than 0\"\n },\n {\n \"code\": 6022,\n \"name\": \"mathOverflow\",\n \"msg\": \"Arithmetic operation overflow\"\n }\n ],\n \"types\": [\n {\n \"name\": \"createTradingPoolArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"interestRate\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"feedId\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"maxExposure\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"openLtv\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"delegate\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"delegateType\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"field1\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"field2\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"field3\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"field4\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"field5\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"originalOperator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"delegateOperator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"account\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"migratePoolArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"feedId\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"openLtv\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"nodeWallet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"totalFunds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"totalBorrowed\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"maintenanceLtv\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"liquidationLtv\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"nodeOperator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"interestRate\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"collateralType\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"maxBorrow\",\n \"docs\": [\n \"Previously max_borrow. Can be repurposed again.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"nodeWallet\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"maxExposure\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"currentExposure\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"qtType\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"feedId\",\n \"docs\": [\n \"Switchboard Oracle Quote Feed ID\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"openLtv\",\n \"docs\": [\n \"The max loan-to-value (LTV) used to determine how much SOL can be borrowed per token (denoted in basis points).\"\n ],\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"position\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"closeStatusRecallTimestamp\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"userPaid\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"collateralAmount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"trader\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"seed\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"closeTimestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"closingPositionSize\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"interestRate\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"lastInterestCollect\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"positionCloseEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"userPaid\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"collateralAmount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"openTimestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"trader\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"closeType\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"closeTimestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"closingPositionSize\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"positionOpenEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"userPaid\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"collateralAmount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"openTimestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"trader\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"updatePoolArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"openLtv\",\n \"type\": {\n \"option\": \"u16\"\n }\n },\n {\n \"name\": \"interestRate\",\n \"type\": {\n \"option\": \"u8\"\n }\n },\n {\n \"name\": \"maxExposure\",\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"feedId\",\n \"type\": {\n \"option\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"withdrawalAccessEntry\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"fromPubkey\",\n \"type\": \"string\"\n },\n {\n \"name\": \"toPubkey\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"withdrawalAccessList\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"accessEntries\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"withdrawalAccessEntry\"\n }\n }\n }\n }\n ]\n }\n }\n ],\n \"constants\": [\n {\n \"name\": \"maxBasisPoints\",\n \"type\": \"u16\",\n \"value\": \"10000\"\n },\n {\n \"name\": \"oracleMaxAge\",\n \"type\": \"u16\",\n \"value\": \"100\"\n },\n {\n \"name\": \"oraclePubKey\",\n \"type\": \"pubkey\",\n \"value\": \"joPUhu4So61QnYoGKy8yPDQsrq5xemKtyByHKwqQ7r4\"\n }\n ]\n};\n"],"mappings":"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","names":["import_anchor","import_web3","import_spl_token","import_on_demand","import_on_demand","feed","import_web3","import_spl_token","computeFeeIx","bs58","_a","allInstructions","messageV0","tx","createAssociatedTokenAccountInstruction","tx2"]}
|
|
1
|
+
{"version":3,"sources":["../index.ts","../idl/userVault.json","../idl/lavarageUSDC.json","../constants.ts","../switchboard.ts","../crossbar.ts","../idl/lavarageSOL.json","../utils.ts","../evm.ts","../abi/borrowerOperations.ts","../abi/tokenHolderAbi.ts","../lending.ts","../idl/lavarageUSDC.ts"],"sourcesContent":["/**\n * @packageDocumentation\n * @module Lavarage SDK\n * \n * The main entry point for the Lavarage SDK, providing functionality for interacting\n * with the Lavarage DeFi protocol on both Solana and EVM chains.\n * \n * @example\n * ```typescript\n * import { getPda, getPositionAccountPDA } from '@lavarage/sdk';\n * import * as lending from '@lavarage/sdk/lending';\n * ```\n */\n\nimport { BN, Program, ProgramAccount } from \"@coral-xyz/anchor\";\nimport { Lavarage as LavarageSOL } from \"./idl/lavarageSOL\";\nimport { Lavarage as LavarageUSDC } from \"./idl/lavarageUSDC\";\nimport { UserVault } from \"./idl/userVault\";\nimport userVaultIDL from \"./idl/userVault.json\";\nimport lavarageUSDCJson from \"./idl/lavarageUSDC.json\";\nimport bs58 from \"bs58\";\nimport {\n AccountInfo,\n AddressLookupTableAccount,\n ComputeBudgetProgram,\n Keypair,\n PublicKey,\n SystemProgram,\n SYSVAR_CLOCK_PUBKEY,\n SYSVAR_INSTRUCTIONS_PUBKEY,\n SYSVAR_SLOT_HASHES_PUBKEY,\n Transaction,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport {\n ASSOCIATED_TOKEN_PROGRAM_ID,\n createAssociatedTokenAccountIdempotentInstruction,\n createAssociatedTokenAccountInstruction,\n getAssociatedTokenAddressSync,\n NATIVE_MINT,\n TOKEN_PROGRAM_ID,\n} from \"@solana/spl-token\";\nimport { queuePubkey, USDC_MINT } from \"./constants\";\nimport { getOracleQuoteForCollateralType, getOracleQuoteForFeedId, getSwitchboardQueue } from \"./switchboard\";\nimport { u8ArrayToString } from \"./utils\";\nimport { ApiKeys } from \"./crossbar\";\n\nexport * from \"./evm\";\nexport * as lending from \"./lending\";\n\n\ntype OptionalRPCResults = {\n addressLookupTableAccounts?: AccountInfo<Buffer>[];\n latestBlockhash?: string;\n tokenAccountConfirmCreatedAddresses?: PublicKey[];\n quoteMintAccountInfo?: AccountInfo<Buffer>;\n}\nconst REFFERAL_VAULT_PROGRAM_ID = new PublicKey(\"FFe8xWs9iBdWB6vsxg8yBLirZHsbACFNbXqAM4K3fPPB\");\n\nconst LAVARAGE_LOOKUP_TABLE = \"CDPmKb5VggsHABwDCTaxiw5XXLjcgkqSJMNKRTzHWXwK\";\n\n/**\n * Derives a Program Derived Address (PDA) for the given seed(s) and program ID\n * \n * @group Traders\n * @category Utilities\n * \n * @param seed - Single buffer or array of buffers to use as seeds\n * @param programId - The Solana program ID to derive the PDA from\n * @returns The derived public key address\n * \n * @example\n * ```typescript\n * const seed = Buffer.from(\"position\");\n * const pda = getPda(seed, programId);\n * ```\n */\nexport function getPda(seed: Buffer | Buffer[], programId: PublicKey) {\n const seedsBuffer = Array.isArray(seed) ? seed : [seed];\n\n return PublicKey.findProgramAddressSync(seedsBuffer, programId)[0];\n}\n\n/**\n * Generates a Position Account PDA for a specific offer and user\n *\n * @group Traders\n * @category Utilities\n *\n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @param offer - The offer program account\n * @param seed - Additional seed for uniqueness (typically a public key)\n * @returns The Position Account PDA public key\n * \n * @example\n * ```typescript\n * const positionPDA = getPositionAccountPDA(\n * lavarageProgram,\n * offerAccount,\n * userPublicKey\n * );\n * ```\n */\n\nexport function getPositionAccountPDA(\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n offer: ProgramAccount,\n seed: PublicKey\n) {\n return getPda(\n [\n Buffer.from(\"position\"),\n lavarageProgram.provider.publicKey!.toBuffer(),\n offer.publicKey.toBuffer(),\n seed.toBuffer(),\n ],\n lavarageProgram.programId\n );\n}\n/**\n * Gets an associated token account or creates the instruction to create one if it doesn't exist\n * \n * @group Solana\n * @category Token Accounts\n * @internal\n * \n * @param lavarageProgram - The Lavarage program instance\n * @param ownerPublicKey - The owner of the token account\n * @param tokenAddress - The mint address of the token\n * @param tokenProgram - Optional token program ID (defaults to TOKEN_PROGRAM_ID)\n * @param confirmCreatedAddresses - Optional array of addresses to confirm creation of token accounts\n * @returns Object containing the account address and creation instruction\n */\n\nasync function getTokenAccountOrCreateIfNotExists(\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n ownerPublicKey: PublicKey,\n tokenAddress: PublicKey,\n tokenProgram?: PublicKey,\n confirmCreatedAddresses?: PublicKey[]\n) {\n const associatedTokenAddress = getAssociatedTokenAddressSync(\n tokenAddress,\n ownerPublicKey,\n true,\n tokenProgram,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n\n if (confirmCreatedAddresses?.includes(associatedTokenAddress)) {\n return {\n account: {\n address: associatedTokenAddress,\n },\n instruction: undefined,\n };\n }\n\n const instruction = createAssociatedTokenAccountIdempotentInstruction(\n lavarageProgram.provider.publicKey!,\n associatedTokenAddress,\n ownerPublicKey,\n tokenAddress,\n tokenProgram,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n\n return {\n account: {\n address: associatedTokenAddress,\n },\n instruction,\n };\n}\n/**\n * Re-exports all types and interfaces from the Lavarage V1 IDL\n * @group Solana\n */\nexport * from \"./idl/lavarageSOL\";\n/**\n * Namespace containing all types and interfaces from the Lavarage V2 IDL\n * @group Solana\n */\nexport * as IDLV2 from \"./idl/lavarageUSDC\";\n/**\n * Fetches all available lending offers from the Lavarage protocol\n * \n * @group Traders\n * @category Queries\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @returns Promise resolving to an array of all pool/offer accounts\n * \n * @example\n * ```typescript\n * // Fetch all offers\n * const offers = await getOffers(lavarageProgram);\n * \n * // Process each offer\n * offers.forEach(offer => {\n * console.log('Offer:', offer.publicKey.toString());\n * console.log('Data:', offer.account);\n * });\n * ```\n */\n\nexport const getOffers = (\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>\n) => {\n return lavarageProgram.account.pool.all();\n};\n/**\n * Fetches all open positions from the Lavarage protocol\n * \n * This function filters for positions with a specific data structure size (178 bytes)\n * and checks for positions that are currently open.\n *\n * @group Traders\n * @category Queries\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @returns Promise resolving to an array of open position accounts\n * \n * @example\n * ```typescript\n * // Get all open positions\n * const openPositions = await getOpenPositions(lavarageProgram);\n * \n * console.log(`Found ${openPositions.length} open positions`);\n * \n * // Filter positions by user\n * const userPositions = openPositions.filter(pos => \n * pos.account.owner.equals(userPublicKey)\n * );\n * ```\n * \n * @remarks\n * The function query only open positions\n * without fetching closed or liquidated positions.\n */\n\nexport const getOpenPositions = (\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>\n) => {\n return lavarageProgram.account.position.all([\n { dataSize: 178 },\n {\n memcmp: {\n offset: 40,\n bytes: bs58.encode(new Uint8Array(8)),\n },\n },\n ]);\n};\n/**\n * Fetches all closed positions from the Lavarage protocol\n * \n * \n * @group Traders\n * @category Queries\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @returns Promise resolving to an array of all closed position accounts from all three states\n * \n * @example\n * ```typescript\n * // Get all closed positions\n * const closedPositions = await getClosedPositions(lavarageProgram);\n * \n * console.log(`Found ${closedPositions.length} closed positions`);\n * \n * // Filter by specific user\n * const userClosedPositions = closedPositions.filter(pos =>\n * pos.account.owner.equals(userPublicKey)\n * );\n * ```\n * \n */\n\nexport const getClosedPositions = async (\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>\n) => {\n const value = BigInt(9997);\n const valueBuffer = Buffer.alloc(8);\n valueBuffer.writeBigUInt64LE(value);\n const value2 = BigInt(9998);\n const valueBuffer2 = Buffer.alloc(8);\n valueBuffer2.writeBigUInt64LE(value2);\n const value3 = BigInt(9996);\n const valueBuffer3 = Buffer.alloc(8);\n valueBuffer3.writeBigUInt64LE(value3);\n return (\n await lavarageProgram.account.position.all([\n { dataSize: 178 },\n {\n memcmp: {\n offset: 40,\n bytes: bs58.encode(Uint8Array.from(valueBuffer)),\n },\n },\n ])\n )\n .concat(\n await lavarageProgram.account.position.all([\n { dataSize: 178 },\n {\n memcmp: {\n offset: 40,\n bytes: bs58.encode(Uint8Array.from(valueBuffer2)),\n },\n },\n ])\n )\n .concat(\n await lavarageProgram.account.position.all([\n { dataSize: 178 },\n {\n memcmp: {\n offset: 40,\n bytes: bs58.encode(Uint8Array.from(valueBuffer3)),\n },\n },\n ])\n );\n};\n/**\n * Fetches all liquidated positions from the Lavarage protocol\n * \n * Liquidated positions are positions that were forcefully closed due to \n * insufficient collateral or health factor falling below the threshold.\n * \n * @group Traders\n * @category Queries\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @returns Promise resolving to an array of liquidated position accounts\n * \n * @example\n * ```typescript\n * // Get all liquidated positions\n * const liquidatedPositions = await getLiquidatedPositions(lavarageProgram);\n * \n * console.log(`Found ${liquidatedPositions.length} liquidated positions`);\n * \n * // Analyze liquidation data\n * liquidatedPositions.forEach(pos => {\n * console.log('Position:', pos.publicKey.toString());\n * console.log('Liquidated amount:', pos.account.amount);\n * });\n * ```\n * \n * \n * @see {@link getClosedPositions} - For other types of closed positions\n * @see {@link getOpenPositions} - For currently active positions\n */\n\nexport const getLiquidatedPositions = (\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>\n) => {\n const value = BigInt(9999);\n const valueBuffer = Buffer.alloc(8);\n valueBuffer.writeBigUInt64LE(value);\n return lavarageProgram.account.position.all([\n { dataSize: 178 },\n {\n memcmp: {\n offset: 40,\n bytes: bs58.encode(Uint8Array.from(valueBuffer)),\n },\n },\n ]);\n};\n/**\n * Fetches all positions from the Lavarage protocol\n * \n * This function retrieves all position accounts regardless of their state (open, closed, liquidated).\n *\n * @group Traders\n * @category Queries\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @returns Promise resolving to an array of position accounts\n * \n * @example\n * ```typescript\n * // Get all positions\n * const allPositions = await getAllPositions(lavarageProgram);\n * \n * console.log(`Found ${allPositions.length} total positions`);\n * \n * // Filter positions by user\n * const userPositions = allPositions.filter(pos => \n * pos.account.owner.equals(userPublicKey)\n * );\n * ```\n * \n * @remarks\n * Unlike other position query functions, this returns ALL positions without\n * filtering by status. Use more specific functions like `getOpenPositions`,\n * `getClosedPositions`, or `getLiquidatedPositions` if you only need positions\n * with a specific status.\n * \n * @see {@link getOpenPositions} - For only open positions\n * @see {@link getClosedPositions} - For only closed positions\n * @see {@link getLiquidatedPositions} - For only liquidated positions\n */\n\nexport const getAllPositions = (\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>\n) => {\n return lavarageProgram.account.position.all([{ dataSize: 178 }]);\n};\n\nexport const borrowV1 = async (\n lavarageProgram: Program<LavarageSOL>,\n offer: ProgramAccount<{\n nodeWallet: PublicKey;\n interestRate: number;\n collateralType: PublicKey;\n }>,\n marginSOL: BN,\n leverage: number,\n randomSeed: Keypair,\n tokenProgram: PublicKey,\n partnerFeeRecipient?: PublicKey,\n partnerFeeMarkup?: number,\n computeBudgetMicroLamports?: number,\n discountBps?: number,\n referralBps?: number,\n referralVaultProgram?: Program<UserVault>,\n) => {\n let partnerFeeMarkupAsPkey;\n if (partnerFeeMarkup) {\n const feeBuffer = Buffer.alloc(8);\n feeBuffer.writeBigUInt64LE(BigInt(partnerFeeMarkup));\n const feeBuffer32 = Buffer.alloc(32);\n feeBuffer32.set(feeBuffer, 0);\n partnerFeeMarkupAsPkey = new PublicKey(feeBuffer32);\n }\n // assuming all token accounts are created prior\n const positionAccount = getPositionAccountPDA(\n lavarageProgram,\n offer,\n randomSeed.publicKey\n );\n\n const fromTokenAccount = await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n lavarageProgram.provider.publicKey!,\n offer.account.collateralType,\n tokenProgram\n );\n\n const toTokenAccount = await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n positionAccount,\n offer.account.collateralType,\n tokenProgram\n );\n\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const useReferral = discountBps !== undefined && referralBps !== undefined;\n\n // Check if partner fee recipient vault needs to be initialized via referralVaultProgram\n let partnerFeeRecipientCreateIx: TransactionInstruction | undefined;\n let userVaultPda: PublicKey | undefined;\n if (partnerFeeRecipient && referralBps !== undefined && referralVaultProgram) {\n [userVaultPda] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"user_vault\"), new PublicKey(partnerFeeRecipient).toBuffer()],\n referralVaultProgram.programId\n );\n const vaultAccountInfo = await lavarageProgram.provider.connection.getAccountInfo(userVaultPda);\n if (!vaultAccountInfo) {\n // Initialize the vault using referralVaultProgram\n partnerFeeRecipientCreateIx = await referralVaultProgram.methods\n .initializeVault()\n .accountsStrict({\n userVault: userVaultPda,\n user: partnerFeeRecipient!,\n funder: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n }\n }\n\n const tradingOpenBorrowInstruction = useReferral\n ? await lavarageProgram.methods\n .tradingOpenBorrowWithReferral(\n new BN((marginSOL.toNumber() * leverage).toFixed(0)),\n marginSOL,\n new BN(discountBps),\n new BN(referralBps)\n )\n .accountsStrict({\n nodeWallet: offer.account.nodeWallet,\n instructions: SYSVAR_INSTRUCTIONS_PUBKEY,\n tradingPool: offer.publicKey,\n positionAccount,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: randomSeed.publicKey.toBase58(),\n feeReceipient: \"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\",\n positionTokenAccount: toTokenAccount.account!.address,\n collateralTokenProgram: tokenProgram,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n collateralMint: offer.account.collateralType,\n usersTokenAccount: fromTokenAccount.account.address,\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey && userVaultPda\n ? [\n {\n pubkey: userVaultPda,\n isSigner: false,\n isWritable: true,\n }\n ]\n : []\n )\n .instruction()\n : await lavarageProgram.methods\n .tradingOpenBorrow(\n new BN((marginSOL.toNumber() * leverage).toFixed(0)),\n marginSOL\n )\n .accountsStrict({\n nodeWallet: offer.account.nodeWallet,\n instructions: SYSVAR_INSTRUCTIONS_PUBKEY,\n tradingPool: offer.publicKey,\n positionAccount,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: randomSeed.publicKey.toBase58(),\n feeReceipient: \"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\",\n positionTokenAccount: toTokenAccount.account!.address,\n collateralTokenProgram: tokenProgram,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n collateralMint: offer.account.collateralType,\n usersTokenAccount: fromTokenAccount.account.address,\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey\n ? [\n {\n pubkey: partnerFeeRecipient,\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: partnerFeeMarkupAsPkey,\n isSigner: false,\n isWritable: false,\n },\n ]\n : []\n )\n .instruction();\n\n const openAddCollateralInstruction = await lavarageProgram.methods\n .tradingOpenAddCollateral(offer.account.interestRate)\n .accountsStrict({\n tradingPool: offer.publicKey,\n trader: lavarageProgram.provider.publicKey!,\n mint: offer.account.collateralType,\n toTokenAccount: toTokenAccount.account!.address,\n systemProgram: SystemProgram.programId,\n positionAccount,\n randomAccountAsId: randomSeed.publicKey.toBase58(),\n tokenProgram: tokenProgram,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n })\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: computeBudgetMicroLamports ?? 100000,\n });\n\n const allInstructions = [\n // fromTokenAccount.instruction!,\n // toTokenAccount.instruction!,\n partnerFeeRecipientCreateIx,\n tradingOpenBorrowInstruction!,\n openAddCollateralInstruction!,\n computeBudgetMicroLamports ? computeFeeIx : undefined,\n ].filter(Boolean) as TransactionInstruction[];\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: allInstructions,\n }).compileToV0Message();\n\n const tx = new VersionedTransaction(messageV0);\n\n return tx;\n};\n\nexport const borrowV2 = async (\n lavarageProgram: Program<LavarageUSDC>,\n offer: ProgramAccount<{\n nodeWallet: PublicKey;\n interestRate: number;\n collateralType: PublicKey;\n feedId: number[];\n }>,\n marginSOL: BN,\n leverage: number,\n randomSeed: Keypair,\n quoteToken: PublicKey,\n tokenProgram: PublicKey,\n partnerFeeRecipient?: PublicKey,\n partnerFeeMarkup?: number,\n computeBudgetMicroLamports?: number,\n discountBps?: number,\n referralBps?: number,\n referralVaultProgram?: Program<UserVault>,\n) => {\n let partnerFeeMarkupAsPkey;\n if (partnerFeeMarkup) {\n const feeBuffer = Buffer.alloc(8);\n feeBuffer.writeBigUInt64LE(BigInt(partnerFeeMarkup));\n const feeBuffer32 = Buffer.alloc(32);\n feeBuffer32.set(feeBuffer, 0);\n partnerFeeMarkupAsPkey = new PublicKey(feeBuffer32);\n }\n // assuming all token accounts are created prior\n const positionAccount = getPositionAccountPDA(\n lavarageProgram,\n offer,\n randomSeed.publicKey\n );\n\n const quoteMintAccount =\n await lavarageProgram.provider.connection.getAccountInfo(quoteToken);\n const quoteTokenProgram = quoteMintAccount?.owner;\n\n const fromTokenAccount = await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n lavarageProgram.provider.publicKey!,\n offer.account.collateralType,\n tokenProgram\n );\n\n const toTokenAccount = await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n positionAccount,\n offer.account.collateralType,\n tokenProgram\n );\n\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const useReferral = discountBps !== undefined && referralBps !== undefined;\n\n // Check if partner fee recipient vault and token account need to be created\n let partnerFeeRecipientVaultCreateIx: TransactionInstruction | undefined;\n let partnerFeeRecipientTokenAccountCreateIx: TransactionInstruction | undefined;\n let userVaultPda: PublicKey | undefined;\n \n if (partnerFeeRecipient && partnerFeeMarkupAsPkey && referralVaultProgram) {\n // Derive the userVault PDA\n [userVaultPda] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"user_vault\"), new PublicKey(partnerFeeRecipient).toBuffer()],\n referralVaultProgram.programId\n );\n \n // Get the vault's associated token account\n const vaultTokenAccount = getAssociatedTokenAddressSync(\n quoteToken,\n userVaultPda,\n true, // allowOwnerOffCurve for PDA\n quoteTokenProgram\n );\n \n // Check both accounts at the same time\n const [vaultAccountInfo, vaultTokenAccountInfo] = await lavarageProgram.provider.connection.getMultipleAccountsInfo([\n userVaultPda,\n vaultTokenAccount\n ]);\n \n // Create vault if it doesn't exist\n if (!vaultAccountInfo) {\n partnerFeeRecipientVaultCreateIx = await referralVaultProgram.methods\n .initializeVault()\n .accountsStrict({\n userVault: userVaultPda,\n user: partnerFeeRecipient!,\n funder: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n }\n \n // Create token account if it doesn't exist\n if (!vaultTokenAccountInfo) {\n partnerFeeRecipientTokenAccountCreateIx = createAssociatedTokenAccountIdempotentInstruction(\n lavarageProgram.provider.publicKey!,\n vaultTokenAccount,\n userVaultPda,\n quoteToken,\n quoteTokenProgram,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n }\n }\n\n const tradingOpenBorrowInstruction = useReferral\n ? await lavarageProgram.methods\n .tradingOpenBorrow(\n new BN((marginSOL.toNumber() * leverage).toFixed(0)),\n marginSOL,\n new BN(discountBps),\n new BN(referralBps)\n )\n .accountsStrict({\n nodeWallet: offer.account.nodeWallet,\n instructions: SYSVAR_INSTRUCTIONS_PUBKEY,\n tradingPool: offer.publicKey,\n positionAccount,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: randomSeed.publicKey.toBase58(),\n feeTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\"),\n true,\n quoteTokenProgram\n ),\n toTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n lavarageProgram.provider.publicKey!,\n true,\n quoteTokenProgram\n ),\n tokenProgram: quoteTokenProgram!,\n fromTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n offer.account.nodeWallet,\n true,\n quoteTokenProgram\n ),\n positionTokenAccount: toTokenAccount.account!.address,\n collateralTokenProgram: tokenProgram,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n collateralMint: offer.account.collateralType,\n quoteMint: quoteToken,\n feeRecipient: new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\"),\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey && userVaultPda\n ? [\n {\n pubkey: getAssociatedTokenAddressSync(\n quoteToken,\n userVaultPda,\n true, // allowOwnerOffCurve for PDA\n quoteTokenProgram\n ),\n isSigner: false,\n isWritable: true,\n }\n ]\n : []\n )\n .instruction()\n : await lavarageProgram.methods\n .tradingOpenBorrow(\n new BN((marginSOL.toNumber() * leverage).toFixed(0)),\n marginSOL,\n null,\n null,\n )\n .accountsStrict({\n nodeWallet: offer.account.nodeWallet,\n instructions: SYSVAR_INSTRUCTIONS_PUBKEY,\n tradingPool: offer.publicKey,\n positionAccount,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: randomSeed.publicKey.toBase58(),\n feeTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\"),\n true,\n quoteTokenProgram\n ),\n toTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n lavarageProgram.provider.publicKey!,\n true,\n quoteTokenProgram\n ),\n tokenProgram: quoteTokenProgram!,\n fromTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n offer.account.nodeWallet,\n true,\n quoteTokenProgram\n ),\n positionTokenAccount: toTokenAccount.account!.address,\n collateralTokenProgram: tokenProgram,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n collateralMint: offer.account.collateralType,\n quoteMint: quoteToken,\n feeRecipient: new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\"),\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey && userVaultPda\n ? [\n {\n pubkey: getAssociatedTokenAddressSync(\n quoteToken,\n userVaultPda,\n true, // allowOwnerOffCurve for PDA\n quoteTokenProgram\n ),\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: partnerFeeMarkupAsPkey,\n isSigner: false,\n isWritable: false,\n },\n ]\n : []\n )\n .instruction();\n\n const baseOracleQuote = getOracleQuoteForFeedId(u8ArrayToString(offer.account.feedId));\n\n const quoteOracleQuote = getOracleQuoteForCollateralType(USDC_MINT);\n\n const openAddCollateralInstruction = await lavarageProgram.methods\n .tradingOpenAddCollateral(offer.account.interestRate < 255 ? offer.account.interestRate + 1 : 255)\n .accountsStrict({\n tradingPool: offer.publicKey,\n trader: lavarageProgram.provider.publicKey!,\n mint: offer.account.collateralType,\n toTokenAccount: toTokenAccount.account!.address,\n systemProgram: SystemProgram.programId,\n positionAccount,\n randomAccountAsId: randomSeed.publicKey.toBase58(),\n tokenProgram: tokenProgram,\n baseOracleQuote,\n quoteOracleQuote,\n clockSysvar: SYSVAR_CLOCK_PUBKEY,\n instructionsSysvar: SYSVAR_INSTRUCTIONS_PUBKEY,\n oracleQueue: queuePubkey,\n slotHashesSysvar: SYSVAR_SLOT_HASHES_PUBKEY,\n })\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: computeBudgetMicroLamports ?? 100000,\n });\n\n const allInstructions = [\n fromTokenAccount.instruction!,\n partnerFeeRecipientVaultCreateIx,\n partnerFeeRecipientTokenAccountCreateIx,\n tradingOpenBorrowInstruction!,\n openAddCollateralInstruction!,\n computeBudgetMicroLamports ? computeFeeIx : undefined,\n ].filter(Boolean) as TransactionInstruction[];\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: allInstructions,\n }).compileToV0Message();\n\n const tx = new VersionedTransaction(messageV0);\n\n return tx;\n};\n\n/**\n * Opens a leveraged trading position on Lavarage V1\n * \n * This function executes a complete leveraged trade by:\n * 1. Borrowing funds from the lending pool based on leverage\n * 2. Swapping tokens through Jupiter DEX\n * 3. Depositing the swapped tokens as collateral\n * \n * @group Traders\n * @category Trading\n * \n * @param lavarageProgram - The Lavarage V1 program instance\n * @param offer - The lending offer containing terms (interest rate, collateral type, node wallet)\n * @param jupInstruction - Jupiter swap instructions including setup and swap details\n * @param marginSOL - The user's margin amount in SOL (as BN)\n * @param leverage - The leverage multiplier (e.g., 2 for 2x leverage)\n * @param randomSeed - A keypair used to generate unique position account address\n * @param tokenProgram - The SPL token program ID\n * @param partnerFeeRecipient - Optional wallet to receive partner fees\n * @param partnerFeeMarkup - Optional partner fee amount in basis points\n * @param computeBudgetMicroLamports - Optional compute budget for priority fees\n * @param platformFeeRecipient - Optional wallet to receive platform fees (jup, okx)\n * @param splitTransactions - Optional boolean to split the transaction into multiple transactions (jito bundle)\n * @param discountBps - Optional discount basis points for the referral program\n * @param referralBps - Optional referral basis points for the referral program\n * @param optionalRPCResults - Optional RPC results to use for the transaction (speeds up the transaction building)\n * \n * @returns A versioned transaction ready to be signed and sent\n * \n * @example\n * ```typescript\n * // Open a 2x leveraged position with 1 SOL margin\n * const marginSOL = new BN(1_000_000_000); // 1 SOL in lamports\n * const leverage = 2;\n * const randomSeed = Keypair.generate();\n * \n * const tx = await openTradeV1(\n * lavarageProgram,\n * offerAccount,\n * jupiterInstructions,\n * marginSOL,\n * leverage,\n * randomSeed,\n * TOKEN_PROGRAM_ID\n * );\n * \n * // Sign and send transaction\n * const signature = await sendAndConfirmTransaction(connection, tx, [wallet, randomSeed]);\n * ```\n * \n * @remarks\n * - The function creates token accounts if they don't exist\n * \n * @throws Will throw if token accounts cannot be created or if Jupiter instructions are invalid\n */\n\nexport const openTradeV1 = async (\n lavarageProgram: Program<LavarageSOL>,\n offer: ProgramAccount<{\n nodeWallet: PublicKey;\n interestRate: number;\n collateralType: PublicKey;\n }>,\n jupInstruction: {\n instructions: {\n setupInstructions: Record<string, unknown>[];\n swapInstruction: Record<string, unknown>;\n addressLookupTableAddresses: string[];\n };\n },\n marginSOL: BN,\n leverage: number,\n randomSeed: Keypair,\n tokenProgram: PublicKey,\n partnerFeeRecipient?: PublicKey,\n partnerFeeMarkup?: number,\n computeBudgetMicroLamports?: number,\n platformFeeRecipient?: PublicKey,\n splitTransactions?: boolean,\n discountBps?: number,\n referralBps?: number,\n optionalRPCResults?: OptionalRPCResults,\n) => {\n let partnerFeeMarkupAsPkey;\n const referralVaultProgram = new Program<UserVault>(userVaultIDL, lavarageProgram.provider);\n if (partnerFeeMarkup) {\n const feeBuffer = Buffer.alloc(8);\n feeBuffer.writeBigUInt64LE(BigInt(partnerFeeMarkup));\n const feeBuffer32 = Buffer.alloc(32);\n feeBuffer32.set(feeBuffer, 0);\n partnerFeeMarkupAsPkey = new PublicKey(feeBuffer32);\n }\n // assuming all token accounts are created prior\n const positionAccount = getPositionAccountPDA(\n lavarageProgram,\n offer,\n randomSeed.publicKey\n );\n\n const fromTokenAccount = await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n lavarageProgram.provider.publicKey!,\n offer.account.collateralType,\n tokenProgram,\n optionalRPCResults?.tokenAccountConfirmCreatedAddresses\n );\n\n const toTokenAccount = await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n positionAccount,\n offer.account.collateralType,\n tokenProgram,\n optionalRPCResults?.tokenAccountConfirmCreatedAddresses\n );\n\n const platformFeeRecipientAccount = platformFeeRecipient ? await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n platformFeeRecipient,\n offer.account.collateralType,\n tokenProgram,\n optionalRPCResults?.tokenAccountConfirmCreatedAddresses\n ) : undefined;\n\n const tokenAccountCreationTx = new Transaction();\n\n if (fromTokenAccount.instruction) {\n tokenAccountCreationTx.add(fromTokenAccount.instruction);\n }\n\n if (toTokenAccount.instruction) {\n tokenAccountCreationTx.add(toTokenAccount.instruction);\n }\n\n if (platformFeeRecipientAccount?.instruction) {\n tokenAccountCreationTx.add(platformFeeRecipientAccount.instruction);\n }\n\n const instructionsJup = jupInstruction.instructions;\n\n const {\n setupInstructions,\n swapInstruction: swapInstructionPayload,\n addressLookupTableAddresses,\n } = instructionsJup;\n\n const deserializeInstruction = (instruction: any) => {\n return new TransactionInstruction({\n programId: new PublicKey(instruction.programId),\n\n keys: instruction.accounts.map((key: any) => ({\n pubkey: new PublicKey(key.pubkey),\n isSigner: key.isSigner,\n isWritable: key.isWritable,\n })),\n data: Buffer.from(instruction.data, \"base64\"),\n });\n };\n\n const getAddressLookupTableAccounts = async (\n keys: string[]\n ): Promise<AddressLookupTableAccount[]> => {\n const addressLookupTableAccountInfos = optionalRPCResults?.addressLookupTableAccounts ??\n await lavarageProgram.provider.connection.getMultipleAccountsInfo(\n keys.map((key) => new PublicKey(key))\n );\n\n return addressLookupTableAccountInfos.reduce((acc, accountInfo, index) => {\n const addressLookupTableAddress = keys[index];\n if (accountInfo) {\n const addressLookupTableAccount = new AddressLookupTableAccount({\n key: new PublicKey(addressLookupTableAddress),\n state: AddressLookupTableAccount.deserialize(\n Uint8Array.from(accountInfo.data)\n ),\n });\n acc.push(addressLookupTableAccount);\n }\n\n return acc;\n }, new Array<AddressLookupTableAccount>());\n };\n\n const addressLookupTableAccounts: AddressLookupTableAccount[] = [];\n\n addressLookupTableAccounts.push(\n ...(await getAddressLookupTableAccounts([\n LAVARAGE_LOOKUP_TABLE,\n ...addressLookupTableAddresses,\n ]))\n );\n\n const blockhash =\n optionalRPCResults?.latestBlockhash ?? (await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\")).blockhash;\n\n const useReferral = discountBps !== undefined && referralBps !== undefined;\n\n // Check if partner fee recipient vault needs to be initialized via referralVaultProgram\n let partnerFeeRecipientCreateIx: TransactionInstruction | undefined;\n let userVaultPda: PublicKey | undefined;\n if (partnerFeeRecipient && referralBps !== undefined && referralVaultProgram) {\n [userVaultPda] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"user_vault\"), new PublicKey(partnerFeeRecipient).toBuffer()],\n referralVaultProgram.programId\n );\n const vaultAccountInfo = await lavarageProgram.provider.connection.getAccountInfo(userVaultPda);\n if (!vaultAccountInfo) {\n // Initialize the vault using referralVaultProgram\n partnerFeeRecipientCreateIx = await referralVaultProgram.methods\n .initializeVault()\n .accountsStrict({\n userVault: userVaultPda,\n user: partnerFeeRecipient!,\n funder: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n }\n }\n\n const tradingOpenBorrowInstruction = useReferral\n ? await lavarageProgram.methods\n .tradingOpenBorrowWithReferral(\n new BN((marginSOL.toNumber() * leverage).toFixed(0)),\n marginSOL,\n new BN(discountBps),\n new BN(referralBps)\n )\n .accountsStrict({\n nodeWallet: offer.account.nodeWallet,\n instructions: SYSVAR_INSTRUCTIONS_PUBKEY,\n tradingPool: offer.publicKey,\n positionAccount,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: randomSeed.publicKey.toBase58(),\n feeReceipient: \"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\",\n positionTokenAccount: toTokenAccount.account!.address,\n collateralTokenProgram: tokenProgram,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n collateralMint: offer.account.collateralType,\n usersTokenAccount: fromTokenAccount.account.address,\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey && userVaultPda\n ? [\n {\n pubkey: userVaultPda,\n isSigner: false,\n isWritable: true,\n }\n ]\n : []\n )\n .instruction()\n : await lavarageProgram.methods\n .tradingOpenBorrow(\n new BN((marginSOL.toNumber() * leverage).toFixed(0)),\n marginSOL\n )\n .accountsStrict({\n nodeWallet: offer.account.nodeWallet,\n instructions: SYSVAR_INSTRUCTIONS_PUBKEY,\n tradingPool: offer.publicKey,\n positionAccount,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: randomSeed.publicKey.toBase58(),\n feeReceipient: \"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\",\n positionTokenAccount: toTokenAccount.account!.address,\n collateralTokenProgram: tokenProgram,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n collateralMint: offer.account.collateralType,\n usersTokenAccount: fromTokenAccount.account.address,\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey\n ? [\n {\n pubkey: partnerFeeRecipient,\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: partnerFeeMarkupAsPkey,\n isSigner: false,\n isWritable: false,\n },\n ]\n : []\n )\n .instruction();\n\n const openAddCollateralInstruction = await lavarageProgram.methods\n .tradingOpenAddCollateral(offer.account.interestRate)\n .accountsStrict({\n tradingPool: offer.publicKey,\n trader: lavarageProgram.provider.publicKey!,\n mint: offer.account.collateralType,\n toTokenAccount: toTokenAccount.account!.address,\n systemProgram: SystemProgram.programId,\n positionAccount,\n randomAccountAsId: randomSeed.publicKey.toBase58(),\n tokenProgram: tokenProgram,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n })\n .instruction();\n\n const jupiterIxs = [\n ...setupInstructions.map(deserializeInstruction),\n deserializeInstruction(swapInstructionPayload),\n ];\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: computeBudgetMicroLamports ?? 100000,\n });\n\n if (splitTransactions) {\n const setUpInstructions = [\n fromTokenAccount.instruction!,\n toTokenAccount.instruction!,\n partnerFeeRecipientCreateIx,\n ...setupInstructions.map(deserializeInstruction),\n ].filter(Boolean) as TransactionInstruction[];\n\n const allInstructions = [\n tradingOpenBorrowInstruction!,\n deserializeInstruction(swapInstructionPayload), ,\n openAddCollateralInstruction!,\n computeBudgetMicroLamports ? computeFeeIx : undefined,\n ].filter(Boolean) as TransactionInstruction[];\n\n const messageV01 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: setUpInstructions,\n }).compileToV0Message(addressLookupTableAccounts);\n\n const tx2 = new VersionedTransaction(messageV01);\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: allInstructions,\n }).compileToV0Message(addressLookupTableAccounts);\n\n const tx = new VersionedTransaction(messageV0);\n\n return [tx2, tx];\n }\n\n const allInstructions = [\n // fromTokenAccount.instruction!,\n // toTokenAccount.instruction!,\n partnerFeeRecipientCreateIx,\n tradingOpenBorrowInstruction!,\n ...jupiterIxs,\n openAddCollateralInstruction!,\n computeBudgetMicroLamports ? computeFeeIx : undefined,\n ].filter(Boolean) as TransactionInstruction[];\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: allInstructions,\n }).compileToV0Message(addressLookupTableAccounts);\n\n const tx = new VersionedTransaction(messageV0);\n\n return tx;\n};\n\n/**\n * Opens a leveraged trading position on Lavarage V2\n * \n * This function executes a complete leveraged trade similar to V1, but with \n * enhanced support for multiple quote tokens (not limited to SOL).\n * The process includes:\n * 1. Borrowing funds from the lending pool based on leverage\n * 2. Swapping tokens through Jupiter DEX\n * 3. Depositing the swapped tokens as collateral\n * \n * @group Traders\n * @category Trading\n * \n * @param lavarageProgram - The Lavarage V2 program instance\n * @param offer - The lending offer containing terms (interest rate, collateral type, node wallet)\n * @param jupInstruction - Jupiter swap instructions including setup and swap details\n * @param marginSOL - The user's margin amount in SOL (as BN)\n * @param leverage - The leverage multiplier (e.g., 2 for 2x leverage)\n * @param randomSeed - A keypair used to generate unique position account address\n * @param quoteToken - The quote token mint address (e.g., USDC, USDT, or SOL)\n * @param tokenProgram - The SPL token program ID for the collateral token\n * @param partnerFeeRecipient - Optional wallet to receive partner fees\n * @param partnerFeeMarkup - Optional partner fee amount in basis points\n * @param computeBudgetMicroLamports - Optional compute budget for priority fees\n * @param platformFeeRecipient - Optional wallet to receive platform fees (jup, okx)\n * @param splitTransactions - Optional boolean to split the transaction into multiple transactions (jito bundle)\n * @param discountBps - Optional discount basis points for the referral program\n * @param referralBps - Optional referral basis points for the referral program\n * @param optionalRPCResults - Optional RPC results to use for the transaction (speeds up the transaction building)\n * \n * @returns A versioned transaction ready to be signed and sent\n * \n * @example\n * ```typescript\n * // Open a 3x leveraged position with USDC as quote token\n * const marginSOL = new BN(1_000_000_000); // 1 SOL equivalent\n * const leverage = 3;\n * const randomSeed = Keypair.generate();\n * const usdcMint = new PublicKey(\"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\");\n * \n * const tx = await openTradeV2(\n * lavarageProgram,\n * offerAccount,\n * jupiterInstructions,\n * marginSOL,\n * leverage,\n * randomSeed,\n * usdcMint, // Quote token\n * TOKEN_PROGRAM_ID\n * );\n * \n * // Sign and send transaction\n * const signature = await sendAndConfirmTransaction(connection, tx, [wallet, randomSeed]);\n * ```\n * \n * @remarks\n * - V2 supports multiple quote tokens while V1 only supports SOL\n * \n * @see {@link openTradeV1} - The V1 version limited to SOL as quote token\n */\n\nexport const openTradeV2 = async (\n lavarageProgram: Program<LavarageUSDC>,\n offer: ProgramAccount<{\n nodeWallet: PublicKey;\n interestRate: number;\n collateralType: PublicKey;\n feedId: number[];\n }>,\n jupInstruction: {\n instructions: {\n setupInstructions: Record<string, unknown>[];\n swapInstruction: Record<string, unknown>;\n addressLookupTableAddresses: string[];\n };\n },\n marginSOL: BN,\n leverage: number,\n randomSeed: Keypair,\n quoteToken: PublicKey,\n tokenProgram: PublicKey,\n partnerFeeRecipient?: PublicKey,\n partnerFeeMarkup?: number,\n computeBudgetMicroLamports?: number,\n platformFeeRecipient?: PublicKey,\n splitTransactions?: boolean,\n discountBps?: number,\n referralBps?: number,\n optionalRPCResults?: OptionalRPCResults,\n) => {\n let partnerFeeMarkupAsPkey;\n const referralVaultProgram = new Program<UserVault>(userVaultIDL, lavarageProgram.provider);\n const program = new Program<LavarageUSDC>(lavarageUSDCJson, lavarageProgram.provider);\n\n if (partnerFeeMarkup) {\n const feeBuffer = Buffer.alloc(8);\n feeBuffer.writeBigUInt64LE(BigInt(partnerFeeMarkup));\n const feeBuffer32 = Buffer.alloc(32);\n feeBuffer32.set(feeBuffer, 0);\n partnerFeeMarkupAsPkey = new PublicKey(feeBuffer32);\n }\n // assuming all token accounts are created prior\n const positionAccount = getPositionAccountPDA(\n program,\n offer,\n randomSeed.publicKey\n );\n\n const quoteMintAccount = optionalRPCResults?.quoteMintAccountInfo ??\n await program.provider.connection.getAccountInfo(quoteToken);\n const quoteTokenProgram = quoteMintAccount?.owner;\n\n const fromTokenAccount = await getTokenAccountOrCreateIfNotExists(\n program,\n program.provider.publicKey!,\n offer.account.collateralType,\n tokenProgram,\n optionalRPCResults?.tokenAccountConfirmCreatedAddresses\n );\n\n const toTokenAccount = await getTokenAccountOrCreateIfNotExists(\n program,\n positionAccount,\n offer.account.collateralType,\n tokenProgram,\n optionalRPCResults?.tokenAccountConfirmCreatedAddresses\n );\n\n const platformFeeRecipientAccount = platformFeeRecipient ? await getTokenAccountOrCreateIfNotExists(\n program,\n platformFeeRecipient,\n offer.account.collateralType,\n tokenProgram,\n optionalRPCResults?.tokenAccountConfirmCreatedAddresses\n ) : undefined;\n\n const tokenAccountCreationTx = new Transaction();\n\n if (fromTokenAccount.instruction) {\n tokenAccountCreationTx.add(fromTokenAccount.instruction);\n }\n\n if (toTokenAccount.instruction) {\n tokenAccountCreationTx.add(toTokenAccount.instruction);\n }\n\n if (platformFeeRecipientAccount?.instruction) {\n tokenAccountCreationTx.add(platformFeeRecipientAccount.instruction);\n }\n\n const instructionsJup = jupInstruction.instructions;\n\n const {\n setupInstructions,\n swapInstruction: swapInstructionPayload,\n addressLookupTableAddresses,\n } = instructionsJup;\n\n const deserializeInstruction = (instruction: any) => {\n return new TransactionInstruction({\n programId: new PublicKey(instruction.programId),\n\n keys: instruction.accounts.map((key: any) => ({\n pubkey: new PublicKey(key.pubkey),\n isSigner: key.isSigner,\n isWritable: key.isWritable,\n })),\n data: Buffer.from(instruction.data, \"base64\"),\n });\n };\n\n const getAddressLookupTableAccounts = async (\n keys: string[]\n ): Promise<AddressLookupTableAccount[]> => {\n const addressLookupTableAccountInfos =\n optionalRPCResults?.addressLookupTableAccounts ?? await program.provider.connection.getMultipleAccountsInfo(\n keys.map((key) => new PublicKey(key))\n );\n\n return addressLookupTableAccountInfos.reduce((acc, accountInfo, index) => {\n const addressLookupTableAddress = keys[index];\n if (accountInfo) {\n const addressLookupTableAccount = new AddressLookupTableAccount({\n key: new PublicKey(addressLookupTableAddress),\n state: AddressLookupTableAccount.deserialize(\n Uint8Array.from(accountInfo.data)\n ),\n });\n acc.push(addressLookupTableAccount);\n }\n\n return acc;\n }, new Array<AddressLookupTableAccount>());\n };\n\n const addressLookupTableAccounts: AddressLookupTableAccount[] = [];\n\n // @ts-expect-error @coral-xyz/anchor versions mismatch\n const queue = await getSwitchboardQueue(program.provider);\n\n const switchboardLookupTables = await queue.loadLookupTable();\n\n addressLookupTableAccounts.push(\n ...(await getAddressLookupTableAccounts([\n ...addressLookupTableAddresses,\n getQuoteCurrencySpecificAddressLookupTable(quoteToken.toBase58()),\n LAVARAGE_LOOKUP_TABLE,\n ])),\n switchboardLookupTables\n );\n\n const { blockhash } =\n await program.provider.connection.getLatestBlockhash(\"finalized\");\n\n const useReferral = discountBps !== undefined && referralBps !== undefined;\n\n // Check if partner fee recipient vault and token account need to be created\n let partnerFeeRecipientVaultCreateIx: TransactionInstruction | undefined;\n let partnerFeeRecipientTokenAccountCreateIx: TransactionInstruction | undefined;\n let userVaultPda: PublicKey | undefined;\n\n const partnerDirectAta = partnerFeeRecipient ? getAssociatedTokenAddressSync(\n quoteToken,\n partnerFeeRecipient,\n true,\n quoteTokenProgram\n ) : undefined;\n \n if (partnerFeeRecipient && partnerFeeMarkupAsPkey && referralVaultProgram) {\n // Derive the userVault PDA\n [userVaultPda] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"user_vault\"), new PublicKey(partnerFeeRecipient).toBuffer()],\n referralVaultProgram.programId\n );\n \n // Get the vault's associated token account\n const vaultTokenAccount = getAssociatedTokenAddressSync(\n quoteToken,\n userVaultPda,\n true, // allowOwnerOffCurve for PDA\n quoteTokenProgram\n );\n \n // Check both accounts at the same time\n const [vaultAccountInfo, vaultTokenAccountInfo] = await program.provider.connection.getMultipleAccountsInfo([\n userVaultPda,\n vaultTokenAccount\n ]);\n \n // Create vault if it doesn't exist\n if (!vaultAccountInfo) {\n partnerFeeRecipientVaultCreateIx = await referralVaultProgram.methods\n .initializeVault()\n .accountsStrict({\n userVault: userVaultPda,\n user: partnerFeeRecipient!,\n funder: program.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n }\n \n // Create token account if it doesn't exist\n if (!vaultTokenAccountInfo) {\n partnerFeeRecipientTokenAccountCreateIx = createAssociatedTokenAccountIdempotentInstruction(\n program.provider.publicKey!,\n vaultTokenAccount,\n userVaultPda,\n quoteToken,\n quoteTokenProgram,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n }\n } else if (partnerFeeRecipient && partnerDirectAta) {\n const [partnerDirectAtaInfo] = await program.provider.connection.getMultipleAccountsInfo([\n partnerDirectAta\n ]);\n if (!partnerDirectAtaInfo) {\n partnerFeeRecipientTokenAccountCreateIx = createAssociatedTokenAccountIdempotentInstruction(\n program.provider.publicKey!,\n partnerDirectAta,\n partnerFeeRecipient!,\n quoteToken,\n quoteTokenProgram,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n }\n }\n\n const tradingOpenBorrowInstruction = useReferral\n ? await program.methods\n .tradingOpenBorrow(\n new BN((marginSOL.toNumber() * leverage).toFixed(0)),\n marginSOL,\n new BN(discountBps),\n new BN(referralBps)\n )\n .accountsStrict({\n nodeWallet: offer.account.nodeWallet,\n instructions: SYSVAR_INSTRUCTIONS_PUBKEY,\n tradingPool: offer.publicKey,\n positionAccount,\n trader: program.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: randomSeed.publicKey.toBase58(),\n feeTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\"),\n true,\n quoteTokenProgram\n ),\n toTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n program.provider.publicKey!,\n true,\n quoteTokenProgram\n ),\n tokenProgram: quoteTokenProgram!,\n fromTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n offer.account.nodeWallet,\n true,\n quoteTokenProgram\n ),\n positionTokenAccount: toTokenAccount.account!.address,\n collateralTokenProgram: tokenProgram,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n collateralMint: offer.account.collateralType,\n quoteMint: quoteToken,\n feeRecipient: new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\"),\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey && userVaultPda\n ? [\n {\n pubkey: getAssociatedTokenAddressSync(\n quoteToken,\n userVaultPda,\n true, // allowOwnerOffCurve for PDA\n quoteTokenProgram\n ),\n isSigner: false,\n isWritable: true,\n }\n ]\n : []\n )\n .instruction()\n : await program.methods\n .tradingOpenBorrow(\n new BN((marginSOL.toNumber() * leverage).toFixed(0)),\n marginSOL,\n null,\n null,\n )\n .accountsStrict({\n nodeWallet: offer.account.nodeWallet,\n instructions: SYSVAR_INSTRUCTIONS_PUBKEY,\n tradingPool: offer.publicKey,\n positionAccount,\n trader: program.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: randomSeed.publicKey.toBase58(),\n feeTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\"),\n true,\n quoteTokenProgram\n ),\n toTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n program.provider.publicKey!,\n true,\n quoteTokenProgram\n ),\n tokenProgram: quoteTokenProgram!,\n fromTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n offer.account.nodeWallet,\n true,\n quoteTokenProgram\n ),\n positionTokenAccount: toTokenAccount.account!.address,\n collateralTokenProgram: tokenProgram,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n collateralMint: offer.account.collateralType,\n quoteMint: quoteToken,\n feeRecipient: new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\"),\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey && partnerDirectAta\n ? [\n {\n pubkey: partnerDirectAta,\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: partnerFeeMarkupAsPkey,\n isSigner: false,\n isWritable: false,\n },\n ]\n : []\n )\n .instruction();\n\n const baseOracleQuote = getOracleQuoteForFeedId(u8ArrayToString(offer.account.feedId));\n\n const quoteOracleQuote = getOracleQuoteForCollateralType(USDC_MINT);\n\n const openAddCollateralInstruction = await program.methods\n .tradingOpenAddCollateral(offer.account.interestRate < 255 ? offer.account.interestRate + 1 : 255)\n .accountsStrict({\n tradingPool: offer.publicKey,\n trader: program.provider.publicKey!,\n mint: offer.account.collateralType,\n toTokenAccount: toTokenAccount.account!.address,\n systemProgram: SystemProgram.programId,\n positionAccount,\n randomAccountAsId: randomSeed.publicKey.toBase58(),\n tokenProgram: tokenProgram,\n baseOracleQuote,\n quoteOracleQuote,\n clockSysvar: SYSVAR_CLOCK_PUBKEY,\n slotHashesSysvar: SYSVAR_SLOT_HASHES_PUBKEY,\n instructionsSysvar: SYSVAR_INSTRUCTIONS_PUBKEY,\n oracleQueue: queuePubkey,\n })\n .instruction();\n\n const jupiterIxs = [\n ...setupInstructions.map(deserializeInstruction),\n deserializeInstruction(swapInstructionPayload),\n ];\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: computeBudgetMicroLamports ?? 100000,\n });\n\n if (splitTransactions) {\n const setUpInstructions = [\n // fromTokenAccount.instruction!,\n // toTokenAccount.instruction!,\n partnerFeeRecipientVaultCreateIx,\n partnerFeeRecipientTokenAccountCreateIx,\n ...setupInstructions.map(deserializeInstruction),\n ].filter(Boolean) as TransactionInstruction[];\n\n const allInstructions = [\n tradingOpenBorrowInstruction!,\n deserializeInstruction(swapInstructionPayload), ,\n openAddCollateralInstruction!,\n computeBudgetMicroLamports ? computeFeeIx : undefined,\n ].filter(Boolean) as TransactionInstruction[];\n\n const messageV01 = new TransactionMessage({\n payerKey: program.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: setUpInstructions,\n }).compileToV0Message(addressLookupTableAccounts);\n\n const tx2 = new VersionedTransaction(messageV01);\n\n const messageV0 = new TransactionMessage({\n payerKey: program.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: allInstructions,\n }).compileToV0Message(addressLookupTableAccounts);\n\n const tx = new VersionedTransaction(messageV0);\n\n return [tx2, tx];\n }\n\n const allInstructions = [\n // fromTokenAccount.instruction!,\n // toTokenAccount.instruction!,\n partnerFeeRecipientVaultCreateIx,\n partnerFeeRecipientTokenAccountCreateIx,\n tradingOpenBorrowInstruction!,\n ...jupiterIxs,\n openAddCollateralInstruction!,\n computeBudgetMicroLamports ? computeFeeIx : undefined,\n ].filter(Boolean) as TransactionInstruction[];\n\n const messageV0 = new TransactionMessage({\n payerKey: program.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: allInstructions,\n }).compileToV0Message(addressLookupTableAccounts);\n\n const tx = new VersionedTransaction(messageV0);\n\n return tx;\n};\n\n/**\n * Creates a take-profit delegate for automated position closing\n * \n * \n * @group Traders\n * @category Automation\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @param position - The position account to set take-profit for\n * @param tpPrice - The target price at which to take profit (as BN)\n * @param tpTolerence - Price tolerance/slippage allowed when executing (as BN)\n * @param prioFee - Priority fee in microlamports for transaction execution\n * @param quoteToken - The quote token mint address (e.g., USDC, SOL)\n * @param partnerFeeRecipient - Optional wallet to receive partner fees\n * \n * @returns A versioned transaction to create the take-profit delegate\n * \n * @example\n * ```typescript\n * // Set take-profit at $150 for a position\n * const position = await getPositionAccount(positionPubkey);\n * const tpPrice = new BN(150 * 1e6); // $150 with 6 decimals\n * const tolerance = new BN(1 * 1e6); // $1 tolerance\n * const prioFee = new BN(100000); // 0.1 SOL priority fee\n * \n * const tx = await createTpDelegate(\n * lavarageProgram,\n * position,\n * tpPrice,\n * tolerance,\n * prioFee,\n * usdcMint\n * );\n * \n * // Sign and send\n * const signature = await sendAndConfirmTransaction(connection, tx, [wallet]);\n * console.log('Take-profit delegate created:', signature);\n * ```\n * \n * @see {@link modifyTpDelegate} - Modify take-profit settings\n * @see {@link removeTpDelegate} - Remove take-profit without replacement\n */\n\nexport const createTpDelegate = async (\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n position: ProgramAccount<{\n pool: PublicKey;\n seed: PublicKey;\n userPaid: BN;\n amount: BN;\n }>,\n tpPrice: BN,\n tpTolerence: BN,\n prioFee: BN,\n quoteToken: PublicKey,\n partnerFeeRecipient?: PublicKey\n) => {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n const ix = await lavarageProgram.methods\n .tradingCreateTpDelegate(\n tpPrice,\n tpTolerence,\n new PublicKey(\"6dA5GTDPWxnw3gvjoy3vYBDyY7iETxcTJzt8RqF9i9MV\"),\n new BN(10000)\n )\n .accountsStrict({\n delegate: getPda(\n [Buffer.from(\"delegate\"), position.publicKey.toBuffer()],\n lavarageProgram.programId\n ),\n originalOperator: lavarageProgram.provider.publicKey!,\n delegatedAccount: position.publicKey,\n systemProgram: SystemProgram.programId,\n })\n .remainingAccounts(\n partnerFeeRecipient\n ? [\n {\n pubkey:\n quoteToken.toBase58() ==\n \"So11111111111111111111111111111111111111112\"\n ? partnerFeeRecipient\n : getAssociatedTokenAddressSync(\n quoteToken,\n partnerFeeRecipient,\n false\n ),\n isSigner: false,\n isWritable: true,\n },\n ]\n : []\n )\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: prioFee.toNumber(),\n });\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [ix, computeFeeIx].filter(Boolean),\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n};\n\n/**\n * Modifies take-profit setting for an existing position. \n * \n * \n * @group Traders\n * @category Automation\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @param position - The position account to modify take-profit for\n * @param tpPrice - The new target price for take-profit (as BN)\n * @param tpTolerence - The new price tolerance/slippage allowed (as BN)\n * @param prioFee - Priority fee in microlamports for transaction execution\n * @param quoteToken - The quote token mint address (e.g., USDC, SOL)\n * @param partnerFeeRecipient - Optional wallet to receive partner fees\n * \n * @returns Transaction to update the take-profit settings. \n * \n * @example\n * ```typescript\n * const tx = await modifyTpDelegate(\n * program,\n * position,\n * new BN(160 * 1e6), // New target: $160\n * new BN(2 * 1e6), // Tolerance: $2\n * new BN(100000), // Priority fee\n * usdcMint\n * );\n * ```\n * \n * @see {@link createTpDelegate} - Initial creation of take-profit\n * @see {@link removeTpDelegate} - Remove take-profit without replacement\n */\n\nexport const modifyTpDelegate = async (\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n position: ProgramAccount<{\n pool: PublicKey;\n seed: PublicKey;\n userPaid: BN;\n amount: BN;\n }>,\n tpPrice: BN,\n tpTolerence: BN,\n prioFee: BN,\n quoteToken: PublicKey,\n partnerFeeRecipient?: PublicKey\n) => {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n const delegatePda = getPda(\n [Buffer.from(\"delegate\"), position.publicKey.toBuffer()],\n lavarageProgram.programId\n );\n const removeIx = await lavarageProgram.methods\n .tradingRemoveTpDelegate()\n .accountsStrict({\n delegate: delegatePda,\n originalOperator: lavarageProgram.provider.publicKey!,\n delegatedAccount: position.publicKey,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n const ix = await lavarageProgram.methods\n .tradingCreateTpDelegate(\n tpPrice,\n tpTolerence,\n new PublicKey(\"6dA5GTDPWxnw3gvjoy3vYBDyY7iETxcTJzt8RqF9i9MV\"),\n new BN(10000)\n )\n .accountsStrict({\n delegate: delegatePda,\n originalOperator: lavarageProgram.provider.publicKey!,\n delegatedAccount: position.publicKey,\n systemProgram: SystemProgram.programId,\n })\n .remainingAccounts(\n partnerFeeRecipient\n ? [\n {\n pubkey:\n quoteToken.toBase58() ==\n \"So11111111111111111111111111111111111111112\"\n ? partnerFeeRecipient\n : getAssociatedTokenAddressSync(\n quoteToken,\n partnerFeeRecipient,\n false\n ),\n isSigner: false,\n isWritable: true,\n },\n ]\n : []\n )\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: prioFee.toNumber(),\n });\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [removeIx, ix, computeFeeIx].filter(Boolean),\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n};\n\n/**\n * Removes take-profit settings from a position\n * \n * @group Traders\n * @category Automation\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @param position - The position account to remove take-profit from\n * @param prioFee - Priority fee in microlamports for transaction execution\n * \n * @returns Transaction to remove take-profit settings\n * \n * @example\n * ```typescript\n * const tx = await removeTpDelegate(\n * lavarageProgram,\n * position,\n * new BN(100000) // Priority fee\n * );\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n *\n * @see {@link createTpDelegate} - Initial creation of take-profit\n * @see {@link modifyTpDelegate} - Modify existing take-profit settings\n */\n\nexport const removeTpDelegate = async (\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n position: ProgramAccount<{\n pool: PublicKey;\n seed: PublicKey;\n userPaid: BN;\n amount: BN;\n }>,\n prioFee: BN\n) => {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n const delegatePda = getPda(\n [Buffer.from(\"delegate\"), position.publicKey.toBuffer()],\n lavarageProgram.programId\n );\n const removeIx = await lavarageProgram.methods\n .tradingRemoveTpDelegate()\n .accountsStrict({\n delegate: delegatePda,\n originalOperator: lavarageProgram.provider.publicKey!,\n delegatedAccount: position.publicKey,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: prioFee.toNumber(),\n });\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [removeIx, computeFeeIx].filter(Boolean),\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n};\n/**\n * Partially repays a position on Lavarage V1\n * \n * @group Traders\n * @category Trading\n * \n * @param lavarageProgram - The Lavarage V1 program instance\n * @param position - The position account to partially repay\n * @param repaymentBps - Repayment amount in basis points (10000 = 100%)\n * \n * @returns Transaction for partial repayment\n * \n * @example\n * ```typescript\n * // Repay 50% of the position\n * const tx = await partialRepayV1(\n * lavarageProgram,\n * position,\n * 5000 // 50% in basis points\n * );\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n * \n * @see {@link partialRepayV2} - The V2 version supporting multiple quote tokens\n */\n\nexport const partialRepayV1 = async (\n lavarageProgram: Program<LavarageSOL>,\n position: ProgramAccount<{\n pool: PublicKey;\n seed: PublicKey;\n userPaid: BN;\n amount: BN;\n }>,\n repaymentBps: number\n) => {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n const pool = await lavarageProgram.account.pool.fetch(position.account.pool);\n const positionAccountPDA = position.publicKey;\n const ix = await lavarageProgram.methods\n .tradingClosePartialRepaySol(new BN(repaymentBps))\n .accountsStrict({\n systemProgram: SystemProgram.programId,\n positionAccount: positionAccountPDA,\n tradingPool: position.account.pool,\n nodeWallet: pool.nodeWallet,\n trader: lavarageProgram.provider.publicKey!,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: position.account.seed,\n feeReceipient: \"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\",\n })\n .instruction();\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [ix],\n }).compileToV0Message();\n return new VersionedTransaction(messageV0);\n};\n\n/**\n * Partially repays a position on Lavarage V2\n * \n * @group Traders\n * @category Trading\n * \n * @param lavarageProgram - The Lavarage V2 program instance\n * @param position - The position account to partially repay\n * @param repaymentBps - Repayment amount in basis points (10000 = 100%)\n * \n * @returns Transaction for partial repayment\n * \n * @example\n * ```typescript\n * // Repay 30% of the position\n * const tx = await partialRepayV2(\n * lavarageProgram,\n * position,\n * 3000 // 30% in basis points\n * );\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n * \n * @see {@link partialRepayV1} - The V1 version supporting SOL as quote token\n */\nexport const partialRepayV2 = async (\n lavarageProgram: Program<LavarageUSDC>,\n position: ProgramAccount<{\n pool: PublicKey;\n seed: PublicKey;\n userPaid: BN;\n amount: BN;\n }>,\n repaymentBps: number\n) => {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n const pool = await lavarageProgram.account.pool.fetch(position.account.pool);\n const positionAccountPDA = position.publicKey;\n const ix = await lavarageProgram.methods\n .tradingPartialRepaySol(new BN(repaymentBps))\n .accountsStrict({\n systemProgram: SystemProgram.programId,\n positionAccount: positionAccountPDA,\n tradingPool: position.account.pool,\n nodeWallet: pool.nodeWallet,\n trader: lavarageProgram.provider.publicKey!,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: position.account.seed,\n fromTokenAccount: getAssociatedTokenAddressSync(\n pool.qtType,\n lavarageProgram.provider.publicKey!\n ),\n toTokenAccount: getAssociatedTokenAddressSync(\n pool.qtType,\n pool.nodeWallet,\n true\n ),\n mint: pool.qtType,\n feeTokenAccount: getAssociatedTokenAddressSync(\n pool.qtType,\n new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\")\n ),\n tokenProgram: TOKEN_PROGRAM_ID,\n })\n .instruction();\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [ix],\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n};\n\n/**\n * Closes a trading position on Lavarage V1\n * \n * @group Traders\n * @category Trading\n * \n * @param lavarageProgram - The Lavarage V1 program instance\n * @param position - The position account to close\n * @param offer - The offer/pool account associated with the position\n * @param jupInstruction - Jupiter swap instructions and quote for closing\n * @param partnerFeeRecipient - Optional wallet to receive partner fees\n * @param partnerFeeMarkup - Optional partner fee amount in basis points\n * @param computeBudgetMicroLamports - Optional compute budget for priority fees\n * @param platformFeeRecipient - Optional wallet to receive platform fees (jup, okx)\n * @param splitTransactions - Optional boolean to split the transaction into multiple transactions (jito bundle)\n * @param discountBps - Optional discount basis points for the referral program\n * @param referralBps - Optional referral basis points for the referral program\n * \n * @returns Transaction to close the position\n * \n * @example\n * ```typescript\n * const jupQuote = await getJupiterQuote(...);\n * const tx = await closeTradeV1(\n * lavarageProgram,\n * position,\n * offer,\n * jupQuote,\n * partnerWallet, // optional\n * 100, // optional fee in bps\n * 150000 // optional priority fee\n * );\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n * @see {@link openTradeV1} - The V1 version for opening positions\n * @see {@link partialRepayV1} - Partial repayments on V1 \n */\nexport const closeTradeV1 = async (\n lavarageProgram: Program<LavarageSOL>,\n position: ProgramAccount<{\n pool: PublicKey;\n seed: PublicKey;\n userPaid: BN;\n amount: BN;\n }>,\n offer: ProgramAccount<{\n nodeWallet: PublicKey;\n interestRate: number;\n collateralType: PublicKey;\n }>,\n jupInstruction: {\n instructions?: {\n setupInstructions: Record<string, unknown>[];\n swapInstruction: Record<string, unknown>;\n cleanupInstruction: Record<string, unknown>;\n addressLookupTableAddresses: string[];\n tokenLedgerInstruction?: Record<string, unknown>;\n };\n quoteResponse: any;\n },\n partnerFeeRecipient?: PublicKey,\n partnerFeeMarkup?: number,\n computeBudgetMicroLamports?: number,\n platformFeeRecipient?: PublicKey,\n splitTransactions?: boolean,\n discountBps?: number,\n referralBps?: number,\n) => {\n let partnerFeeMarkupAsPkey;\n const referralVaultProgram = new Program<UserVault>(userVaultIDL, lavarageProgram.provider);\n \n if (partnerFeeMarkup) {\n const feeBuffer = Buffer.alloc(8);\n feeBuffer.writeBigUInt64LE(BigInt(partnerFeeMarkup));\n const feeBuffer32 = Buffer.alloc(32);\n feeBuffer32.set(feeBuffer, 0);\n partnerFeeMarkupAsPkey = new PublicKey(feeBuffer32);\n }\n if (position.account.pool.toBase58() != offer.publicKey.toBase58())\n throw \"Mismatch offer\";\n const pool = offer;\n const poolPubKey = offer.publicKey;\n\n const tokenAddressPubKey = new PublicKey(offer.account.collateralType);\n\n const mintAccount = await lavarageProgram.provider.connection.getAccountInfo(\n offer.account.collateralType\n );\n const tokenProgram = mintAccount?.owner;\n\n const positionAccountPDA = position.publicKey;\n\n const fromTokenAccount = await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n positionAccountPDA,\n tokenAddressPubKey,\n tokenProgram\n );\n\n const toTokenAccount = await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n lavarageProgram.provider.publicKey!,\n tokenAddressPubKey,\n tokenProgram\n );\n\n const platformFeeRecipientAccount = platformFeeRecipient ? await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n platformFeeRecipient,\n offer.account.collateralType,\n tokenProgram\n ) : undefined;\n\n const jupiterSellIx = jupInstruction!.instructions;\n\n const deserializeInstruction = (instruction: any) => {\n return new TransactionInstruction({\n programId: new PublicKey(instruction.programId),\n\n keys: instruction.accounts.map((key: any) => ({\n pubkey: new PublicKey(key.pubkey),\n isSigner: key.isSigner,\n isWritable: key.isWritable,\n })),\n data: Buffer.from(instruction.data, \"base64\"),\n });\n };\n\n const getAddressLookupTableAccounts = async (\n keys: string[]\n ): Promise<AddressLookupTableAccount[]> => {\n const addressLookupTableAccountInfos =\n await lavarageProgram.provider.connection.getMultipleAccountsInfo(\n keys.map((key) => new PublicKey(key))\n );\n\n return addressLookupTableAccountInfos.reduce((acc, accountInfo, index) => {\n const addressLookupTableAddress = keys[index];\n if (accountInfo) {\n const addressLookupTableAccount = new AddressLookupTableAccount({\n key: new PublicKey(addressLookupTableAddress),\n state: AddressLookupTableAccount.deserialize(\n Uint8Array.from(accountInfo.data)\n ),\n });\n acc.push(addressLookupTableAccount);\n }\n\n return acc;\n }, new Array<AddressLookupTableAccount>());\n };\n\n const addressLookupTableAccounts: AddressLookupTableAccount[] = [];\n\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const useReferral = discountBps !== undefined && referralBps !== undefined;\n\n // Check if partner fee recipient vault needs to be initialized via referralVaultProgram\n let partnerFeeRecipientCreateIx: TransactionInstruction | undefined;\n let userVaultPda: PublicKey | undefined;\n if (partnerFeeRecipient && referralBps !== undefined && referralVaultProgram) {\n [userVaultPda] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"user_vault\"), new PublicKey(partnerFeeRecipient).toBuffer()],\n referralVaultProgram.programId\n );\n const vaultAccountInfo = await lavarageProgram.provider.connection.getAccountInfo(userVaultPda);\n if (!vaultAccountInfo) {\n // Initialize the vault using referralVaultProgram\n partnerFeeRecipientCreateIx = await referralVaultProgram.methods\n .initializeVault()\n .accountsStrict({\n userVault: userVaultPda,\n user: partnerFeeRecipient!,\n funder: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n }\n }\n\n const closePositionIx = await lavarageProgram.methods\n .tradingCloseBorrowCollateral()\n .accountsStrict({\n tradingPool: poolPubKey,\n instructions: SYSVAR_INSTRUCTIONS_PUBKEY,\n mint: offer.account.collateralType,\n fromTokenAccount: fromTokenAccount.account!.address,\n toTokenAccount: toTokenAccount.account!.address,\n positionAccount: positionAccountPDA,\n clock: SYSVAR_CLOCK_PUBKEY,\n systemProgram: SystemProgram.programId,\n trader: lavarageProgram.provider.publicKey!,\n tokenProgram: tokenProgram!,\n randomAccountAsId: position.account.seed,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n })\n .instruction();\n\n let repaySolIx: TransactionInstruction | null = null;\n let jupiterIxs: TransactionInstruction[] = [];\n if (jupInstruction.instructions == undefined) {\n repaySolIx = useReferral\n ? await lavarageProgram.methods\n .tradingCloseRepaySolWithReferral(\n new BN(jupInstruction.quoteResponse.outAmount),\n new BN(9997),\n new BN(discountBps),\n new BN(referralBps)\n )\n .accountsStrict({\n nodeWallet: pool.account.nodeWallet,\n positionAccount: positionAccountPDA,\n tradingPool: poolPubKey,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: position.account.seed,\n feeReceipient: \"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\",\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey && userVaultPda\n ? [\n {\n pubkey: userVaultPda,\n isSigner: false,\n isWritable: true,\n }\n ]\n : []\n )\n .instruction()\n : await lavarageProgram.methods\n .tradingCloseRepaySol(\n new BN(jupInstruction.quoteResponse.outAmount),\n new BN(9997)\n )\n .accountsStrict({\n nodeWallet: pool.account.nodeWallet,\n positionAccount: positionAccountPDA,\n tradingPool: poolPubKey,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: position.account.seed,\n feeReceipient: \"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\",\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey\n ? [\n {\n pubkey: partnerFeeRecipient,\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: partnerFeeMarkupAsPkey,\n isSigner: false,\n isWritable: false,\n },\n ]\n : []\n )\n .instruction();\n } else {\n repaySolIx = useReferral\n ? await lavarageProgram.methods\n .tradingCloseRepaySolWithReferral(\n new BN(jupInstruction.quoteResponse.outAmount),\n new BN(9998),\n new BN(discountBps),\n new BN(referralBps)\n )\n .accountsStrict({\n nodeWallet: pool.account.nodeWallet,\n positionAccount: positionAccountPDA,\n tradingPool: poolPubKey,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: position.account.seed,\n feeReceipient: \"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\",\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey && userVaultPda\n ? [\n {\n pubkey: userVaultPda,\n isSigner: false,\n isWritable: true,\n }\n ]\n : []\n )\n .instruction()\n : await lavarageProgram.methods\n .tradingCloseRepaySol(\n new BN(jupInstruction.quoteResponse.outAmount),\n new BN(9998)\n )\n .accountsStrict({\n nodeWallet: pool.account.nodeWallet,\n positionAccount: positionAccountPDA,\n tradingPool: poolPubKey,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: position.account.seed,\n feeReceipient: \"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\",\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey\n ? [\n {\n pubkey: partnerFeeRecipient,\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: partnerFeeMarkupAsPkey,\n isSigner: false,\n isWritable: false,\n },\n ]\n : []\n )\n .instruction();\n\n const {\n setupInstructions,\n swapInstruction: swapInstructionPayload,\n cleanupInstruction,\n addressLookupTableAddresses,\n } = jupiterSellIx!;\n jupiterIxs = [\n ...setupInstructions.map(deserializeInstruction),\n deserializeInstruction(swapInstructionPayload),\n deserializeInstruction(cleanupInstruction),\n ].filter((i) => !!i);\n addressLookupTableAccounts.push(\n ...(await getAddressLookupTableAccounts([\n LAVARAGE_LOOKUP_TABLE,\n ...addressLookupTableAddresses,\n ]))\n );\n }\n const profit = new BN(jupInstruction.quoteResponse.outAmount)\n .sub(position.account.amount)\n .sub(position.account.userPaid);\n\n let createAssociatedTokenAccountInstruction =\n createAssociatedTokenAccountIdempotentInstruction(\n lavarageProgram.provider.publicKey!,\n toTokenAccount.account!.address,\n lavarageProgram.provider.publicKey!,\n offer.account.collateralType,\n tokenProgram!\n );\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: computeBudgetMicroLamports ?? 100000,\n });\n\n if (splitTransactions) {\n const setUpInstructions = [\n partnerFeeRecipientCreateIx,\n jupInstruction.instructions && platformFeeRecipientAccount?.instruction ? platformFeeRecipientAccount.instruction : null,\n ].filter((i) => !!i);\n\n const allInstructions = [\n jupInstruction.instructions?.tokenLedgerInstruction\n ? deserializeInstruction(\n jupInstruction.instructions.tokenLedgerInstruction\n )\n : null,\n closePositionIx,\n ...jupiterIxs,\n repaySolIx,\n computeBudgetMicroLamports ? computeFeeIx : undefined,\n ].filter((i) => !!i);\n\n const messageV01 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: setUpInstructions,\n }).compileToV0Message(addressLookupTableAccounts);\n\n const tx = new VersionedTransaction(messageV01);\n\n const messageV02 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: allInstructions,\n }).compileToV0Message(addressLookupTableAccounts);\n\n const tx2 = new VersionedTransaction(messageV02);\n\n return [tx, tx2];\n }\n\n const allInstructions = [\n partnerFeeRecipientCreateIx,\n jupInstruction.instructions && platformFeeRecipientAccount?.instruction ? platformFeeRecipientAccount.instruction : null,\n jupInstruction.instructions?.tokenLedgerInstruction\n ? deserializeInstruction(\n jupInstruction.instructions.tokenLedgerInstruction\n )\n : null,\n closePositionIx,\n ...jupiterIxs,\n repaySolIx,\n computeBudgetMicroLamports ? computeFeeIx : undefined,\n ].filter((i) => !!i);\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: allInstructions,\n }).compileToV0Message(addressLookupTableAccounts);\n\n const tx = new VersionedTransaction(messageV0);\n\n return tx;\n};\n\n/**\n * Closes a trading position on Lavarage V2\n * \n * @group Traders\n * @category Trading\n * \n * @param lavarageProgram - The Lavarage V2 program instance\n * @param position - The position account to close\n * @param offer - The offer/pool account associated with the position\n * @param jupInstruction - Jupiter swap instructions and quote for closing\n * @param quoteToken - The quote token mint address for this position\n * @param partnerFeeRecipient - Optional wallet to receive partner fees\n * @param partnerFeeMarkup - Optional partner fee amount in basis points\n * @param computeBudgetMicroLamports - Optional compute budget for priority fees\n* @param platformFeeRecipient - Optional wallet to receive platform fees (jup, okx)\n * @param splitTransactions - Optional boolean to split the transaction into multiple transactions (jito bundle)\n * @param discountBps - Optional discount basis points for the referral program\n * @param referralBps - Optional referral basis points for the referral program\n * \n * @returns Transaction to close the position\n * \n * @example\n * ```typescript\n * const jupQuote = await getJupiterQuote(...);\n * const tx = await closeTradeV2(\n * lavarageProgram,\n * position,\n * offer,\n * jupQuote,\n * usdcMint, // quote token\n * partnerWallet, // optional\n * 100, // optional fee in bps\n * 150000 // optional priority fee\n * );\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n * @see {@link openTradeV2} - The V2 version for opening positions\n * @see {@link partialRepayV2} - Partial repay a V2 position \n */\nexport const closeTradeV2 = async (\n lavarageProgram: Program<LavarageUSDC>,\n position: ProgramAccount<{\n pool: PublicKey;\n seed: PublicKey;\n userPaid: BN;\n amount: BN;\n }>,\n offer: ProgramAccount<{\n nodeWallet: PublicKey;\n interestRate: number;\n collateralType: PublicKey;\n }>,\n jupInstruction: {\n instructions?: {\n setupInstructions: Record<string, unknown>[];\n swapInstruction: Record<string, unknown>;\n cleanupInstruction: Record<string, unknown>;\n addressLookupTableAddresses: string[];\n tokenLedgerInstruction?: Record<string, unknown>;\n };\n quoteResponse: any;\n },\n quoteToken: PublicKey,\n partnerFeeRecipient?: PublicKey,\n partnerFeeMarkup?: number,\n computeBudgetMicroLamports?: number,\n platformFeeRecipient?: PublicKey,\n splitTransactions?: boolean,\n discountBps?: number,\n referralBps?: number,\n) => {\n let partnerFeeMarkupAsPkey;\n const referralVaultProgram = new Program<UserVault>(userVaultIDL, lavarageProgram.provider);\n \n if (partnerFeeMarkup) {\n const feeBuffer = Buffer.alloc(8);\n feeBuffer.writeBigUInt64LE(BigInt(partnerFeeMarkup));\n const feeBuffer32 = Buffer.alloc(32);\n feeBuffer32.set(feeBuffer, 0);\n partnerFeeMarkupAsPkey = new PublicKey(feeBuffer32);\n }\n if (position.account.pool.toBase58() != offer.publicKey.toBase58())\n throw \"Mismatch offer\";\n const pool = offer;\n const poolPubKey = offer.publicKey;\n\n const tokenAddressPubKey = new PublicKey(offer.account.collateralType);\n\n const mintAccount = await lavarageProgram.provider.connection.getAccountInfo(\n offer.account.collateralType\n );\n const tokenProgram = mintAccount?.owner;\n\n const quoteMintAccount =\n await lavarageProgram.provider.connection.getAccountInfo(quoteToken);\n const quoteTokenProgram = quoteMintAccount?.owner;\n\n const positionAccountPDA = position.publicKey;\n\n const fromTokenAccount = await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n positionAccountPDA,\n tokenAddressPubKey,\n tokenProgram\n );\n\n const toTokenAccount = await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n lavarageProgram.provider.publicKey!,\n tokenAddressPubKey,\n tokenProgram\n );\n\n const platformFeeRecipientAccount = platformFeeRecipient ? await getTokenAccountOrCreateIfNotExists(\n lavarageProgram,\n platformFeeRecipient,\n offer.account.collateralType,\n tokenProgram\n ) : undefined;\n\n const jupiterSellIx = jupInstruction!.instructions;\n\n const deserializeInstruction = (instruction: any) => {\n return new TransactionInstruction({\n programId: new PublicKey(instruction.programId),\n\n keys: instruction.accounts.map((key: any) => ({\n pubkey: new PublicKey(key.pubkey),\n isSigner: key.isSigner,\n isWritable: key.isWritable,\n })),\n data: Buffer.from(instruction.data, \"base64\"),\n });\n };\n\n const getAddressLookupTableAccounts = async (\n keys: string[]\n ): Promise<AddressLookupTableAccount[]> => {\n const addressLookupTableAccountInfos =\n await lavarageProgram.provider.connection.getMultipleAccountsInfo(\n keys.map((key) => new PublicKey(key))\n );\n\n return addressLookupTableAccountInfos.reduce((acc, accountInfo, index) => {\n const addressLookupTableAddress = keys[index];\n if (accountInfo) {\n const addressLookupTableAccount = new AddressLookupTableAccount({\n key: new PublicKey(addressLookupTableAddress),\n state: AddressLookupTableAccount.deserialize(\n Uint8Array.from(accountInfo.data)\n ),\n });\n acc.push(addressLookupTableAccount);\n }\n\n return acc;\n }, new Array<AddressLookupTableAccount>());\n };\n\n const addressLookupTableAccounts: AddressLookupTableAccount[] = [];\n\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const useReferral = discountBps !== undefined && referralBps !== undefined;\n\n // Check if partner fee recipient vault and token account need to be created\n let partnerFeeRecipientVaultCreateIx: TransactionInstruction | undefined;\n let partnerFeeRecipientTokenAccountCreateIx: TransactionInstruction | undefined;\n let userVaultPda: PublicKey | undefined;\n \n if (partnerFeeRecipient && partnerFeeMarkupAsPkey && referralVaultProgram) {\n // Derive the userVault PDA\n [userVaultPda] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"user_vault\"), new PublicKey(partnerFeeRecipient).toBuffer()],\n referralVaultProgram.programId\n );\n \n // Get the vault's associated token account\n const vaultTokenAccount = getAssociatedTokenAddressSync(\n quoteToken,\n userVaultPda,\n true, // allowOwnerOffCurve for PDA\n quoteTokenProgram\n );\n \n // Check both accounts at the same time\n const [vaultAccountInfo, vaultTokenAccountInfo] = await lavarageProgram.provider.connection.getMultipleAccountsInfo([\n userVaultPda,\n vaultTokenAccount\n ]);\n \n // Create vault if it doesn't exist\n if (!vaultAccountInfo) {\n partnerFeeRecipientVaultCreateIx = await referralVaultProgram.methods\n .initializeVault()\n .accountsStrict({\n userVault: userVaultPda,\n user: partnerFeeRecipient!,\n funder: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n }\n \n // Create token account if it doesn't exist\n if (!vaultTokenAccountInfo) {\n partnerFeeRecipientTokenAccountCreateIx = createAssociatedTokenAccountIdempotentInstruction(\n lavarageProgram.provider.publicKey!,\n vaultTokenAccount,\n userVaultPda,\n quoteToken,\n quoteTokenProgram,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n }\n }\n\n const closePositionIx = await lavarageProgram.methods\n .tradingCloseBorrowCollateral()\n .accountsStrict({\n tradingPool: poolPubKey,\n instructions: SYSVAR_INSTRUCTIONS_PUBKEY,\n mint: offer.account.collateralType,\n fromTokenAccount: fromTokenAccount.account!.address,\n toTokenAccount: toTokenAccount.account!.address,\n positionAccount: positionAccountPDA,\n clock: SYSVAR_CLOCK_PUBKEY,\n systemProgram: SystemProgram.programId,\n trader: lavarageProgram.provider.publicKey!,\n tokenProgram: tokenProgram!,\n randomAccountAsId: position.account.seed,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n })\n .instruction();\n\n let repaySolIx: TransactionInstruction | null = null;\n let jupiterIxs: TransactionInstruction[] = [];\n if (jupInstruction.instructions == undefined) {\n repaySolIx = useReferral\n ? await lavarageProgram.methods\n .tradingCloseRepaySol(\n new BN(jupInstruction.quoteResponse.outAmount),\n new BN(9997),\n new BN(discountBps),\n new BN(referralBps)\n )\n .accountsStrict({\n nodeWallet: pool.account.nodeWallet,\n positionAccount: positionAccountPDA,\n tradingPool: poolPubKey,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: position.account.seed,\n feeTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\"),\n false,\n quoteTokenProgram\n ),\n fromTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n lavarageProgram.provider.publicKey!,\n false,\n quoteTokenProgram\n ),\n tokenProgram: quoteTokenProgram!,\n toTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n pool.account.nodeWallet,\n true,\n quoteTokenProgram\n ),\n mint: quoteToken,\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey && userVaultPda\n ? [\n {\n pubkey: getAssociatedTokenAddressSync(\n quoteToken,\n userVaultPda,\n true, // allowOwnerOffCurve for PDA\n quoteTokenProgram\n ),\n isSigner: false,\n isWritable: true,\n }\n ]\n : []\n )\n .instruction()\n : await lavarageProgram.methods\n .tradingCloseRepaySol(\n new BN(jupInstruction.quoteResponse.outAmount),\n new BN(9997),\n null,\n null,\n )\n .accountsStrict({\n nodeWallet: pool.account.nodeWallet,\n positionAccount: positionAccountPDA,\n tradingPool: poolPubKey,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: position.account.seed,\n feeTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\"),\n false,\n quoteTokenProgram\n ),\n fromTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n lavarageProgram.provider.publicKey!,\n false,\n quoteTokenProgram\n ),\n tokenProgram: quoteTokenProgram!,\n toTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n pool.account.nodeWallet,\n true,\n quoteTokenProgram\n ),\n mint: quoteToken,\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey\n ? [\n {\n pubkey: getAssociatedTokenAddressSync(\n quoteToken,\n partnerFeeRecipient,\n false,\n quoteTokenProgram\n ),\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: partnerFeeMarkupAsPkey,\n isSigner: false,\n isWritable: false,\n },\n ]\n : []\n )\n .instruction();\n } else {\n repaySolIx = useReferral\n ? await lavarageProgram.methods\n .tradingCloseRepaySol(\n new BN(jupInstruction.quoteResponse.outAmount),\n new BN(9998),\n new BN(discountBps),\n new BN(referralBps)\n )\n .accountsStrict({\n nodeWallet: pool.account.nodeWallet,\n positionAccount: positionAccountPDA,\n tradingPool: poolPubKey,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: position.account.seed,\n feeTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\"),\n false,\n quoteTokenProgram\n ),\n fromTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n lavarageProgram.provider.publicKey!,\n false,\n quoteTokenProgram\n ),\n tokenProgram: quoteTokenProgram!,\n toTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n pool.account.nodeWallet,\n true,\n quoteTokenProgram\n ),\n mint: quoteToken,\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey && userVaultPda\n ? [\n {\n pubkey: getAssociatedTokenAddressSync(\n quoteToken,\n userVaultPda,\n true, // allowOwnerOffCurve for PDA\n quoteTokenProgram\n ),\n isSigner: false,\n isWritable: true,\n }\n ]\n : []\n )\n .instruction()\n : await lavarageProgram.methods\n .tradingCloseRepaySol(\n new BN(jupInstruction.quoteResponse.outAmount),\n new BN(9998),\n null,\n null,\n )\n .accountsStrict({\n nodeWallet: pool.account.nodeWallet,\n positionAccount: positionAccountPDA,\n tradingPool: poolPubKey,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n clock: SYSVAR_CLOCK_PUBKEY,\n randomAccountAsId: position.account.seed,\n feeTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n new PublicKey(\"6JfTobDvwuwZxZP6FR5JPmjdvQ4h4MovkEVH2FPsMSrF\"),\n false,\n quoteTokenProgram\n ),\n fromTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n lavarageProgram.provider.publicKey!,\n false,\n quoteTokenProgram\n ),\n tokenProgram: quoteTokenProgram!,\n toTokenAccount: getAssociatedTokenAddressSync(\n quoteToken,\n pool.account.nodeWallet,\n true,\n quoteTokenProgram\n ),\n mint: quoteToken,\n })\n .remainingAccounts(\n partnerFeeRecipient && partnerFeeMarkupAsPkey\n ? [\n {\n pubkey: getAssociatedTokenAddressSync(\n quoteToken,\n partnerFeeRecipient,\n false,\n quoteTokenProgram\n ),\n isSigner: false,\n isWritable: true,\n },\n {\n pubkey: partnerFeeMarkupAsPkey,\n isSigner: false,\n isWritable: false,\n },\n ]\n : []\n )\n .instruction();\n const {\n setupInstructions,\n swapInstruction: swapInstructionPayload,\n cleanupInstruction,\n addressLookupTableAddresses,\n } = jupiterSellIx!;\n jupiterIxs = [\n ...setupInstructions.filter((i) => !!i).map(deserializeInstruction),\n swapInstructionPayload\n ? deserializeInstruction(swapInstructionPayload)\n : null,\n cleanupInstruction ? deserializeInstruction(cleanupInstruction) : null,\n ].filter((i) => !!i);\n addressLookupTableAccounts.push(\n ...(await getAddressLookupTableAccounts([\n ...addressLookupTableAddresses,\n getQuoteCurrencySpecificAddressLookupTable(quoteToken.toBase58()),\n LAVARAGE_LOOKUP_TABLE,\n ]))\n );\n }\n const profit = new BN(jupInstruction.quoteResponse.outAmount)\n .sub(position.account.amount)\n .sub(position.account.userPaid);\n\n let createAssociatedTokenAccountInstruction =\n createAssociatedTokenAccountIdempotentInstruction(\n lavarageProgram.provider.publicKey!,\n toTokenAccount.account!.address,\n lavarageProgram.provider.publicKey!,\n offer.account.collateralType,\n tokenProgram!\n );\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: computeBudgetMicroLamports ?? 100000,\n });\n\n if (splitTransactions) {\n const setUpInstructions = [\n partnerFeeRecipientVaultCreateIx,\n partnerFeeRecipientTokenAccountCreateIx,\n jupInstruction.instructions && platformFeeRecipientAccount?.instruction ? platformFeeRecipientAccount.instruction : null,\n createAssociatedTokenAccountInstruction,\n ].filter((i) => !!i);\n\n const allInstructions = [\n jupInstruction.instructions?.tokenLedgerInstruction\n ? deserializeInstruction(\n jupInstruction.instructions.tokenLedgerInstruction\n )\n : null,\n closePositionIx,\n ...jupiterIxs,\n repaySolIx,\n computeBudgetMicroLamports ? computeFeeIx : undefined,\n ].filter((i) => !!i);\n\n const messageV01 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: setUpInstructions,\n }).compileToV0Message(addressLookupTableAccounts);\n\n const tx = new VersionedTransaction(messageV01);\n\n const messageV02 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: allInstructions,\n }).compileToV0Message(addressLookupTableAccounts);\n\n const tx2 = new VersionedTransaction(messageV02);\n\n return [tx, tx2];\n }\n\n const allInstructions = [\n partnerFeeRecipientVaultCreateIx,\n partnerFeeRecipientTokenAccountCreateIx,\n jupInstruction.instructions && platformFeeRecipientAccount?.instruction ? platformFeeRecipientAccount.instruction : null,\n createAssociatedTokenAccountInstruction,\n jupInstruction.instructions?.tokenLedgerInstruction\n ? deserializeInstruction(\n jupInstruction.instructions.tokenLedgerInstruction\n )\n : null,\n closePositionIx,\n ...jupiterIxs,\n repaySolIx,\n computeBudgetMicroLamports ? computeFeeIx : undefined,\n ].filter((i) => !!i);\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: allInstructions,\n }).compileToV0Message(addressLookupTableAccounts);\n\n const tx = new VersionedTransaction(messageV0);\n\n return tx;\n};\n\n/**\n * Retrieves delegate accounts for automated position management\n * \n * @group Traders\n * @category Queries\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @param userPubKey - Optional user public key to filter delegates\n * \n * @returns Array of delegate accounts with parsed price data\n * \n * @example\n * ```typescript\n * // Get all delegates for a specific user\n * const userDelegates = await getDelegateAccounts(\n * lavarageProgram,\n * userPublicKey\n * );\n * \n * // Get all delegates (no filter)\n * const allDelegates = await getDelegateAccounts(lavarageProgram);\n * \n * // Access parsed data\n * userDelegates.forEach(delegate => {\n * console.log('TP Price:', delegate.parsed.tpPrice.toString());\n * console.log('Threshold:', delegate.parsed.tpThreshold.toString());\n * });\n * ```\n * @see {@link createTpDelegate} - Create a new take-profit delegate\n * @see {@link modifyTpDelegate} - Modify existing take-profit settings\n * @see {@link removeTpDelegate} - Remove take-profit settings\n */\nexport const getDelegateAccounts = async (\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n userPubKey?: PublicKey\n) => {\n const delegateAccounts = await lavarageProgram.account.delegate.all(\n userPubKey\n ? [\n {\n memcmp: {\n offset: 104,\n bytes: userPubKey.toBase58(),\n },\n },\n ]\n : undefined\n );\n return delegateAccounts.map((d) => ({\n ...d,\n parsed: {\n tpPrice: new BN(d.account.field1),\n tpThreshold: new BN(d.account.field2),\n },\n }));\n};\n\nconst getQuoteCurrencySpecificAddressLookupTable = (quoteCurrency: string) => {\n switch (quoteCurrency) {\n case \"J9BcrQfX4p9D1bvLzRNCbMDv8f44a9LFdeqNE4Yk2WMD\":\n return \"2EdNtwVhyjkEgkKDC7GShfSSczZYMKLuJraeoJzG4E4R\";\n case \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\":\n return \"CxLE1LRaZg2eYygzFfVRhgmSACsvqzyhySDrMHq3QSab\";\n default:\n return \"2EdNtwVhyjkEgkKDC7GShfSSczZYMKLuJraeoJzG4E4R\";\n }\n};\n\n/**\n * Splits a position into two separate positions on Lavarage V2\n * \n * @group Traders\n * @category PositionManagement\n * \n * @param lavarageProgram - The Lavarage V2 or V1 program instance\n * @param position - The original position to split\n * @param offer - The offer/pool account associated with the position\n * @param quoteToken - The quote token mint address\n * @param propotionBps - Split ratio in basis points (5000 = 50/50 split)\n * @param computeBudgetMicroLamports - Optional compute budget for priority fees\n * \n * @returns Object containing transaction and new position addresses\n * \n * @example\n * ```typescript\n * // Split position 70/30\n * const result = await splitPositionV2(\n * lavarageProgram,\n * position,\n * offer,\n * usdcMint,\n * 7000 // 70% to first position, 30% to second\n * );\n * \n * const tx = result.transaction;\n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * \n * console.log('New positions:', result.newPositionAddresses);\n * ```\n * @see {@link mergePositionV2} - Merge two positions into one\n */\nexport const splitPositionV2 = async (\n lavarageProgram: Program<LavarageUSDC> | Program<LavarageSOL>,\n position: ProgramAccount<{\n pool: PublicKey;\n seed: PublicKey;\n userPaid: BN;\n amount: BN;\n }>,\n offer: ProgramAccount<{\n nodeWallet: PublicKey;\n interestRate: number;\n collateralType: PublicKey;\n }>,\n quoteToken: PublicKey,\n propotionBps: number,\n computeBudgetMicroLamports?: number\n) => {\n const positionAccountPDA = position.publicKey;\n\n const newPosition1Seed = Keypair.generate().publicKey;\n const newPosition2Seed = Keypair.generate().publicKey;\n\n const newPosition1AccountPDA = getPositionAccountPDA(\n lavarageProgram,\n offer,\n newPosition1Seed\n );\n const newPosition2AccountPDA = getPositionAccountPDA(\n lavarageProgram,\n offer,\n newPosition2Seed\n );\n\n const mintAccount = await lavarageProgram.provider.connection.getAccountInfo(\n offer.account.collateralType\n );\n const tokenProgram = mintAccount?.owner;\n\n const newPosition1TokenAccount = getAssociatedTokenAddressSync(\n offer.account.collateralType,\n newPosition1AccountPDA,\n true,\n tokenProgram\n );\n const newPosition2TokenAccount = getAssociatedTokenAddressSync(\n offer.account.collateralType,\n newPosition2AccountPDA,\n true,\n tokenProgram\n );\n\n const createNewPosition1TokenAccountIx =\n createAssociatedTokenAccountInstruction(\n lavarageProgram.provider.publicKey!,\n newPosition1TokenAccount,\n newPosition1AccountPDA,\n offer.account.collateralType,\n tokenProgram!\n );\n\n const createNewPosition2TokenAccountIx =\n createAssociatedTokenAccountInstruction(\n lavarageProgram.provider.publicKey!,\n newPosition2TokenAccount,\n newPosition2AccountPDA,\n offer.account.collateralType,\n tokenProgram!\n );\n\n const ix = await lavarageProgram.methods\n .tradingManagementSplitPosition(\n new BN(propotionBps),\n newPosition1Seed,\n newPosition2Seed\n )\n .accountsStrict({\n originalPosition: positionAccountPDA,\n newPositionOne: newPosition1AccountPDA,\n newPositionTwo: newPosition2AccountPDA,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n mint: offer.account.collateralType,\n tokenProgram: tokenProgram!,\n originalPositionTokenAccount: getAssociatedTokenAddressSync(\n offer.account.collateralType,\n positionAccountPDA,\n true,\n tokenProgram\n ),\n newPositionTokenAccountOne: newPosition1TokenAccount,\n newPositionTokenAccountTwo: newPosition2TokenAccount,\n })\n .instruction();\n\n const computeBudgetIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: computeBudgetMicroLamports ?? 100000,\n });\n\n const allInstructions = [\n createNewPosition1TokenAccountIx,\n createNewPosition2TokenAccountIx,\n ix,\n computeBudgetIx,\n ].filter((i) => !!i);\n\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: allInstructions,\n }).compileToV0Message();\n\n const tx = new VersionedTransaction(messageV0);\n\n return {\n transaction: tx,\n newPositionAddresses: [\n newPosition1AccountPDA.toBase58(),\n newPosition2AccountPDA.toBase58(),\n ],\n newPositionSeeds: [\n newPosition1Seed.toBase58(),\n newPosition2Seed.toBase58(),\n ],\n };\n};\n\n/**\n * Merges two positions into a single position on Lavarage V2\n * \n * @group Traders\n * @category PositionManagement\n * \n * @param lavarageProgram - The Lavarage V2 program instance\n * @param position1 - The first position to merge\n * @param position2 - The second position to merge\n * @param offer - The offer/pool account (must be same for both positions)\n * @param quoteToken - The quote token mint address\n * @param computeBudgetMicroLamports - Optional compute budget for priority fees\n * \n * @returns Transaction to merge the positions\n * \n * @example\n * ```typescript\n * // Merge two positions into one\n * const tx = await mergePositionV2(\n * lavarageProgram,\n * position1,\n * position2,\n * offer,\n * usdcMint\n * );\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n * \n * @see {@link splitPositionV2} - Split a position into two\n */\nexport const mergePositionV2 = async (\n lavarageProgram: Program<LavarageUSDC>,\n position1: ProgramAccount<{\n pool: PublicKey;\n seed: PublicKey;\n userPaid: BN;\n amount: BN;\n }>,\n position2: ProgramAccount<{\n pool: PublicKey;\n seed: PublicKey;\n userPaid: BN;\n amount: BN;\n }>,\n offer: ProgramAccount<{\n nodeWallet: PublicKey;\n interestRate: number;\n collateralType: PublicKey;\n }>,\n quoteToken: PublicKey,\n computeBudgetMicroLamports?: number\n) => {\n const positionAccountPDA1 = position1.publicKey;\n const positionAccountPDA2 = position2.publicKey;\n\n const newPositionSeed = Keypair.generate().publicKey;\n\n const newPositionAccountPDA = getPositionAccountPDA(\n lavarageProgram,\n offer,\n newPositionSeed\n );\n\n const mintAccount = await lavarageProgram.provider.connection.getAccountInfo(\n offer.account.collateralType\n );\n const tokenProgram = mintAccount?.owner;\n\n const newPositionTokenAccount = getAssociatedTokenAddressSync(\n offer.account.collateralType,\n newPositionAccountPDA,\n true,\n tokenProgram\n );\n\n const createNewPositionTokenAccountIx =\n createAssociatedTokenAccountInstruction(\n lavarageProgram.provider.publicKey!,\n newPositionTokenAccount,\n newPositionAccountPDA,\n offer.account.collateralType,\n tokenProgram!\n );\n\n const ix = await lavarageProgram.methods\n .tradingManagementMergePositions(newPositionSeed)\n .accountsStrict({\n mergedPosition: newPositionAccountPDA,\n positionOne: positionAccountPDA1,\n positionTwo: positionAccountPDA2,\n trader: lavarageProgram.provider.publicKey!,\n systemProgram: SystemProgram.programId,\n mint: offer.account.collateralType,\n tokenProgram: tokenProgram!,\n positionOneTokenAccount: getAssociatedTokenAddressSync(\n offer.account.collateralType,\n positionAccountPDA1,\n true,\n tokenProgram\n ),\n positionTwoTokenAccount: getAssociatedTokenAddressSync(\n offer.account.collateralType,\n positionAccountPDA2,\n true,\n tokenProgram\n ),\n mergedPositionTokenAccount: newPositionTokenAccount,\n })\n .instruction();\n\n const computeBudgetIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: computeBudgetMicroLamports ?? 100000,\n });\n\n const allInstructions = [\n createNewPositionTokenAccountIx,\n ix,\n computeBudgetIx,\n ].filter((i) => !!i);\n\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: allInstructions,\n }).compileToV0Message();\n\n const tx = new VersionedTransaction(messageV0);\n\n return tx;\n};\n","{\n \"address\": \"F7L3T5fjHbD13SH8UhNuYxCdabHX9CRg2zxbPjmiwU7R\",\n \"metadata\": {\n \"name\": \"user_vault\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"User vault program for holding SOL and SPL tokens\"\n },\n \"instructions\": [\n {\n \"name\": \"claim_sol\",\n \"discriminator\": [\n 139,\n 113,\n 179,\n 189,\n 190,\n 30,\n 132,\n 195\n ],\n \"accounts\": [\n {\n \"name\": \"user_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 117,\n 115,\n 101,\n 114,\n 95,\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"user_vault.user\",\n \"account\": \"UserVault\"\n }\n ]\n }\n },\n {\n \"name\": \"signer\",\n \"signer\": true\n },\n {\n \"name\": \"recipient\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"claim_token\",\n \"discriminator\": [\n 116,\n 206,\n 27,\n 191,\n 166,\n 19,\n 0,\n 73\n ],\n \"accounts\": [\n {\n \"name\": \"user_vault\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 117,\n 115,\n 101,\n 114,\n 95,\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"user_vault.user\",\n \"account\": \"UserVault\"\n }\n ]\n }\n },\n {\n \"name\": \"vault_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"recipient_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"signer\",\n \"signer\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"initialize_vault\",\n \"discriminator\": [\n 48,\n 191,\n 163,\n 44,\n 71,\n 129,\n 63,\n 164\n ],\n \"accounts\": [\n {\n \"name\": \"user_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 117,\n 115,\n 101,\n 114,\n 95,\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"user\"\n }\n ]\n }\n },\n {\n \"name\": \"user\",\n \"writable\": true\n },\n {\n \"name\": \"funder\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n }\n ],\n \"accounts\": [\n {\n \"name\": \"UserVault\",\n \"discriminator\": [\n 23,\n 76,\n 96,\n 159,\n 210,\n 10,\n 5,\n 22\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"UnauthorizedClaim\",\n \"msg\": \"Unauthorized: Only user or authority can claim\"\n },\n {\n \"code\": 6001,\n \"name\": \"InsufficientFunds\",\n \"msg\": \"Insufficient funds: Vault must maintain rent-exempt balance\"\n }\n ],\n \"types\": [\n {\n \"name\": \"UserVault\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"user\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"total_sol_claimed\",\n \"type\": \"u64\"\n }\n ]\n }\n }\n ]\n}","{\n \"address\": \"8AD6AnnkdD3MMqQE2v3V7HLaxocSr8kZb1uHNX19PnwF\",\n \"metadata\": {\n \"name\": \"lavarage\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"Created with Anchor\"\n },\n \"instructions\": [\n {\n \"name\": \"add_withdrawal_access\",\n \"discriminator\": [\n 45,\n 247,\n 214,\n 153,\n 224,\n 115,\n 136,\n 178\n ],\n \"accounts\": [\n {\n \"name\": \"withdrawal_access_list\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 119,\n 105,\n 116,\n 104,\n 100,\n 114,\n 97,\n 119,\n 97,\n 108,\n 95,\n 97,\n 99,\n 99,\n 101,\n 115,\n 115,\n 95,\n 108,\n 105,\n 115,\n 116\n ]\n }\n ]\n }\n },\n {\n \"name\": \"node_wallet\"\n },\n {\n \"name\": \"authority\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"to_pubkey\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"delegate_close_position\",\n \"discriminator\": [\n 100,\n 249,\n 236,\n 96,\n 249,\n 195,\n 17,\n 157\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"writable\": true\n },\n {\n \"name\": \"delegate_operator\",\n \"signer\": true\n },\n {\n \"name\": \"account\",\n \"writable\": true,\n \"relations\": [\n \"delegate\"\n ]\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"node_wallet_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.node_wallet\",\n \"account\": \"Pool\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"delegate_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"delegate_operator\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"fee_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 117,\n 98,\n 107,\n 101,\n 121,\n 33,\n 32,\n 40,\n 34,\n 54,\n 74,\n 102,\n 84,\n 111,\n 98,\n 68,\n 118,\n 119,\n 117,\n 119,\n 90,\n 120,\n 90,\n 80,\n 54,\n 70,\n 82,\n 53,\n 74,\n 80,\n 109,\n 106,\n 100,\n 118,\n 81,\n 52,\n 104,\n 52,\n 77,\n 111,\n 118,\n 107,\n 69,\n 86,\n 72,\n 50,\n 70,\n 80,\n 115,\n 77,\n 83,\n 114,\n 70,\n 34,\n 41\n ]\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"profit_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"account.trader\",\n \"account\": \"Position\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"qt_mint\"\n }\n ],\n \"args\": [\n {\n \"name\": \"closing_position_size\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"delegate_execute_tp\",\n \"discriminator\": [\n 207,\n 251,\n 148,\n 38,\n 214,\n 153,\n 54,\n 242\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"writable\": true\n },\n {\n \"name\": \"delegate_operator\",\n \"signer\": true\n },\n {\n \"name\": \"account\",\n \"writable\": true,\n \"relations\": [\n \"delegate\"\n ]\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"position_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"account\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.collateral_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"delegate_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"delegate_operator\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.collateral_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"mint\"\n }\n ],\n \"args\": [\n {\n \"name\": \"seed\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"init_withdrawal_access_list\",\n \"discriminator\": [\n 118,\n 110,\n 194,\n 104,\n 220,\n 145,\n 69,\n 31\n ],\n \"accounts\": [\n {\n \"name\": \"withdrawal_access_list\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 119,\n 105,\n 116,\n 104,\n 100,\n 114,\n 97,\n 119,\n 97,\n 108,\n 95,\n 97,\n 99,\n 99,\n 101,\n 115,\n 115,\n 95,\n 108,\n 105,\n 115,\n 116\n ]\n }\n ]\n }\n },\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"lp_collect_interest\",\n \"discriminator\": [\n 181,\n 55,\n 21,\n 23,\n 53,\n 171,\n 73,\n 115\n ],\n \"accounts\": [\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"position_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"random_account_as_id\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"from_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"position_account\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"oracle\",\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"oracle_queue\",\n \"address\": \"A43DyUGA7s8eXPxqEjJY6EBu1KKbNgfxF8h17VAHn13w\"\n },\n {\n \"name\": \"base_oracle_quote\"\n },\n {\n \"name\": \"clock_sysvar\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"slot_hashes_sysvar\",\n \"address\": \"SysvarS1otHashes111111111111111111111111111\"\n },\n {\n \"name\": \"instructions_sysvar\",\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"lp_liquidate\",\n \"discriminator\": [\n 36,\n 244,\n 70,\n 20,\n 135,\n 159,\n 86,\n 149\n ],\n \"accounts\": [\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"position_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"random_account_as_id\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"from_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"position_account\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"operator\",\n \"signer\": true\n },\n {\n \"name\": \"oracle\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"position_size\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lp_operator_create_node_wallet\",\n \"discriminator\": [\n 193,\n 83,\n 139,\n 125,\n 229,\n 111,\n 150,\n 164\n ],\n \"accounts\": [\n {\n \"name\": \"node_wallet\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 110,\n 111,\n 100,\n 101,\n 95,\n 119,\n 97,\n 108,\n 108,\n 101,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"operator\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ]\n }\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"mint\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidation_ltv\",\n \"type\": \"u16\"\n }\n ]\n },\n {\n \"name\": \"lp_operator_create_trading_pool\",\n \"discriminator\": [\n 182,\n 99,\n 232,\n 188,\n 202,\n 38,\n 71,\n 211\n ],\n \"accounts\": [\n {\n \"name\": \"trading_pool\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 116,\n 114,\n 97,\n 100,\n 105,\n 110,\n 103,\n 95,\n 112,\n 111,\n 111,\n 108\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"node_wallet\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ]\n }\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"node_wallet\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"CreateTradingPoolArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"lp_operator_update_interest_rate\",\n \"discriminator\": [\n 25,\n 217,\n 30,\n 158,\n 210,\n 240,\n 173,\n 10\n ],\n \"accounts\": [\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"lp_operator_update_max_exposure\",\n \"discriminator\": [\n 43,\n 226,\n 68,\n 201,\n 78,\n 18,\n 155,\n 107\n ],\n \"accounts\": [\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lp_operator_update_open_ltv\",\n \"discriminator\": [\n 164,\n 5,\n 214,\n 18,\n 130,\n 13,\n 165,\n 21\n ],\n \"accounts\": [\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"open_ltv\",\n \"type\": \"u16\"\n }\n ]\n },\n {\n \"name\": \"lp_operator_update_trading_pool\",\n \"discriminator\": [\n 99,\n 179,\n 6,\n 181,\n 30,\n 148,\n 30,\n 204\n ],\n \"accounts\": [\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"UpdatePoolArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"lp_operator_withdraw_from_node_wallet\",\n \"discriminator\": [\n 162,\n 244,\n 237,\n 100,\n 96,\n 130,\n 60,\n 117\n ],\n \"accounts\": [\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"funder\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"from_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"node_wallet\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"withdrawal_access_list\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"migrate_pool\",\n \"discriminator\": [\n 55,\n 170,\n 171,\n 123,\n 210,\n 69,\n 39,\n 172\n ],\n \"accounts\": [\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"MigratePoolArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"realloc_pool\",\n \"discriminator\": [\n 114,\n 128,\n 37,\n 167,\n 71,\n 227,\n 40,\n 178\n ],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"remove_withdrawal_access\",\n \"discriminator\": [\n 218,\n 186,\n 7,\n 130,\n 180,\n 40,\n 111,\n 122\n ],\n \"accounts\": [\n {\n \"name\": \"withdrawal_access_list\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 119,\n 105,\n 116,\n 104,\n 100,\n 114,\n 97,\n 119,\n 97,\n 108,\n 95,\n 97,\n 99,\n 99,\n 101,\n 115,\n 115,\n 95,\n 108,\n 105,\n 115,\n 116\n ]\n }\n ]\n }\n },\n {\n \"name\": \"authority\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"from_pubkey\",\n \"type\": \"string\"\n }\n ]\n },\n {\n \"name\": \"rescue_stuck_tokens\",\n \"discriminator\": [\n 104,\n 17,\n 134,\n 60,\n 192,\n 138,\n 94,\n 244\n ],\n \"accounts\": [\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"position_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"trader_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"position.trader\",\n \"account\": \"Position\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"position_mint\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"trading_close_borrow_collateral\",\n \"discriminator\": [\n 160,\n 104,\n 113,\n 179,\n 42,\n 80,\n 8,\n 16\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"random_account_as_id\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"instructions\",\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"from_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"position_account\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"associated_token_program\",\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"trading_close_repay_sol\",\n \"discriminator\": [\n 74,\n 90,\n 5,\n 111,\n 35,\n 171,\n 135,\n 56\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"random_account_as_id\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"from_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"node_wallet\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"fee_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 117,\n 98,\n 107,\n 101,\n 121,\n 33,\n 32,\n 40,\n 34,\n 54,\n 74,\n 102,\n 84,\n 111,\n 98,\n 68,\n 118,\n 119,\n 117,\n 119,\n 90,\n 120,\n 90,\n 80,\n 54,\n 70,\n 82,\n 53,\n 74,\n 80,\n 109,\n 106,\n 100,\n 118,\n 81,\n 52,\n 104,\n 52,\n 77,\n 111,\n 118,\n 107,\n 69,\n 86,\n 72,\n 50,\n 70,\n 80,\n 115,\n 77,\n 83,\n 114,\n 70,\n 34,\n 41\n ]\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"closing_position_size\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"close_type\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"discount_bps\",\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"referral_bps\",\n \"type\": {\n \"option\": \"u64\"\n }\n }\n ]\n },\n {\n \"name\": \"trading_create_tp_delegate\",\n \"discriminator\": [\n 174,\n 200,\n 59,\n 127,\n 100,\n 216,\n 183,\n 8\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 100,\n 101,\n 108,\n 101,\n 103,\n 97,\n 116,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"delegated_account\"\n }\n ]\n }\n },\n {\n \"name\": \"original_operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"delegated_account\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"price\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"lower_threshold\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"delegate_operator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"partial_percentage\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"trading_data_accrued_interest\",\n \"discriminator\": [\n 227,\n 39,\n 217,\n 0,\n 88,\n 3,\n 25,\n 115\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"random_account_as_id\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"from_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"node_wallet\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"fee_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 117,\n 98,\n 107,\n 101,\n 121,\n 33,\n 32,\n 40,\n 34,\n 54,\n 74,\n 102,\n 84,\n 111,\n 98,\n 68,\n 118,\n 119,\n 117,\n 119,\n 90,\n 120,\n 90,\n 80,\n 54,\n 70,\n 82,\n 53,\n 74,\n 80,\n 109,\n 106,\n 100,\n 118,\n 81,\n 52,\n 104,\n 52,\n 77,\n 111,\n 118,\n 107,\n 69,\n 86,\n 72,\n 50,\n 70,\n 80,\n 115,\n 77,\n 83,\n 114,\n 70,\n 34,\n 41\n ]\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": [],\n \"returns\": \"u64\"\n },\n {\n \"name\": \"trading_management_merge_positions\",\n \"discriminator\": [\n 220,\n 145,\n 59,\n 236,\n 80,\n 58,\n 112,\n 127\n ],\n \"accounts\": [\n {\n \"name\": \"position_one\",\n \"writable\": true\n },\n {\n \"name\": \"position_two\",\n \"writable\": true\n },\n {\n \"name\": \"merged_position\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_one.trader\",\n \"account\": \"Position\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_one.pool\",\n \"account\": \"Position\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"seed\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"position_one_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"position_one\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"position_two_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"position_two\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"merged_position_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"merged_position\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"seed\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"trading_management_split_position\",\n \"discriminator\": [\n 230,\n 180,\n 252,\n 200,\n 8,\n 246,\n 131,\n 54\n ],\n \"accounts\": [\n {\n \"name\": \"original_position\",\n \"writable\": true\n },\n {\n \"name\": \"new_position_one\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"original_position.pool\",\n \"account\": \"Position\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"seed1\"\n }\n ]\n }\n },\n {\n \"name\": \"new_position_two\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"original_position.pool\",\n \"account\": \"Position\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"seed2\"\n }\n ]\n }\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"original_position_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"original_position\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"new_position_token_account_one\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"new_position_one\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"new_position_token_account_two\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"new_position_two\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"split_ratio_bps\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"seed1\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"seed2\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"trading_open_add_collateral\",\n \"discriminator\": [\n 21,\n 160,\n 90,\n 163,\n 189,\n 122,\n 164,\n 50\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"random_account_as_id\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"position_account\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"oracle_queue\",\n \"address\": \"A43DyUGA7s8eXPxqEjJY6EBu1KKbNgfxF8h17VAHn13w\"\n },\n {\n \"name\": \"base_oracle_quote\"\n },\n {\n \"name\": \"quote_oracle_quote\"\n },\n {\n \"name\": \"clock_sysvar\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"slot_hashes_sysvar\",\n \"address\": \"SysvarS1otHashes111111111111111111111111111\"\n },\n {\n \"name\": \"instructions_sysvar\",\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"max_interest_rate\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"trading_open_borrow\",\n \"discriminator\": [\n 53,\n 88,\n 1,\n 144,\n 58,\n 65,\n 182,\n 60\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"random_account_as_id\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"instructions\",\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"fee_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"fee_recipient\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"quote_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"from_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"node_wallet\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"quote_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"quote_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"position_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"position_account\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"collateral_token_program\"\n },\n {\n \"name\": \"associated_token_program\",\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"collateral_mint\"\n },\n {\n \"name\": \"quote_mint\"\n },\n {\n \"name\": \"fee_recipient\"\n }\n ],\n \"args\": [\n {\n \"name\": \"position_size\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"user_pays\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"discount_bps\",\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"referral_bps\",\n \"type\": {\n \"option\": \"u64\"\n }\n }\n ]\n },\n {\n \"name\": \"trading_partial_repay_sol\",\n \"discriminator\": [\n 98,\n 78,\n 144,\n 144,\n 103,\n 34,\n 40,\n 162\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"random_account_as_id\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"from_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"node_wallet\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"fee_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 117,\n 98,\n 107,\n 101,\n 121,\n 33,\n 32,\n 40,\n 34,\n 54,\n 74,\n 102,\n 84,\n 111,\n 98,\n 68,\n 118,\n 119,\n 117,\n 119,\n 90,\n 120,\n 90,\n 80,\n 54,\n 70,\n 82,\n 53,\n 74,\n 80,\n 109,\n 106,\n 100,\n 118,\n 81,\n 52,\n 104,\n 52,\n 77,\n 111,\n 118,\n 107,\n 69,\n 86,\n 72,\n 50,\n 70,\n 80,\n 115,\n 77,\n 83,\n 114,\n 70,\n 34,\n 41\n ]\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"Pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"percentage\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"trading_remove_tp_delegate\",\n \"discriminator\": [\n 88,\n 18,\n 149,\n 143,\n 124,\n 43,\n 68,\n 178\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 100,\n 101,\n 108,\n 101,\n 103,\n 97,\n 116,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"delegated_account\"\n }\n ]\n }\n },\n {\n \"name\": \"original_operator\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\n \"delegate\"\n ]\n },\n {\n \"name\": \"delegated_account\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n }\n ],\n \"accounts\": [\n {\n \"name\": \"Delegate\",\n \"discriminator\": [\n 92,\n 145,\n 166,\n 111,\n 11,\n 38,\n 38,\n 247\n ]\n },\n {\n \"name\": \"NodeWallet\",\n \"discriminator\": [\n 48,\n 117,\n 214,\n 115,\n 125,\n 23,\n 94,\n 246\n ]\n },\n {\n \"name\": \"Pool\",\n \"discriminator\": [\n 241,\n 154,\n 109,\n 4,\n 17,\n 177,\n 109,\n 188\n ]\n },\n {\n \"name\": \"Position\",\n \"discriminator\": [\n 170,\n 188,\n 143,\n 228,\n 122,\n 64,\n 247,\n 208\n ]\n },\n {\n \"name\": \"WithdrawalAccessList\",\n \"discriminator\": [\n 29,\n 144,\n 191,\n 76,\n 108,\n 26,\n 73,\n 234\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"PositionCloseEvent\",\n \"discriminator\": [\n 85,\n 5,\n 166,\n 100,\n 218,\n 87,\n 230,\n 129\n ]\n },\n {\n \"name\": \"PositionOpenEvent\",\n \"discriminator\": [\n 84,\n 127,\n 249,\n 160,\n 99,\n 95,\n 120,\n 120\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"AddressMismatch\",\n \"msg\": \"Address Mismatch\"\n },\n {\n \"code\": 6001,\n \"name\": \"ProgramMismatch\",\n \"msg\": \"Program Mismatch\"\n },\n {\n \"code\": 6002,\n \"name\": \"MissingRepay\",\n \"msg\": \"Missing Repay\"\n },\n {\n \"code\": 6003,\n \"name\": \"IncorrectOwner\",\n \"msg\": \"Incorrect Owner\"\n },\n {\n \"code\": 6004,\n \"name\": \"IncorrectProgramAuthority\",\n \"msg\": \"Incorrect Program Authority\"\n },\n {\n \"code\": 6005,\n \"name\": \"CannotBorrowBeforeRepay\",\n \"msg\": \"Cannot Borrow Before Repay\"\n },\n {\n \"code\": 6006,\n \"name\": \"UnknownInstruction\",\n \"msg\": \"Unknown Instruction\"\n },\n {\n \"code\": 6007,\n \"name\": \"ExpectedCollateralNotEnough\",\n \"msg\": \"Expected collateral not enough\"\n },\n {\n \"code\": 6008,\n \"name\": \"ForTesting\",\n \"msg\": \"TestError\"\n },\n {\n \"code\": 6009,\n \"name\": \"BlacklistedAccount\",\n \"msg\": \"Account is blacklisted\"\n },\n {\n \"code\": 6010,\n \"name\": \"AccessEntryAlreadyExists\",\n \"msg\": \"Access entry already exists\"\n },\n {\n \"code\": 6011,\n \"name\": \"AccessEntryNotFound\",\n \"msg\": \"Access entry not found\"\n },\n {\n \"code\": 6012,\n \"name\": \"UnauthorizedWithdrawal\",\n \"msg\": \"Unauthorized Withdrawal\"\n },\n {\n \"code\": 6013,\n \"name\": \"AccountAlreadyInitialized\",\n \"msg\": \"Account already initialized\"\n },\n {\n \"code\": 6014,\n \"name\": \"InvalidSignature\",\n \"msg\": \"The provided signature is invalid.\"\n },\n {\n \"code\": 6015,\n \"name\": \"InvalidOracle\",\n \"msg\": \"The provided oracle is invalid.\"\n },\n {\n \"code\": 6016,\n \"name\": \"InvalidSplitRatio\",\n \"msg\": \"Invalid split ratio. Must be between 1 and 99\"\n },\n {\n \"code\": 6017,\n \"name\": \"PositionsNotMergeable\",\n \"msg\": \"Positions cannot be merged - must have same pool, trader, and interest rate\"\n },\n {\n \"code\": 6018,\n \"name\": \"OnlyDelegateOperator\",\n \"msg\": \"Only delegate operator can execute TP\"\n },\n {\n \"code\": 6019,\n \"name\": \"InvalidDelegateType\",\n \"msg\": \"Invalid delegate type\"\n },\n {\n \"code\": 6020,\n \"name\": \"MissingRequiredPriceFeed\",\n \"msg\": \"Missing required price feed\"\n },\n {\n \"code\": 6021,\n \"name\": \"InvalidPrice\",\n \"msg\": \"Price must be greater than 0\"\n },\n {\n \"code\": 6022,\n \"name\": \"MathOverflow\",\n \"msg\": \"Arithmetic operation overflow\"\n }\n ],\n \"types\": [\n {\n \"name\": \"CreateTradingPoolArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"interest_rate\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"feed_id\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"max_exposure\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"open_ltv\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"Delegate\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"delegate_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"field_1\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"field_2\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"field_3\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"field_4\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"field_5\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"original_operator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"delegate_operator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"account\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"MigratePoolArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"feed_id\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"open_ltv\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"NodeWallet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"total_funds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_borrowed\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"maintenance_ltv\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"liquidation_ltv\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"node_operator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"Pool\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"interest_rate\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"collateral_type\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"max_borrow\",\n \"docs\": [\n \"Previously max_borrow. Can be repurposed again.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"node_wallet\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"max_exposure\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"current_exposure\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"qt_type\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"feed_id\",\n \"docs\": [\n \"Switchboard Oracle Quote Feed ID\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"open_ltv\",\n \"docs\": [\n \"The max loan-to-value (LTV) used to determine how much SOL can be borrowed per token (denoted in basis points).\"\n ],\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"Position\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"close_status_recall_timestamp\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"user_paid\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"collateral_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"trader\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"seed\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"close_timestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"closing_position_size\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"interest_rate\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"last_interest_collect\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"PositionCloseEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"user_paid\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"collateral_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"open_timestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"trader\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"close_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"close_timestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"closing_position_size\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"PositionOpenEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"user_paid\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"collateral_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"open_timestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"trader\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"UpdatePoolArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"open_ltv\",\n \"type\": {\n \"option\": \"u16\"\n }\n },\n {\n \"name\": \"interest_rate\",\n \"type\": {\n \"option\": \"u8\"\n }\n },\n {\n \"name\": \"max_exposure\",\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"feed_id\",\n \"type\": {\n \"option\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"WithdrawalAccessEntry\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"from_pubkey\",\n \"type\": \"string\"\n },\n {\n \"name\": \"to_pubkey\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"WithdrawalAccessList\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"access_entries\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"WithdrawalAccessEntry\"\n }\n }\n }\n }\n ]\n }\n }\n ],\n \"constants\": [\n {\n \"name\": \"MAX_BASIS_POINTS\",\n \"type\": \"u16\",\n \"value\": \"10000\"\n },\n {\n \"name\": \"ORACLE_MAX_AGE\",\n \"type\": \"u16\",\n \"value\": \"100\"\n },\n {\n \"name\": \"ORACLE_PUB_KEY\",\n \"type\": \"pubkey\",\n \"value\": \"joPUhu4So61QnYoGKy8yPDQsrq5xemKtyByHKwqQ7r4\"\n }\n ]\n}","import { PublicKey } from \"@solana/web3.js\";\nimport { ON_DEMAND_MAINNET_QUEUE } from \"@switchboard-xyz/on-demand\";\n\nexport const queuePubkey = ON_DEMAND_MAINNET_QUEUE;\n\nexport const USDC_MINT = new PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v');","import { ON_DEMAND_DEVNET_QUEUE, getQueue, isMainnetConnection, ON_DEMAND_MAINNET_QUEUE, OracleQuote, Queue, ON_DEMAND_MAINNET_PID, ON_DEMAND_DEVNET_PID } from \"@switchboard-xyz/on-demand\";\nimport { queuePubkey } from \"./constants\";\nimport { PublicKey } from \"@solana/web3.js\";\nimport { SURGE_FEEDS } from \"./crossbar\";\nimport { AnchorProvider, Program } from \"@coral-xyz/anchor\";\n\nexport function getOracleQuoteForFeedId(feedId: string) {\n const [oracleQuote] = OracleQuote.getCanonicalPubkey(\n queuePubkey,\n [feedId]\n )\n\n return oracleQuote;\n}\n\nexport function getOracleQuoteForCollateralType(collateralType: PublicKey) {\n const feed = SURGE_FEEDS.find(feed => feed.address === collateralType.toBase58());\n \n if (!feed) {\n throw new Error(`Quote feed not found for ${collateralType.toBase58()}`);\n }\n\n return getOracleQuoteForFeedId(feed.feedId);\n}\n\nasync function getSwitchboardProgram(provider: AnchorProvider): Promise<Program> {\n const programId = await isMainnetConnection(provider.connection) ? ON_DEMAND_MAINNET_PID : ON_DEMAND_DEVNET_PID;\n \n return Program.at(programId, provider);\n}\n\nexport async function getSwitchboardQueue(provider: AnchorProvider): Promise<Queue> {\n const program = await getSwitchboardProgram(provider);\n\n return await getQueue({\n // @ts-expect-error @coral-xyz/anchor versions mismatch\n program,\n queueAddress: await isMainnetConnection(provider.connection) ? ON_DEMAND_MAINNET_QUEUE : ON_DEMAND_DEVNET_QUEUE,\n });\n}","import { NATIVE_MINT } from \"@solana/spl-token\";\nimport { USDC_MINT } from \"./constants\";\nimport { Program } from \"@coral-xyz/anchor\";\nimport { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport { CrossbarClient } from \"@switchboard-xyz/common\";\nimport { retryWithBackoff } from \"./utils\";\nimport { Lavarage as LavarageSOL } from \"./idl/lavarageSOL\";\nimport { Lavarage as LavarageUSDC } from \"./idl/lavarageUSDC\";\nimport { getSwitchboardQueue } from \"./switchboard\";\n\nexport type ApiKeys = {\n birdeyeApiKey: string;\n};\n\nexport const SURGE_FEEDS = [\n {\n address: NATIVE_MINT.toBase58(),\n feedId: '0x822512ee9add93518eca1c105a38422841a76c590db079eebb283deb2c14caa9',\n label: 'SOL-USD',\n },\n {\n address: USDC_MINT.toBase58(),\n feedId: '0x883ea8295f70ae506e894679d124196bb07064ea530cefd835b58c33a5ab6549',\n label: 'USDC-USD',\n },\n];\n\n// TODO: should not be hardcoded, use class-based approach\nconst crossbarClient = new CrossbarClient(\"https://crossbar.switchboard.xyz\");\n\nfunction getVariableOverrides(apiKeys: ApiKeys) {\n return {\n BIRDEYE_API_KEY: apiKeys.birdeyeApiKey,\n };\n}\n\nexport async function getUpdateOracleIxs(program: Program<LavarageSOL | LavarageUSDC>, feedId: string, payer: PublicKey, apiKeys: ApiKeys): Promise<TransactionInstruction[]> {\n // @ts-expect-error @coral-xyz/anchor versions mismatch\n const queue = await getSwitchboardQueue(program.provider);\n\n return await retryWithBackoff(async () => await queue.fetchManagedUpdateIxs(\n crossbarClient,\n [feedId],\n {\n numSignatures: 1,\n variableOverrides: getVariableOverrides(apiKeys),\n instructionIdx: 0,\n payer,\n }\n ));\n}\n","{\n \"address\": \"CRSeeBqjDnm3UPefJ9gxrtngTsnQRhEJiTA345Q83X3v\",\n \"metadata\": {\n \"name\": \"lavarage\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\"\n },\n \"instructions\": [\n {\n \"name\": \"lp_operator_create_trading_pool\",\n \"discriminator\": [\n 182,\n 99,\n 232,\n 188,\n 202,\n 38,\n 71,\n 211\n ],\n \"accounts\": [\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"node_wallet\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"interest_rate\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"lp_operator_create_node_wallet\",\n \"discriminator\": [\n 193,\n 83,\n 139,\n 125,\n 229,\n 111,\n 150,\n 164\n ],\n \"accounts\": [\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"lp_operator_fund_node_wallet\",\n \"discriminator\": [\n 204,\n 29,\n 191,\n 156,\n 11,\n 132,\n 135,\n 61\n ],\n \"accounts\": [\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"funder\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lp_operator_withdraw_from_node_wallet\",\n \"discriminator\": [\n 162,\n 244,\n 237,\n 100,\n 96,\n 130,\n 60,\n 117\n ],\n \"accounts\": [\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"funder\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"withdrawal_access_list\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lp_operator_update_max_borrow\",\n \"discriminator\": [\n 47,\n 66,\n 56,\n 156,\n 203,\n 107,\n 44,\n 148\n ],\n \"accounts\": [\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lp_operator_update_max_exposure\",\n \"discriminator\": [\n 43,\n 226,\n 68,\n 201,\n 78,\n 18,\n 155,\n 107\n ],\n \"accounts\": [\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lp_operator_update_interest_rate\",\n \"discriminator\": [\n 25,\n 217,\n 30,\n 158,\n 210,\n 240,\n 173,\n 10\n ],\n \"accounts\": [\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"lp_liquidate\",\n \"discriminator\": [\n 36,\n 244,\n 70,\n 20,\n 135,\n 159,\n 86,\n 149\n ],\n \"accounts\": [\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"position_account\",\n \"writable\": true\n },\n {\n \"name\": \"trader\",\n \"writable\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"from_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"clock\"\n },\n {\n \"name\": \"operator\",\n \"signer\": true\n },\n {\n \"name\": \"oracle\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"position_size\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lp_collect_interest\",\n \"discriminator\": [\n 181,\n 55,\n 21,\n 23,\n 53,\n 171,\n 73,\n 115\n ],\n \"accounts\": [\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"position_account\",\n \"writable\": true\n },\n {\n \"name\": \"trader\",\n \"writable\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"from_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"clock\"\n },\n {\n \"name\": \"operator\",\n \"signer\": true\n },\n {\n \"name\": \"oracle\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"price\",\n \"type\": \"u128\"\n }\n ]\n },\n {\n \"name\": \"trading_open_borrow\",\n \"discriminator\": [\n 53,\n 88,\n 1,\n 144,\n 58,\n 65,\n 182,\n 60\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"instructions\"\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"clock\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"fee_receipient\",\n \"writable\": true\n },\n {\n \"name\": \"position_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"collateral_token_program\"\n },\n {\n \"name\": \"associated_token_program\"\n },\n {\n \"name\": \"collateral_mint\"\n },\n {\n \"name\": \"users_token_account\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"position_size\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"user_pays\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"trading_open_borrow_with_referral\",\n \"discriminator\": [\n 126,\n 119,\n 109,\n 0,\n 131,\n 111,\n 251,\n 238\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"instructions\"\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"clock\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"fee_receipient\",\n \"writable\": true\n },\n {\n \"name\": \"position_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"collateral_token_program\"\n },\n {\n \"name\": \"associated_token_program\"\n },\n {\n \"name\": \"collateral_mint\"\n },\n {\n \"name\": \"users_token_account\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"position_size\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"user_pays\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"discount_bps\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"referral_bps\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"trading_open_add_collateral\",\n \"discriminator\": [\n 21,\n 160,\n 90,\n 163,\n 189,\n 122,\n 164,\n 50\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"associated_token_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"max_interest_rate\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"trading_close_borrow_collateral\",\n \"discriminator\": [\n 160,\n 104,\n 113,\n 179,\n 42,\n 80,\n 8,\n 16\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"instructions\"\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"from_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"to_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"clock\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"associated_token_program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"trading_data_accrued_interest\",\n \"discriminator\": [\n 227,\n 39,\n 217,\n 0,\n 88,\n 3,\n 25,\n 115\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"clock\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"fee_receipient\",\n \"writable\": true\n }\n ],\n \"args\": [],\n \"returns\": \"u64\"\n },\n {\n \"name\": \"trading_close_repay_sol\",\n \"discriminator\": [\n 74,\n 90,\n 5,\n 111,\n 35,\n 171,\n 135,\n 56\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"clock\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"fee_receipient\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"closing_position_size\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"close_type\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"trading_close_repay_sol_with_referral\",\n \"discriminator\": [\n 113,\n 176,\n 203,\n 24,\n 224,\n 228,\n 31,\n 35\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"clock\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"fee_receipient\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"closing_position_size\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"close_type\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"discount_bps\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"referral_bps\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"trading_close_partial_repay_sol\",\n \"discriminator\": [\n 29,\n 236,\n 62,\n 88,\n 170,\n 105,\n 68,\n 2\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"clock\"\n },\n {\n \"name\": \"random_account_as_id\"\n },\n {\n \"name\": \"fee_receipient\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"repay_percentage\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"trading_close_position_account\",\n \"discriminator\": [\n 112,\n 178,\n 77,\n 58,\n 204,\n 138,\n 62,\n 85\n ],\n \"accounts\": [\n {\n \"name\": \"position_account\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"fee_receipient\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"trading_close_pool_account\",\n \"discriminator\": [\n 226,\n 22,\n 159,\n 126,\n 37,\n 223,\n 57,\n 107\n ],\n \"accounts\": [\n {\n \"name\": \"pool_account\",\n \"writable\": true\n },\n {\n \"name\": \"operator\",\n \"signer\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"fee_receipient\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"sync_node_wallet\",\n \"discriminator\": [\n 185,\n 205,\n 57,\n 48,\n 112,\n 135,\n 240,\n 250\n ],\n \"accounts\": [\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"funder\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"trading_create_tp_delegate\",\n \"discriminator\": [\n 174,\n 200,\n 59,\n 127,\n 100,\n 216,\n 183,\n 8\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"writable\": true\n },\n {\n \"name\": \"original_operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"delegated_account\"\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"price\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"lower_threshold\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"delegate_operator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"partial_percentage\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"trading_remove_tp_delegate\",\n \"discriminator\": [\n 88,\n 18,\n 149,\n 143,\n 124,\n 43,\n 68,\n 178\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"writable\": true\n },\n {\n \"name\": \"original_operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"delegated_account\"\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"delegate_execute_tp\",\n \"discriminator\": [\n 207,\n 251,\n 148,\n 38,\n 214,\n 153,\n 54,\n 242\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"writable\": true\n },\n {\n \"name\": \"delegate_operator\",\n \"signer\": true\n },\n {\n \"name\": \"account\",\n \"writable\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"position_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"delegate_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"mint\"\n }\n ],\n \"args\": [\n {\n \"name\": \"seed\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"delegate_close_position\",\n \"discriminator\": [\n 100,\n 249,\n 236,\n 96,\n 249,\n 195,\n 17,\n 157\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"writable\": true\n },\n {\n \"name\": \"delegate_operator\",\n \"signer\": true\n },\n {\n \"name\": \"account\",\n \"writable\": true\n },\n {\n \"name\": \"trading_pool\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"node_wallet_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"delegate_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"fee_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"profit_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"qt_mint\"\n }\n ],\n \"args\": [\n {\n \"name\": \"closing_position_size\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"trading_management_split_position\",\n \"discriminator\": [\n 230,\n 180,\n 252,\n 200,\n 8,\n 246,\n 131,\n 54\n ],\n \"accounts\": [\n {\n \"name\": \"original_position\",\n \"writable\": true\n },\n {\n \"name\": \"new_position_one\",\n \"writable\": true\n },\n {\n \"name\": \"new_position_two\",\n \"writable\": true\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"original_position_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"new_position_token_account_one\",\n \"writable\": true\n },\n {\n \"name\": \"new_position_token_account_two\",\n \"writable\": true\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"split_ratio_bps\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"seed1\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"seed2\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"init_withdrawal_access_list\",\n \"discriminator\": [\n 118,\n 110,\n 194,\n 104,\n 220,\n 145,\n 69,\n 31\n ],\n \"accounts\": [\n {\n \"name\": \"withdrawal_access_list\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"add_withdrawal_access\",\n \"discriminator\": [\n 45,\n 247,\n 214,\n 153,\n 224,\n 115,\n 136,\n 178\n ],\n \"accounts\": [\n {\n \"name\": \"withdrawal_access_list\",\n \"writable\": true\n },\n {\n \"name\": \"node_wallet\"\n },\n {\n \"name\": \"authority\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"to_pubkey\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"remove_withdrawal_access\",\n \"discriminator\": [\n 218,\n 186,\n 7,\n 130,\n 180,\n 40,\n 111,\n 122\n ],\n \"accounts\": [\n {\n \"name\": \"withdrawal_access_list\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"from_pubkey\",\n \"type\": \"string\"\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"Delegate\",\n \"discriminator\": [\n 92,\n 145,\n 166,\n 111,\n 11,\n 38,\n 38,\n 247\n ]\n },\n {\n \"name\": \"NodeWallet\",\n \"discriminator\": [\n 48,\n 117,\n 214,\n 115,\n 125,\n 23,\n 94,\n 246\n ]\n },\n {\n \"name\": \"Pool\",\n \"discriminator\": [\n 241,\n 154,\n 109,\n 4,\n 17,\n 177,\n 109,\n 188\n ]\n },\n {\n \"name\": \"Position\",\n \"discriminator\": [\n 170,\n 188,\n 143,\n 228,\n 122,\n 64,\n 247,\n 208\n ]\n },\n {\n \"name\": \"WithdrawalAccessList\",\n \"discriminator\": [\n 29,\n 144,\n 191,\n 76,\n 108,\n 26,\n 73,\n 234\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"PositionCloseEvent\",\n \"discriminator\": [\n 85,\n 5,\n 166,\n 100,\n 218,\n 87,\n 230,\n 129\n ]\n },\n {\n \"name\": \"PositionOpenEvent\",\n \"discriminator\": [\n 84,\n 127,\n 249,\n 160,\n 99,\n 95,\n 120,\n 120\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"AddressMismatch\",\n \"msg\": \"Address Mismatch\"\n },\n {\n \"code\": 6001,\n \"name\": \"ProgramMismatch\",\n \"msg\": \"Program Mismatch\"\n },\n {\n \"code\": 6002,\n \"name\": \"MissingRepay\",\n \"msg\": \"Missing Repay\"\n },\n {\n \"code\": 6003,\n \"name\": \"IncorrectOwner\",\n \"msg\": \"Incorrect Owner\"\n },\n {\n \"code\": 6004,\n \"name\": \"IncorrectProgramAuthority\",\n \"msg\": \"Incorrect Program Authority\"\n },\n {\n \"code\": 6005,\n \"name\": \"CannotBorrowBeforeRepay\",\n \"msg\": \"Cannot Borrow Before Repay\"\n },\n {\n \"code\": 6006,\n \"name\": \"UnknownInstruction\",\n \"msg\": \"Unknown Instruction\"\n },\n {\n \"code\": 6007,\n \"name\": \"ExpectedCollateralNotEnough\",\n \"msg\": \"Expected collateral not enough\"\n },\n {\n \"code\": 6008,\n \"name\": \"ForTesting\",\n \"msg\": \"TestError\"\n },\n {\n \"code\": 6009,\n \"name\": \"BlacklistedAccount\",\n \"msg\": \"Account is blacklisted\"\n },\n {\n \"code\": 6010,\n \"name\": \"CloseStatusRecallTimestampZero\",\n \"msg\": \"Close status recall timestamp is zero\"\n }\n ],\n \"types\": [\n {\n \"name\": \"WithdrawalAccessEntry\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"from_pubkey\",\n \"type\": \"string\"\n },\n {\n \"name\": \"to_pubkey\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"LendingErrors\",\n \"docs\": [\n \"Errors for this program\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"AddressMismatch\"\n },\n {\n \"name\": \"ProgramMismatch\"\n },\n {\n \"name\": \"MissingRepay\"\n },\n {\n \"name\": \"IncorrectOwner\"\n },\n {\n \"name\": \"IncorrectProgramAuthority\"\n },\n {\n \"name\": \"CannotBorrowBeforeRepay\"\n },\n {\n \"name\": \"UnknownInstruction\"\n },\n {\n \"name\": \"ExpectedCollateralNotEnough\"\n },\n {\n \"name\": \"AccessEntryAlreadyExists\"\n },\n {\n \"name\": \"AccessEntryNotFound\"\n },\n {\n \"name\": \"UnauthorizedWithdrawal\"\n },\n {\n \"name\": \"AccountAlreadyInitialized\"\n }\n ]\n }\n },\n {\n \"name\": \"ErrorCode\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"InvalidSignature\"\n },\n {\n \"name\": \"InvalidOracle\"\n }\n ]\n }\n },\n {\n \"name\": \"ErrorCode\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"InvalidSplitRatio\"\n },\n {\n \"name\": \"PositionsNotMergeable\"\n }\n ]\n }\n },\n {\n \"name\": \"ErrorCode\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"OnlyDelegateOperator\"\n },\n {\n \"name\": \"AddressMismatch\"\n },\n {\n \"name\": \"InvalidDelegateType\"\n }\n ]\n }\n },\n {\n \"name\": \"PositionCloseType\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"ClosedByUser\"\n },\n {\n \"name\": \"Liquidated\"\n }\n ]\n }\n },\n {\n \"name\": \"Delegate\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"delegate_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"field1\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"field2\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"field3\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"field4\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"field5\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"original_operator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"delegate_operator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"account\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"NodeWallet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"total_funds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_borrowed\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"maintenance_ltv\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"liquidation_ltv\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"node_operator\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"Pool\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"interest_rate\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"collateral_type\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"max_borrow\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"node_wallet\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"max_exposure\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"current_exposure\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"Position\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"close_status_recall_timestamp\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"user_paid\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"collateral_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"trader\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"seed\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"close_timestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"closing_position_size\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"interest_rate\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"last_interest_collect\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"WithdrawalAccessList\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"access_entries\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"WithdrawalAccessEntry\"\n }\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"PositionCloseEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"user_paid\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"collateral_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"open_timestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"trader\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"close_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"close_timestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"closing_position_size\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"PositionOpenEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"user_paid\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"collateral_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"open_timestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"trader\",\n \"type\": \"pubkey\"\n }\n ]\n }\n }\n ]\n}","import { Program } from \"@coral-xyz/anchor\";\nimport LavarageSOLIdl from \"./idl/lavarageSOL.json\";\n\nexport async function retryWithBackoff<T>(\n fn: () => Promise<T>,\n maxRetries: number = 5,\n initialDelay: number = 1000,\n): Promise<T> {\n let lastError: any;\n\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error;\n\n if (attempt < maxRetries - 1) {\n // exponentially increase delay\n const delay = initialDelay * Math.pow(2, attempt);\n await new Promise(resolve => setTimeout(resolve, delay));\n }\n }\n }\n\n throw lastError;\n}\n\nexport function stringToU8Array(input: string): number[] {\n const encoder = new TextEncoder();\n const encoded = encoder.encode(input);\n \n if (encoded.length > 32) {\n throw new Error(`String too long: ${encoded.length} bytes (max 32)`);\n }\n \n // Create array of 32 zeros and fill with encoded bytes\n const result = new Array(32).fill(0);\n for (let i = 0; i < encoded.length; i++) {\n result[i] = encoded[i];\n }\n \n return result;\n}\n\nexport function u8ArrayToString(input: number[]): string {\n // Strip trailing zero-padding and decode\n const end = input.indexOf(0);\n const bytes = new Uint8Array(end === -1 ? input : input.slice(0, end));\n const decoder = new TextDecoder(\"utf-8\", { fatal: true });\n try {\n return decoder.decode(bytes);\n } catch {\n // Not valid UTF-8 (e.g. raw binary/hash); return hex\n return '0x' + Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n }\n}\n\nexport function isSolProgram(program: Program<any>): boolean {\n return program.programId.toBase58() === LavarageSOLIdl.address;\n}","import {\n BigNumberish,\n Contract,\n ContractTransaction,\n Provider,\n ZeroAddress,\n} from \"ethers\";\nimport { borrowerOperationsAbi } from \"./abi/borrowerOperations\";\nimport { tokenHolderAbi } from \"./abi/tokenHolderAbi\";\nimport {\n BuyEvent,\n SellEvent,\n LiquidationEvent,\n Loan,\n Collateral,\n} from \"./interfaces/evm\";\n\n/**\n * Creates an unsigned transaction to open a trading position on EVM chain\n * @group EVM\n * @category Trading\n * @param provider - Ethers provider\n * @param borrowerOpsContractAddress - BorrowerOperations contract address\n * @param params - Trading parameters\n * @returns Unsigned transaction object\n * \n * @example\n * ```typescript\n * const tx = await openPositionEvm(\n * provider,\n * \"0x123...\", // contract address\n * {\n * buyingCode: \"0x...\", // 1inch swap data\n * tokenCollateral: \"0x456...\", // USDC address\n * borrowAmount: ethers.parseEther(\"2\"),\n * tokenHolder: \"0x789...\",\n * inchRouter: \"0xabc...\",\n * buyerContribution: ethers.parseEther(\"1\") // 1 ETH margin\n * }\n * );\n * \n * const receipt = await signer.sendTransaction(tx);\n * ```\n */\nexport const openPositionEvm = async (\n provider: Provider,\n borrowerOpsContractAddress: string,\n {\n buyingCode,\n tokenCollateral,\n borrowAmount,\n tokenHolder,\n inchRouter,\n integratorFeeAddress = ZeroAddress,\n buyerContribution,\n tokenApproval,\n gasLimit,\n gasPrice,\n }: {\n buyingCode: string;\n tokenCollateral: string;\n borrowAmount: BigNumberish;\n tokenHolder: string;\n inchRouter: string;\n integratorFeeAddress?: string;\n buyerContribution: BigNumberish;\n tokenApproval: string;\n gasLimit?: string | number;\n gasPrice?: string | number;\n }\n): Promise<ContractTransaction> => {\n const contract = new Contract(\n borrowerOpsContractAddress,\n borrowerOperationsAbi,\n provider\n );\n\n const txOptions: {\n value: BigNumberish;\n gasLimit?: BigNumberish;\n gasPrice?: BigNumberish;\n } = {\n value: buyerContribution,\n };\n\n if (gasLimit) txOptions.gasLimit = gasLimit;\n if (gasPrice) txOptions.gasPrice = gasPrice;\n\n return contract.buy.populateTransaction(\n buyingCode,\n tokenCollateral,\n borrowAmount,\n tokenHolder,\n inchRouter,\n integratorFeeAddress,\n tokenApproval,\n txOptions\n );\n};\n\n/**\n * Creates an unsigned transaction to close a trading position on EVM chain\n * @group EVM\n * @category Trading\n * @param provider - Ethers provider\n * @param borrowerOpsContractAddress - BorrowerOperations contract address\n * @param params - Trading parameters\n * @returns Unsigned transaction object\n * \n * @example\n * ```typescript\n * const tx = await closePositionEvm(\n * provider,\n * \"0x123...\", // contract address\n * {\n * loanId: 1,\n * sellingCode: \"0x...\", // 1inch swap data for selling\n * tokenHolder: \"0x789...\",\n * inchRouter: \"0xabc...\",\n * integratorFeeAddress: \"0xdef...\" // optional\n * }\n * );\n * \n * const receipt = await signer.sendTransaction(tx);\n * ```\n */\nexport const closePositionEvm = async (\n provider: Provider,\n borrowerOpsContractAddress: string,\n {\n loanId,\n sellingCode,\n tokenHolder,\n inchRouter,\n integratorFeeAddress = ZeroAddress,\n gasLimit,\n gasPrice,\n tokenApproval,\n }: {\n loanId: BigNumberish;\n sellingCode: string;\n tokenHolder: string;\n inchRouter: string;\n integratorFeeAddress?: string;\n gasLimit?: string | number;\n gasPrice?: string | number;\n tokenApproval: string;\n }\n): Promise<ContractTransaction> => {\n const contract = new Contract(\n borrowerOpsContractAddress,\n borrowerOperationsAbi,\n provider\n );\n\n const txOptions: { gasLimit?: BigNumberish; gasPrice?: BigNumberish } = {};\n\n if (gasLimit) txOptions.gasLimit = gasLimit;\n if (gasPrice) txOptions.gasPrice = gasPrice;\n\n return contract.sell.populateTransaction(\n loanId,\n sellingCode,\n tokenHolder,\n inchRouter,\n integratorFeeAddress,\n tokenApproval,\n Object.keys(txOptions).length > 0 ? txOptions : {}\n );\n};\n\n/**\n * Get all positions from active loans\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param tokenHolderContractAddress - TokenHolder contract address\n * @returns Array of active positions\n * \n * @example\n * ```typescript\n * const positions = await getPositionsEvm(\n * provider,\n * \"0x123...\" // TokenHolder address\n * );\n * \n * console.log(`Found ${positions.length} active positions`);\n * \n * positions.forEach(pos => {\n * console.log(`Loan #${pos.loanId}: ${pos.collateralAmount} collateral`);\n * });\n * ```\n */\nexport async function getPositionsEvm(\n provider: Provider,\n tokenHolderContractAddress: string\n): Promise<BuyEvent[]> {\n const contract = new Contract(\n tokenHolderContractAddress,\n tokenHolderAbi,\n provider\n );\n\n const activeLoanCount = await contract.getActiveLoanCount();\n const batchSize = 100; // Process in batches to avoid gas limits\n const positions: BuyEvent[] = [];\n\n // Fetch loans in batches\n for (let i = 0; i < activeLoanCount; i += batchSize) {\n const currentBatchSize = Math.min(Number(activeLoanCount) - i, batchSize);\n const loans = await contract.getActiveLoansBatch(i, currentBatchSize);\n\n // Convert each loan to a BuyEvent format\n for (const loan of loans) {\n positions.push({\n trader: loan.borrower,\n tokenCollateral: loan.collateral.collateralAddress,\n loanId: loan.id,\n openingPositionSize: loan.amount + loan.userPaid,\n collateralAmount: loan.collateralAmount,\n initialMargin: loan.userPaid,\n transactionHash: \"\", // Not available from loan data\n timestamp: Number(loan.timestamp),\n interestRate: loan.collateral.interestRate,\n });\n }\n }\n\n return positions;\n}\n\n/**\n * Get closed positions from events\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param borrowerOpsContractAddress - BorrowerOperations contract address\n * @param fromBlock - Block to start searching from\n * @returns Array of Sell events representing closed positions\n * \n * @example\n * ```typescript\n * const closedPositions = await getClosedPositionsEvm(\n * provider,\n * \"0x123...\", // BorrowerOps address\n * 50000000 // optional: custom start block\n * );\n * \n * console.log(`Found ${closedPositions.length} closed positions`);\n * \n * // Check profit/loss\n * closedPositions.forEach(pos => {\n * console.log(`Loan #${pos.loanId}: ${pos.profit > 0 ? 'Profit' : 'Loss'}`);\n * });\n */\nexport async function getClosedPositionsEvm(\n provider: Provider,\n borrowerOpsContractAddress: string,\n fromBlock: number = 42960845 // block contract was initialized\n): Promise<SellEvent[]> {\n const contract = new Contract(\n borrowerOpsContractAddress,\n borrowerOperationsAbi,\n provider\n );\n\n const currentBlock = await provider.getBlockNumber();\n const filter = contract.filters.Sell();\n const allEvents: any[] = [];\n \n // Query in chunks of 10,000 blocks\n for (let start = fromBlock; start <= currentBlock; start += 10000) {\n const end = Math.min(start + 9999, currentBlock);\n const events = await contract.queryFilter(filter, start, end);\n allEvents.push(...events);\n }\n\n return Promise.all(\n allEvents.map(async (event: any) => {\n const { buyer, tokenHolder, tokenCollateral, loanId, closingPositionSize, profit } =\n event.args as unknown as any;\n\n const block = await provider.getBlock(event.blockNumber);\n const timestamp = block ? Number(block.timestamp) : 0;\n\n return {\n trader: buyer,\n tokenCollateral: tokenHolder,\n loanId,\n closingPositionSize,\n profit,\n transactionHash: event.transactionHash,\n timestamp,\n };\n })\n );\n}\n\n/**\n * Get liquidated positions from events\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param borrowerOpsContractAddress - BorrowerOperations contract address\n * @param fromBlock - Block to start searching from\n * @returns Array of Liquidation events representing liquidated positions\n * @example\n * ```typescript\n * const liquidations = await getLiquidatedPositionsEvm(\n * provider,\n * \"0x123...\", // BorrowerOps address\n * 50000000 // optional: custom start block\n * );\n * \n * console.log(`Found ${liquidations.length} liquidated positions`);\n * \n * // Analyze liquidation data\n * liquidations.forEach(liq => {\n * console.log(`Loan #${liq.loanId}: liquidated ${liq.closingPositionSize}`);\n * console.log(`Liquidator repaid: ${liq.liquidatorRepaidAmount}`);\n * });\n * ```\n */\nexport async function getLiquidatedPositionsEvm(\n provider: Provider,\n borrowerOpsContractAddress: string,\n fromBlock: number = 42960845 // block contract was initialized\n): Promise<LiquidationEvent[]> {\n const contract = new Contract(\n borrowerOpsContractAddress,\n borrowerOperationsAbi,\n provider\n );\n\n const currentBlock = await provider.getBlockNumber();\n const filter = contract.filters.Liquidation();\n const allEvents: any[] = [];\n \n // Query in chunks of 10,000 blocks\n for (let start = fromBlock; start <= currentBlock; start += 10000) {\n const end = Math.min(start + 9999, currentBlock);\n const events = await contract.queryFilter(filter, start, end);\n allEvents.push(...events);\n }\n\n return Promise.all(\n allEvents.map(async (event: any) => {\n const {\n borrower,\n tokenCollateral,\n loanId,\n closingPositionSize,\n liquidatorRepaidAmount,\n } = event.args as unknown as any;\n\n const block = await provider.getBlock(event.blockNumber);\n const timestamp = block ? Number(block.timestamp) : 0;\n\n return {\n trader: borrower,\n tokenCollateral,\n loanId,\n closingPositionSize,\n liquidatorRepaidAmount,\n transactionHash: event.transactionHash,\n timestamp,\n };\n })\n );\n}\n\n/**\n * Get a loan by its ID from TokenHolder contract\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param tokenHolderContractAddress - Address of the TokenHolder contract\n * @param loanId - ID of the loan to retrieve\n * @returns Loan object\n * \n * @example\n * ```typescript\n * const loan = await getLoanEvm(\n * provider,\n * \"0x123...\", // TokenHolder address\n * 42 // loan ID\n * );\n * \n * console.log(`Loan #${loan.id}`);\n * console.log(`Borrower: ${loan.borrower}`);\n * console.log(`Amount: ${loan.amount}`);\n * console.log(`Collateral: ${loan.collateralAmount}`);\n * ```\n */\nexport async function getLoanEvm(\n provider: Provider,\n tokenHolderContractAddress: string,\n loanId: BigNumberish\n): Promise<Loan> {\n const contract = new Contract(\n tokenHolderContractAddress,\n tokenHolderAbi,\n provider\n );\n return contract.loans(loanId);\n}\n\n/**\n * Get all active loans for a user\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param tokenHolderContractAddress - Address of the TokenHolder contract\n * @param userAddress - Address of the user to get loans for\n * @returns Array of loans belonging to the user\n * \n * @example\n * ```typescript\n * const userLoans = await getUserLoansEvm(\n * provider,\n * \"0x123...\", // TokenHolder address\n * \"0x456...\" // user address\n * );\n * \n * console.log(`User has ${userLoans.length} active loans`);\n * \n * userLoans.forEach(loan => {\n * console.log(`Loan #${loan.id}: ${loan.amount} borrowed`);\n * });\n * ```\n */\nexport async function getUserLoansEvm(\n provider: Provider,\n tokenHolderContractAddress: string,\n userAddress: string\n): Promise<Loan[]> {\n const contract = new Contract(\n tokenHolderContractAddress,\n tokenHolderAbi,\n provider\n );\n const nextLoanId = await contract.nextLoanId();\n const userLoans: Loan[] = [];\n\n // Iterate through all loans to find the ones belonging to the user\n for (let i = 0; i < nextLoanId; i++) {\n const loan = await contract.loans(i);\n if (loan.borrower.toLowerCase() === userAddress.toLowerCase()) {\n userLoans.push(loan);\n }\n }\n\n return userLoans;\n}\n\n/**\n * Get collateral information for a specific token\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param tokenHolderContractAddress - Address of the TokenHolder contract\n * @param collateralAddress - Address of the collateral token\n * @returns Collateral object\n * \n * @example\n * ```typescript\n * const collateralInfo = await getCollateralInfoEvm(\n * provider,\n * \"0x123...\", // TokenHolder address\n * \"0x456...\" // USDC or other collateral token address\n * );\n * \n * console.log(`Collateral: ${collateralInfo.symbol}`);\n * console.log(`Max LTV: ${collateralInfo.maxLTV}`);\n * console.log(`Liquidation threshold: ${collateralInfo.liquidationThreshold}`);\n * ```\n */\nexport async function getCollateralInfoEvm(\n provider: Provider,\n tokenHolderContractAddress: string,\n collateralAddress: string\n): Promise<Collateral> {\n const contract = new Contract(\n tokenHolderContractAddress,\n tokenHolderAbi,\n provider\n );\n return contract.collateralMapping(collateralAddress);\n}\n\n/**\n * Get all available collateral information\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param tokenHolderContractAddress - Address of the TokenHolder contract\n * @param collateralAddresses - Array of collateral token addresses\n * @returns Array of active collaterals\n * \n * @example\n * ```typescript\n * const collaterals = await getOffersEvm(\n * provider,\n * \"0x123...\", // TokenHolder address\n * [\"0x456...\", \"0x789...\", \"0xabc...\"] // token addresses to check\n * );\n * \n * console.log(`Found ${collaterals.length} available collaterals`);\n * \n * collaterals.forEach(({ address, collateral }) => {\n * console.log(`Token ${address}: LTV ${collateral.maxLTV}%`);\n * });\n * ```\n */\nexport async function getOffersEvm(\n provider: Provider,\n tokenHolderContractAddress: string,\n collateralAddresses: string[]\n): Promise<Array<{ address: string; collateral: Collateral }>> {\n const contract = new Contract(\n tokenHolderContractAddress,\n tokenHolderAbi,\n provider\n );\n const activeCollaterals = [];\n\n for (const address of collateralAddresses) {\n const collateral = await contract.collateralMapping(address);\n //if (collateral.active) {\n activeCollaterals.push({\n address,\n collateral,\n });\n //}\n }\n\n return activeCollaterals;\n}\n\n/**\n * Get the opening fee percentage\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param borrowerOpsContractAddress - BorrowerOperations contract address\n * @returns Opening fee as a BigNumber\n * \n * @example\n * ```typescript\n * const openingFee = await getOpeningFeeEvm(\n * provider,\n * \"0x123...\" // BorrowerOps address\n * );\n * \n * // Convert to percentage (assuming 18 decimals)\n * const feePercent = Number(openingFee) / 1e16; // e.g., 0.5%\n * console.log(`Opening fee: ${feePercent}%`);\n * ```\n */\nexport async function getOpeningFeeEvm(\n provider: Provider,\n borrowerOpsContractAddress: string\n): Promise<bigint> {\n const contract = new Contract(\n borrowerOpsContractAddress,\n borrowerOperationsAbi,\n provider\n );\n return contract.openingFee();\n}\n\n/**\n * Get the profit fee percentage\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param borrowerOpsContractAddress - BorrowerOperations contract address\n * @returns Profit fee as a BigNumber\n * \n * @example\n * ```typescript\n * const profitFee = await getProfitFeeEvm(\n * provider,\n * \"0x123...\" // BorrowerOps address\n * );\n * \n * // Convert to percentage (assuming 18 decimals)\n * const feePercent = Number(profitFee) / 1e16; // e.g., 1%\n * console.log(`Profit fee: ${feePercent}%`);\n * ```\n */\nexport async function getProfitFeeEvm(\n provider: Provider,\n borrowerOpsContractAddress: string\n): Promise<bigint> {\n const contract = new Contract(\n borrowerOpsContractAddress,\n borrowerOperationsAbi,\n provider\n );\n return contract.profitFee();\n}\n\n/**\n * Get the token balance of the token holder contract\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param tokenHolderContractAddress - Address of the TokenHolder contract\n * @returns Token balance as a BigNumber\n * \n * @example\n * ```typescript\n * const balance = await getTokenBalanceEvm(\n * provider,\n * \"0x123...\" // TokenHolder address\n * );\n * \n * // Format for display (assuming 18 decimals)\n * const formatted = ethers.formatEther(balance);\n * console.log(`Contract balance: ${formatted} ETH`);\n * ```\n */\nexport async function getTokenBalanceEvm(\n provider: Provider,\n tokenHolderContractAddress: string\n): Promise<bigint> {\n const contract = new Contract(\n tokenHolderContractAddress,\n tokenHolderAbi,\n provider\n );\n return contract.getBalance();\n}\n\n/**\n * Get the active loan count\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param tokenHolderContractAddress - Address of the TokenHolder contract\n * @returns Number of active loans\n * \n * @example\n * ```typescript\n * const loanCount = await getActiveLoanCountEvm(\n * provider,\n * \"0x123...\" // TokenHolder address\n * );\n * \n * console.log(`Total active loans: ${loanCount}`);\n * \n * // Use for statistics or monitoring\n * if (loanCount > 1000n) {\n * console.log(\"High activity detected\");\n * }\n * ```\n */\nexport async function getActiveLoanCountEvm(\n provider: Provider,\n tokenHolderContractAddress: string\n): Promise<bigint> {\n const contract = new Contract(\n tokenHolderContractAddress,\n tokenHolderAbi,\n provider\n );\n return contract.getActiveLoanCount();\n}\n\n/**\n * Get a batch of active loans\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param tokenHolderContractAddress - Address of the TokenHolder contract\n * @param startIndex - Starting index in the activeLoanIds array\n * @param batchSize - Number of loans to retrieve\n * @returns Array of active loans\n * \n * @example\n * ```typescript\n * const loans = await getActiveLoansBatchEvm(\n * provider,\n * \"0x123...\", // TokenHolder address\n * 0, // start from first loan\n * 100 // get 100 loans\n * );\n * \n * console.log(`Retrieved ${loans.length} loans`);\n * \n * // Process batch\n * loans.forEach(loan => {\n * console.log(`Loan #${loan.id}: ${loan.borrower}`);\n * });\n * ```\n */\nexport async function getActiveLoansBatchEvm(\n provider: Provider,\n tokenHolderContractAddress: string,\n startIndex: BigNumberish,\n batchSize: BigNumberish\n): Promise<Loan[]> {\n const contract = new Contract(\n tokenHolderContractAddress,\n tokenHolderAbi,\n provider\n );\n return contract.getActiveLoansBatch(startIndex, batchSize);\n}\n\n/**\n * Get all loans for a specific borrower\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param tokenHolderContractAddress - Address of the TokenHolder contract\n * @param borrowerAddress - Address of the borrower\n * @returns Array of loans belonging to the borrower\n * \n * @example\n * ```typescript\n * const userLoans = await getLoansByBorrowerEvm(\n * provider,\n * \"0x123...\", // TokenHolder address\n * \"0x456...\" // borrower address\n * );\n * \n * console.log(`Borrower has ${userLoans.length} loans`);\n * \n * userLoans.forEach(loan => {\n * console.log(`Loan #${loan.id}: ${loan.collateralAmount} collateral`);\n * });\n * ```\n */\nexport async function getLoansByBorrowerEvm(\n provider: Provider,\n tokenHolderContractAddress: string,\n borrowerAddress: string\n): Promise<Loan[]> {\n const contract = new Contract(\n tokenHolderContractAddress,\n tokenHolderAbi,\n provider\n );\n return contract.getLoansByBorrower(borrowerAddress);\n}\n\n/**\n * Get current exposure for a collateral\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param tokenHolderContractAddress - Address of the TokenHolder contract\n * @param collateralAddress - Address of the collateral token\n * @returns Current exposure as a BigNumber\n * \n * @example\n * ```typescript\n * const exposure = await getCollateralExposureEvm(\n * provider,\n * \"0x123...\", // TokenHolder address\n * \"0x456...\" // collateral token address\n * );\n * \n * console.log(`Current exposure: ${ethers.formatEther(exposure)}`);\n * \n * // Check if near limit\n * const maxExposure = 1000000n;\n * if (exposure > maxExposure * 90n / 100n) {\n * console.log(\"Warning: 90% exposure reached\");\n * }\n * ```\n */\nexport async function getCollateralExposureEvm(\n provider: Provider,\n tokenHolderContractAddress: string,\n collateralAddress: string\n): Promise<bigint> {\n const contract = new Contract(\n tokenHolderContractAddress,\n tokenHolderAbi,\n provider\n );\n return contract.getCollateralExposure(collateralAddress);\n}\n\n/**\n * Get available exposure for a collateral\n * @group EVM\n * @category Queries\n * @param provider - Ethers provider\n * @param tokenHolderContractAddress - Address of the TokenHolder contract\n * @param collateralAddress - Address of the collateral token\n * @returns Available exposure as a BigNumber\n * \n * @example\n * ```typescript\n * const available = await getAvailableExposureEvm(\n * provider,\n * \"0x123...\", // TokenHolder address\n * \"0x456...\" // collateral token address\n * );\n * \n * console.log(`Available exposure: ${ethers.formatEther(available)}`);\n * \n * // Check if can open new position\n * const newPositionSize = ethers.parseEther(\"10\");\n * if (available >= newPositionSize) {\n * console.log(\"Sufficient exposure available\");\n * }\n * ```\n */\nexport async function getAvailableExposureEvm(\n provider: Provider,\n tokenHolderContractAddress: string,\n collateralAddress: string\n): Promise<bigint> {\n const contract = new Contract(\n tokenHolderContractAddress,\n tokenHolderAbi,\n provider\n );\n return contract.getAvailableExposure(collateralAddress);\n}\n\n/**\n * Creates an unsigned transaction to liquidate a trading position on EVM chain\n * @param provider - Ethers provider\n * @param borrowerOpsContractAddress - BorrowerOperations contract address\n * @param params - Liquidation parameters\n * @returns Unsigned transaction object\n */\nexport const liquidatePositionEvm = async (\n provider: Provider,\n borrowerOpsContractAddress: string,\n {\n loanId,\n tokenHolder,\n closingPositionSize,\n gasLimit,\n gasPrice,\n }: {\n loanId: BigNumberish;\n tokenHolder: string;\n closingPositionSize: BigNumberish;\n gasLimit?: string | number;\n gasPrice?: string | number;\n }\n): Promise<ContractTransaction> => {\n const contract = new Contract(\n borrowerOpsContractAddress,\n borrowerOperationsAbi,\n provider\n );\n\n const txOptions: { gasLimit?: BigNumberish; gasPrice?: BigNumberish } = {};\n\n if (gasLimit) txOptions.gasLimit = gasLimit;\n if (gasPrice) txOptions.gasPrice = gasPrice;\n\n return contract.liquidate.populateTransaction(\n loanId,\n tokenHolder,\n closingPositionSize,\n Object.keys(txOptions).length > 0 ? txOptions : {}\n );\n};\n\n/**\n * Update max lend per token for multiple collaterals in batch\n * @group EVM\n * @category Operations\n * @param provider - Ethers provider\n * @param tokenHolderContractAddress - Address of the TokenHolder contract\n * @param collateralAddresses - Array of collateral token addresses\n * @param newMaxLendPerTokens - Array of new max lend per token values\n * @param gasLimit - Optional gas limit\n * @param gasPrice - Optional gas price\n * @returns Unsigned transaction object\n * \n * @example\n * ```typescript\n * const tx = await updateMaxLendPerTokenBatchEvm(\n * provider,\n * \"0x123...\", // TokenHolder address\n * {\n * collateralAddresses: [\"0x456...\", \"0x789...\"],\n * newMaxLendPerTokens: [\n * ethers.parseEther(\"1000\"),\n * ethers.parseEther(\"500\")\n * ]\n * }\n * );\n * \n * const receipt = await signer.sendTransaction(tx);\n * console.log(\"Max lend limits updated\");\n * ```\n */\nexport const updateMaxLendPerTokenBatchEvm = async (\n provider: Provider,\n tokenHolderContractAddress: string,\n {\n collateralAddresses,\n newMaxLendPerTokens,\n gasLimit,\n gasPrice,\n }: {\n collateralAddresses: string[];\n newMaxLendPerTokens: BigNumberish[];\n gasLimit?: string | number;\n gasPrice?: string | number;\n }\n): Promise<ContractTransaction> => {\n const contract = new Contract(\n tokenHolderContractAddress,\n tokenHolderAbi,\n provider\n );\n\n const txOptions: { gasLimit?: BigNumberish; gasPrice?: BigNumberish } = {};\n\n if (gasLimit) txOptions.gasLimit = gasLimit;\n if (gasPrice) txOptions.gasPrice = gasPrice;\n\n return contract.updateMaxLendPerTokenBulk.populateTransaction(\n collateralAddresses,\n newMaxLendPerTokens,\n Object.keys(txOptions).length > 0 ? txOptions : {}\n );\n};\n","export const borrowerOperationsAbi = [{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"buyer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenHolder\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenCollateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"openingPositionSize\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"collateralAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialMargin\",\"type\":\"uint256\"}],\"name\":\"Buy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dex\",\"type\":\"address\"}],\"name\":\"DexAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dex\",\"type\":\"address\"}],\"name\":\"DexRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenHolder\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenCollateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"closingPositionSize\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidatorRepaidAmount\",\"type\":\"uint256\"}],\"name\":\"Liquidation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newAmount\",\"type\":\"uint256\"}],\"name\":\"MaxApprovalAmountUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"buyer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenHolder\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenCollateral\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"closingPositionSize\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"profit\",\"type\":\"uint256\"}],\"name\":\"Sell\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenRemoved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dex\",\"type\":\"address\"}],\"name\":\"addWhitelistedDex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"addWhitelistedToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"buyingCode\",\"type\":\"bytes\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenCollateral\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"borrowAmount\",\"type\":\"uint256\"},{\"internalType\":\"contract TokenHolder\",\"name\":\"tokenHolder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"inchRouter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"integratorFeeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"whitelistedDex\",\"type\":\"address\"}],\"name\":\"buy\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_weth\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dex\",\"type\":\"address\"}],\"name\":\"isWhitelistedDex\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isWhitelistedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"},{\"internalType\":\"contract TokenHolder\",\"name\":\"tokenHolder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"closingPositionSize\",\"type\":\"uint256\"}],\"name\":\"liquidate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"loanRecords\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenHolder\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxApprovalAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"openingFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"profitFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dex\",\"type\":\"address\"}],\"name\":\"removeWhitelistedDex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"removeWhitelistedToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"loanId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sellingCode\",\"type\":\"bytes\"},{\"internalType\":\"contract TokenHolder\",\"name\":\"tokenHolder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"inchRouter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"integratorFeeAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"whitelistedDex\",\"type\":\"address\"}],\"name\":\"sell\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"}],\"name\":\"setAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxApprovalAmount\",\"type\":\"uint256\"}],\"name\":\"setMaxApprovalAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_openingFee\",\"type\":\"uint256\"}],\"name\":\"setOpeningFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_profitFee\",\"type\":\"uint256\"}],\"name\":\"setProfitFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"whitelistedDexes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"whitelistedTokens\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]","export const tokenHolderAbi = [\n { inputs: [], name: \"AccessControlBadConfirmation\", type: \"error\" },\n {\n inputs: [\n { internalType: \"address\", name: \"account\", type: \"address\" },\n { internalType: \"bytes32\", name: \"neededRole\", type: \"bytes32\" },\n ],\n name: \"AccessControlUnauthorizedAccount\",\n type: \"error\",\n },\n { inputs: [], name: \"InvalidInitialization\", type: \"error\" },\n { inputs: [], name: \"NotInitializing\", type: \"error\" },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint64\",\n name: \"version\",\n type: \"uint64\",\n },\n ],\n name: \"Initialized\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"newInterestRate\",\n type: \"uint256\",\n },\n ],\n name: \"InterestRateSet\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"loanId\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"timestamp\",\n type: \"uint256\",\n },\n { indexed: false, internalType: \"bool\", name: \"repaid\", type: \"bool\" },\n ],\n name: \"LoanCreated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"loanId\",\n type: \"uint256\",\n },\n ],\n name: \"LoanRepaid\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"collateralAddress\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"oldValue\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"newValue\",\n type: \"uint256\",\n },\n ],\n name: \"MaxLendPerTokenUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"borrower\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"PrivilegedLoan\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"borrower\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"PrivilegedLoanRepaid\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"role\", type: \"bytes32\" },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"previousAdminRole\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"newAdminRole\",\n type: \"bytes32\",\n },\n ],\n name: \"RoleAdminChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"role\", type: \"bytes32\" },\n {\n indexed: true,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n ],\n name: \"RoleGranted\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"bytes32\", name: \"role\", type: \"bytes32\" },\n {\n indexed: true,\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n ],\n name: \"RoleRevoked\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"BORROWER_ROUTER_ROLE\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"DEFAULT_ADMIN_ROLE\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"collateralAddress\", type: \"address\" },\n { internalType: \"uint256\", name: \"_interestRate\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"maxLendPerToken\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"minAmount\", type: \"uint256\" },\n ],\n name: \"addCollateral\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n name: \"collateralMapping\",\n outputs: [\n { internalType: \"address\", name: \"collateralAddress\", type: \"address\" },\n { internalType: \"uint256\", name: \"maxLendPerToken\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"interestRate\", type: \"uint256\" },\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n { internalType: \"uint256\", name: \"minAmount\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"maxExposure\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"currentExposure\", type: \"uint256\" },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"amount\", type: \"uint256\" }],\n name: \"deposit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getBalance\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes32\", name: \"role\", type: \"bytes32\" }],\n name: \"getRoleAdmin\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"account\", type: \"address\" }],\n name: \"grantBorrowerRouterRole\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"role\", type: \"bytes32\" },\n { internalType: \"address\", name: \"account\", type: \"address\" },\n ],\n name: \"grantRole\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"role\", type: \"bytes32\" },\n { internalType: \"address\", name: \"account\", type: \"address\" },\n ],\n name: \"hasRole\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"_tokenAddress\", type: \"address\" },\n ],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"collateralAmount\", type: \"uint256\" },\n { internalType: \"address\", name: \"collateralAddress\", type: \"address\" },\n { internalType: \"address\", name: \"borrower\", type: \"address\" },\n { internalType: \"uint256\", name: \"userPaid\", type: \"uint256\" },\n ],\n name: \"loanConfirmation\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n name: \"loans\",\n outputs: [\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n {\n components: [\n {\n internalType: \"address\",\n name: \"collateralAddress\",\n type: \"address\",\n },\n { internalType: \"uint256\", name: \"maxLendPerToken\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"interestRate\", type: \"uint256\" },\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n { internalType: \"uint256\", name: \"minAmount\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"maxExposure\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"currentExposure\", type: \"uint256\" },\n ],\n internalType: \"struct Collateral\",\n name: \"collateral\",\n type: \"tuple\",\n },\n { internalType: \"uint256\", name: \"collateralAmount\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"timestamp\", type: \"uint256\" },\n { internalType: \"address\", name: \"borrower\", type: \"address\" },\n { internalType: \"uint256\", name: \"userPaid\", type: \"uint256\" },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"nextLoanId\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"flashLoanToken\",\n type: \"address\",\n },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n ],\n name: \"privilegedLoan\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"collateralAddress\", type: \"address\" },\n ],\n name: \"removeCollateral\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"role\", type: \"bytes32\" },\n { internalType: \"address\", name: \"callerConfirmation\", type: \"address\" },\n ],\n name: \"renounceRole\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"loanId\", type: \"uint256\" }],\n name: \"repayLoan\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"account\", type: \"address\" }],\n name: \"revokeBorrowerRouterRole\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"bytes32\", name: \"role\", type: \"bytes32\" },\n { internalType: \"address\", name: \"account\", type: \"address\" },\n ],\n name: \"revokeRole\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"bytes4\", name: \"interfaceId\", type: \"bytes4\" }],\n name: \"supportsInterface\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"tokenHolded\",\n outputs: [{ internalType: \"contract IERC20\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"collateralAddresses\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"newMaxLendPerTokens\",\n type: \"uint256[]\",\n },\n ],\n name: \"updateMaxLendPerTokenBulk\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"amount\", type: \"uint256\" }],\n name: \"withdraw\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n name: \"activeLoanIds\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"getActiveLoanCount\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"uint256\", name: \"startIndex\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"batchSize\", type: \"uint256\" },\n ],\n name: \"getActiveLoansBatch\",\n outputs: [\n {\n components: [\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n {\n components: [\n {\n internalType: \"address\",\n name: \"collateralAddress\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"maxLendPerToken\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"interestRate\",\n type: \"uint256\",\n },\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n { internalType: \"uint256\", name: \"minAmount\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"maxExposure\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"currentExposure\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct Collateral\",\n name: \"collateral\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"collateralAmount\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"timestamp\", type: \"uint256\" },\n { internalType: \"address\", name: \"borrower\", type: \"address\" },\n { internalType: \"uint256\", name: \"userPaid\", type: \"uint256\" },\n ],\n internalType: \"struct Loan[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"borrower\", type: \"address\" }],\n name: \"getLoansByBorrower\",\n outputs: [\n {\n components: [\n { internalType: \"uint256\", name: \"id\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n {\n components: [\n {\n internalType: \"address\",\n name: \"collateralAddress\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"maxLendPerToken\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"interestRate\",\n type: \"uint256\",\n },\n { internalType: \"bool\", name: \"active\", type: \"bool\" },\n { internalType: \"uint256\", name: \"minAmount\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"maxExposure\", type: \"uint256\" },\n {\n internalType: \"uint256\",\n name: \"currentExposure\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct Collateral\",\n name: \"collateral\",\n type: \"tuple\",\n },\n {\n internalType: \"uint256\",\n name: \"collateralAmount\",\n type: \"uint256\",\n },\n { internalType: \"uint256\", name: \"timestamp\", type: \"uint256\" },\n { internalType: \"address\", name: \"borrower\", type: \"address\" },\n { internalType: \"uint256\", name: \"userPaid\", type: \"uint256\" },\n ],\n internalType: \"struct Loan[]\",\n name: \"\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"collateralAddress\", type: \"address\" },\n ],\n name: \"getCollateralExposure\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"collateralAddress\", type: \"address\" },\n ],\n name: \"getAvailableExposure\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"collateralAddress\", type: \"address\" },\n { internalType: \"uint256\", name: \"_interestRate\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"maxLendPerToken\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"minAmount\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"maxExposure\", type: \"uint256\" },\n ],\n name: \"addCollateral\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"collateralAddress\", type: \"address\" },\n { internalType: \"uint256\", name: \"newMaxExposure\", type: \"uint256\" },\n ],\n name: \"updateMaxExposure\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"collateralAddress\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"currentExposure\",\n type: \"uint256\",\n },\n ],\n name: \"ExposureUpdated\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"collateralAddress\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"oldMaxExposure\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"newMaxExposure\",\n type: \"uint256\",\n },\n ],\n name: \"MaxExposureUpdated\",\n type: \"event\",\n },\n];\n","import { BN, Program } from \"@coral-xyz/anchor\";\nimport { Lavarage as LavarageSOL } from \"./idl/lavarageSOL\";\nimport { Lavarage as LavarageUSDC } from \"./idl/lavarageUSDC\";\nimport {\n ComputeBudgetProgram,\n Keypair,\n LAMPORTS_PER_SOL,\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport {\n TOKEN_PROGRAM_ID,\n createAssociatedTokenAccountIdempotentInstruction,\n createTransferCheckedInstruction,\n getAssociatedTokenAddressSync,\n getMint,\n} from \"@solana/spl-token\";\nimport { getPda } from \"./index\";\nimport { isSolProgram } from \"./utils\";\n\n/**\n * Derives a node wallet PDA for lending operations\n * \n * @group Lending\n * @category Utilities\n * \n * @param operatorPublicKey - The operator's public key\n * @param mintPublicKey - The token mint public key\n * @param programId - The Lavarage program ID\n * \n * @returns The derived node wallet PDA\n * \n * @example\n * ```typescript\n * const nodeWallet = getNodeWalletPDA(\n * operatorPublicKey,\n * usdcMint,\n * programId\n * );\n * ```\n */\nexport function getNodeWalletPDA(\n operatorPublicKey: PublicKey,\n mintPublicKey: PublicKey,\n programId: PublicKey\n): PublicKey {\n return getPda(\n [\n Buffer.from(\"node_wallet\"),\n operatorPublicKey.toBuffer(),\n mintPublicKey.toBuffer(),\n ],\n programId\n );\n}\n\n/**\n * Derives a trading pool PDA for lending operations\n * \n * @group Lending\n * @category Utilities\n * \n * @param poolOwnerPublicKey - The pool owner's public key\n * @param tokenPublicKey - The token mint public key\n * @param programId - The Lavarage program ID\n * \n * @returns The derived trading pool PDA\n * \n * @example\n * ```typescript\n * const poolPDA = getTradingPoolPDA(\n * poolOwnerPublicKey,\n * usdcMint,\n * programId\n * );\n * ```\n */\nexport function getTradingPoolPDA(\n poolOwnerPublicKey: PublicKey,\n tokenPublicKey: PublicKey,\n programId: PublicKey\n): PublicKey {\n return getPda(\n [\n Buffer.from(\"trading_pool\"),\n poolOwnerPublicKey.toBuffer(),\n tokenPublicKey.toBuffer(),\n ],\n programId\n );\n}\n\nexport function getWithdrawalAccessListPDA(\n programId: PublicKey\n): PublicKey {\n return getPda(\n [\n Buffer.from(\"withdrawal_access_list\"),\n ],\n programId\n );\n}\n\nasync function createNodeWallet(\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n params: {\n operator: PublicKey;\n mint?: string; // Required for V2, optional for V1\n liquidationLtv?: number; // Required for V2, optional for V1\n }\n): Promise<{\n instructions: TransactionInstruction[];\n nodeWallet: Keypair | undefined;\n nodeWalletAccount: PublicKey;\n}> {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n let instructions: TransactionInstruction[] = [];\n let nodeWallet;\n\n // Check if this is V2 program (has mint and liquidationLtv parameters)\n if (params.mint !== undefined && params.liquidationLtv !== undefined) {\n nodeWallet = getNodeWalletPDA(\n new PublicKey(params.operator),\n new PublicKey(params.mint),\n lavarageProgram.programId\n );\n // V2 version\n instructions.push(await (lavarageProgram as Program<LavarageUSDC>).methods\n .lpOperatorCreateNodeWallet(params.liquidationLtv)\n .accounts({\n operator: new PublicKey(params.operator),\n mint: new PublicKey(params.mint),\n })\n .instruction());\n } else {\n const seed = params.operator.toBase58().slice(0, 32);\n\n const auxAccountPubkey = await PublicKey.createWithSeed(\n params.operator,\n seed,\n lavarageProgram.programId\n );\n\n nodeWallet = auxAccountPubkey;\n\n instructions.push(SystemProgram.createAccountWithSeed({\n fromPubkey: params.operator,\n basePubkey: params.operator,\n seed,\n newAccountPubkey: auxAccountPubkey,\n lamports: 1300000,\n space: 58,\n programId: lavarageProgram.programId,\n }));// Some code\n \n // V1 version\n instructions.push(await (lavarageProgram as Program<LavarageSOL>).methods\n .lpOperatorCreateNodeWallet()\n .accounts({\n nodeWallet: auxAccountPubkey,\n operator: new PublicKey(params.operator),\n systemProgram: SystemProgram.programId,\n })\n .instruction());\n }\n\n return {\n instructions ,\n nodeWallet: nodeWallet instanceof Keypair ? nodeWallet : undefined,\n nodeWalletAccount:\n nodeWallet instanceof Keypair ? nodeWallet.publicKey : nodeWallet,\n };\n}\n\n/**\n * Deposits funds into a node wallet for lending operations\n * \n * @group Lending\n * @category Operations\n * \n * @param lavarageProgram - The Lavarage V1 program instance\n * @param params - Deposit parameters\n * @param params.nodeWallet - The node wallet PDA to deposit into\n * @param params.mint - Token mint address (optional for V1 SOL deposits)\n * @param params.funder - The account providing the funds\n * @param params.amount - Amount to deposit (in lamports for SOL or token units)\n * @param params.computeBudgetMicroLamports - Optional compute budget for priority fees\n * \n * @returns Transaction to deposit funds\n * \n * @example\n * ```typescript\n * // Deposit SOL\n * const tx = await depositFunds(lavarageProgram, {\n * nodeWallet: nodeWalletPDA,\n * funder: lenderPublicKey,\n * amount: 1000000000 // 1 SOL\n * });\n * \n * // Deposit USDC\n * const tx = await depositFunds(lavarageProgram, {\n * nodeWallet: nodeWalletPDA,\n * mint: usdcMint.toString(),\n * funder: lenderPublicKey,\n * amount: 1000000 // 1 USDC (6 decimals)\n * });\n * ```\n * \n * @see {@link withdrawFundsV1} - Withdraw funds from a node wallet\n * @see {@link withdrawFunds} - Unified withdraw function for both V1 and V2\n */\nexport async function depositFunds(\n lavarageProgram: Program<LavarageSOL>,\n params: {\n nodeWallet: PublicKey;\n mint?: string; // Required for V2, optional for V1\n funder: PublicKey;\n amount: number;\n computeBudgetMicroLamports?: number;\n }\n): Promise<VersionedTransaction> {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n let instruction, createTokenAccountIx;\n if (params.mint === undefined) {\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n instruction = await lavarageProgram.methods\n .lpOperatorFundNodeWallet(new BN(params.amount))\n .accounts({\n nodeWallet: params.nodeWallet,\n funder: params.funder,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n } else {\n const mintPubkey = new PublicKey(params.mint);\n const mintOwner = await lavarageProgram.provider.connection.getAccountInfo(\n mintPubkey\n );\n const mintAccount = await getMint(\n lavarageProgram.provider.connection,\n mintPubkey,\n \"confirmed\",\n mintOwner?.owner\n );\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n const destinationTokenAccount = getAssociatedTokenAddressSync(\n mintPubkey,\n new PublicKey(params.nodeWallet),\n true,\n mintOwner?.owner\n )\n createTokenAccountIx = createAssociatedTokenAccountIdempotentInstruction(\n lavarageProgram.provider.publicKey!,\n destinationTokenAccount,\n params.nodeWallet,\n new PublicKey(params.mint),\n mintOwner?.owner\n );\n instruction = createTransferCheckedInstruction(\n getAssociatedTokenAddressSync(\n mintPubkey,\n new PublicKey(params.funder),\n true,\n mintOwner?.owner\n ),\n new PublicKey(params.mint),\n destinationTokenAccount,\n lavarageProgram.provider.publicKey!,\n params.amount,\n mintAccount.decimals,\n [],\n mintOwner?.owner\n );\n }\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [createTokenAccountIx, instruction, computeFeeIx].filter(Boolean) as TransactionInstruction[],\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n}\n\n/**\n * Withdraws funds from a node wallet on Lavarage V1\n * \n * @group Lending\n * @category Operations\n * \n * @param lavarageProgram - The Lavarage V1 program instance\n * @param params - Withdrawal parameters\n * @param params.nodeWallet - The node wallet PDA to withdraw from\n * @param params.funder - The account receiving the withdrawn funds\n * @param params.amount - Amount to withdraw in lamports\n * @param params.computeBudgetMicroLamports - Optional compute budget for priority fees\n * \n * @returns Transaction to withdraw funds\n * \n * @example\n * ```typescript\n * const tx = await withdrawFundsV1(lavarageProgram, {\n * nodeWallet: nodeWalletPDA,\n * funder: lenderPublicKey,\n * amount: 1000000000 // 1 SOL\n * });\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n * @see {@link depositFunds} - Deposit funds into a node wallet\n * @see {@link withdrawFunds} - Unified withdraw function for both V1 and V2\n */\nexport async function withdrawFundsV1(\n lavarageProgram: Program<LavarageSOL>,\n params: {\n nodeWallet: PublicKey;\n funder: PublicKey;\n amount: number;\n computeBudgetMicroLamports?: number;\n }\n): Promise<VersionedTransaction> {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const withdrawalAccessList = getWithdrawalAccessListPDA(lavarageProgram.programId);\n\n const instruction = await lavarageProgram.methods\n .lpOperatorWithdrawFromNodeWallet(new BN(params.amount))\n .accountsStrict({\n nodeWallet: params.nodeWallet,\n funder: params.funder,\n systemProgram: SystemProgram.programId,\n withdrawalAccessList: withdrawalAccessList,\n })\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [instruction, computeFeeIx],\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n}\n\n/**\n * Withdraws funds from a node wallet on Lavarage V2\n * \n * @group Lending\n * @category Operations\n * \n * @param lavarageProgram - The Lavarage V2 program instance\n * @param params - Withdrawal parameters\n * @param params.nodeWallet - The node wallet PDA to withdraw from\n * @param params.funder - The account receiving the withdrawn funds\n * @param params.mint - Token mint address\n * @param params.amount - Amount to withdraw in token units\n * @param params.fromTokenAccount - Optional source token account (auto-derived if not provided)\n * @param params.toTokenAccount - Optional destination token account (auto-derived if not provided)\n * @param params.computeBudgetMicroLamports - Optional compute budget for priority fees\n * \n * @returns Transaction to withdraw funds\n * \n * @example\n * ```typescript\n * // Withdraw USDC\n * const tx = await withdrawFundsV2(lavarageProgram, {\n * nodeWallet: nodeWalletPDA,\n * funder: lenderPublicKey,\n * mint: usdcMint.toString(),\n * amount: 1000000 // 1 USDC (6 decimals)\n * });\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n * @see {@link depositFunds} - Deposit funds into a node wallet\n * @see {@link withdrawFunds} - Unified withdraw function for both V1 and V2\n */\nexport async function withdrawFundsV2(\n lavarageProgram: Program<LavarageUSDC>,\n params: {\n nodeWallet: PublicKey;\n funder: PublicKey;\n mint: string;\n amount: number;\n fromTokenAccount?: PublicKey; // Optional, will be derived if not provided\n toTokenAccount?: PublicKey; // Optional, will be derived if not provided\n computeBudgetMicroLamports?: number;\n }\n): Promise<VersionedTransaction> {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const mintPubkey = new PublicKey(params.mint);\n\n // Derive token accounts if not provided\n const fromTokenAccount =\n params.fromTokenAccount ||\n getAssociatedTokenAddressSync(mintPubkey, params.nodeWallet, true);\n const toTokenAccount =\n params.toTokenAccount ||\n getAssociatedTokenAddressSync(mintPubkey, params.funder);\n const withdrawalAccessList = getWithdrawalAccessListPDA(lavarageProgram.programId);\n\n const instruction = await lavarageProgram.methods\n .lpOperatorWithdrawFromNodeWallet(new BN(params.amount))\n .accountsStrict({\n nodeWallet: params.nodeWallet,\n funder: params.funder,\n systemProgram: SystemProgram.programId,\n mint: mintPubkey,\n fromTokenAccount,\n toTokenAccount,\n tokenProgram: TOKEN_PROGRAM_ID,\n withdrawalAccessList: withdrawalAccessList,\n })\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [instruction, computeFeeIx],\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n}\n/**\n * Withdraws funds from a node wallet (supports both V1 and V2)\n * \n * @group Lending\n * @category Operations\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @param params - Withdrawal parameters\n * @param params.nodeWallet - The node wallet PDA to withdraw from\n * @param params.funder - The account receiving the withdrawn funds\n * @param params.amount - Amount to withdraw\n * @param params.mint - Token mint address (required for V2, omit for V1 SOL withdrawal)\n * @param params.fromTokenAccount - Optional source token account (V2 only)\n * @param params.toTokenAccount - Optional destination token account (V2 only)\n * @param params.computeBudgetMicroLamports - Optional compute budget for priority fees\n * \n * @returns Transaction to withdraw funds\n * \n * @example\n * ```typescript\n * // V1: Withdraw SOL\n * const tx = await withdrawFunds(lavarageProgram, {\n * nodeWallet: nodeWalletPDA,\n * funder: lenderPublicKey,\n * amount: 1000000000 // 1 SOL\n * });\n * \n * // V2: Withdraw USDC\n * const tx = await withdrawFunds(lavarageProgram, {\n * nodeWallet: nodeWalletPDA,\n * funder: lenderPublicKey,\n * mint: usdcMint.toString(),\n * amount: 1000000 // 1 USDC\n * });\n * ```\n * @see {@link depositFunds} - Deposit funds into a node wallet\n * @see {@link withdrawFundsV1} - V1 specific implementation\n * @see {@link withdrawFundsV2} - V2 specific implementation\n */\n// Unified withdraw function that works with both V1 and V2\nexport async function withdrawFunds(\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n params: {\n nodeWallet: PublicKey;\n funder: PublicKey;\n amount: number;\n mint?: string; // Required for V2, optional for V1\n fromTokenAccount?: PublicKey; // Only used for V2\n toTokenAccount?: PublicKey; // Only used for V2\n computeBudgetMicroLamports?: number;\n }\n): Promise<VersionedTransaction> {\n // Check if mint is provided to determine if this is V2\n if (params.mint) {\n return withdrawFundsV2(lavarageProgram as Program<LavarageUSDC>, {\n nodeWallet: params.nodeWallet,\n funder: params.funder,\n mint: params.mint,\n amount: params.amount,\n fromTokenAccount: params.fromTokenAccount,\n toTokenAccount: params.toTokenAccount,\n computeBudgetMicroLamports: params.computeBudgetMicroLamports,\n });\n } else {\n return withdrawFundsV1(lavarageProgram as Program<LavarageSOL>, {\n nodeWallet: params.nodeWallet,\n funder: params.funder,\n amount: params.amount,\n computeBudgetMicroLamports: params.computeBudgetMicroLamports,\n });\n }\n}\n\n/**\n * Creates a lending offer/pool on Lavarage\n * \n * @group Lending\n * @category Operations\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @param params - Offer creation parameters\n * @param params.tradingPool - The trading pool PDA\n * @param params.poolOwner - The pool owner's public key\n * @param params.mint - The collateral token mint address\n * @param params.quoteMint - The quote token mint address\n * @param params.interestRate - Interest rate for the pool\n * @param params.maxExposure - Maximum exposure limit\n * @param params.computeBudgetMicroLamports - Optional compute budget for priority fees\n * \n * @returns Transaction to create the offer\n * \n * @example\n * ```typescript\n * const tx = await createOffer(lavarageProgram, {\n * tradingPool: poolPDA,\n * poolOwner: lenderPublicKey,\n * mint: collateralMint.toString(),\n * quoteMint: usdcMint.toString(),\n * interestRate: 500, // 5%\n * maxExposure: 1000000\n * });\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n */\nexport async function createOffer(\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n params: {\n tradingPool: PublicKey;\n poolOwner: PublicKey;\n // the collateral mint\n mint: string;\n // the quote mint\n quoteMint: string;\n interestRate: number;\n maxExposure: number;\n computeBudgetMicroLamports?: number;\n maxBorrow?: number;\n openLtv?: number;\n feedId?: string;\n }\n): Promise<VersionedTransaction> {\n \n let nodeWalletAccount, nodeWalletSigner, createNodeWalletInstruction: TransactionInstruction[] =[], nodeWalletPubKey;\n\n if (params.quoteMint === \"So11111111111111111111111111111111111111112\") {\n const nodeWallets = await lavarageProgram.account.nodeWallet.all();\n nodeWalletAccount = nodeWallets.find((wallet) =>\n wallet.account.nodeOperator.equals(new PublicKey(params.poolOwner)),\n );\n } else {\n const nodeWalletPda = getNodeWalletPDA(\n new PublicKey(params.poolOwner),\n new PublicKey(params.quoteMint),\n lavarageProgram.programId\n );\n const nodeWalletAccountInfo = await lavarageProgram.provider.connection.getAccountInfo(nodeWalletPda);\n if (nodeWalletAccountInfo) {\n nodeWalletAccount = {\n publicKey: nodeWalletPda,\n };\n }\n }\n\n if (!nodeWalletAccount?.account) {\n // Determine if this is V2 based on mint (SOL = V1, others = V2)\n const isSOL = params.quoteMint === \"So11111111111111111111111111111111111111112\";\n\n const {\n instructions,\n nodeWallet,\n nodeWalletAccount: nodeWalletPublicKey,\n } = await createNodeWallet(lavarageProgram, {\n operator: new PublicKey(params.poolOwner.toBase58()),\n mint: isSOL ? undefined : params.quoteMint, // Only pass mint for V2 (non-SOL)\n liquidationLtv: isSOL ? undefined : 90, // Only pass liquidationLtv for V2 (non-SOL)\n });\n nodeWalletSigner = nodeWallet;\n createNodeWalletInstruction = instructions;\n nodeWalletPubKey = nodeWalletPublicKey;\n } else {\n nodeWalletPubKey = nodeWalletAccount.publicKey;\n }\n\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n // Both V1 and V2 lpOperatorCreateTradingPool require mint parameter\n const instruction = isSolProgram(lavarageProgram)\n ? await (lavarageProgram as Program<LavarageSOL>).methods\n .lpOperatorCreateTradingPool(params.interestRate)\n .accounts({\n tradingPool: params.tradingPool,\n operator: params.poolOwner,\n nodeWallet: nodeWalletPubKey,\n mint: new PublicKey(params.mint),\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n : await (lavarageProgram as Program<LavarageUSDC>).methods\n .lpOperatorCreateTradingPool({\n interestRate: params.interestRate,\n feedId: params.feedId,\n openLtv: params.openLtv,\n maxExposure: new BN(params.maxExposure),\n })\n .accounts({\n operator: params.poolOwner,\n nodeWallet: nodeWalletPubKey,\n mint: new PublicKey(params.mint),\n })\n .instruction();\n\n const updateMaxExposureInstruction = isSolProgram(lavarageProgram)\n ? await (lavarageProgram as Program<LavarageSOL>).methods\n .lpOperatorUpdateMaxExposure({\n maxExposure: new BN(params.maxExposure),\n interestRate: null,\n openLtv: null,\n feedId: null,\n })\n .accounts({\n tradingPool: params.tradingPool,\n nodeWallet: nodeWalletPubKey,\n operator: params.poolOwner,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n : undefined;\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n\n const transferInstruction = SystemProgram.transfer({\n fromPubkey: lavarageProgram.provider.publicKey!,\n toPubkey: new PublicKey(\"BMME51pfWdBfakTEMuQbNP4NG3wCY4Fo47dKatThhXGQ\"),\n lamports: 0.3 * LAMPORTS_PER_SOL\n });\n\n const updateMaxBorrowInstruction = isSolProgram(lavarageProgram) && params.maxBorrow && params.maxBorrow > 0\n ? await (lavarageProgram as Program<LavarageSOL>).methods\n .lpOperatorUpdateMaxBorrow(new BN(params.maxBorrow))\n .accountsStrict({\n tradingPool: params.tradingPool,\n nodeWallet: nodeWalletPubKey,\n operator: params.poolOwner,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n : undefined\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [\n ...createNodeWalletInstruction,\n instruction,\n updateMaxExposureInstruction,\n updateMaxBorrowInstruction,\n computeFeeIx,\n ].filter(Boolean) as TransactionInstruction[],\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n}\n\n/**\n * Updates the maximum exposure limit for a trading pool\n * \n * @group Lending\n * @category Operations\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @param params - Update parameters\n * @param params.tradingPool - The trading pool PDA\n * @param params.nodeWallet - The node wallet address\n * @param params.poolOwner - The pool owner's public key\n * @param params.maxExposure - New maximum exposure limit\n * @param params.computeBudgetMicroLamports - Optional compute budget for priority fees\n * \n * @returns Transaction to update max exposure\n * \n * @example\n * ```typescript\n * const tx = await updateMaxExposure(lavarageProgram, {\n * tradingPool: poolPDA,\n * nodeWallet: nodeWalletAddress,\n * poolOwner: lenderPublicKey,\n * maxExposure: 2000000 // New limit\n * });\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n */\nexport async function updateMaxExposure(\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n params: {\n tradingPool: PublicKey;\n nodeWallet: string;\n poolOwner: PublicKey;\n maxExposure: number;\n computeBudgetMicroLamports?: number;\n }\n): Promise<VersionedTransaction> {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const instruction = isSolProgram(lavarageProgram)\n ? await (lavarageProgram as Program<LavarageSOL>).methods\n .lpOperatorUpdateMaxExposure(new BN(params.maxExposure))\n .accountsStrict({\n tradingPool: params.tradingPool,\n nodeWallet: new PublicKey(params.nodeWallet),\n operator: params.poolOwner,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n : await (lavarageProgram as Program<LavarageUSDC>).methods\n .lpOperatorUpdateTradingPool({\n maxExposure: new BN(params.maxExposure),\n interestRate: null,\n openLtv: null,\n feedId: null,\n })\n .accounts({\n tradingPool: params.tradingPool,\n nodeWallet: new PublicKey(params.nodeWallet),\n operator: params.poolOwner,\n })\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [instruction, computeFeeIx],\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n}\n\n/**\n * Updates the interest rate for a trading pool\n * \n * @group Lending\n * @category Operations\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @param params - Update parameters\n * @param params.tradingPool - The trading pool PDA\n * @param params.nodeWallet - The node wallet address\n * @param params.poolOwner - The pool owner's public key\n * @param params.interestRate - New interest rate\n * @param params.computeBudgetMicroLamports - Optional compute budget for priority fees\n * \n * @returns Transaction to update interest rate\n * \n * @example\n * ```typescript\n * const tx = await updateInterestRate(lavarageProgram, {\n * tradingPool: poolPDA,\n * nodeWallet: nodeWalletAddress,\n * poolOwner: lenderPublicKey,\n * interestRate: 750 // 7.5%\n * });\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n */\nexport async function updateInterestRate(\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n params: {\n tradingPool: PublicKey;\n nodeWallet: string;\n poolOwner: PublicKey;\n interestRate: number;\n computeBudgetMicroLamports?: number;\n }\n): Promise<VersionedTransaction> {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const instruction = isSolProgram(lavarageProgram)\n ? await (lavarageProgram as Program<LavarageSOL>).methods\n .lpOperatorUpdateInterestRate(new BN(params.interestRate))\n .accountsStrict({\n tradingPool: params.tradingPool,\n nodeWallet: new PublicKey(params.nodeWallet),\n operator: params.poolOwner,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n : await (lavarageProgram as Program<LavarageUSDC>).methods\n .lpOperatorUpdateTradingPool({\n maxExposure: null,\n interestRate: new BN(params.interestRate),\n openLtv: null,\n feedId: null,\n })\n .accounts({\n tradingPool: params.tradingPool,\n nodeWallet: new PublicKey(params.nodeWallet),\n operator: params.poolOwner,\n })\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [instruction, computeFeeIx],\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n}\n\n/**\n * Updates multiple parameters of a trading pool in a single transaction\n * \n * @group Lending\n * @category Operations\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @param params - Update parameters\n * @param params.tradingPool - The trading pool PDA\n * @param params.poolOwner - The pool owner's public key\n * @param params.nodeWallet - The node wallet address\n * @param params.mint - The token mint address\n * @param params.interestRate - New interest rate\n * @param params.maxExposure - New maximum exposure limit\n * @param params.computeBudgetMicroLamports - Optional compute budget for priority fees\n * \n * @returns Transaction to update pool parameters\n * \n * @example\n * ```typescript\n * const tx = await updateOffer(lavarageProgram, {\n * tradingPool: poolPDA,\n * poolOwner: lenderPublicKey,\n * nodeWallet: nodeWalletAddress,\n * mint: collateralMint.toString(),\n * interestRate: 600, // 6%\n * maxExposure: 3000000\n * });\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n * \n * @see {@link updateInterestRate} - Update only interest rate\n * @see {@link updateMaxExposure} - Update only max exposure\n */\nexport async function updateOffer(\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n params: {\n tradingPool: PublicKey;\n poolOwner: PublicKey;\n nodeWallet: string;\n mint: string;\n interestRate: number;\n maxExposure: number;\n computeBudgetMicroLamports?: number;\n //includeCreatePool?: boolean; // Optional flag to include pool creation\n }\n): Promise<VersionedTransaction> {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const instructions = [];\n\n // // Optionally include pool creation instruction\n // if (params.includeCreatePool) {\n // const createPoolInstruction = await lavarageProgram.methods\n // .lpOperatorCreateTradingPool(new BN(params.interestRate))\n // .accounts({\n // tradingPool: params.tradingPool,\n // operator: params.poolOwner,\n // nodeWallet: new PublicKey(params.nodeWallet),\n // mint: new PublicKey(params.mint),\n // systemProgram: SystemProgram.programId,\n // })\n // .instruction();\n\n // instructions.push(createPoolInstruction);\n // }\n\n if (isSolProgram(lavarageProgram)) {\n instructions.push(\n await (lavarageProgram as Program<LavarageSOL>).methods\n .lpOperatorUpdateMaxExposure(new BN(params.maxExposure))\n .accountsStrict({\n tradingPool: params.tradingPool,\n nodeWallet: new PublicKey(params.nodeWallet),\n operator: params.poolOwner,\n systemProgram: SystemProgram.programId,\n })\n .instruction(),\n await (lavarageProgram as Program<LavarageSOL>).methods\n .lpOperatorUpdateInterestRate(new BN(params.interestRate))\n .accountsStrict({\n tradingPool: params.tradingPool,\n nodeWallet: new PublicKey(params.nodeWallet),\n operator: params.poolOwner,\n systemProgram: SystemProgram.programId,\n })\n .instruction()\n );\n } else {\n instructions.push(\n await (lavarageProgram as Program<LavarageUSDC>).methods\n .lpOperatorUpdateTradingPool({\n maxExposure: new BN(params.maxExposure),\n interestRate: new BN(params.interestRate),\n openLtv: null,\n feedId: null,\n })\n .accounts({\n tradingPool: params.tradingPool,\n nodeWallet: new PublicKey(params.nodeWallet),\n operator: params.poolOwner,\n })\n .instruction()\n );\n }\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n\n instructions.push(\n computeFeeIx\n );\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions,\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n}\n\n/**\n * Updates the maximum borrow limit for a trading pool\n *\n * @group Lending\n * @category Operations\n *\n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @param params - Update parameters\n * @param params.tradingPool - The trading pool PDA\n * @param params.nodeWallet - The node wallet address\n * @param params.oracle - The oracle public key authorized to update\n * @param params.maxBorrow - New maximum borrow limit\n * @param params.computeBudgetMicroLamports - Optional compute budget for priority fees\n *\n * @returns Transaction to update max borrow limit\n *\n * @example\n * ```typescript\n * const tx = await updateMaxBorrow(lavarageProgram, {\n * tradingPool: poolPDA,\n * nodeWallet: nodeWalletAddress,\n * oracle: oraclePublicKey,\n * maxBorrow: 5000000\n * });\n *\n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n */\nexport async function updateMaxBorrow(\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n params: {\n tradingPool: PublicKey;\n nodeWallet: string;\n oracle: PublicKey;\n maxBorrow: number;\n computeBudgetMicroLamports?: number;\n }\n): Promise<VersionedTransaction> {\n if (!isSolProgram(lavarageProgram)) {\n throw new Error(\"updateMaxBorrow is only supported for the SOL program\");\n }\n\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const instruction = await (lavarageProgram as Program<LavarageSOL>).methods\n .lpOperatorUpdateMaxBorrow(new BN(params.maxBorrow))\n .accountsStrict({\n tradingPool: params.tradingPool,\n nodeWallet: new PublicKey(params.nodeWallet),\n operator: params.oracle,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [instruction, computeFeeIx],\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n}\n\n/**\n * Updates the open LTV for a trading pool\n * \n * @group Lending\n * @category Operations\n * \n * @param lavarageProgram - The Lavarage program instance (V1 or V2)\n * @param params - Update parameters\n * @param params.tradingPool - The trading pool PDA\n * @param params.nodeWallet - The node wallet address\n * @param params.oracle - The oracle public key authorized to update\n * @param params.openLtv - New open LTV\n * @param params.computeBudgetMicroLamports - Optional compute budget for priority fees\n * \n * @returns Transaction to update open LTV\n * \n * @example\n * ```typescript\n * const tx = await updateOpenLtv(lavarageProgram, {\n * tradingPool: poolPDA,\n * nodeWallet: nodeWalletAddress,\n * oracle: oraclePublicKey,\n * openLtv: 7500\n * });\n * \n * await sendAndConfirmTransaction(connection, tx, [wallet]);\n * ```\n */\nexport async function updateOpenLtv(\n lavarageProgram: Program<LavarageUSDC>,\n params: {\n tradingPool: PublicKey;\n nodeWallet: string;\n oracle: PublicKey;\n openLtv: number;\n computeBudgetMicroLamports?: number;\n }\n): Promise<VersionedTransaction> {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const instruction = await lavarageProgram.methods\n .lpOperatorUpdateTradingPool({\n maxExposure: null,\n interestRate: null,\n openLtv: new BN(params.openLtv),\n feedId: null,\n })\n .accounts({\n tradingPool: params.tradingPool,\n nodeWallet: new PublicKey(params.nodeWallet),\n operator: params.oracle,\n })\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [instruction, computeFeeIx],\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n}\n\nexport async function addToWithdrawalAccessList(\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n params: {\n nodeWallet: PublicKey;\n authority: PublicKey;\n toPubkey: PublicKey;\n computeBudgetMicroLamports?: number;\n }\n): Promise<VersionedTransaction> {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const withdrawalAccessList = getWithdrawalAccessListPDA(lavarageProgram.programId);\n const instruction = await lavarageProgram.methods\n .addWithdrawalAccess(params.toPubkey)\n .accounts({\n withdrawalAccessList: withdrawalAccessList,\n nodeWallet: params.nodeWallet,\n authority: params.authority,\n })\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [instruction, computeFeeIx],\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n}\n\n\nexport async function removeFromWithdrawalAccessList(\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n params: {\n authority: PublicKey;\n nodeWallet: string; // This is a string in the IDL\n computeBudgetMicroLamports?: number;\n }\n): Promise<VersionedTransaction> {\n const { blockhash } =\n await lavarageProgram.provider.connection.getLatestBlockhash(\"finalized\");\n\n const withdrawalAccessList = getWithdrawalAccessListPDA(lavarageProgram.programId);\n\n const instruction = await lavarageProgram.methods\n .removeWithdrawalAccess(params.nodeWallet)\n .accounts({\n withdrawalAccessList: withdrawalAccessList,\n authority: params.authority,\n })\n .instruction();\n\n const computeFeeIx = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: params.computeBudgetMicroLamports ?? 150000,\n });\n\n const messageV0 = new TransactionMessage({\n payerKey: lavarageProgram.provider.publicKey!,\n recentBlockhash: blockhash,\n instructions: [instruction, computeFeeIx],\n }).compileToV0Message();\n\n return new VersionedTransaction(messageV0);\n}\n\n\nexport async function getWithdrawalAccessList(\n lavarageProgram: Program<LavarageSOL> | Program<LavarageUSDC>,\n params: {\n nodeWallet: string;\n }\n): Promise<PublicKey | undefined> {\n const withdrawalAccessList = getWithdrawalAccessListPDA(lavarageProgram.programId);\n const withdrawalAccessListAccount = await lavarageProgram.account.withdrawalAccessList.fetch(withdrawalAccessList);\n return withdrawalAccessListAccount.accessEntries.find((entry) => entry.fromPubkey.toString() === params.nodeWallet)?.toPubkey;\n}","/**\n * Program IDL in camelCase format in order to be used in JS/TS.\n *\n * Note that this is only a type helper and is not the actual IDL. The original\n * IDL can be found at `target/idl/lavarage.json`.\n */\nexport type Lavarage = {\n \"address\": \"1avaAUcjccXCjSZzwUvB2gS3DzkkieV2Mw8CjdN65uu\",\n \"metadata\": {\n \"name\": \"lavarage\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"Created with Anchor\"\n },\n \"instructions\": [\n {\n \"name\": \"addWithdrawalAccess\",\n \"discriminator\": [\n 45,\n 247,\n 214,\n 153,\n 224,\n 115,\n 136,\n 178\n ],\n \"accounts\": [\n {\n \"name\": \"withdrawalAccessList\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 119,\n 105,\n 116,\n 104,\n 100,\n 114,\n 97,\n 119,\n 97,\n 108,\n 95,\n 97,\n 99,\n 99,\n 101,\n 115,\n 115,\n 95,\n 108,\n 105,\n 115,\n 116\n ]\n }\n ]\n }\n },\n {\n \"name\": \"nodeWallet\"\n },\n {\n \"name\": \"authority\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"toPubkey\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"delegateClosePosition\",\n \"discriminator\": [\n 100,\n 249,\n 236,\n 96,\n 249,\n 195,\n 17,\n 157\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"writable\": true\n },\n {\n \"name\": \"delegateOperator\",\n \"signer\": true\n },\n {\n \"name\": \"account\",\n \"writable\": true,\n \"relations\": [\n \"delegate\"\n ]\n },\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"nodeWallet\",\n \"writable\": true\n },\n {\n \"name\": \"tokenProgram\"\n },\n {\n \"name\": \"nodeWalletTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.node_wallet\",\n \"account\": \"pool\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"delegateTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"delegateOperator\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"feeTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 117,\n 98,\n 107,\n 101,\n 121,\n 33,\n 32,\n 40,\n 34,\n 54,\n 74,\n 102,\n 84,\n 111,\n 98,\n 68,\n 118,\n 119,\n 117,\n 119,\n 90,\n 120,\n 90,\n 80,\n 54,\n 70,\n 82,\n 53,\n 74,\n 80,\n 109,\n 106,\n 100,\n 118,\n 81,\n 52,\n 104,\n 52,\n 77,\n 111,\n 118,\n 107,\n 69,\n 86,\n 72,\n 50,\n 70,\n 80,\n 115,\n 77,\n 83,\n 114,\n 70,\n 34,\n 41\n ]\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"profitTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"account.trader\",\n \"account\": \"position\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"qtMint\"\n }\n ],\n \"args\": [\n {\n \"name\": \"closingPositionSize\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"delegateExecuteTp\",\n \"discriminator\": [\n 207,\n 251,\n 148,\n 38,\n 214,\n 153,\n 54,\n 242\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"writable\": true\n },\n {\n \"name\": \"delegateOperator\",\n \"signer\": true\n },\n {\n \"name\": \"account\",\n \"writable\": true,\n \"relations\": [\n \"delegate\"\n ]\n },\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"tokenProgram\"\n },\n {\n \"name\": \"positionTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"account\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.collateral_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"delegateTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"delegateOperator\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.collateral_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"mint\"\n }\n ],\n \"args\": [\n {\n \"name\": \"seed\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"initWithdrawalAccessList\",\n \"discriminator\": [\n 118,\n 110,\n 194,\n 104,\n 220,\n 145,\n 69,\n 31\n ],\n \"accounts\": [\n {\n \"name\": \"withdrawalAccessList\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 119,\n 105,\n 116,\n 104,\n 100,\n 114,\n 97,\n 119,\n 97,\n 108,\n 95,\n 97,\n 99,\n 99,\n 101,\n 115,\n 115,\n 95,\n 108,\n 105,\n 115,\n 116\n ]\n }\n ]\n }\n },\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"lpCollectInterest\",\n \"discriminator\": [\n 181,\n 55,\n 21,\n 23,\n 53,\n 171,\n 73,\n 115\n ],\n \"accounts\": [\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"positionAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tradingPool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"randomAccountAsId\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true\n },\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"fromTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"positionAccount\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"toTokenAccount\",\n \"writable\": true\n },\n {\n \"name\": \"nodeWallet\",\n \"writable\": true\n },\n {\n \"name\": \"tokenProgram\"\n },\n {\n \"name\": \"randomAccountAsId\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"oracle\",\n \"signer\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"oracleQueue\",\n \"address\": \"A43DyUGA7s8eXPxqEjJY6EBu1KKbNgfxF8h17VAHn13w\"\n },\n {\n \"name\": \"baseOracleQuote\"\n },\n {\n \"name\": \"clockSysvar\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"slotHashesSysvar\",\n \"address\": \"SysvarS1otHashes111111111111111111111111111\"\n },\n {\n \"name\": \"instructionsSysvar\",\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"lpLiquidate\",\n \"discriminator\": [\n 36,\n 244,\n 70,\n 20,\n 135,\n 159,\n 86,\n 149\n ],\n \"accounts\": [\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"positionAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tradingPool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"randomAccountAsId\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true\n },\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"fromTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"positionAccount\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"toTokenAccount\",\n \"writable\": true\n },\n {\n \"name\": \"nodeWallet\",\n \"writable\": true\n },\n {\n \"name\": \"tokenProgram\"\n },\n {\n \"name\": \"randomAccountAsId\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"operator\",\n \"signer\": true\n },\n {\n \"name\": \"oracle\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"positionSize\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lpOperatorCreateNodeWallet\",\n \"discriminator\": [\n 193,\n 83,\n 139,\n 125,\n 229,\n 111,\n 150,\n 164\n ],\n \"accounts\": [\n {\n \"name\": \"nodeWallet\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 110,\n 111,\n 100,\n 101,\n 95,\n 119,\n 97,\n 108,\n 108,\n 101,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"operator\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ]\n }\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"mint\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidationLtv\",\n \"type\": \"u16\"\n }\n ]\n },\n {\n \"name\": \"lpOperatorCreateTradingPool\",\n \"discriminator\": [\n 182,\n 99,\n 232,\n 188,\n 202,\n 38,\n 71,\n 211\n ],\n \"accounts\": [\n {\n \"name\": \"tradingPool\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 116,\n 114,\n 97,\n 100,\n 105,\n 110,\n 103,\n 95,\n 112,\n 111,\n 111,\n 108\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"nodeWallet\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ]\n }\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"nodeWallet\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"createTradingPoolArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"lpOperatorUpdateInterestRate\",\n \"discriminator\": [\n 25,\n 217,\n 30,\n 158,\n 210,\n 240,\n 173,\n 10\n ],\n \"accounts\": [\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"nodeWallet\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"lpOperatorUpdateMaxExposure\",\n \"discriminator\": [\n 43,\n 226,\n 68,\n 201,\n 78,\n 18,\n 155,\n 107\n ],\n \"accounts\": [\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"nodeWallet\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"lpOperatorUpdateOpenLtv\",\n \"discriminator\": [\n 164,\n 5,\n 214,\n 18,\n 130,\n 13,\n 165,\n 21\n ],\n \"accounts\": [\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"nodeWallet\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"openLtv\",\n \"type\": \"u16\"\n }\n ]\n },\n {\n \"name\": \"lpOperatorUpdateTradingPool\",\n \"discriminator\": [\n 99,\n 179,\n 6,\n 181,\n 30,\n 148,\n 30,\n 204\n ],\n \"accounts\": [\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"nodeWallet\"\n },\n {\n \"name\": \"operator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"updatePoolArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"lpOperatorWithdrawFromNodeWallet\",\n \"discriminator\": [\n 162,\n 244,\n 237,\n 100,\n 96,\n 130,\n 60,\n 117\n ],\n \"accounts\": [\n {\n \"name\": \"nodeWallet\",\n \"writable\": true\n },\n {\n \"name\": \"funder\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"fromTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"nodeWallet\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"toTokenAccount\",\n \"writable\": true\n },\n {\n \"name\": \"tokenProgram\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"withdrawalAccessList\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"migratePool\",\n \"discriminator\": [\n 55,\n 170,\n 171,\n 123,\n 210,\n 69,\n 39,\n 172\n ],\n \"accounts\": [\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"args\",\n \"type\": {\n \"defined\": {\n \"name\": \"migratePoolArgs\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"reallocPool\",\n \"discriminator\": [\n 114,\n 128,\n 37,\n 167,\n 71,\n 227,\n 40,\n 178\n ],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"removeWithdrawalAccess\",\n \"discriminator\": [\n 218,\n 186,\n 7,\n 130,\n 180,\n 40,\n 111,\n 122\n ],\n \"accounts\": [\n {\n \"name\": \"withdrawalAccessList\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 119,\n 105,\n 116,\n 104,\n 100,\n 114,\n 97,\n 119,\n 97,\n 108,\n 95,\n 97,\n 99,\n 99,\n 101,\n 115,\n 115,\n 95,\n 108,\n 105,\n 115,\n 116\n ]\n }\n ]\n }\n },\n {\n \"name\": \"authority\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"fromPubkey\",\n \"type\": \"string\"\n }\n ]\n },\n {\n \"name\": \"rescueStuckTokens\",\n \"discriminator\": [\n 104,\n 17,\n 134,\n 60,\n 192,\n 138,\n 94,\n 244\n ],\n \"accounts\": [\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"nodeWallet\",\n \"writable\": true\n },\n {\n \"name\": \"positionTokenAccount\",\n \"writable\": true\n },\n {\n \"name\": \"traderTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"position.trader\",\n \"account\": \"position\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"positionMint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"positionMint\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"tokenProgram\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"tradingCloseBorrowCollateral\",\n \"discriminator\": [\n 160,\n 104,\n 113,\n 179,\n 42,\n 80,\n 8,\n 16\n ],\n \"accounts\": [\n {\n \"name\": \"positionAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tradingPool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"randomAccountAsId\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"instructions\",\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"fromTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"positionAccount\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"toTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tokenProgram\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"tokenProgram\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"randomAccountAsId\"\n },\n {\n \"name\": \"associatedTokenProgram\",\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"tradingCloseRepaySol\",\n \"discriminator\": [\n 74,\n 90,\n 5,\n 111,\n 35,\n 171,\n 135,\n 56\n ],\n \"accounts\": [\n {\n \"name\": \"positionAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tradingPool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"randomAccountAsId\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"nodeWallet\",\n \"writable\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"randomAccountAsId\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"fromTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"toTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"nodeWallet\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"feeTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 117,\n 98,\n 107,\n 101,\n 121,\n 33,\n 32,\n 40,\n 34,\n 54,\n 74,\n 102,\n 84,\n 111,\n 98,\n 68,\n 118,\n 119,\n 117,\n 119,\n 90,\n 120,\n 90,\n 80,\n 54,\n 70,\n 82,\n 53,\n 74,\n 80,\n 109,\n 106,\n 100,\n 118,\n 81,\n 52,\n 104,\n 52,\n 77,\n 111,\n 118,\n 107,\n 69,\n 86,\n 72,\n 50,\n 70,\n 80,\n 115,\n 77,\n 83,\n 114,\n 70,\n 34,\n 41\n ]\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"tokenProgram\"\n }\n ],\n \"args\": [\n {\n \"name\": \"closingPositionSize\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"closeType\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"discountBps\",\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"referralBps\",\n \"type\": {\n \"option\": \"u64\"\n }\n }\n ]\n },\n {\n \"name\": \"tradingCreateTpDelegate\",\n \"discriminator\": [\n 174,\n 200,\n 59,\n 127,\n 100,\n 216,\n 183,\n 8\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 100,\n 101,\n 108,\n 101,\n 103,\n 97,\n 116,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"delegatedAccount\"\n }\n ]\n }\n },\n {\n \"name\": \"originalOperator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"delegatedAccount\"\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"price\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"lowerThreshold\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"delegateOperator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"partialPercentage\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"tradingDataAccruedInterest\",\n \"discriminator\": [\n 227,\n 39,\n 217,\n 0,\n 88,\n 3,\n 25,\n 115\n ],\n \"accounts\": [\n {\n \"name\": \"positionAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tradingPool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"randomAccountAsId\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"nodeWallet\",\n \"writable\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"randomAccountAsId\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"fromTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"toTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"nodeWallet\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"feeTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 117,\n 98,\n 107,\n 101,\n 121,\n 33,\n 32,\n 40,\n 34,\n 54,\n 74,\n 102,\n 84,\n 111,\n 98,\n 68,\n 118,\n 119,\n 117,\n 119,\n 90,\n 120,\n 90,\n 80,\n 54,\n 70,\n 82,\n 53,\n 74,\n 80,\n 109,\n 106,\n 100,\n 118,\n 81,\n 52,\n 104,\n 52,\n 77,\n 111,\n 118,\n 107,\n 69,\n 86,\n 72,\n 50,\n 70,\n 80,\n 115,\n 77,\n 83,\n 114,\n 70,\n 34,\n 41\n ]\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"tokenProgram\"\n }\n ],\n \"args\": [],\n \"returns\": \"u64\"\n },\n {\n \"name\": \"tradingManagementMergePositions\",\n \"discriminator\": [\n 220,\n 145,\n 59,\n 236,\n 80,\n 58,\n 112,\n 127\n ],\n \"accounts\": [\n {\n \"name\": \"positionOne\",\n \"writable\": true\n },\n {\n \"name\": \"positionTwo\",\n \"writable\": true\n },\n {\n \"name\": \"mergedPosition\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_one.trader\",\n \"account\": \"position\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"position_one.pool\",\n \"account\": \"position\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"seed\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"tokenProgram\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"positionOneTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"positionOne\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"positionTwoTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"positionTwo\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"mergedPositionTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"mergedPosition\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"seed\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"tradingManagementSplitPosition\",\n \"discriminator\": [\n 230,\n 180,\n 252,\n 200,\n 8,\n 246,\n 131,\n 54\n ],\n \"accounts\": [\n {\n \"name\": \"originalPosition\",\n \"writable\": true\n },\n {\n \"name\": \"newPositionOne\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"original_position.pool\",\n \"account\": \"position\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"seed1\"\n }\n ]\n }\n },\n {\n \"name\": \"newPositionTwo\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"original_position.pool\",\n \"account\": \"position\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"seed2\"\n }\n ]\n }\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"originalPositionTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"originalPosition\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"newPositionTokenAccountOne\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"newPositionOne\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"newPositionTokenAccountTwo\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"newPositionTwo\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"tokenProgram\"\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"splitRatioBps\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"seed1\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"seed2\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"tradingOpenAddCollateral\",\n \"discriminator\": [\n 21,\n 160,\n 90,\n 163,\n 189,\n 122,\n 164,\n 50\n ],\n \"accounts\": [\n {\n \"name\": \"positionAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tradingPool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"randomAccountAsId\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"toTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"positionAccount\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tokenProgram\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"randomAccountAsId\"\n },\n {\n \"name\": \"oracleQueue\",\n \"address\": \"A43DyUGA7s8eXPxqEjJY6EBu1KKbNgfxF8h17VAHn13w\"\n },\n {\n \"name\": \"baseOracleQuote\"\n },\n {\n \"name\": \"quoteOracleQuote\"\n },\n {\n \"name\": \"clockSysvar\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"slotHashesSysvar\",\n \"address\": \"SysvarS1otHashes111111111111111111111111111\"\n },\n {\n \"name\": \"instructionsSysvar\",\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n },\n {\n \"name\": \"tokenProgram\"\n }\n ],\n \"args\": [\n {\n \"name\": \"maxInterestRate\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"tradingOpenBorrow\",\n \"discriminator\": [\n 53,\n 88,\n 1,\n 144,\n 58,\n 65,\n 182,\n 60\n ],\n \"accounts\": [\n {\n \"name\": \"positionAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tradingPool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"randomAccountAsId\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"nodeWallet\",\n \"writable\": true\n },\n {\n \"name\": \"instructions\",\n \"address\": \"Sysvar1nstructions1111111111111111111111111\"\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"randomAccountAsId\"\n },\n {\n \"name\": \"feeTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"feeRecipient\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tokenProgram\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"quoteMint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"fromTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"nodeWallet\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tokenProgram\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"quoteMint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"toTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tokenProgram\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"quoteMint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"tokenProgram\"\n },\n {\n \"name\": \"positionTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"positionAccount\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateralTokenProgram\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateralMint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"collateralTokenProgram\"\n },\n {\n \"name\": \"associatedTokenProgram\",\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"collateralMint\"\n },\n {\n \"name\": \"quoteMint\"\n },\n {\n \"name\": \"feeRecipient\"\n }\n ],\n \"args\": [\n {\n \"name\": \"positionSize\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"userPays\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"discountBps\",\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"referralBps\",\n \"type\": {\n \"option\": \"u64\"\n }\n }\n ]\n },\n {\n \"name\": \"tradingPartialRepaySol\",\n \"discriminator\": [\n 98,\n 78,\n 144,\n 144,\n 103,\n 34,\n 40,\n 162\n ],\n \"accounts\": [\n {\n \"name\": \"positionAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"tradingPool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"randomAccountAsId\"\n }\n ]\n }\n },\n {\n \"name\": \"trader\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"tradingPool\",\n \"writable\": true\n },\n {\n \"name\": \"nodeWallet\",\n \"writable\": true\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"clock\",\n \"address\": \"SysvarC1ock11111111111111111111111111111111\"\n },\n {\n \"name\": \"randomAccountAsId\"\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"fromTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"trader\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"toTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"nodeWallet\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"feeTokenAccount\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 117,\n 98,\n 107,\n 101,\n 121,\n 33,\n 32,\n 40,\n 34,\n 54,\n 74,\n 102,\n 84,\n 111,\n 98,\n 68,\n 118,\n 119,\n 117,\n 119,\n 90,\n 120,\n 90,\n 80,\n 54,\n 70,\n 82,\n 53,\n 74,\n 80,\n 109,\n 106,\n 100,\n 118,\n 81,\n 52,\n 104,\n 52,\n 77,\n 111,\n 118,\n 107,\n 69,\n 86,\n 72,\n 50,\n 70,\n 80,\n 115,\n 77,\n 83,\n 114,\n 70,\n 34,\n 41\n ]\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"trading_pool.qt_type\",\n \"account\": \"pool\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"tokenProgram\"\n }\n ],\n \"args\": [\n {\n \"name\": \"percentage\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"tradingRemoveTpDelegate\",\n \"discriminator\": [\n 88,\n 18,\n 149,\n 143,\n 124,\n 43,\n 68,\n 178\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 100,\n 101,\n 108,\n 101,\n 103,\n 97,\n 116,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"delegatedAccount\"\n }\n ]\n }\n },\n {\n \"name\": \"originalOperator\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\n \"delegate\"\n ]\n },\n {\n \"name\": \"delegatedAccount\"\n },\n {\n \"name\": \"systemProgram\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n }\n ],\n \"accounts\": [\n {\n \"name\": \"delegate\",\n \"discriminator\": [\n 92,\n 145,\n 166,\n 111,\n 11,\n 38,\n 38,\n 247\n ]\n },\n {\n \"name\": \"nodeWallet\",\n \"discriminator\": [\n 48,\n 117,\n 214,\n 115,\n 125,\n 23,\n 94,\n 246\n ]\n },\n {\n \"name\": \"pool\",\n \"discriminator\": [\n 241,\n 154,\n 109,\n 4,\n 17,\n 177,\n 109,\n 188\n ]\n },\n {\n \"name\": \"position\",\n \"discriminator\": [\n 170,\n 188,\n 143,\n 228,\n 122,\n 64,\n 247,\n 208\n ]\n },\n {\n \"name\": \"withdrawalAccessList\",\n \"discriminator\": [\n 29,\n 144,\n 191,\n 76,\n 108,\n 26,\n 73,\n 234\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"positionCloseEvent\",\n \"discriminator\": [\n 85,\n 5,\n 166,\n 100,\n 218,\n 87,\n 230,\n 129\n ]\n },\n {\n \"name\": \"positionOpenEvent\",\n \"discriminator\": [\n 84,\n 127,\n 249,\n 160,\n 99,\n 95,\n 120,\n 120\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"addressMismatch\",\n \"msg\": \"Address Mismatch\"\n },\n {\n \"code\": 6001,\n \"name\": \"programMismatch\",\n \"msg\": \"Program Mismatch\"\n },\n {\n \"code\": 6002,\n \"name\": \"missingRepay\",\n \"msg\": \"Missing Repay\"\n },\n {\n \"code\": 6003,\n \"name\": \"incorrectOwner\",\n \"msg\": \"Incorrect Owner\"\n },\n {\n \"code\": 6004,\n \"name\": \"incorrectProgramAuthority\",\n \"msg\": \"Incorrect Program Authority\"\n },\n {\n \"code\": 6005,\n \"name\": \"cannotBorrowBeforeRepay\",\n \"msg\": \"Cannot Borrow Before Repay\"\n },\n {\n \"code\": 6006,\n \"name\": \"unknownInstruction\",\n \"msg\": \"Unknown Instruction\"\n },\n {\n \"code\": 6007,\n \"name\": \"expectedCollateralNotEnough\",\n \"msg\": \"Expected collateral not enough\"\n },\n {\n \"code\": 6008,\n \"name\": \"forTesting\",\n \"msg\": \"testError\"\n },\n {\n \"code\": 6009,\n \"name\": \"blacklistedAccount\",\n \"msg\": \"Account is blacklisted\"\n },\n {\n \"code\": 6010,\n \"name\": \"accessEntryAlreadyExists\",\n \"msg\": \"Access entry already exists\"\n },\n {\n \"code\": 6011,\n \"name\": \"accessEntryNotFound\",\n \"msg\": \"Access entry not found\"\n },\n {\n \"code\": 6012,\n \"name\": \"unauthorizedWithdrawal\",\n \"msg\": \"Unauthorized Withdrawal\"\n },\n {\n \"code\": 6013,\n \"name\": \"accountAlreadyInitialized\",\n \"msg\": \"Account already initialized\"\n },\n {\n \"code\": 6014,\n \"name\": \"invalidSignature\",\n \"msg\": \"The provided signature is invalid.\"\n },\n {\n \"code\": 6015,\n \"name\": \"invalidOracle\",\n \"msg\": \"The provided oracle is invalid.\"\n },\n {\n \"code\": 6016,\n \"name\": \"invalidSplitRatio\",\n \"msg\": \"Invalid split ratio. Must be between 1 and 99\"\n },\n {\n \"code\": 6017,\n \"name\": \"positionsNotMergeable\",\n \"msg\": \"Positions cannot be merged - must have same pool, trader, and interest rate\"\n },\n {\n \"code\": 6018,\n \"name\": \"onlyDelegateOperator\",\n \"msg\": \"Only delegate operator can execute TP\"\n },\n {\n \"code\": 6019,\n \"name\": \"invalidDelegateType\",\n \"msg\": \"Invalid delegate type\"\n },\n {\n \"code\": 6020,\n \"name\": \"missingRequiredPriceFeed\",\n \"msg\": \"Missing required price feed\"\n },\n {\n \"code\": 6021,\n \"name\": \"invalidPrice\",\n \"msg\": \"Price must be greater than 0\"\n },\n {\n \"code\": 6022,\n \"name\": \"mathOverflow\",\n \"msg\": \"Arithmetic operation overflow\"\n }\n ],\n \"types\": [\n {\n \"name\": \"createTradingPoolArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"interestRate\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"feedId\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"maxExposure\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"openLtv\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"delegate\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"delegateType\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"field1\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"field2\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"field3\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"field4\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"field5\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"originalOperator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"delegateOperator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"account\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"migratePoolArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"feedId\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"openLtv\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"nodeWallet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"totalFunds\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"totalBorrowed\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"maintenanceLtv\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"liquidationLtv\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"nodeOperator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"interestRate\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"collateralType\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"maxBorrow\",\n \"docs\": [\n \"Previously max_borrow. Can be repurposed again.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"nodeWallet\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"maxExposure\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"currentExposure\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"qtType\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"feedId\",\n \"docs\": [\n \"Switchboard Oracle Quote Feed ID\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"openLtv\",\n \"docs\": [\n \"The max loan-to-value (LTV) used to determine how much SOL can be borrowed per token (denoted in basis points).\"\n ],\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"position\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"closeStatusRecallTimestamp\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"userPaid\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"collateralAmount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"trader\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"seed\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"closeTimestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"closingPositionSize\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"interestRate\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"lastInterestCollect\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"positionCloseEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"userPaid\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"collateralAmount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"openTimestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"trader\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"closeType\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"closeTimestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"closingPositionSize\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"positionOpenEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"userPaid\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"collateralAmount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"openTimestamp\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"trader\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"updatePoolArgs\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"openLtv\",\n \"type\": {\n \"option\": \"u16\"\n }\n },\n {\n \"name\": \"interestRate\",\n \"type\": {\n \"option\": \"u8\"\n }\n },\n {\n \"name\": \"maxExposure\",\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"feedId\",\n \"type\": {\n \"option\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"withdrawalAccessEntry\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"fromPubkey\",\n \"type\": \"string\"\n },\n {\n \"name\": \"toPubkey\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"withdrawalAccessList\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"accessEntries\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"withdrawalAccessEntry\"\n }\n }\n }\n }\n ]\n }\n }\n ],\n \"constants\": [\n {\n \"name\": \"maxBasisPoints\",\n \"type\": \"u16\",\n \"value\": \"10000\"\n },\n {\n \"name\": \"oracleMaxAge\",\n \"type\": \"u16\",\n \"value\": \"100\"\n },\n {\n \"name\": \"oraclePubKey\",\n \"type\": \"pubkey\",\n \"value\": \"joPUhu4So61QnYoGKy8yPDQsrq5xemKtyByHKwqQ7r4\"\n }\n ]\n};\n"],"mappings":"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","names":["import_anchor","import_web3","import_spl_token","import_on_demand","feed","import_anchor","import_web3","import_spl_token","computeFeeIx","bs58","_a","allInstructions","messageV0","tx","createAssociatedTokenAccountInstruction","tx2"]}
|