{"version":3,"file":"createVault.mjs","sources":["../../../../../src/plugins/vaultOperatorModule/operations/createVault.ts"],"sourcesContent":["import { createCreateRfqInstruction } from '@convergence-rfq/vault-operator';\nimport { Keypair, PublicKey, SystemProgram } from '@solana/web3.js';\nimport BN from 'bn.js';\n// import * as multisig from '@sqds/multisig';\nimport { SendAndConfirmTransactionResponse } from '../../rpcModule';\n\nimport { Convergence } from '../../../Convergence';\nimport {\n  Operation,\n  OperationHandler,\n  OperationScope,\n  Signer,\n  useOperation,\n} from '../../../types';\nimport {\n  TransactionBuilder,\n  TransactionBuilderOptions,\n} from '../../../utils/TransactionBuilder';\nimport {\n  SpotLegInstrument,\n  SpotQuoteInstrument,\n  spotInstrumentProgram,\n} from '@/plugins/spotInstrumentModule';\nimport {\n  instrumentToQuote,\n  instrumentToSolitaLeg,\n  serializeInstrumentAsSolitaLeg,\n} from '@/plugins/instrumentModule';\nimport {\n  ABSOLUTE_PRICE_DECIMALS,\n  LEG_MULTIPLIER_DECIMALS,\n  calculateExpectedLegsHash,\n  instrumentsToLegAccounts,\n  legsToBaseAssetAccounts,\n  toSolitaOrderType,\n} from '@/plugins/rfqModule';\nimport { addDecimals, getOrCreateATAtxBuilder } from '@/utils';\nimport { Mint } from '@/plugins/tokenModule';\nimport { addComputeBudgetIxsIfNeeded } from '@/utils/helpers';\n\nconst Key = 'CreateVaultOperation' as const;\n\nexport const createVaultOperation = useOperation<CreateVaultOperation>(Key);\n\nexport type CreateVaultOperation = Operation<\n  typeof Key,\n  CreateVaultInput,\n  CreateVaultOutput\n>;\n\nexport type VaultRfqOrderDetails =\n  | { type: 'buy'; quoteAmount: number }\n  | { type: 'sell'; legAmount: number };\n\nexport type CreateVaultInput = {\n  acceptablePriceLimit: number;\n  legMint: Mint;\n  quoteMint: Mint;\n  orderDetails: VaultRfqOrderDetails;\n  activeWindow: number;\n  settlingWindow: number;\n};\n\nexport type CreateVaultOutput = {\n  vaultAddress: PublicKey;\n  rfqAddress: PublicKey;\n  response: SendAndConfirmTransactionResponse;\n};\n\nexport const createVaultOperationHandler: OperationHandler<CreateVaultOperation> =\n  {\n    handle: async (\n      operation: CreateVaultOperation,\n      cvg: Convergence,\n      scope: OperationScope\n    ) => {\n      const { builder, ataBuilder, vaultAddress, rfqAddress } =\n        await createVaultBuilder(cvg, operation.input, scope);\n      builder.prepend(ataBuilder);\n\n      const output = await builder.sendAndConfirm(cvg, scope.confirmOptions);\n\n      scope.throwIfCanceled();\n\n      return { ...output, vaultAddress, rfqAddress };\n    },\n  };\n\nexport type CreateVaultBuilderParams = CreateVaultInput & {\n  squads?: { vaultPda: PublicKey; transactionPda: PublicKey };\n};\n\nexport type CreateVaultBuilderResult = {\n  builder: TransactionBuilder;\n  ataBuilder: TransactionBuilder;\n  vaultAddress: PublicKey;\n  rfqAddress: PublicKey;\n};\n\nexport const createVaultBuilder = async (\n  cvg: Convergence,\n  params: CreateVaultBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<CreateVaultBuilderResult> => {\n  const { programs, payer = cvg.rpc().getDefaultFeePayer() } = options;\n  const {\n    acceptablePriceLimit,\n    legMint,\n    quoteMint,\n    orderDetails,\n    activeWindow,\n    settlingWindow,\n    squads,\n  } = params;\n\n  const leg = await SpotLegInstrument.create(cvg, legMint, 1, 'long');\n  const quote = await SpotQuoteInstrument.create(cvg, quoteMint);\n\n  const creator = cvg.identity();\n\n  let signers: Signer[];\n  let vaultParamsKey: PublicKey;\n  let executorKey: PublicKey;\n  if (squads === undefined) {\n    const vaultParamsSigner = Keypair.generate();\n    signers = [creator, vaultParamsSigner];\n    vaultParamsKey = vaultParamsSigner.publicKey;\n    executorKey = creator.publicKey;\n  } else {\n    signers = [];\n    vaultParamsKey =\n      // multisig.getEphemeralSignerPda({\n      //   ephemeralSignerIndex: 0,\n      //   transactionPda: squads.transactionPda,\n      // })[0];\n      PublicKey.default;\n    executorKey = squads.vaultPda;\n  }\n\n  const vaultProgram = cvg.programs().getVaultOperator(programs).address;\n  const operator = cvg.vaultOperator().pdas().operator(vaultParamsKey);\n  const protocol = await cvg.protocol().get();\n\n  const sendMint =\n    orderDetails.type === 'buy' ? quote.getAssetMint() : leg.getAssetMint();\n  const receiveMint =\n    orderDetails.type === 'buy' ? leg.getAssetMint() : quote.getAssetMint();\n\n  const solitaLeg = instrumentToSolitaLeg(leg);\n  const serializedLeg = serializeInstrumentAsSolitaLeg(leg);\n  const expectedLegsHash = calculateExpectedLegsHash([serializedLeg]);\n  const recentTimestamp = new BN(Math.floor(Date.now() / 1_000));\n  const fixedSize =\n    orderDetails.type === 'buy'\n      ? { type: 'fixed-quote' as const, amount: orderDetails.quoteAmount }\n      : { type: 'fixed-base' as const, amount: orderDetails.legAmount };\n\n  const { ataPubKey: vaultTokens, txBuilder: vaultAtaBuilder } =\n    await getOrCreateATAtxBuilder(cvg, sendMint, operator, programs);\n  const { txBuilder: receivedAtaBuilder } = await getOrCreateATAtxBuilder(\n    cvg,\n    receiveMint,\n    operator,\n    programs\n  );\n  const executorTokens = cvg.tokens().pdas().associatedTokenAccount({\n    mint: sendMint,\n    owner: executorKey,\n    programs,\n  });\n\n  const rfqPda = cvg\n    .rfqs()\n    .pdas()\n    .rfq({\n      taker: operator,\n      legsHash: Buffer.from(expectedLegsHash),\n      printTradeProvider: null,\n      orderType: orderDetails.type,\n      quoteAsset: instrumentToQuote(quote),\n      fixedSize,\n      activeWindow,\n      settlingWindow,\n      recentTimestamp,\n    });\n\n  const quoteAccounts = [\n    {\n      pubkey: spotInstrumentProgram.address,\n      isSigner: false,\n      isWritable: false,\n    },\n    {\n      pubkey: cvg\n        .rfqs()\n        .pdas()\n        .quote({ quoteAsset: instrumentToQuote(quote) }),\n      isSigner: false,\n      isWritable: false,\n    },\n  ];\n  const baseAssetAccounts = legsToBaseAssetAccounts(cvg, [solitaLeg]);\n  const legAccounts = await instrumentsToLegAccounts([leg]);\n  const createRfqAccounts = [\n    ...quoteAccounts,\n    ...baseAssetAccounts,\n    ...legAccounts,\n  ];\n\n  const lamportsForOperator = 14288880;\n  const transferLamportIx = {\n    instruction: SystemProgram.transfer({\n      fromPubkey: executorKey,\n      toPubkey: operator,\n      lamports: lamportsForOperator,\n    }),\n    signers: [],\n    key: 'sendLamportsToOperator',\n  };\n  const acceptablePriceLimitWithDecimals = addDecimals(\n    acceptablePriceLimit,\n    quote.decimals\n  ).mul(new BN(10).pow(new BN(ABSOLUTE_PRICE_DECIMALS)));\n\n  const size =\n    fixedSize.type === 'fixed-base'\n      ? addDecimals(fixedSize.amount, LEG_MULTIPLIER_DECIMALS)\n      : addDecimals(fixedSize.amount, quote.decimals);\n\n  const builder = TransactionBuilder.make()\n    .setFeePayer(payer)\n    .add(transferLamportIx, {\n      instruction: createCreateRfqInstruction(\n        {\n          creator: executorKey,\n          vaultParams: vaultParamsKey,\n          operator,\n          sendMint,\n          receiveMint,\n          vault: vaultTokens,\n          vaultTokensSource: executorTokens,\n          protocol: cvg.protocol().pdas().protocol(),\n          rfq: rfqPda,\n          whitelist: vaultProgram,\n          collateralInfo: cvg.collateral().pdas().collateralInfo({\n            user: operator,\n          }),\n          collateralToken: cvg.collateral().pdas().collateralToken({\n            user: operator,\n          }),\n          collateralMint: protocol.collateralMint,\n          riskEngine: cvg.programs().getRiskEngine().address,\n          rfqProgram: cvg.programs().getRfq().address,\n          anchorRemainingAccounts: createRfqAccounts,\n        },\n        {\n          acceptablePriceLimit: acceptablePriceLimitWithDecimals,\n          legBaseAssetIndex: leg.getBaseAssetIndex().value,\n          orderType: toSolitaOrderType(orderDetails.type),\n          size,\n          activeWindow,\n          settlingWindow,\n          recentTimestamp,\n        },\n        vaultProgram\n      ),\n      signers,\n      key: 'createVault',\n    });\n\n  const ataBuilder = TransactionBuilder.make().setFeePayer(payer);\n  if (vaultAtaBuilder !== undefined) {\n    ataBuilder.add(vaultAtaBuilder);\n  }\n  if (receivedAtaBuilder !== undefined) {\n    ataBuilder.add(receivedAtaBuilder);\n  }\n  await addComputeBudgetIxsIfNeeded(builder, cvg, true);\n\n  return {\n    builder,\n    ataBuilder,\n    vaultAddress: vaultParamsKey,\n    rfqAddress: rfqPda,\n  };\n};\n"],"names":["Key","createVaultOperation","useOperation","createVaultOperationHandler","handle","_handle","_asyncToGenerator","_regeneratorRuntime","mark","_callee","operation","cvg","scope","_yield$createVaultBui","builder","ataBuilder","vaultAddress","rfqAddress","output","wrap","_callee$","_context","prev","next","createVaultBuilder","input","sent","prepend","sendAndConfirm","confirmOptions","throwIfCanceled","abrupt","_objectSpread","stop","_x","_x2","_x3","apply","arguments","_ref","_callee2","params","options","programs","_options$payer","payer","acceptablePriceLimit","legMint","quoteMint","orderDetails","activeWindow","settlingWindow","squads","leg","quote","creator","signers","vaultParamsKey","executorKey","vaultParamsSigner","vaultProgram","operator","protocol","sendMint","receiveMint","solitaLeg","serializedLeg","expectedLegsHash","recentTimestamp","fixedSize","_yield$getOrCreateATA","vaultTokens","vaultAtaBuilder","_yield$getOrCreateATA2","receivedAtaBuilder","executorTokens","rfqPda","quoteAccounts","baseAssetAccounts","legAccounts","createRfqAccounts","lamportsForOperator","transferLamportIx","acceptablePriceLimitWithDecimals","size","_args2","_callee2$","_context2","length","undefined","rpc","getDefaultFeePayer","SpotLegInstrument","create","SpotQuoteInstrument","identity","Keypair","generate","publicKey","PublicKey","vaultPda","getVaultOperator","address","vaultOperator","pdas","get","type","getAssetMint","instrumentToSolitaLeg","serializeInstrumentAsSolitaLeg","calculateExpectedLegsHash","BN","Math","floor","Date","now","amount","quoteAmount","legAmount","getOrCreateATAtxBuilder","ataPubKey","txBuilder","tokens","associatedTokenAccount","mint","owner","rfqs","rfq","taker","legsHash","Buffer","from","printTradeProvider","orderType","quoteAsset","instrumentToQuote","pubkey","spotInstrumentProgram","isSigner","isWritable","legsToBaseAssetAccounts","instrumentsToLegAccounts","concat","_toConsumableArray","instruction","SystemProgram","transfer","fromPubkey","toPubkey","lamports","key","addDecimals","decimals","mul","pow","ABSOLUTE_PRICE_DECIMALS","LEG_MULTIPLIER_DECIMALS","TransactionBuilder","make","setFeePayer","add","createCreateRfqInstruction","vaultParams","vault","vaultTokensSource","whitelist","collateralInfo","collateral","user","collateralToken","collateralMint","riskEngine","getRiskEngine","rfqProgram","getRfq","anchorRemainingAccounts","legBaseAssetIndex","getBaseAssetIndex","value","toSolitaOrderType","addComputeBudgetIxsIfNeeded","_x4","_x5"],"mappings":"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"}