{"version":3,"file":"lockHxroCollateral.cjs","sources":["../../../../../src/plugins/hxroPrintTradeProviderModule/operations/lockHxroCollateral.ts"],"sourcesContent":["import BN from 'bn.js';\nimport BigNumber from 'bignumber.js';\nimport dexterity from '@hxronetwork/dexterity-ts';\nimport { getHxroProgramFromIDL } from '../program';\nimport type { HxroContextHelper, HxroLeg } from '../printTrade';\nimport { HXRO_LEG_DECIMALS } from '../constants';\nimport { Convergence } from '@/Convergence';\nimport { TransactionBuilder, TransactionBuilderOptions } from '@/utils';\nimport { PublicKey } from '@/types';\nimport {\n  AuthoritySide,\n  PrintTradeResponse,\n  PrintTradeRfq,\n} from '@/plugins/rfqModule';\nimport { isLocalEnv } from '@/utils/helpers';\n\nexport type LockHxroCollateralParams = {\n  rfq: PrintTradeRfq;\n  response: PrintTradeResponse;\n  side: AuthoritySide;\n  hxroContext: HxroContextHelper;\n};\n\nexport const lockHxroCollateralBuilder = async (\n  cvg: Convergence,\n  params: LockHxroCollateralParams,\n  options: TransactionBuilderOptions = {}\n): Promise<TransactionBuilder<{}>> => {\n  const { rfq, response, side, hxroContext } = params;\n  const { payer = cvg.rpc().getDefaultFeePayer() } = options;\n  const { mpg, manifest } = hxroContext;\n  const userTrg = await hxroContext.getTrgDataBySide(side).get();\n\n  const [covarianceAddress] = PublicKey.findProgramAddressSync(\n    [Buffer.from('s'), mpg.pubkey.toBuffer()],\n    mpg.riskEngineProgramId\n  );\n  const [correlationAddress] = PublicKey.findProgramAddressSync(\n    [Buffer.from('r'), mpg.pubkey.toBuffer()],\n    mpg.riskEngineProgramId\n  );\n  const [markPricesAddress] = PublicKey.findProgramAddressSync(\n    [Buffer.from('mark_prices'), mpg.pubkey.toBuffer()],\n    mpg.riskEngineProgramId\n  );\n\n  const settlementResult = cvg.rfqs().getSettlementResult({ rfq, response });\n\n  const products = [];\n  for (let i = 0; i < 6; i++) {\n    if (i < rfq.legs.length) {\n      const legResult = settlementResult.legs[i];\n      let amount = new BigNumber(legResult.amount).times(\n        new BigNumber(10).pow(HXRO_LEG_DECIMALS)\n      );\n      if (legResult.receiver !== side) {\n        amount = amount.negated();\n      }\n\n      products.push({\n        productIndex: new BN(\n          (rfq.legs[i] as HxroLeg).legInfo.productInfo.productIndex\n        ),\n        size: { m: new BN(amount.toString()), exp: new BN(HXRO_LEG_DECIMALS) },\n      });\n    } else {\n      products.push({\n        productIndex: new BN(0),\n        size: { m: new BN(0), exp: new BN(0) },\n      });\n    }\n  }\n\n  const idlProgram = await getHxroProgramFromIDL(cvg, manifest);\n  const instruction = await idlProgram.methods\n    .lockCollateral({\n      numProducts: new BN(rfq.legs.length),\n      products,\n    })\n    .accounts({\n      user: payer.publicKey,\n      traderRiskGroup: hxroContext.getTrgBySide(side),\n      marketProductGroup: mpg.pubkey,\n      feeModelProgram: mpg.feeModelProgramId,\n      feeModelConfigurationAcct: mpg.feeModelConfigurationAcct,\n      feeOutputRegister: mpg.feeOutputRegister,\n      riskEngineProgram: mpg.riskEngineProgramId,\n      riskModelConfigurationAcct: mpg.riskModelConfigurationAcct,\n      riskOutputRegister: mpg.riskOutputRegister,\n      riskAndFeeSigner: hxroContext.getRiskAndFeeSigner(),\n      feeStateAcct: userTrg.feeStateAccount,\n      riskStateAcct: userTrg.riskStateAccount,\n    })\n    .remainingAccounts([\n      {\n        pubkey: covarianceAddress,\n        isSigner: false,\n        isWritable: true,\n      },\n      {\n        pubkey: correlationAddress,\n        isSigner: false,\n        isWritable: true,\n      },\n      {\n        pubkey: markPricesAddress,\n        isSigner: false,\n        isWritable: true,\n      },\n    ])\n    .instruction();\n\n  const txBuilder = TransactionBuilder.make<{}>()\n    .setFeePayer(payer)\n    .add({\n      instruction,\n      signers: [payer],\n      key: 'lockHxroCollateral',\n    });\n\n  if (!isLocalEnv(cvg)) {\n    let traderRiskGrop: PublicKey;\n    if (rfq.taker.equals(payer.publicKey)) {\n      traderRiskGrop = hxroContext.getTakerTrg();\n    } else {\n      traderRiskGrop = hxroContext.getMakerTrg();\n    }\n    const trader = new dexterity.Trader(manifest, traderRiskGrop, true);\n\n    await trader.connect(null, null);\n    const updateMarkPriceIx = trader.getUpdateMarkPricesIx();\n    updateMarkPriceIx.keys[0].pubkey = payer.publicKey;\n\n    txBuilder.prepend({\n      instruction: updateMarkPriceIx,\n      signers: [payer],\n      key: 'updateMarkPrices',\n    });\n  }\n  return txBuilder;\n};\n"],"names":["lockHxroCollateralBuilder","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","cvg","params","options","rfq","response","side","hxroContext","_options$payer","payer","mpg","manifest","userTrg","_PublicKey$findProgra","_PublicKey$findProgra2","covarianceAddress","_PublicKey$findProgra3","_PublicKey$findProgra4","correlationAddress","_PublicKey$findProgra5","_PublicKey$findProgra6","markPricesAddress","settlementResult","products","i","legResult","amount","idlProgram","instruction","txBuilder","traderRiskGrop","trader","updateMarkPriceIx","_args","arguments","wrap","_callee$","_context","prev","next","length","undefined","rpc","getDefaultFeePayer","getTrgDataBySide","get","sent","PublicKey","findProgramAddressSync","Buffer","from","pubkey","toBuffer","riskEngineProgramId","_slicedToArray","rfqs","getSettlementResult","legs","BigNumber","times","pow","HXRO_LEG_DECIMALS","receiver","negated","push","productIndex","BN","legInfo","productInfo","size","m","toString","exp","getHxroProgramFromIDL","methods","lockCollateral","numProducts","accounts","user","publicKey","traderRiskGroup","getTrgBySide","marketProductGroup","feeModelProgram","feeModelProgramId","feeModelConfigurationAcct","feeOutputRegister","riskEngineProgram","riskModelConfigurationAcct","riskOutputRegister","riskAndFeeSigner","getRiskAndFeeSigner","feeStateAcct","feeStateAccount","riskStateAcct","riskStateAccount","remainingAccounts","isSigner","isWritable","TransactionBuilder","make","setFeePayer","add","signers","key","isLocalEnv","taker","equals","getTakerTrg","getMakerTrg","dexterity","Trader","connect","getUpdateMarkPricesIx","keys","prepend","abrupt","stop","_x","_x2","apply"],"mappings":"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"}