{"version":3,"sources":["../../../src/common/txTool/txUtils.ts","../../../src/common/logger.ts","../../../src/common/txTool/txType.ts"],"sourcesContent":["import {\n  Connection,\n  PublicKey,\n  ComputeBudgetProgram,\n  SimulatedTransactionResponse,\n  Transaction,\n  TransactionInstruction,\n  TransactionMessage,\n  Keypair,\n  EpochInfo,\n  VersionedTransaction,\n  Commitment,\n} from \"@solana/web3.js\";\nimport { TOKEN_PROGRAM_ID } from \"@solana/spl-token\";\n\nimport { createLogger } from \"../logger\";\nimport { InstructionType } from \"./txType\";\nimport { CacheLTA } from \"./lookupTable\";\n\nimport { ComputeBudgetConfig } from \"@/raydium/type\";\n\nconst logger = createLogger(\"Raydium_txUtil\");\n\nexport const MAX_BASE64_SIZE = 1644;\n\nexport function addComputeBudget(config: ComputeBudgetConfig): {\n  instructions: TransactionInstruction[];\n  instructionTypes: string[];\n} {\n  const ins: TransactionInstruction[] = [];\n  const insTypes: string[] = [];\n  if (config.microLamports) {\n    ins.push(ComputeBudgetProgram.setComputeUnitPrice({ microLamports: config.microLamports }));\n    insTypes.push(InstructionType.SetComputeUnitPrice);\n  }\n  if (config.units) {\n    ins.push(ComputeBudgetProgram.setComputeUnitLimit({ units: config.units }));\n    insTypes.push(InstructionType.SetComputeUnitLimit);\n  }\n\n  return {\n    instructions: ins,\n    instructionTypes: insTypes,\n  };\n}\n\nexport async function getRecentBlockHash(connection: Connection, propsCommitment?: Commitment): Promise<string> {\n  const commitment = propsCommitment ?? \"confirmed\";\n  try {\n    return (\n      (await connection.getLatestBlockhash?.({ commitment }))?.blockhash ||\n      (await connection.getRecentBlockhash(commitment)).blockhash\n    );\n  } catch {\n    return (await connection.getRecentBlockhash(commitment)).blockhash;\n  }\n}\n\n/**\n * Forecast transaction size\n */\nexport function forecastTransactionSize(instructions: TransactionInstruction[], signers: PublicKey[]): boolean {\n  if (instructions.length < 1) logger.logWithError(`no instructions provided: ${instructions.toString()}`);\n  if (signers.length < 1) logger.logWithError(`no signers provided:, ${signers.toString()}`);\n\n  const transaction = new Transaction();\n  transaction.recentBlockhash = \"11111111111111111111111111111111\";\n  transaction.feePayer = signers[0];\n  transaction.add(...instructions);\n\n  try {\n    return Buffer.from(transaction.serialize({ verifySignatures: false })).toString(\"base64\").length < MAX_BASE64_SIZE;\n  } catch (error) {\n    return false;\n  }\n}\n\n/**\n * Simulates multiple instruction\n */\n/**\n * Simulates multiple instruction\n */\nexport async function simulateMultipleInstruction(\n  connection: Connection,\n  instructions: TransactionInstruction[],\n  keyword: string,\n  batchRequest = true,\n): Promise<string[]> {\n  const feePayer = new PublicKey(\"RaydiumSimuLateTransaction11111111111111111\");\n\n  const transactions: Transaction[] = [];\n\n  let transaction = new Transaction();\n  transaction.feePayer = feePayer;\n\n  for (const instruction of instructions) {\n    if (!forecastTransactionSize([...transaction.instructions, instruction], [feePayer])) {\n      transactions.push(transaction);\n      transaction = new Transaction();\n      transaction.feePayer = feePayer;\n    }\n    transaction.add(instruction);\n  }\n  if (transaction.instructions.length > 0) {\n    transactions.push(transaction);\n  }\n\n  let results: SimulatedTransactionResponse[] = [];\n\n  try {\n    results = await simulateTransaction(connection, transactions, batchRequest);\n    if (results.find((i) => i.err !== null)) throw Error(\"rpc simulateTransaction error\");\n  } catch (error) {\n    if (error instanceof Error) {\n      logger.logWithError(\"failed to simulate for instructions\", \"RPC_ERROR\", {\n        message: error.message,\n      });\n    }\n  }\n\n  const logs: string[] = [];\n  for (const result of results) {\n    logger.debug(\"simulate result:\", result);\n\n    if (result.logs) {\n      const filteredLog = result.logs.filter((log) => log && log.includes(keyword));\n      logger.debug(\"filteredLog:\", logs);\n      if (!filteredLog.length) logger.logWithError(\"simulate log not match keyword\", \"keyword\", keyword);\n      logs.push(...filteredLog);\n    }\n  }\n\n  return logs;\n}\n\nexport function parseSimulateLogToJson(log: string, keyword: string): any {\n  const results = log.match(/{[\"\\w:,]+}/g);\n  if (!results || results.length !== 1) {\n    return logger.logWithError(`simulate log fail to match json, keyword: ${keyword}`);\n  }\n\n  return results[0];\n}\n\nexport function parseSimulateValue(log: string, key: string): any {\n  const reg = new RegExp(`\"${key}\":(\\\\d+)`, \"g\");\n\n  const results = reg.exec(log);\n  if (!results || results.length !== 2) {\n    return logger.logWithError(`simulate log fail to match key\", key: ${key}`);\n  }\n\n  return results[1];\n}\n\nexport interface ProgramAddress {\n  publicKey: PublicKey;\n  nonce: number;\n}\nexport function findProgramAddress(\n  seeds: Array<Buffer | Uint8Array>,\n  programId: PublicKey,\n): {\n  publicKey: PublicKey;\n  nonce: number;\n} {\n  const [publicKey, nonce] = PublicKey.findProgramAddressSync(seeds, programId);\n  return { publicKey, nonce };\n}\n\nexport async function simulateTransaction(\n  connection: Connection,\n  transactions: Transaction[],\n  batchRequest?: boolean,\n): Promise<any[]> {\n  let results: any[] = [];\n  if (batchRequest) {\n    const getLatestBlockhash = await connection.getLatestBlockhash();\n\n    const encodedTransactions: string[] = [];\n    for (const transaction of transactions) {\n      transaction.recentBlockhash = getLatestBlockhash.blockhash;\n      transaction.lastValidBlockHeight = getLatestBlockhash.lastValidBlockHeight;\n\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore\n      const message = transaction._compile();\n      const signData = message.serialize();\n\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore\n      const wireTransaction = transaction._serialize(signData);\n      const encodedTransaction = wireTransaction.toString(\"base64\");\n\n      encodedTransactions.push(encodedTransaction);\n    }\n\n    const batch = encodedTransactions.map((keys) => {\n      const args = connection._buildArgs([keys], undefined, \"base64\");\n      return {\n        methodName: \"simulateTransaction\",\n        args,\n      };\n    });\n\n    const reqData: { methodName: string; args: any[] }[][] = [];\n    const itemReqIndex = 20;\n    for (let i = 0; i < Math.ceil(batch.length / itemReqIndex); i++) {\n      reqData.push(batch.slice(i * itemReqIndex, (i + 1) * itemReqIndex));\n    }\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    results = await (\n      await Promise.all(\n        reqData.map(async (i) => (await (connection as any)._rpcBatchRequest(i)).map((ii) => ii.result.value)),\n      )\n    ).flat();\n  } else {\n    try {\n      results = await Promise.all(\n        transactions.map(async (transaction) => await (await connection.simulateTransaction(transaction)).value),\n      );\n    } catch (error) {\n      if (error instanceof Error) {\n        logger.logWithError(\"failed to get info for multiple accounts\", \"RPC_ERROR\", {\n          message: error.message,\n        });\n      }\n    }\n  }\n\n  return results;\n}\n\nexport function checkLegacyTxSize({\n  instructions,\n  payer,\n  signers,\n}: {\n  instructions: TransactionInstruction[];\n  payer: PublicKey;\n  signers: PublicKey[];\n}): boolean {\n  return forecastTransactionSize(instructions, [payer, ...signers]);\n}\n\nexport function checkV0TxSize({\n  instructions,\n  payer,\n  lookupTableAddressAccount,\n  recentBlockhash = Keypair.generate().publicKey.toString(),\n}: {\n  instructions: TransactionInstruction[];\n  payer: PublicKey;\n  lookupTableAddressAccount?: CacheLTA;\n  recentBlockhash?: string;\n}): boolean {\n  const transactionMessage = new TransactionMessage({\n    payerKey: payer,\n    recentBlockhash,\n    instructions,\n  });\n\n  const messageV0 = transactionMessage.compileToV0Message(Object.values(lookupTableAddressAccount ?? {}));\n  try {\n    const buildLength = Buffer.from(new VersionedTransaction(messageV0).serialize()).toString(\"base64\").length;\n    return buildLength < MAX_BASE64_SIZE;\n  } catch (error) {\n    return false;\n  }\n}\n\nlet epochInfoCache: { time: number; data?: EpochInfo } = {\n  time: 0,\n  data: undefined,\n};\n\nexport async function getEpochInfo(connection: Connection): Promise<EpochInfo> {\n  if (!epochInfoCache.data || (Date.now() - epochInfoCache.time) / 1000 > 30) {\n    const data = await connection.getEpochInfo();\n    epochInfoCache = {\n      time: Date.now(),\n      data,\n    };\n    return data;\n  } else {\n    return epochInfoCache.data;\n  }\n}\n\nexport const toBuffer = (arr: Buffer | Uint8Array | Array<number>): Buffer => {\n  if (Buffer.isBuffer(arr)) {\n    return arr;\n  } else if (arr instanceof Uint8Array) {\n    return Buffer.from(arr.buffer, arr.byteOffset, arr.byteLength);\n  } else {\n    return Buffer.from(arr);\n  }\n};\n\nexport function printSimulate(transactions: Transaction[] | VersionedTransaction[]): string[] {\n  const allBase64: string[] = [];\n  transactions.forEach((transaction) => {\n    if (transaction instanceof Transaction) {\n      if (!transaction.recentBlockhash) transaction.recentBlockhash = TOKEN_PROGRAM_ID.toBase58();\n      if (!transaction.feePayer) transaction.feePayer = Keypair.generate().publicKey;\n    }\n    let serialized = transaction.serialize({ requireAllSignatures: false, verifySignatures: false });\n    if (transaction instanceof VersionedTransaction) serialized = toBuffer(serialized);\n    const base64 = serialized.toString(\"base64\");\n    allBase64.push(base64);\n  });\n  console.log(\"simulate tx string:\", allBase64);\n\n  return allBase64;\n}\n\nexport function transformTxToBase64(tx: Transaction | VersionedTransaction): string {\n  let serialized = tx.serialize({ requireAllSignatures: false, verifySignatures: false });\n  if (tx instanceof VersionedTransaction) serialized = toBuffer(serialized);\n  return serialized.toString(\"base64\");\n}\n","import { get, set } from \"lodash\";\n\nexport type ModuleName = \"Common.Api\";\n\nexport enum LogLevel {\n  Error,\n  Warning,\n  Info,\n  Debug,\n}\nexport class Logger {\n  private logLevel: LogLevel;\n  private name: string;\n  constructor(params: { name: string; logLevel?: LogLevel }) {\n    this.logLevel = params.logLevel !== undefined ? params.logLevel : LogLevel.Error;\n    this.name = params.name;\n  }\n\n  set level(logLevel: LogLevel) {\n    this.logLevel = logLevel;\n  }\n  get time(): string {\n    return Date.now().toString();\n  }\n  get moduleName(): string {\n    return this.name;\n  }\n\n  private isLogLevel(level: LogLevel): boolean {\n    return level <= this.logLevel;\n  }\n\n  public error(...props): Logger {\n    if (!this.isLogLevel(LogLevel.Error)) return this;\n    console.error(this.time, this.name, \"sdk logger error\", ...props);\n    return this;\n  }\n\n  public logWithError(...props): Logger {\n    // this.error(...props)\n    const msg = props.map((arg) => (typeof arg === \"object\" ? JSON.stringify(arg) : arg)).join(\", \");\n    throw new Error(msg);\n  }\n\n  public warning(...props): Logger {\n    if (!this.isLogLevel(LogLevel.Warning)) return this;\n    console.warn(this.time, this.name, \"sdk logger warning\", ...props);\n    return this;\n  }\n\n  public info(...props): Logger {\n    if (!this.isLogLevel(LogLevel.Info)) return this;\n    console.info(this.time, this.name, \"sdk logger info\", ...props);\n    return this;\n  }\n\n  public debug(...props): Logger {\n    if (!this.isLogLevel(LogLevel.Debug)) return this;\n    console.debug(this.time, this.name, \"sdk logger debug\", ...props);\n    return this;\n  }\n}\n\nconst moduleLoggers: { [key in ModuleName]?: Logger } = {};\nconst moduleLevels: { [key in ModuleName]?: LogLevel } = {};\n\nexport function createLogger(moduleName: string): Logger {\n  let logger = get(moduleLoggers, moduleName);\n  if (!logger) {\n    // default level is error\n    const logLevel = get(moduleLevels, moduleName);\n\n    logger = new Logger({ name: moduleName, logLevel });\n    set(moduleLoggers, moduleName, logger);\n  }\n\n  return logger;\n}\n\nexport function setLoggerLevel(moduleName: string, level: LogLevel): void {\n  set(moduleLevels, moduleName, level);\n\n  const logger = get(moduleLoggers, moduleName);\n  if (logger) logger.level = level;\n}\n","export enum TxVersion {\n  \"V0\",\n  \"LEGACY\",\n}\n\nexport const InstructionType = {\n  CreateAccount: \"CreateAccount\",\n  InitAccount: \"InitAccount\",\n  CreateATA: \"CreateATA\",\n  CloseAccount: \"CloseAccount\",\n  TransferAmount: \"TransferAmount\",\n  InitMint: \"InitMint\",\n  MintTo: \"MintTo\",\n\n  InitMarket: \"InitMarket\", // create market main ins\n  Util1216OwnerClaim: \"Util1216OwnerClaim\", // owner claim token ins\n\n  SetComputeUnitPrice: \"SetComputeUnitPrice\",\n  SetComputeUnitLimit: \"SetComputeUnitLimit\",\n\n  // CLMM\n  ClmmCreatePool: \"ClmmCreatePool\",\n  ClmmOpenPosition: \"ClmmOpenPosition\",\n  ClmmIncreasePosition: \"ClmmIncreasePosition\",\n  ClmmDecreasePosition: \"ClmmDecreasePosition\",\n  ClmmClosePosition: \"ClmmClosePosition\",\n  ClmmSwapBaseIn: \"ClmmSwapBaseIn\",\n  ClmmSwapBaseOut: \"ClmmSwapBaseOut\",\n  ClmmInitReward: \"ClmmInitReward\",\n  ClmmSetReward: \"ClmmSetReward\",\n  ClmmCollectReward: \"ClmmCollectReward\",\n\n  AmmV4Swap: \"AmmV4Swap\",\n  AmmV4AddLiquidity: \"AmmV4AddLiquidity\",\n  AmmV4RemoveLiquidity: \"AmmV4RemoveLiquidity\",\n  AmmV4SimulatePoolInfo: \"AmmV4SimulatePoolInfo\",\n  AmmV4SwapBaseIn: \"AmmV4SwapBaseIn\",\n  AmmV4SwapBaseOut: \"AmmV4SwapBaseOut\",\n  AmmV4CreatePool: \"AmmV4CreatePool\",\n  AmmV4InitPool: \"AmmV4InitPool\",\n\n  AmmV5AddLiquidity: \"AmmV5AddLiquidity\",\n  AmmV5RemoveLiquidity: \"AmmV5RemoveLiquidity\",\n  AmmV5SimulatePoolInfo: \"AmmV5SimulatePoolInfo\",\n  AmmV5SwapBaseIn: \"AmmV5SwapBaseIn\",\n  AmmV5SwapBaseOut: \"AmmV5SwapBaseOut\",\n\n  RouteSwap: \"RouteSwap\",\n  RouteSwap1: \"RouteSwap1\",\n  RouteSwap2: \"RouteSwap2\",\n\n  FarmV3Deposit: \"FarmV3Deposit\",\n  FarmV3Withdraw: \"FarmV3Withdraw\",\n  FarmV3CreateLedger: \"FarmV3CreateLedger\",\n\n  FarmV5Deposit: \"FarmV5Deposit\",\n  FarmV5Withdraw: \"FarmV5Withdraw\",\n  FarmV5CreateLedger: \"FarmV5CreateLedger\",\n\n  FarmV6Deposit: \"FarmV6Deposit\",\n  FarmV6Withdraw: \"FarmV6Withdraw\",\n  FarmV6Create: \"FarmV6Create\",\n  FarmV6Restart: \"FarmV6Restart\",\n  FarmV6CreatorAddReward: \"FarmV6CreatorAddReward\",\n  FarmV6CreatorWithdraw: \"FarmV6CreatorWithdraw\",\n\n  CpmmCreatePool: \"CpmmCreatePool\",\n  CpmmAddLiquidity: \"CpmmAddLiquidity\",\n  CpmmWithdrawLiquidity: \"CpmmWithdrawLiquidity\",\n  CpmmSwapBaseIn: \"CpmmSwapBaseIn\",\n  CpmmSwapBaseOut: \"CpmmSwapBaseOut\",\n};\n"],"mappings":"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","names":[]}