{"version":3,"file":"getHxroCollateralForSettlement.cjs","sources":["../../../../../src/plugins/hxroPrintTradeProviderModule/operations/getHxroCollateralForSettlement.ts"],"sourcesContent":["import { VersionedTransaction, TransactionMessage } from '@solana/web3.js';\n\nimport { Convergence } from '../../../Convergence';\nimport {\n  Operation,\n  OperationHandler,\n  OperationScope,\n  useOperation,\n} from '../../../types';\nimport { lockHxroCollateralBuilder } from './lockHxroCollateral';\nimport {\n  PrintTradeResponse,\n  PrintTradeRfq,\n  getAuthoritySide,\n} from '@/plugins/rfqModule';\n\nconst Key = 'GetRequiredHxroCollateralForSettlementOperation' as const;\n\n/**\n * @group Operations\n * @category Constructors\n */\nexport const getRequiredHxroCollateralForSettlementOperation =\n  useOperation<GetRequiredHxroCollateralForSettlementOperation>(Key);\n\n/**\n * @group Operations\n * @category Types\n */\nexport type GetRequiredHxroCollateralForSettlementOperation = Operation<\n  typeof Key,\n  GetRequiredHxroCollateralForSettlementInput,\n  GetRequiredHxroCollateralForSettlementOutput\n>;\n\n/**\n * @group Operations\n * @category Inputs\n */\nexport type GetRequiredHxroCollateralForSettlementInput = {\n  /** Rfq Account. */\n  rfq: PrintTradeRfq;\n  /** The response to prepare settlement for. */\n  response: PrintTradeResponse;\n};\n\n/**\n * @group Operations\n * @category Outputs\n */\nexport type GetRequiredHxroCollateralForSettlementOutput = {\n  remainingCollateral: number;\n};\n\n/**\n * @group Operations\n * @category Handlers\n */\nexport const getRequiredHxroCollateralForSettlementOperationHandler: OperationHandler<GetRequiredHxroCollateralForSettlementOperation> =\n  {\n    handle: async (\n      operation: GetRequiredHxroCollateralForSettlementOperation,\n      convergence: Convergence,\n      scope: OperationScope\n    ): Promise<GetRequiredHxroCollateralForSettlementOutput> => {\n      const payer = convergence.identity().publicKey;\n      const { rfq: rfqModel, response: responseModel } = operation.input;\n      const { printTrade } = operation.input.rfq;\n\n      const caller = convergence.identity();\n      const side = getAuthoritySide(caller.publicKey, rfqModel, responseModel);\n      if (!side) {\n        throw new Error('caller is not authorized to prepare settlement');\n      }\n      const hxroContext = await printTrade.getHxroContextHelper(\n        convergence,\n        operation.input.response,\n        side\n      );\n      const txBuilder = await lockHxroCollateralBuilder(\n        convergence,\n        {\n          hxroContext,\n          rfq: operation.input.rfq,\n          response: operation.input.response,\n          side,\n        },\n        scope\n      );\n\n      const remainingCollateral = 0;\n\n      const lastValidBlockHeight = await convergence.rpc().getLatestBlockhash();\n      const ixs = txBuilder.getInstructions();\n      if (!ixs[1]) {\n        return { remainingCollateral: 0 };\n      }\n      const txMessage = new TransactionMessage({\n        payerKey: payer,\n        recentBlockhash: lastValidBlockHeight.blockhash,\n        instructions: [ixs[1]],\n      }).compileToV0Message();\n\n      const tx = new VersionedTransaction(txMessage);\n      const simulateTxResult = await convergence.connection.simulateTransaction(\n        tx,\n        {\n          sigVerify: false,\n        }\n      );\n\n      if (simulateTxResult.value.err) {\n        const { logs } = simulateTxResult.value;\n        if (!logs) {\n          return { remainingCollateral: 0 };\n        }\n        const logToParse = logs.find((l) => l.includes('Total Variance'));\n        if (!logToParse || logToParse === '') {\n          return { remainingCollateral: 0 };\n        }\n        const logsSplit = logToParse.split(',');\n\n        let totalVariance = Number(logsSplit[0].split(':')[2]);\n        let openOrdersVariance = Number(logsSplit[1].split(':')[1]);\n        let positionalValue = Number(logsSplit[2].split(':')[1]);\n\n        if (totalVariance < 0 || isNaN(totalVariance)) {\n          totalVariance = 0;\n        }\n        if (openOrdersVariance < 0 || isNaN(openOrdersVariance)) {\n          openOrdersVariance = 0;\n        }\n        if (positionalValue < 0 || isNaN(positionalValue)) {\n          positionalValue = 0;\n        }\n\n        const remainingCollateralReq =\n          (Math.sqrt(positionalValue) + Math.sqrt(openOrdersVariance)) * 1.5;\n        return { remainingCollateral: remainingCollateralReq };\n      }\n      scope.throwIfCanceled();\n      return { remainingCollateral };\n    },\n  };\n"],"names":["Key","getRequiredHxroCollateralForSettlementOperation","useOperation","getRequiredHxroCollateralForSettlementOperationHandler","handle","_handle","_asyncToGenerator","_regeneratorRuntime","mark","_callee","operation","convergence","scope","payer","_operation$input","rfqModel","responseModel","printTrade","caller","side","hxroContext","txBuilder","remainingCollateral","lastValidBlockHeight","ixs","txMessage","tx","simulateTxResult","logs","logToParse","logsSplit","openOrdersVariance","positionalValue","remainingCollateralReq","wrap","_callee$","_context","prev","next","identity","publicKey","input","rfq","response","getAuthoritySide","Error","getHxroContextHelper","sent","lockHxroCollateralBuilder","rpc","getLatestBlockhash","getInstructions","abrupt","TransactionMessage","payerKey","recentBlockhash","blockhash","instructions","compileToV0Message","VersionedTransaction","connection","simulateTransaction","sigVerify","value","err","find","l","includes","split","totalVariance","Number","isNaN","Math","sqrt","throwIfCanceled","stop","_x","_x2","_x3","apply","arguments"],"mappings":"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"}