UNPKG

@sega-so/sega-sdk

Version:

An SDK for building applications on top of SEGA.

1 lines 24.6 kB
{"version":3,"sources":["../../../src/common/txTool/txUtils.ts","../../../src/common/logger.ts","../../../src/common/txTool/txType.ts"],"sourcesContent":["import {\n Commitment,\n ComputeBudgetProgram,\n Connection,\n EpochInfo,\n Keypair,\n PublicKey,\n SimulatedTransactionResponse,\n Transaction,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\n\nimport { createLogger } from \"../logger\";\nimport { CacheLTA } from \"./lookupTable\";\nimport { InstructionType } from \"./txType\";\n\nimport { ComputeBudgetConfig } from \"@/sega/type\";\nimport { TOKEN_PROGRAM_ID } from \"@solana/spl-token\";\n\nconst logger = createLogger(\"Sega_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 return (await connection.getLatestBlockhash?.({ commitment }))?.blockhash;\n}\n\nexport async function confirmTransaction(connection: Connection, txId: string): Promise<string> {\n connection.getSignatureStatuses([txId]);\n return new Promise((resolve, reject) => {\n const id = setTimeout(reject, 60 * 1000);\n connection.onSignature(\n txId,\n (signatureResult) => {\n clearTimeout(id);\n if (!signatureResult.err) {\n resolve(\"\");\n return;\n }\n reject(Object.assign(signatureResult.err, { txId }));\n },\n \"confirmed\",\n );\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(\"SegaSimuLateTransaction11111111111111111\");\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 const txToBase64 = (transaction: Transaction | VersionedTransaction): string => {\n let serialized = transaction.serialize({ requireAllSignatures: false, verifySignatures: false });\n if (transaction instanceof VersionedTransaction) serialized = toBuffer(serialized);\n try {\n return serialized instanceof Buffer ? serialized.toString(\"base64\") : Buffer.from(serialized).toString(\"base64\");\n } catch {\n return serialized.toString(\"base64\");\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 allBase64.push(txToBase64(transaction));\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 ClmmLockPosition: \"ClmmLockPosition\",\n ClmmHarvestLockPosition: \"ClmmHarvestLockPosition\",\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 FarmV4Withdraw: \"FarmV4Withdraw\",\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 CpmmLockLp: \"CpmmLockLp\",\n CpmmCollectLockFee: \"CpmmCollectLockFee\",\n TransferTip: \"TransferTip\",\n};\n"],"mappings":"6MAAA,OAEE,wBAAAA,EAGA,WAAAC,EACA,aAAAC,EAEA,eAAAC,EAEA,sBAAAC,EACA,wBAAAC,MACK,kBCZP,OAAS,OAAAC,EAAK,OAAAC,MAAW,SAUlB,IAAMC,EAAN,KAAa,CAGlB,YAAYC,EAA+C,CACzD,KAAK,SAAWA,EAAO,WAAa,OAAYA,EAAO,SAAW,EAClE,KAAK,KAAOA,EAAO,IACrB,CAEA,IAAI,MAAMC,EAAoB,CAC5B,KAAK,SAAWA,CAClB,CACA,IAAI,MAAe,CACjB,OAAO,KAAK,IAAI,EAAE,SAAS,CAC7B,CACA,IAAI,YAAqB,CACvB,OAAO,KAAK,IACd,CAEQ,WAAWC,EAA0B,CAC3C,OAAOA,GAAS,KAAK,QACvB,CAEO,SAASC,EAAe,CAC7B,OAAK,KAAK,WAAW,CAAc,GACnC,QAAQ,MAAM,KAAK,KAAM,KAAK,KAAM,mBAAoB,GAAGA,CAAK,EACzD,MAFsC,IAG/C,CAEO,gBAAgBA,EAAe,CAEpC,IAAMC,EAAMD,EAAM,IAAKE,GAAS,OAAOA,GAAQ,SAAW,KAAK,UAAUA,CAAG,EAAIA,CAAI,EAAE,KAAK,IAAI,EAC/F,MAAM,IAAI,MAAMD,CAAG,CACrB,CAEO,WAAWD,EAAe,CAC/B,OAAK,KAAK,WAAW,CAAgB,GACrC,QAAQ,KAAK,KAAK,KAAM,KAAK,KAAM,qBAAsB,GAAGA,CAAK,EAC1D,MAFwC,IAGjD,CAEO,QAAQA,EAAe,CAC5B,OAAK,KAAK,WAAW,CAAa,GAClC,QAAQ,KAAK,KAAK,KAAM,KAAK,KAAM,kBAAmB,GAAGA,CAAK,EACvD,MAFqC,IAG9C,CAEO,SAASA,EAAe,CAC7B,OAAK,KAAK,WAAW,CAAc,GACnC,QAAQ,MAAM,KAAK,KAAM,KAAK,KAAM,mBAAoB,GAAGA,CAAK,EACzD,MAFsC,IAG/C,CACF,EAEMG,EAAkD,CAAC,EACnDC,EAAmD,CAAC,EAEnD,SAASC,EAAaC,EAA4B,CACvD,IAAIC,EAASC,EAAIL,EAAeG,CAAU,EAC1C,GAAI,CAACC,EAAQ,CAEX,IAAMT,EAAWU,EAAIJ,EAAcE,CAAU,EAE7CC,EAAS,IAAIX,EAAO,CAAE,KAAMU,EAAY,SAAAR,CAAS,CAAC,EAClDW,EAAIN,EAAeG,EAAYC,CAAM,CACvC,CAEA,OAAOA,CACT,CCxEO,IAAMG,EAAkB,CAC7B,cAAe,gBACf,YAAa,cACb,UAAW,YACX,aAAc,eACd,eAAgB,iBAChB,SAAU,WACV,OAAQ,SAER,WAAY,aACZ,mBAAoB,qBAEpB,oBAAqB,sBACrB,oBAAqB,sBAGrB,eAAgB,iBAChB,iBAAkB,mBAClB,qBAAsB,uBACtB,qBAAsB,uBACtB,kBAAmB,oBACnB,eAAgB,iBAChB,gBAAiB,kBACjB,eAAgB,iBAChB,cAAe,gBACf,kBAAmB,oBACnB,iBAAkB,mBAClB,wBAAyB,0BAEzB,UAAW,YACX,kBAAmB,oBACnB,qBAAsB,uBACtB,sBAAuB,wBACvB,gBAAiB,kBACjB,iBAAkB,mBAClB,gBAAiB,kBACjB,cAAe,gBAEf,kBAAmB,oBACnB,qBAAsB,uBACtB,sBAAuB,wBACvB,gBAAiB,kBACjB,iBAAkB,mBAElB,UAAW,YACX,WAAY,aACZ,WAAY,aAEZ,cAAe,gBACf,eAAgB,iBAChB,mBAAoB,qBAEpB,eAAgB,iBAEhB,cAAe,gBACf,eAAgB,iBAChB,mBAAoB,qBAEpB,cAAe,gBACf,eAAgB,iBAChB,aAAc,eACd,cAAe,gBACf,uBAAwB,yBACxB,sBAAuB,wBAEvB,eAAgB,iBAChB,iBAAkB,mBAClB,sBAAuB,wBACvB,eAAgB,iBAChB,gBAAiB,kBAEjB,WAAY,aACZ,mBAAoB,qBACpB,YAAa,aACf,EF5DA,OAAS,oBAAAC,MAAwB,oBAEjC,IAAMC,EAASC,EAAa,aAAa,EAE5BC,EAAkB,KAExB,SAASC,EAAiBC,EAG/B,CACA,IAAMC,EAAgC,CAAC,EACjCC,EAAqB,CAAC,EAC5B,OAAIF,EAAO,gBACTC,EAAI,KAAKE,EAAqB,oBAAoB,CAAE,cAAeH,EAAO,aAAc,CAAC,CAAC,EAC1FE,EAAS,KAAKE,EAAgB,mBAAmB,GAE/CJ,EAAO,QACTC,EAAI,KAAKE,EAAqB,oBAAoB,CAAE,MAAOH,EAAO,KAAM,CAAC,CAAC,EAC1EE,EAAS,KAAKE,EAAgB,mBAAmB,GAG5C,CACL,aAAcH,EACd,iBAAkBC,CACpB,CACF,CAEA,SAAsBG,EAAmBC,EAAwBC,EAA+C,QAAAC,EAAA,sBA9ChH,IAAAC,EAAAC,EA+CE,IAAMC,EAAaJ,GAAA,KAAAA,EAAmB,YACtC,OAAQG,EAAA,MAAMD,EAAAH,EAAW,qBAAX,YAAAG,EAAA,KAAAH,EAAgC,CAAE,WAAAK,CAAW,KAAnD,YAAAD,EAAwD,SAClE,GAEA,SAAsBE,EAAmBN,EAAwBO,EAA+B,QAAAL,EAAA,sBAC9F,OAAAF,EAAW,qBAAqB,CAACO,CAAI,CAAC,EAC/B,IAAI,QAAQ,CAACC,EAASC,IAAW,CACtC,IAAMC,EAAK,WAAWD,EAAQ,GAAS,EACvCT,EAAW,YACTO,EACCI,GAAoB,CAEnB,GADA,aAAaD,CAAE,EACX,CAACC,EAAgB,IAAK,CACxBH,EAAQ,EAAE,EACV,MACF,CACAC,EAAO,OAAO,OAAOE,EAAgB,IAAK,CAAE,KAAAJ,CAAK,CAAC,CAAC,CACrD,EACA,WACF,CACF,CAAC,CACH,GAKO,SAASK,EAAwBC,EAAwCC,EAA+B,CACzGD,EAAa,OAAS,GAAGvB,EAAO,aAAa,6BAA6BuB,EAAa,SAAS,CAAC,EAAE,EACnGC,EAAQ,OAAS,GAAGxB,EAAO,aAAa,yBAAyBwB,EAAQ,SAAS,CAAC,EAAE,EAEzF,IAAMC,EAAc,IAAIC,EACxBD,EAAY,gBAAkB,mCAC9BA,EAAY,SAAWD,EAAQ,CAAC,EAChCC,EAAY,IAAI,GAAGF,CAAY,EAE/B,GAAI,CACF,OAAO,OAAO,KAAKE,EAAY,UAAU,CAAE,iBAAkB,EAAM,CAAC,CAAC,EAAE,SAAS,QAAQ,EAAE,OAASvB,CACrG,OAASyB,EAAO,CACd,MAAO,EACT,CACF,CAQA,SAAsBC,EACpBlB,EACAa,EACAM,EACAC,EAAe,GACI,QAAAlB,EAAA,sBACnB,IAAMmB,EAAW,IAAIC,EAAU,0CAA0C,EAEnEC,EAA8B,CAAC,EAEjCR,EAAc,IAAIC,EACtBD,EAAY,SAAWM,EAEvB,QAAWG,KAAeX,EACnBD,EAAwB,CAAC,GAAGG,EAAY,aAAcS,CAAW,EAAG,CAACH,CAAQ,CAAC,IACjFE,EAAa,KAAKR,CAAW,EAC7BA,EAAc,IAAIC,EAClBD,EAAY,SAAWM,GAEzBN,EAAY,IAAIS,CAAW,EAEzBT,EAAY,aAAa,OAAS,GACpCQ,EAAa,KAAKR,CAAW,EAG/B,IAAIU,EAA0C,CAAC,EAE/C,GAAI,CAEF,GADAA,EAAU,MAAMC,EAAoB1B,EAAYuB,EAAcH,CAAY,EACtEK,EAAQ,KAAM,GAAM,EAAE,MAAQ,IAAI,EAAG,MAAM,MAAM,+BAA+B,CACtF,OAASR,EAAO,CACVA,aAAiB,OACnB3B,EAAO,aAAa,sCAAuC,YAAa,CACtE,QAAS2B,EAAM,OACjB,CAAC,CAEL,CAEA,IAAMU,EAAiB,CAAC,EACxB,QAAWC,KAAUH,EAGnB,GAFAnC,EAAO,MAAM,mBAAoBsC,CAAM,EAEnCA,EAAO,KAAM,CACf,IAAMC,EAAcD,EAAO,KAAK,OAAQE,GAAQA,GAAOA,EAAI,SAASX,CAAO,CAAC,EAC5E7B,EAAO,MAAM,eAAgBqC,CAAI,EAC5BE,EAAY,QAAQvC,EAAO,aAAa,iCAAkC,UAAW6B,CAAO,EACjGQ,EAAK,KAAK,GAAGE,CAAW,CAC1B,CAGF,OAAOF,CACT,GAEO,SAASI,EAAuBD,EAAaX,EAAsB,CACxE,IAAMM,EAAUK,EAAI,MAAM,aAAa,EACvC,MAAI,CAACL,GAAWA,EAAQ,SAAW,EAC1BnC,EAAO,aAAa,6CAA6C6B,CAAO,EAAE,EAG5EM,EAAQ,CAAC,CAClB,CAEO,SAASO,GAAmBF,EAAaG,EAAkB,CAGhE,IAAMR,EAFM,IAAI,OAAO,IAAIQ,CAAG,WAAY,GAAG,EAEzB,KAAKH,CAAG,EAC5B,MAAI,CAACL,GAAWA,EAAQ,SAAW,EAC1BnC,EAAO,aAAa,yCAAyC2C,CAAG,EAAE,EAGpER,EAAQ,CAAC,CAClB,CAMO,SAASS,GACdC,EACAC,EAIA,CACA,GAAM,CAACC,EAAWC,CAAK,EAAIhB,EAAU,uBAAuBa,EAAOC,CAAS,EAC5E,MAAO,CAAE,UAAAC,EAAW,MAAAC,CAAM,CAC5B,CAEA,SAAsBZ,EACpB1B,EACAuB,EACAH,EACgB,QAAAlB,EAAA,sBAChB,IAAIuB,EAAiB,CAAC,EACtB,GAAIL,EAAc,CAChB,IAAMmB,EAAqB,MAAMvC,EAAW,mBAAmB,EAEzDwC,EAAgC,CAAC,EACvC,QAAWzB,KAAeQ,EAAc,CACtCR,EAAY,gBAAkBwB,EAAmB,UACjDxB,EAAY,qBAAuBwB,EAAmB,qBAKtD,IAAME,EADU1B,EAAY,SAAS,EACZ,UAAU,EAK7B2B,EADkB3B,EAAY,WAAW0B,CAAQ,EACZ,SAAS,QAAQ,EAE5DD,EAAoB,KAAKE,CAAkB,CAC7C,CAEA,IAAMC,EAAQH,EAAoB,IAAKI,IAE9B,CACL,WAAY,sBACZ,KAHW5C,EAAW,WAAW,CAAC4C,CAAI,EAAG,OAAW,QAAQ,CAI9D,EACD,EAEKC,EAAmD,CAAC,EACpDC,EAAe,GACrB,QAAS,EAAI,EAAG,EAAI,KAAK,KAAKH,EAAM,OAASG,CAAY,EAAG,IAC1DD,EAAQ,KAAKF,EAAM,MAAM,EAAIG,GAAe,EAAI,GAAKA,CAAY,CAAC,EAIpErB,EAAU,MACR,MAAM,QAAQ,IACZoB,EAAQ,IAAW,GAAG3C,EAAA,sBAAI,aAAOF,EAAmB,iBAAiB,CAAC,GAAG,IAAK+C,GAAOA,EAAG,OAAO,KAAK,GAAC,CACvG,GACA,KAAK,CACT,KACE,IAAI,CACFtB,EAAU,MAAM,QAAQ,IACtBF,EAAa,IAAWR,GAAab,EAAA,sBAAG,aAAO,MAAMF,EAAW,oBAAoBe,CAAW,GAAG,OAAK,CACzG,CACF,OAASE,EAAO,CACVA,aAAiB,OACnB3B,EAAO,aAAa,2CAA4C,YAAa,CAC3E,QAAS2B,EAAM,OACjB,CAAC,CAEL,CAGF,OAAOQ,CACT,GAEO,SAASuB,GAAkB,CAChC,aAAAnC,EACA,MAAAoC,EACA,QAAAnC,CACF,EAIY,CACV,OAAOF,EAAwBC,EAAc,CAACoC,EAAO,GAAGnC,CAAO,CAAC,CAClE,CAEO,SAASoC,GAAc,CAC5B,aAAArC,EACA,MAAAoC,EACA,0BAAAE,EACA,gBAAAC,EAAkBC,EAAQ,SAAS,EAAE,UAAU,SAAS,CAC1D,EAKY,CAOV,IAAMC,EANqB,IAAIC,EAAmB,CAChD,SAAUN,EACV,gBAAAG,EACA,aAAAvC,CACF,CAAC,EAEoC,mBAAmB,OAAO,OAAOsC,GAAA,KAAAA,EAA6B,CAAC,CAAC,CAAC,EACtG,GAAI,CAEF,OADoB,OAAO,KAAK,IAAIK,EAAqBF,CAAS,EAAE,UAAU,CAAC,EAAE,SAAS,QAAQ,EAAE,OAC/E9D,CACvB,OAASyB,EAAO,CACd,MAAO,EACT,CACF,CAEA,IAAIwC,EAAqD,CACvD,KAAM,EACN,KAAM,MACR,EAEA,SAAsBC,GAAa1D,EAA4C,QAAAE,EAAA,sBAC7E,GAAI,CAACuD,EAAe,OAAS,KAAK,IAAI,EAAIA,EAAe,MAAQ,IAAO,GAAI,CAC1E,IAAME,EAAO,MAAM3D,EAAW,aAAa,EAC3C,OAAAyD,EAAiB,CACf,KAAM,KAAK,IAAI,EACf,KAAAE,CACF,EACOA,CACT,KACE,QAAOF,EAAe,IAE1B,GAEO,IAAMG,EAAYC,GACnB,OAAO,SAASA,CAAG,EACdA,EACEA,aAAe,WACjB,OAAO,KAAKA,EAAI,OAAQA,EAAI,WAAYA,EAAI,UAAU,EAEtD,OAAO,KAAKA,CAAG,EAIbC,EAAc/C,GAA4D,CACrF,IAAIgD,EAAahD,EAAY,UAAU,CAAE,qBAAsB,GAAO,iBAAkB,EAAM,CAAC,EAC3FA,aAAuByC,IAAsBO,EAAaH,EAASG,CAAU,GACjF,GAAI,CACF,OAAOA,aAAsB,OAASA,EAAW,SAAS,QAAQ,EAAI,OAAO,KAAKA,CAAU,EAAE,SAAS,QAAQ,CACjH,OAAQC,EAAA,CACN,OAAOD,EAAW,SAAS,QAAQ,CACrC,CACF,EAEO,SAASE,GAAc1C,EAAgE,CAC5F,IAAM2C,EAAsB,CAAC,EAC7B,OAAA3C,EAAa,QAASR,GAAgB,CAChCA,aAAuBC,IACpBD,EAAY,kBAAiBA,EAAY,gBAAkBoD,EAAiB,SAAS,GACrFpD,EAAY,WAAUA,EAAY,SAAWsC,EAAQ,SAAS,EAAE,YAEvEa,EAAU,KAAKJ,EAAW/C,CAAW,CAAC,CACxC,CAAC,EACD,QAAQ,IAAI,sBAAuBmD,CAAS,EAErCA,CACT,CAEO,SAASE,GAAoBC,EAAgD,CAClF,IAAIN,EAAaM,EAAG,UAAU,CAAE,qBAAsB,GAAO,iBAAkB,EAAM,CAAC,EACtF,OAAIA,aAAcb,IAAsBO,EAAaH,EAASG,CAAU,GACjEA,EAAW,SAAS,QAAQ,CACrC","names":["ComputeBudgetProgram","Keypair","PublicKey","Transaction","TransactionMessage","VersionedTransaction","get","set","Logger","params","logLevel","level","props","msg","arg","moduleLoggers","moduleLevels","createLogger","moduleName","logger","get","set","InstructionType","TOKEN_PROGRAM_ID","logger","createLogger","MAX_BASE64_SIZE","addComputeBudget","config","ins","insTypes","ComputeBudgetProgram","InstructionType","getRecentBlockHash","connection","propsCommitment","__async","_a","_b","commitment","confirmTransaction","txId","resolve","reject","id","signatureResult","forecastTransactionSize","instructions","signers","transaction","Transaction","error","simulateMultipleInstruction","keyword","batchRequest","feePayer","PublicKey","transactions","instruction","results","simulateTransaction","logs","result","filteredLog","log","parseSimulateLogToJson","parseSimulateValue","key","findProgramAddress","seeds","programId","publicKey","nonce","getLatestBlockhash","encodedTransactions","signData","encodedTransaction","batch","keys","reqData","itemReqIndex","ii","checkLegacyTxSize","payer","checkV0TxSize","lookupTableAddressAccount","recentBlockhash","Keypair","messageV0","TransactionMessage","VersionedTransaction","epochInfoCache","getEpochInfo","data","toBuffer","arr","txToBase64","serialized","e","printSimulate","allBase64","TOKEN_PROGRAM_ID","transformTxToBase64","tx"]}