{"version":3,"file":"settle.mjs","sources":["../../../../../src/plugins/rfqModule/operations/settle.ts"],"sourcesContent":["import {\n  createSettleEscrowInstruction,\n  createSettlePrintTradeInstruction,\n} from '@convergence-rfq/rfq';\nimport { PublicKey, AccountMeta, ComputeBudgetProgram } from '@solana/web3.js';\nimport { TOKEN_PROGRAM_ID } from '@solana/spl-token';\n\nimport { SendAndConfirmTransactionResponse } from '../../rpcModule';\nimport { Convergence } from '../../../Convergence';\nimport {\n  Operation,\n  OperationHandler,\n  OperationScope,\n  useOperation,\n  makeConfirmOptionsFinalizedOnMainnet,\n  Program,\n} from '../../../types';\nimport {\n  TransactionBuilder,\n  TransactionBuilderOptions,\n} from '../../../utils/TransactionBuilder';\nimport { InstrumentPdasClient } from '../../instrumentModule';\nimport {\n  EscrowResponse,\n  EscrowRfq,\n  PrintTradeResponse,\n  PrintTradeRfq,\n} from '../models';\nimport { Receiver } from './getSettlementResult';\nimport { legToBaseAssetMint } from '@/plugins/instrumentModule';\nimport { prependWithProviderProgram } from '@/plugins/printTradeModule';\nimport { spotInstrumentProgram } from '@/plugins/spotInstrumentModule';\nimport { InstructionUniquenessTracker, getOrCreateATAtxBuilder } from '@/utils';\nimport { Protocol } from '@/plugins/protocolModule';\nimport { addComputeBudgetIxsIfNeeded } from '@/utils/helpers';\n\nconst Key = 'SettleOperation' as const;\n\n/**\n * Settles.\n *\n * ```ts\n * await convergence\n *   .rfqs()\n *   .settle({ address };\n * ```\n *\n * @group Operations\n * @category Constructors\n */\nexport const settleOperation = useOperation<SettleOperation>(Key);\n\n/**\n * @group Operations\n * @category Types\n */\nexport type SettleOperation = Operation<typeof Key, SettleInput, SettleOutput>;\n\n/**\n * @group Operations\n * @category Inputs\n */\nexport type SettleInput = {\n  /** The address of the response account. */\n  response: PublicKey;\n};\n\n/**\n * @group Operations\n * @category Outputs\n */\nexport type SettleOutput = {\n  /** The blockchain response from sending and confirming the transaction. */\n  response: SendAndConfirmTransactionResponse;\n};\n\n/**\n * @group Operations\n * @category Handlers\n */\nexport const settleOperationHandler: OperationHandler<SettleOperation> = {\n  handle: async (\n    operation: SettleOperation,\n    convergence: Convergence,\n    scope: OperationScope\n  ): Promise<SettleOutput> => {\n    const { ataTxBuilderArray, settleTxBuilder } = await settleBuilder(\n      convergence,\n      {\n        ...operation.input,\n      },\n      scope\n    );\n    scope.throwIfCanceled();\n\n    const confirmOptions = makeConfirmOptionsFinalizedOnMainnet(\n      convergence,\n      scope.confirmOptions\n    );\n\n    const lastValidBlockHeight = await convergence.rpc().getLatestBlockhash();\n    const dedupAtaBuiders =\n      InstructionUniquenessTracker.dedup(ataTxBuilderArray);\n    const txs = [...dedupAtaBuiders, settleTxBuilder].map((txBuilder) =>\n      txBuilder.toTransaction(lastValidBlockHeight)\n    );\n    const signedTxs = await convergence.identity().signAllTransactions(txs);\n\n    const outputs = [];\n    for (const signedTx of signedTxs) {\n      const output = await convergence\n        .rpc()\n        .serializeAndSendTransaction(\n          signedTx,\n          lastValidBlockHeight,\n          confirmOptions\n        );\n\n      outputs.push(output);\n    }\n\n    scope.throwIfCanceled();\n\n    return { response: outputs[outputs.length - 1] };\n  },\n};\n\n/**\n * @group Transaction Builders\n * @category Inputs\n */\nexport type SettleBuilderParams = SettleInput;\n\nexport type SettleBuilderResult = {\n  ataTxBuilderArray: TransactionBuilder[];\n  settleTxBuilder: TransactionBuilder;\n};\n\n/**\n * @group Transaction Builders\n * @category Constructors\n */\nexport const settleBuilder = async (\n  convergence: Convergence,\n  params: SettleBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<SettleBuilderResult> => {\n  const responseModel = await convergence\n    .rfqs()\n    .findResponseByAddress({ address: params.response });\n  const rfqModel = await convergence\n    .rfqs()\n    .findRfqByAddress({ address: responseModel.rfq });\n\n  if (\n    responseModel.model === 'escrowResponse' &&\n    rfqModel.model === 'escrowRfq'\n  ) {\n    return settleEscrowBuilder(\n      convergence,\n      {\n        response: responseModel,\n        rfq: rfqModel,\n      },\n      options\n    );\n  } else if (\n    responseModel.model === 'printTradeResponse' &&\n    rfqModel.model === 'printTradeRfq'\n  ) {\n    return settlePrintTradeBuilder(\n      convergence,\n      {\n        response: responseModel,\n        rfq: rfqModel,\n      },\n      options\n    );\n  }\n\n  throw new Error('Rfq type does not match with response type!');\n};\n\nexport type SettleEscrowBuilderParams = {\n  response: PublicKey | EscrowResponse;\n  rfq?: EscrowRfq;\n  startIndex?: number;\n};\n\nexport const settleEscrowBuilder = async (\n  cvg: Convergence,\n  params: SettleEscrowBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<SettleBuilderResult> => {\n  const { programs, payer = cvg.rpc().getDefaultFeePayer() } = options;\n  const { response, rfq, startIndex = 0 } = params;\n\n  const responseModel =\n    response instanceof PublicKey\n      ? await cvg.rfqs().findResponseByAddress({ address: response })\n      : response;\n  const rfqModel =\n    rfq ?? (await cvg.rfqs().findRfqByAddress({ address: responseModel.rfq }));\n\n  if (\n    responseModel.model !== 'escrowResponse' ||\n    rfqModel.model !== 'escrowRfq'\n  ) {\n    throw new Error('Response is not settled as an escrow!');\n  }\n\n  const rfqProgram = cvg.programs().getRfq(programs);\n  const protocol = await cvg.protocol().get();\n\n  const ataTxBuilderArray: TransactionBuilder[] = [];\n  const anchorRemainingAccounts: AccountMeta[] = [];\n\n  const { legs, quote } = await cvg.rfqs().getSettlementResult({\n    response: responseModel,\n    rfq: rfqModel,\n  });\n\n  const accountsToAddContext = {\n    cvg,\n    protocol,\n    rfq: rfqModel,\n    response: responseModel,\n    programs,\n  };\n\n  for (let legIndex = startIndex; legIndex < rfqModel.legs.length; legIndex++) {\n    const leg = rfqModel.legs[legIndex];\n    const { receiver } = legs[legIndex];\n\n    const baseAssetMint = await legToBaseAssetMint(cvg, leg);\n\n    if (leg.getProgramId().equals(spotInstrumentProgram.address)) {\n      const { ataTxBuilder, accounts } = await getSettleAccountsSpot(\n        baseAssetMint.address,\n        receiver,\n        {\n          leg: legIndex,\n        },\n        accountsToAddContext\n      );\n\n      if (ataTxBuilder !== undefined) {\n        ataTxBuilderArray.push(ataTxBuilder);\n      }\n\n      anchorRemainingAccounts.push(...accounts);\n    } else {\n      const accounts = getSettleAccountsNonSpot(\n        leg.getProgramId(),\n        baseAssetMint.address,\n        receiver,\n        { leg: legIndex },\n        accountsToAddContext\n      );\n\n      anchorRemainingAccounts.push(...accounts);\n    }\n  }\n\n  const { accounts, ataTxBuilder } = await getSettleAccountsSpot(\n    rfqModel.quoteMint,\n    quote.receiver,\n    'quote',\n    accountsToAddContext\n  );\n  if (ataTxBuilder !== undefined) {\n    ataTxBuilderArray.push(ataTxBuilder);\n  }\n  anchorRemainingAccounts.push(...accounts);\n\n  const settleTxBuilder = TransactionBuilder.make()\n    .setFeePayer(payer)\n    .add({\n      instruction: ComputeBudgetProgram.setComputeUnitLimit({\n        units: 300000,\n      }),\n      signers: [],\n    })\n    .add({\n      instruction: createSettleEscrowInstruction(\n        {\n          protocol: cvg.protocol().pdas().protocol(),\n          rfq: rfqModel.address,\n          response: responseModel.address,\n          anchorRemainingAccounts,\n        },\n        rfqProgram.address\n      ),\n      signers: [],\n      key: 'settle',\n    });\n  await addComputeBudgetIxsIfNeeded(settleTxBuilder, cvg, true);\n  return {\n    ataTxBuilderArray,\n    settleTxBuilder,\n  };\n};\n\nexport const getSettleAccountsSpot = async (\n  mint: PublicKey,\n  receiver: Receiver,\n  asset: { leg: number } | 'quote',\n  context: {\n    cvg: Convergence;\n    protocol: Protocol;\n    rfq: EscrowRfq;\n    response: EscrowResponse;\n    programs: Program[] | undefined;\n  }\n): Promise<{\n  ataTxBuilder?: TransactionBuilder;\n  accounts: AccountMeta[];\n}> => {\n  const { cvg, rfq, response, protocol, programs } = context;\n  const programId = spotInstrumentProgram.address;\n  const pdaClient = new InstrumentPdasClient(cvg);\n  const escrow =\n    asset === 'quote'\n      ? pdaClient.quoteEscrow({\n          response: response.address,\n          program: programId,\n        })\n      : pdaClient.instrumentEscrow({\n          response: response.address,\n          index: asset.leg,\n          rfqModel: rfq,\n        });\n\n  const { ataPubKey: authorityAtaKey, txBuilder: ataTxBuilder } =\n    await getOrCreateATAtxBuilder(cvg, mint, protocol.authority, programs);\n\n  const accounts = [\n    {\n      pubkey: programId,\n      isSigner: false,\n      isWritable: false,\n    },\n    {\n      pubkey: cvg.spotInstrument().pdas().config(),\n      isSigner: false,\n      isWritable: false,\n    },\n    {\n      pubkey: escrow,\n      isSigner: false,\n      isWritable: true,\n    },\n    {\n      pubkey: cvg\n        .tokens()\n        .pdas()\n        .associatedTokenAccount({\n          mint,\n          owner: receiver === 'maker' ? response.maker : rfq.taker,\n          programs,\n        }),\n      isSigner: false,\n      isWritable: true,\n    },\n    {\n      pubkey: authorityAtaKey,\n      isSigner: false,\n      isWritable: true,\n    },\n    { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n  ];\n\n  return { ataTxBuilder, accounts };\n};\n\nexport const getSettleAccountsNonSpot = (\n  programId: PublicKey,\n  mint: PublicKey,\n  receiver: Receiver,\n  asset: { leg: number } | 'quote',\n  context: {\n    cvg: Convergence;\n    protocol: Protocol;\n    rfq: EscrowRfq;\n    response: EscrowResponse;\n    programs: Program[] | undefined;\n  }\n) => {\n  const { cvg, rfq, response, programs } = context;\n  const pdaClient = new InstrumentPdasClient(cvg);\n  const escrow =\n    asset === 'quote'\n      ? pdaClient.quoteEscrow({\n          response: response.address,\n          program: programId,\n        })\n      : pdaClient.instrumentEscrow({\n          response: response.address,\n          index: asset.leg,\n          rfqModel: rfq,\n        });\n\n  return [\n    {\n      pubkey: programId,\n      isSigner: false,\n      isWritable: false,\n    },\n    {\n      pubkey: escrow,\n      isSigner: false,\n      isWritable: true,\n    },\n    {\n      pubkey: cvg\n        .tokens()\n        .pdas()\n        .associatedTokenAccount({\n          mint,\n          owner: receiver === 'maker' ? response.maker : rfq.taker,\n          programs,\n        }),\n      isSigner: false,\n      isWritable: true,\n    },\n    { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n  ];\n};\n\nexport type SettlePrintTradeBuilderParams = {\n  response: PublicKey | PrintTradeResponse;\n  rfq?: PrintTradeRfq;\n};\n\nexport const settlePrintTradeBuilder = async (\n  convergence: Convergence,\n  params: SettlePrintTradeBuilderParams,\n  options: TransactionBuilderOptions = {}\n): Promise<SettleBuilderResult> => {\n  const { programs, payer = convergence.rpc().getDefaultFeePayer() } = options;\n  const { response, rfq } = params;\n\n  const responseModel =\n    response instanceof PublicKey\n      ? await convergence.rfqs().findResponseByAddress({ address: response })\n      : response;\n  const rfqModel =\n    rfq ??\n    (await convergence.rfqs().findRfqByAddress({ address: responseModel.rfq }));\n\n  if (\n    responseModel.model !== 'printTradeResponse' ||\n    rfqModel.model !== 'printTradeRfq'\n  ) {\n    throw new Error('Response is not settled as a print trade!');\n  }\n\n  const rfqProgram = convergence.programs().getRfq(programs);\n\n  const remainingAccounts = prependWithProviderProgram(\n    rfqModel.printTrade,\n    await rfqModel.printTrade.getSettlementAccounts(rfqModel, responseModel)\n  );\n\n  const settleTxBuilder = TransactionBuilder.make()\n    .setFeePayer(payer)\n    .add(\n      {\n        instruction: ComputeBudgetProgram.setComputeUnitLimit({\n          units: 300000,\n        }),\n        signers: [],\n      },\n      {\n        instruction: createSettlePrintTradeInstruction(\n          {\n            protocol: convergence.protocol().pdas().protocol(),\n            rfq: rfqModel.address,\n            response: responseModel.address,\n            anchorRemainingAccounts: remainingAccounts,\n          },\n          rfqProgram.address\n        ),\n        signers: [],\n        key: 'settle',\n      }\n    );\n  await addComputeBudgetIxsIfNeeded(settleTxBuilder, convergence, true);\n  return {\n    ataTxBuilderArray: [],\n    settleTxBuilder,\n  };\n};\n"],"names":["Key","settleOperation","useOperation","settleOperationHandler","handle","_handle","_asyncToGenerator","_regeneratorRuntime","mark","_callee","operation","convergence","scope","_yield$settleBuilder","ataTxBuilderArray","settleTxBuilder","confirmOptions","lastValidBlockHeight","dedupAtaBuiders","txs","signedTxs","outputs","_iterator","_step","signedTx","output","wrap","_callee$","_context","prev","next","settleBuilder","_objectSpread","input","sent","throwIfCanceled","makeConfirmOptionsFinalizedOnMainnet","rpc","getLatestBlockhash","InstructionUniquenessTracker","dedup","concat","_toConsumableArray","map","txBuilder","toTransaction","identity","signAllTransactions","_createForOfIteratorHelper","s","n","done","value","serializeAndSendTransaction","push","t0","e","f","finish","abrupt","response","length","stop","_x","_x2","_x3","apply","arguments","_ref","_callee2","params","options","responseModel","rfqModel","_args2","_callee2$","_context2","undefined","rfqs","findResponseByAddress","address","findRfqByAddress","rfq","model","settleEscrowBuilder","settlePrintTradeBuilder","Error","_x4","_x5","_ref2","_callee3","cvg","programs","_options$payer","payer","_params$startIndex","startIndex","rfqProgram","protocol","anchorRemainingAccounts","_yield$cvg$rfqs$getSe","legs","quote","accountsToAddContext","legIndex","leg","receiver","baseAssetMint","_yield$getSettleAccou","_ataTxBuilder","_accounts","_accounts2","_yield$getSettleAccou2","accounts","ataTxBuilder","_args3","_callee3$","_context3","getDefaultFeePayer","PublicKey","t1","getRfq","get","getSettlementResult","legToBaseAssetMint","getProgramId","equals","spotInstrumentProgram","getSettleAccountsSpot","getSettleAccountsNonSpot","quoteMint","TransactionBuilder","make","setFeePayer","add","instruction","ComputeBudgetProgram","setComputeUnitLimit","units","signers","createSettleEscrowInstruction","pdas","key","addComputeBudgetIxsIfNeeded","_x6","_x7","_ref3","_callee4","mint","asset","context","programId","pdaClient","escrow","_yield$getOrCreateATA","authorityAtaKey","_callee4$","_context4","InstrumentPdasClient","quoteEscrow","program","instrumentEscrow","index","getOrCreateATAtxBuilder","authority","ataPubKey","pubkey","isSigner","isWritable","spotInstrument","config","tokens","associatedTokenAccount","owner","maker","taker","TOKEN_PROGRAM_ID","_x8","_x9","_x10","_x11","_ref4","_callee5","_options$payer2","remainingAccounts","_args5","_callee5$","_context5","t2","prependWithProviderProgram","t3","printTrade","getSettlementAccounts","t4","createSettlePrintTradeInstruction","_x12","_x13"],"mappings":"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"}