@solana-program/compute-budget
Advanced tools
| import { TransactionMessage, MicroLamports } from '@solana/kit'; | ||
| /** | ||
| * Finds the index of the first `SetComputeUnitLimit` instruction in a transaction message | ||
| * and its set limit, if any. | ||
| */ | ||
| export declare function findSetComputeUnitLimitInstructionIndexAndUnits(transactionMessage: TransactionMessage): { | ||
| index: number; | ||
| units: number; | ||
| } | null; | ||
| /** | ||
| * Finds the index of the first `SetComputeUnitPrice` instruction in a transaction message | ||
| * and its set micro-lamports, if any. | ||
| */ | ||
| export declare function findSetComputeUnitPriceInstructionIndexAndMicroLamports(transactionMessage: TransactionMessage): { | ||
| index: number; | ||
| microLamports: MicroLamports; | ||
| } | null; | ||
| //# sourceMappingURL=introspect.d.ts.map |
| {"version":3,"file":"introspect.d.ts","sourceRoot":"","sources":["../../src/introspect.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,kBAAkB,EAIlB,aAAa,EAEhB,MAAM,aAAa,CAAC;AASrB;;;GAGG;AACH,wBAAgB,+CAA+C,CAC3D,kBAAkB,EAAE,kBAAkB,GACvC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CASzC;AAaD;;;GAGG;AACH,wBAAgB,uDAAuD,CACnE,kBAAkB,EAAE,kBAAkB,GACvC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,aAAa,CAAA;CAAE,GAAG,IAAI,CAYxD"} |
+35
-15
| 'use strict'; | ||
| var kit = require('@solana/kit'); | ||
| var programClientCore = require('@solana/kit/program-client-core'); | ||
@@ -32,3 +33,6 @@ // src/generated/instructions/requestHeapFrame.ts | ||
| } | ||
| throw new Error("The provided instruction could not be identified as a computeBudget instruction."); | ||
| throw new kit.SolanaError(kit.SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_INSTRUCTION, { | ||
| instructionData: data, | ||
| programName: "computeBudget" | ||
| }); | ||
| } | ||
@@ -69,5 +73,24 @@ function parseComputeBudgetInstruction(instruction) { | ||
| default: | ||
| throw new Error(`Unrecognized instruction type: ${instructionType}`); | ||
| throw new kit.SolanaError(kit.SOLANA_ERROR__PROGRAM_CLIENTS__UNRECOGNIZED_INSTRUCTION_TYPE, { | ||
| instructionType, | ||
| programName: "computeBudget" | ||
| }); | ||
| } | ||
| } | ||
| function computeBudgetProgram() { | ||
| return (client) => { | ||
| return { | ||
| ...client, | ||
| computeBudget: { | ||
| instructions: { | ||
| requestUnits: (input) => programClientCore.addSelfPlanAndSendFunctions(client, getRequestUnitsInstruction(input)), | ||
| requestHeapFrame: (input) => programClientCore.addSelfPlanAndSendFunctions(client, getRequestHeapFrameInstruction(input)), | ||
| setComputeUnitLimit: (input) => programClientCore.addSelfPlanAndSendFunctions(client, getSetComputeUnitLimitInstruction(input)), | ||
| setComputeUnitPrice: (input) => programClientCore.addSelfPlanAndSendFunctions(client, getSetComputeUnitPriceInstruction(input)), | ||
| setLoadedAccountsDataSizeLimit: (input) => programClientCore.addSelfPlanAndSendFunctions(client, getSetLoadedAccountsDataSizeLimitInstruction(input)) | ||
| } | ||
| } | ||
| }; | ||
| }; | ||
| } | ||
@@ -266,4 +289,4 @@ // src/generated/instructions/requestHeapFrame.ts | ||
| var MAX_COMPUTE_UNIT_LIMIT = 14e5; | ||
| function getSetComputeUnitLimitInstructionIndexAndUnits(transactionMessage) { | ||
| const index = getSetComputeUnitLimitInstructionIndex(transactionMessage); | ||
| function findSetComputeUnitLimitInstructionIndexAndUnits(transactionMessage) { | ||
| const index = transactionMessage.instructions.findIndex(isSetComputeUnitLimitInstruction); | ||
| if (index < 0) { | ||
@@ -275,10 +298,7 @@ return null; | ||
| } | ||
| function getSetComputeUnitLimitInstructionIndex(transactionMessage) { | ||
| return transactionMessage.instructions.findIndex(isSetComputeUnitLimitInstruction); | ||
| } | ||
| function isSetComputeUnitLimitInstruction(instruction) { | ||
| return instruction.programAddress === COMPUTE_BUDGET_PROGRAM_ADDRESS && identifyComputeBudgetInstruction(instruction.data) === 2 /* SetComputeUnitLimit */; | ||
| } | ||
| function getSetComputeUnitPriceInstructionIndexAndMicroLamports(transactionMessage) { | ||
| const index = getSetComputeUnitPriceInstructionIndex(transactionMessage); | ||
| function findSetComputeUnitPriceInstructionIndexAndMicroLamports(transactionMessage) { | ||
| const index = transactionMessage.instructions.findIndex(isSetComputeUnitPriceInstruction); | ||
| if (index < 0) { | ||
@@ -293,5 +313,2 @@ return null; | ||
| } | ||
| function getSetComputeUnitPriceInstructionIndex(transactionMessage) { | ||
| return transactionMessage.instructions.findIndex(isSetComputeUnitPriceInstruction); | ||
| } | ||
| function isSetComputeUnitPriceInstruction(instruction) { | ||
@@ -308,3 +325,3 @@ return instruction.programAddress === COMPUTE_BUDGET_PROGRAM_ADDRESS && identifyComputeBudgetInstruction(instruction.data) === 3 /* SetComputeUnitPrice */; | ||
| const getUnits = (previousUnits2) => typeof units === "function" ? units(previousUnits2) : units; | ||
| const instructionDetails = getSetComputeUnitLimitInstructionIndexAndUnits(transactionMessage); | ||
| const instructionDetails = findSetComputeUnitLimitInstructionIndexAndUnits(transactionMessage); | ||
| if (!instructionDetails) { | ||
@@ -333,3 +350,3 @@ return kit.appendTransactionMessageInstruction( | ||
| return async function fn(transactionMessage, config) { | ||
| const instructionDetails = getSetComputeUnitLimitInstructionIndexAndUnits(transactionMessage); | ||
| const instructionDetails = findSetComputeUnitLimitInstructionIndexAndUnits(transactionMessage); | ||
| if (instructionDetails && instructionDetails.units !== PROVISORY_COMPUTE_UNIT_LIMIT && instructionDetails.units !== MAX_COMPUTE_UNIT_LIMIT) { | ||
@@ -412,3 +429,3 @@ return transactionMessage; | ||
| const getMicroLamports = (previousMicroLamports2) => typeof microLamports === "function" ? microLamports(previousMicroLamports2) : microLamports; | ||
| const instructionDetails = getSetComputeUnitPriceInstructionIndexAndMicroLamports(transactionMessage); | ||
| const instructionDetails = findSetComputeUnitPriceInstructionIndexAndMicroLamports(transactionMessage); | ||
| if (!instructionDetails) { | ||
@@ -447,5 +464,8 @@ return kit.appendTransactionMessageInstruction( | ||
| exports.SET_LOADED_ACCOUNTS_DATA_SIZE_LIMIT_DISCRIMINATOR = SET_LOADED_ACCOUNTS_DATA_SIZE_LIMIT_DISCRIMINATOR; | ||
| exports.computeBudgetProgram = computeBudgetProgram; | ||
| exports.estimateAndUpdateProvisoryComputeUnitLimitFactory = estimateAndUpdateProvisoryComputeUnitLimitFactory; | ||
| exports.estimateComputeUnitLimitFactory = estimateComputeUnitLimitFactory; | ||
| exports.fillProvisorySetComputeUnitLimitInstruction = fillProvisorySetComputeUnitLimitInstruction; | ||
| exports.findSetComputeUnitLimitInstructionIndexAndUnits = findSetComputeUnitLimitInstructionIndexAndUnits; | ||
| exports.findSetComputeUnitPriceInstructionIndexAndMicroLamports = findSetComputeUnitPriceInstructionIndexAndMicroLamports; | ||
| exports.getRequestHeapFrameDiscriminatorBytes = getRequestHeapFrameDiscriminatorBytes; | ||
@@ -452,0 +472,0 @@ exports.getRequestHeapFrameInstruction = getRequestHeapFrameInstruction; |
+34
-17
@@ -1,2 +0,3 @@ | ||
| import { containsBytes, getU8Encoder, transformEncoder, getStructEncoder, getU32Encoder, getStructDecoder, getU8Decoder, getU32Decoder, combineCodec, getU64Encoder, getU64Decoder, appendTransactionMessageInstruction, isTransactionMessageWithDurableNonceLifetime, pipe, compileTransaction, getBase64EncodedWireTransaction, SolanaError, SOLANA_ERROR__TRANSACTION__FAILED_TO_ESTIMATE_COMPUTE_LIMIT, SOLANA_ERROR__TRANSACTION__FAILED_WHEN_SIMULATING_TO_ESTIMATE_COMPUTE_LIMIT, getSolanaErrorFromTransactionError, isSolanaError } from '@solana/kit'; | ||
| import { containsBytes, getU8Encoder, SolanaError, SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_INSTRUCTION, SOLANA_ERROR__PROGRAM_CLIENTS__UNRECOGNIZED_INSTRUCTION_TYPE, transformEncoder, getStructEncoder, getU32Encoder, getStructDecoder, getU8Decoder, getU32Decoder, combineCodec, getU64Encoder, getU64Decoder, appendTransactionMessageInstruction, isTransactionMessageWithDurableNonceLifetime, pipe, compileTransaction, getBase64EncodedWireTransaction, SOLANA_ERROR__TRANSACTION__FAILED_TO_ESTIMATE_COMPUTE_LIMIT, SOLANA_ERROR__TRANSACTION__FAILED_WHEN_SIMULATING_TO_ESTIMATE_COMPUTE_LIMIT, getSolanaErrorFromTransactionError, isSolanaError } from '@solana/kit'; | ||
| import { addSelfPlanAndSendFunctions } from '@solana/kit/program-client-core'; | ||
@@ -30,3 +31,6 @@ // src/generated/instructions/requestHeapFrame.ts | ||
| } | ||
| throw new Error("The provided instruction could not be identified as a computeBudget instruction."); | ||
| throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_INSTRUCTION, { | ||
| instructionData: data, | ||
| programName: "computeBudget" | ||
| }); | ||
| } | ||
@@ -67,5 +71,24 @@ function parseComputeBudgetInstruction(instruction) { | ||
| default: | ||
| throw new Error(`Unrecognized instruction type: ${instructionType}`); | ||
| throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__UNRECOGNIZED_INSTRUCTION_TYPE, { | ||
| instructionType, | ||
| programName: "computeBudget" | ||
| }); | ||
| } | ||
| } | ||
| function computeBudgetProgram() { | ||
| return (client) => { | ||
| return { | ||
| ...client, | ||
| computeBudget: { | ||
| instructions: { | ||
| requestUnits: (input) => addSelfPlanAndSendFunctions(client, getRequestUnitsInstruction(input)), | ||
| requestHeapFrame: (input) => addSelfPlanAndSendFunctions(client, getRequestHeapFrameInstruction(input)), | ||
| setComputeUnitLimit: (input) => addSelfPlanAndSendFunctions(client, getSetComputeUnitLimitInstruction(input)), | ||
| setComputeUnitPrice: (input) => addSelfPlanAndSendFunctions(client, getSetComputeUnitPriceInstruction(input)), | ||
| setLoadedAccountsDataSizeLimit: (input) => addSelfPlanAndSendFunctions(client, getSetLoadedAccountsDataSizeLimitInstruction(input)) | ||
| } | ||
| } | ||
| }; | ||
| }; | ||
| } | ||
@@ -264,4 +287,4 @@ // src/generated/instructions/requestHeapFrame.ts | ||
| var MAX_COMPUTE_UNIT_LIMIT = 14e5; | ||
| function getSetComputeUnitLimitInstructionIndexAndUnits(transactionMessage) { | ||
| const index = getSetComputeUnitLimitInstructionIndex(transactionMessage); | ||
| function findSetComputeUnitLimitInstructionIndexAndUnits(transactionMessage) { | ||
| const index = transactionMessage.instructions.findIndex(isSetComputeUnitLimitInstruction); | ||
| if (index < 0) { | ||
@@ -273,10 +296,7 @@ return null; | ||
| } | ||
| function getSetComputeUnitLimitInstructionIndex(transactionMessage) { | ||
| return transactionMessage.instructions.findIndex(isSetComputeUnitLimitInstruction); | ||
| } | ||
| function isSetComputeUnitLimitInstruction(instruction) { | ||
| return instruction.programAddress === COMPUTE_BUDGET_PROGRAM_ADDRESS && identifyComputeBudgetInstruction(instruction.data) === 2 /* SetComputeUnitLimit */; | ||
| } | ||
| function getSetComputeUnitPriceInstructionIndexAndMicroLamports(transactionMessage) { | ||
| const index = getSetComputeUnitPriceInstructionIndex(transactionMessage); | ||
| function findSetComputeUnitPriceInstructionIndexAndMicroLamports(transactionMessage) { | ||
| const index = transactionMessage.instructions.findIndex(isSetComputeUnitPriceInstruction); | ||
| if (index < 0) { | ||
@@ -291,5 +311,2 @@ return null; | ||
| } | ||
| function getSetComputeUnitPriceInstructionIndex(transactionMessage) { | ||
| return transactionMessage.instructions.findIndex(isSetComputeUnitPriceInstruction); | ||
| } | ||
| function isSetComputeUnitPriceInstruction(instruction) { | ||
@@ -306,3 +323,3 @@ return instruction.programAddress === COMPUTE_BUDGET_PROGRAM_ADDRESS && identifyComputeBudgetInstruction(instruction.data) === 3 /* SetComputeUnitPrice */; | ||
| const getUnits = (previousUnits2) => typeof units === "function" ? units(previousUnits2) : units; | ||
| const instructionDetails = getSetComputeUnitLimitInstructionIndexAndUnits(transactionMessage); | ||
| const instructionDetails = findSetComputeUnitLimitInstructionIndexAndUnits(transactionMessage); | ||
| if (!instructionDetails) { | ||
@@ -331,3 +348,3 @@ return appendTransactionMessageInstruction( | ||
| return async function fn(transactionMessage, config) { | ||
| const instructionDetails = getSetComputeUnitLimitInstructionIndexAndUnits(transactionMessage); | ||
| const instructionDetails = findSetComputeUnitLimitInstructionIndexAndUnits(transactionMessage); | ||
| if (instructionDetails && instructionDetails.units !== PROVISORY_COMPUTE_UNIT_LIMIT && instructionDetails.units !== MAX_COMPUTE_UNIT_LIMIT) { | ||
@@ -410,3 +427,3 @@ return transactionMessage; | ||
| const getMicroLamports = (previousMicroLamports2) => typeof microLamports === "function" ? microLamports(previousMicroLamports2) : microLamports; | ||
| const instructionDetails = getSetComputeUnitPriceInstructionIndexAndMicroLamports(transactionMessage); | ||
| const instructionDetails = findSetComputeUnitPriceInstructionIndexAndMicroLamports(transactionMessage); | ||
| if (!instructionDetails) { | ||
@@ -436,4 +453,4 @@ return appendTransactionMessageInstruction( | ||
| export { COMPUTE_BUDGET_PROGRAM_ADDRESS, ComputeBudgetInstruction, MAX_COMPUTE_UNIT_LIMIT, PROVISORY_COMPUTE_UNIT_LIMIT, REQUEST_HEAP_FRAME_DISCRIMINATOR, REQUEST_UNITS_DISCRIMINATOR, SET_COMPUTE_UNIT_LIMIT_DISCRIMINATOR, SET_COMPUTE_UNIT_PRICE_DISCRIMINATOR, SET_LOADED_ACCOUNTS_DATA_SIZE_LIMIT_DISCRIMINATOR, estimateAndUpdateProvisoryComputeUnitLimitFactory, estimateComputeUnitLimitFactory, fillProvisorySetComputeUnitLimitInstruction, getRequestHeapFrameDiscriminatorBytes, getRequestHeapFrameInstruction, getRequestHeapFrameInstructionDataCodec, getRequestHeapFrameInstructionDataDecoder, getRequestHeapFrameInstructionDataEncoder, getRequestUnitsDiscriminatorBytes, getRequestUnitsInstruction, getRequestUnitsInstructionDataCodec, getRequestUnitsInstructionDataDecoder, getRequestUnitsInstructionDataEncoder, getSetComputeUnitLimitDiscriminatorBytes, getSetComputeUnitLimitInstruction, getSetComputeUnitLimitInstructionDataCodec, getSetComputeUnitLimitInstructionDataDecoder, getSetComputeUnitLimitInstructionDataEncoder, getSetComputeUnitPriceDiscriminatorBytes, getSetComputeUnitPriceInstruction, getSetComputeUnitPriceInstructionDataCodec, getSetComputeUnitPriceInstructionDataDecoder, getSetComputeUnitPriceInstructionDataEncoder, getSetLoadedAccountsDataSizeLimitDiscriminatorBytes, getSetLoadedAccountsDataSizeLimitInstruction, getSetLoadedAccountsDataSizeLimitInstructionDataCodec, getSetLoadedAccountsDataSizeLimitInstructionDataDecoder, getSetLoadedAccountsDataSizeLimitInstructionDataEncoder, identifyComputeBudgetInstruction, parseComputeBudgetInstruction, parseRequestHeapFrameInstruction, parseRequestUnitsInstruction, parseSetComputeUnitLimitInstruction, parseSetComputeUnitPriceInstruction, parseSetLoadedAccountsDataSizeLimitInstruction, setTransactionMessageComputeUnitPrice, updateOrAppendSetComputeUnitLimitInstruction, updateOrAppendSetComputeUnitPriceInstruction }; | ||
| export { COMPUTE_BUDGET_PROGRAM_ADDRESS, ComputeBudgetInstruction, MAX_COMPUTE_UNIT_LIMIT, PROVISORY_COMPUTE_UNIT_LIMIT, REQUEST_HEAP_FRAME_DISCRIMINATOR, REQUEST_UNITS_DISCRIMINATOR, SET_COMPUTE_UNIT_LIMIT_DISCRIMINATOR, SET_COMPUTE_UNIT_PRICE_DISCRIMINATOR, SET_LOADED_ACCOUNTS_DATA_SIZE_LIMIT_DISCRIMINATOR, computeBudgetProgram, estimateAndUpdateProvisoryComputeUnitLimitFactory, estimateComputeUnitLimitFactory, fillProvisorySetComputeUnitLimitInstruction, findSetComputeUnitLimitInstructionIndexAndUnits, findSetComputeUnitPriceInstructionIndexAndMicroLamports, getRequestHeapFrameDiscriminatorBytes, getRequestHeapFrameInstruction, getRequestHeapFrameInstructionDataCodec, getRequestHeapFrameInstructionDataDecoder, getRequestHeapFrameInstructionDataEncoder, getRequestUnitsDiscriminatorBytes, getRequestUnitsInstruction, getRequestUnitsInstructionDataCodec, getRequestUnitsInstructionDataDecoder, getRequestUnitsInstructionDataEncoder, getSetComputeUnitLimitDiscriminatorBytes, getSetComputeUnitLimitInstruction, getSetComputeUnitLimitInstructionDataCodec, getSetComputeUnitLimitInstructionDataDecoder, getSetComputeUnitLimitInstructionDataEncoder, getSetComputeUnitPriceDiscriminatorBytes, getSetComputeUnitPriceInstruction, getSetComputeUnitPriceInstructionDataCodec, getSetComputeUnitPriceInstructionDataDecoder, getSetComputeUnitPriceInstructionDataEncoder, getSetLoadedAccountsDataSizeLimitDiscriminatorBytes, getSetLoadedAccountsDataSizeLimitInstruction, getSetLoadedAccountsDataSizeLimitInstructionDataCodec, getSetLoadedAccountsDataSizeLimitInstructionDataDecoder, getSetLoadedAccountsDataSizeLimitInstructionDataEncoder, identifyComputeBudgetInstruction, parseComputeBudgetInstruction, parseRequestHeapFrameInstruction, parseRequestUnitsInstruction, parseSetComputeUnitLimitInstruction, parseSetComputeUnitPriceInstruction, parseSetLoadedAccountsDataSizeLimitInstruction, setTransactionMessageComputeUnitPrice, updateOrAppendSetComputeUnitLimitInstruction, updateOrAppendSetComputeUnitPriceInstruction }; | ||
| //# sourceMappingURL=index.mjs.map | ||
| //# sourceMappingURL=index.mjs.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../../src/generated/programs/computeBudget.ts","../../src/generated/instructions/requestHeapFrame.ts","../../src/generated/instructions/requestUnits.ts","../../src/generated/instructions/setComputeUnitLimit.ts","../../src/generated/instructions/setComputeUnitPrice.ts","../../src/generated/instructions/setLoadedAccountsDataSizeLimit.ts","../../src/constants.ts","../../src/internal.ts","../../src/setComputeLimit.ts","../../src/estimateAndSetComputeLimit.ts","../../src/estimateComputeLimitInternal.ts","../../src/estimateComputeLimit.ts","../../src/setComputePrice.ts"],"names":["ComputeBudgetInstruction","getU8Encoder","transformEncoder","getStructEncoder","getU32Encoder","getStructDecoder","getU8Decoder","getU32Decoder","combineCodec","getU64Decoder","previousUnits","estimateComputeUnitLimit","appendTransactionMessageInstruction","previousMicroLamports"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n containsBytes,\n getU8Encoder,\n type Address,\n type Instruction,\n type InstructionWithData,\n type ReadonlyUint8Array,\n} from '@solana/kit';\nimport {\n parseRequestHeapFrameInstruction,\n parseRequestUnitsInstruction,\n parseSetComputeUnitLimitInstruction,\n parseSetComputeUnitPriceInstruction,\n parseSetLoadedAccountsDataSizeLimitInstruction,\n type ParsedRequestHeapFrameInstruction,\n type ParsedRequestUnitsInstruction,\n type ParsedSetComputeUnitLimitInstruction,\n type ParsedSetComputeUnitPriceInstruction,\n type ParsedSetLoadedAccountsDataSizeLimitInstruction,\n} from '../instructions';\n\nexport const COMPUTE_BUDGET_PROGRAM_ADDRESS =\n 'ComputeBudget111111111111111111111111111111' as Address<'ComputeBudget111111111111111111111111111111'>;\n\nexport enum ComputeBudgetInstruction {\n RequestUnits,\n RequestHeapFrame,\n SetComputeUnitLimit,\n SetComputeUnitPrice,\n SetLoadedAccountsDataSizeLimit,\n}\n\nexport function identifyComputeBudgetInstruction(\n instruction: { data: ReadonlyUint8Array } | ReadonlyUint8Array,\n): ComputeBudgetInstruction {\n const data = 'data' in instruction ? instruction.data : instruction;\n if (containsBytes(data, getU8Encoder().encode(0), 0)) {\n return ComputeBudgetInstruction.RequestUnits;\n }\n if (containsBytes(data, getU8Encoder().encode(1), 0)) {\n return ComputeBudgetInstruction.RequestHeapFrame;\n }\n if (containsBytes(data, getU8Encoder().encode(2), 0)) {\n return ComputeBudgetInstruction.SetComputeUnitLimit;\n }\n if (containsBytes(data, getU8Encoder().encode(3), 0)) {\n return ComputeBudgetInstruction.SetComputeUnitPrice;\n }\n if (containsBytes(data, getU8Encoder().encode(4), 0)) {\n return ComputeBudgetInstruction.SetLoadedAccountsDataSizeLimit;\n }\n throw new Error('The provided instruction could not be identified as a computeBudget instruction.');\n}\n\nexport type ParsedComputeBudgetInstruction<TProgram extends string = 'ComputeBudget111111111111111111111111111111'> =\n | ({ instructionType: ComputeBudgetInstruction.RequestUnits } & ParsedRequestUnitsInstruction<TProgram>)\n | ({ instructionType: ComputeBudgetInstruction.RequestHeapFrame } & ParsedRequestHeapFrameInstruction<TProgram>)\n | ({\n instructionType: ComputeBudgetInstruction.SetComputeUnitLimit;\n } & ParsedSetComputeUnitLimitInstruction<TProgram>)\n | ({\n instructionType: ComputeBudgetInstruction.SetComputeUnitPrice;\n } & ParsedSetComputeUnitPriceInstruction<TProgram>)\n | ({\n instructionType: ComputeBudgetInstruction.SetLoadedAccountsDataSizeLimit;\n } & ParsedSetLoadedAccountsDataSizeLimitInstruction<TProgram>);\n\nexport function parseComputeBudgetInstruction<TProgram extends string>(\n instruction: Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array>,\n): ParsedComputeBudgetInstruction<TProgram> {\n const instructionType = identifyComputeBudgetInstruction(instruction);\n switch (instructionType) {\n case ComputeBudgetInstruction.RequestUnits: {\n return {\n instructionType: ComputeBudgetInstruction.RequestUnits,\n ...parseRequestUnitsInstruction(instruction),\n };\n }\n case ComputeBudgetInstruction.RequestHeapFrame: {\n return {\n instructionType: ComputeBudgetInstruction.RequestHeapFrame,\n ...parseRequestHeapFrameInstruction(instruction),\n };\n }\n case ComputeBudgetInstruction.SetComputeUnitLimit: {\n return {\n instructionType: ComputeBudgetInstruction.SetComputeUnitLimit,\n ...parseSetComputeUnitLimitInstruction(instruction),\n };\n }\n case ComputeBudgetInstruction.SetComputeUnitPrice: {\n return {\n instructionType: ComputeBudgetInstruction.SetComputeUnitPrice,\n ...parseSetComputeUnitPriceInstruction(instruction),\n };\n }\n case ComputeBudgetInstruction.SetLoadedAccountsDataSizeLimit: {\n return {\n instructionType: ComputeBudgetInstruction.SetLoadedAccountsDataSizeLimit,\n ...parseSetLoadedAccountsDataSizeLimitInstruction(instruction),\n };\n }\n default:\n throw new Error(`Unrecognized instruction type: ${instructionType as string}`);\n }\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n getStructDecoder,\n getStructEncoder,\n getU32Decoder,\n getU32Encoder,\n getU8Decoder,\n getU8Encoder,\n transformEncoder,\n type AccountMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyUint8Array,\n} from '@solana/kit';\nimport { COMPUTE_BUDGET_PROGRAM_ADDRESS } from '../programs';\n\nexport const REQUEST_HEAP_FRAME_DISCRIMINATOR = 1;\n\nexport function getRequestHeapFrameDiscriminatorBytes() {\n return getU8Encoder().encode(REQUEST_HEAP_FRAME_DISCRIMINATOR);\n}\n\nexport type RequestHeapFrameInstruction<\n TProgram extends string = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array> & InstructionWithAccounts<TRemainingAccounts>;\n\nexport type RequestHeapFrameInstructionData = {\n discriminator: number;\n /**\n * Requested transaction-wide program heap size in bytes.\n * Must be multiple of 1024. Applies to each program, including CPIs.\n */\n bytes: number;\n};\n\nexport type RequestHeapFrameInstructionDataArgs = {\n /**\n * Requested transaction-wide program heap size in bytes.\n * Must be multiple of 1024. Applies to each program, including CPIs.\n */\n bytes: number;\n};\n\nexport function getRequestHeapFrameInstructionDataEncoder(): FixedSizeEncoder<RequestHeapFrameInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', getU8Encoder()],\n ['bytes', getU32Encoder()],\n ]),\n value => ({ ...value, discriminator: REQUEST_HEAP_FRAME_DISCRIMINATOR }),\n );\n}\n\nexport function getRequestHeapFrameInstructionDataDecoder(): FixedSizeDecoder<RequestHeapFrameInstructionData> {\n return getStructDecoder([\n ['discriminator', getU8Decoder()],\n ['bytes', getU32Decoder()],\n ]);\n}\n\nexport function getRequestHeapFrameInstructionDataCodec(): FixedSizeCodec<\n RequestHeapFrameInstructionDataArgs,\n RequestHeapFrameInstructionData\n> {\n return combineCodec(getRequestHeapFrameInstructionDataEncoder(), getRequestHeapFrameInstructionDataDecoder());\n}\n\nexport type RequestHeapFrameInput = {\n bytes: RequestHeapFrameInstructionDataArgs['bytes'];\n};\n\nexport function getRequestHeapFrameInstruction<TProgramAddress extends Address = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS>(\n input: RequestHeapFrameInput,\n config?: { programAddress?: TProgramAddress },\n): RequestHeapFrameInstruction<TProgramAddress> {\n // Program address.\n const programAddress = config?.programAddress ?? COMPUTE_BUDGET_PROGRAM_ADDRESS;\n\n // Original args.\n const args = { ...input };\n\n return Object.freeze({\n data: getRequestHeapFrameInstructionDataEncoder().encode(args as RequestHeapFrameInstructionDataArgs),\n programAddress,\n } as RequestHeapFrameInstruction<TProgramAddress>);\n}\n\nexport type ParsedRequestHeapFrameInstruction<TProgram extends string = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS> = {\n programAddress: Address<TProgram>;\n data: RequestHeapFrameInstructionData;\n};\n\nexport function parseRequestHeapFrameInstruction<TProgram extends string>(\n instruction: Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array>,\n): ParsedRequestHeapFrameInstruction<TProgram> {\n return {\n programAddress: instruction.programAddress,\n data: getRequestHeapFrameInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n getStructDecoder,\n getStructEncoder,\n getU32Decoder,\n getU32Encoder,\n getU8Decoder,\n getU8Encoder,\n transformEncoder,\n type AccountMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyUint8Array,\n} from '@solana/kit';\nimport { COMPUTE_BUDGET_PROGRAM_ADDRESS } from '../programs';\n\nexport const REQUEST_UNITS_DISCRIMINATOR = 0;\n\nexport function getRequestUnitsDiscriminatorBytes() {\n return getU8Encoder().encode(REQUEST_UNITS_DISCRIMINATOR);\n}\n\nexport type RequestUnitsInstruction<\n TProgram extends string = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array> & InstructionWithAccounts<TRemainingAccounts>;\n\nexport type RequestUnitsInstructionData = {\n discriminator: number;\n /** Units to request for transaction-wide compute. */\n units: number;\n /** Prioritization fee lamports. */\n additionalFee: number;\n};\n\nexport type RequestUnitsInstructionDataArgs = {\n /** Units to request for transaction-wide compute. */\n units: number;\n /** Prioritization fee lamports. */\n additionalFee: number;\n};\n\nexport function getRequestUnitsInstructionDataEncoder(): FixedSizeEncoder<RequestUnitsInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', getU8Encoder()],\n ['units', getU32Encoder()],\n ['additionalFee', getU32Encoder()],\n ]),\n value => ({ ...value, discriminator: REQUEST_UNITS_DISCRIMINATOR }),\n );\n}\n\nexport function getRequestUnitsInstructionDataDecoder(): FixedSizeDecoder<RequestUnitsInstructionData> {\n return getStructDecoder([\n ['discriminator', getU8Decoder()],\n ['units', getU32Decoder()],\n ['additionalFee', getU32Decoder()],\n ]);\n}\n\nexport function getRequestUnitsInstructionDataCodec(): FixedSizeCodec<\n RequestUnitsInstructionDataArgs,\n RequestUnitsInstructionData\n> {\n return combineCodec(getRequestUnitsInstructionDataEncoder(), getRequestUnitsInstructionDataDecoder());\n}\n\nexport type RequestUnitsInput = {\n units: RequestUnitsInstructionDataArgs['units'];\n additionalFee: RequestUnitsInstructionDataArgs['additionalFee'];\n};\n\nexport function getRequestUnitsInstruction<TProgramAddress extends Address = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS>(\n input: RequestUnitsInput,\n config?: { programAddress?: TProgramAddress },\n): RequestUnitsInstruction<TProgramAddress> {\n // Program address.\n const programAddress = config?.programAddress ?? COMPUTE_BUDGET_PROGRAM_ADDRESS;\n\n // Original args.\n const args = { ...input };\n\n return Object.freeze({\n data: getRequestUnitsInstructionDataEncoder().encode(args as RequestUnitsInstructionDataArgs),\n programAddress,\n } as RequestUnitsInstruction<TProgramAddress>);\n}\n\nexport type ParsedRequestUnitsInstruction<TProgram extends string = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS> = {\n programAddress: Address<TProgram>;\n data: RequestUnitsInstructionData;\n};\n\nexport function parseRequestUnitsInstruction<TProgram extends string>(\n instruction: Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array>,\n): ParsedRequestUnitsInstruction<TProgram> {\n return {\n programAddress: instruction.programAddress,\n data: getRequestUnitsInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n getStructDecoder,\n getStructEncoder,\n getU32Decoder,\n getU32Encoder,\n getU8Decoder,\n getU8Encoder,\n transformEncoder,\n type AccountMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyUint8Array,\n} from '@solana/kit';\nimport { COMPUTE_BUDGET_PROGRAM_ADDRESS } from '../programs';\n\nexport const SET_COMPUTE_UNIT_LIMIT_DISCRIMINATOR = 2;\n\nexport function getSetComputeUnitLimitDiscriminatorBytes() {\n return getU8Encoder().encode(SET_COMPUTE_UNIT_LIMIT_DISCRIMINATOR);\n}\n\nexport type SetComputeUnitLimitInstruction<\n TProgram extends string = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array> & InstructionWithAccounts<TRemainingAccounts>;\n\nexport type SetComputeUnitLimitInstructionData = {\n discriminator: number;\n /** Transaction-wide compute unit limit. */\n units: number;\n};\n\nexport type SetComputeUnitLimitInstructionDataArgs = {\n /** Transaction-wide compute unit limit. */\n units: number;\n};\n\nexport function getSetComputeUnitLimitInstructionDataEncoder(): FixedSizeEncoder<SetComputeUnitLimitInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', getU8Encoder()],\n ['units', getU32Encoder()],\n ]),\n value => ({ ...value, discriminator: SET_COMPUTE_UNIT_LIMIT_DISCRIMINATOR }),\n );\n}\n\nexport function getSetComputeUnitLimitInstructionDataDecoder(): FixedSizeDecoder<SetComputeUnitLimitInstructionData> {\n return getStructDecoder([\n ['discriminator', getU8Decoder()],\n ['units', getU32Decoder()],\n ]);\n}\n\nexport function getSetComputeUnitLimitInstructionDataCodec(): FixedSizeCodec<\n SetComputeUnitLimitInstructionDataArgs,\n SetComputeUnitLimitInstructionData\n> {\n return combineCodec(getSetComputeUnitLimitInstructionDataEncoder(), getSetComputeUnitLimitInstructionDataDecoder());\n}\n\nexport type SetComputeUnitLimitInput = {\n units: SetComputeUnitLimitInstructionDataArgs['units'];\n};\n\nexport function getSetComputeUnitLimitInstruction<\n TProgramAddress extends Address = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS,\n>(\n input: SetComputeUnitLimitInput,\n config?: { programAddress?: TProgramAddress },\n): SetComputeUnitLimitInstruction<TProgramAddress> {\n // Program address.\n const programAddress = config?.programAddress ?? COMPUTE_BUDGET_PROGRAM_ADDRESS;\n\n // Original args.\n const args = { ...input };\n\n return Object.freeze({\n data: getSetComputeUnitLimitInstructionDataEncoder().encode(args as SetComputeUnitLimitInstructionDataArgs),\n programAddress,\n } as SetComputeUnitLimitInstruction<TProgramAddress>);\n}\n\nexport type ParsedSetComputeUnitLimitInstruction<TProgram extends string = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS> = {\n programAddress: Address<TProgram>;\n data: SetComputeUnitLimitInstructionData;\n};\n\nexport function parseSetComputeUnitLimitInstruction<TProgram extends string>(\n instruction: Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array>,\n): ParsedSetComputeUnitLimitInstruction<TProgram> {\n return {\n programAddress: instruction.programAddress,\n data: getSetComputeUnitLimitInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n getStructDecoder,\n getStructEncoder,\n getU64Decoder,\n getU64Encoder,\n getU8Decoder,\n getU8Encoder,\n transformEncoder,\n type AccountMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyUint8Array,\n} from '@solana/kit';\nimport { COMPUTE_BUDGET_PROGRAM_ADDRESS } from '../programs';\n\nexport const SET_COMPUTE_UNIT_PRICE_DISCRIMINATOR = 3;\n\nexport function getSetComputeUnitPriceDiscriminatorBytes() {\n return getU8Encoder().encode(SET_COMPUTE_UNIT_PRICE_DISCRIMINATOR);\n}\n\nexport type SetComputeUnitPriceInstruction<\n TProgram extends string = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array> & InstructionWithAccounts<TRemainingAccounts>;\n\nexport type SetComputeUnitPriceInstructionData = {\n discriminator: number;\n /** Transaction compute unit price used for prioritization fees. */\n microLamports: bigint;\n};\n\nexport type SetComputeUnitPriceInstructionDataArgs = {\n /** Transaction compute unit price used for prioritization fees. */\n microLamports: number | bigint;\n};\n\nexport function getSetComputeUnitPriceInstructionDataEncoder(): FixedSizeEncoder<SetComputeUnitPriceInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', getU8Encoder()],\n ['microLamports', getU64Encoder()],\n ]),\n value => ({ ...value, discriminator: SET_COMPUTE_UNIT_PRICE_DISCRIMINATOR }),\n );\n}\n\nexport function getSetComputeUnitPriceInstructionDataDecoder(): FixedSizeDecoder<SetComputeUnitPriceInstructionData> {\n return getStructDecoder([\n ['discriminator', getU8Decoder()],\n ['microLamports', getU64Decoder()],\n ]);\n}\n\nexport function getSetComputeUnitPriceInstructionDataCodec(): FixedSizeCodec<\n SetComputeUnitPriceInstructionDataArgs,\n SetComputeUnitPriceInstructionData\n> {\n return combineCodec(getSetComputeUnitPriceInstructionDataEncoder(), getSetComputeUnitPriceInstructionDataDecoder());\n}\n\nexport type SetComputeUnitPriceInput = {\n microLamports: SetComputeUnitPriceInstructionDataArgs['microLamports'];\n};\n\nexport function getSetComputeUnitPriceInstruction<\n TProgramAddress extends Address = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS,\n>(\n input: SetComputeUnitPriceInput,\n config?: { programAddress?: TProgramAddress },\n): SetComputeUnitPriceInstruction<TProgramAddress> {\n // Program address.\n const programAddress = config?.programAddress ?? COMPUTE_BUDGET_PROGRAM_ADDRESS;\n\n // Original args.\n const args = { ...input };\n\n return Object.freeze({\n data: getSetComputeUnitPriceInstructionDataEncoder().encode(args as SetComputeUnitPriceInstructionDataArgs),\n programAddress,\n } as SetComputeUnitPriceInstruction<TProgramAddress>);\n}\n\nexport type ParsedSetComputeUnitPriceInstruction<TProgram extends string = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS> = {\n programAddress: Address<TProgram>;\n data: SetComputeUnitPriceInstructionData;\n};\n\nexport function parseSetComputeUnitPriceInstruction<TProgram extends string>(\n instruction: Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array>,\n): ParsedSetComputeUnitPriceInstruction<TProgram> {\n return {\n programAddress: instruction.programAddress,\n data: getSetComputeUnitPriceInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n getStructDecoder,\n getStructEncoder,\n getU32Decoder,\n getU32Encoder,\n getU8Decoder,\n getU8Encoder,\n transformEncoder,\n type AccountMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyUint8Array,\n} from '@solana/kit';\nimport { COMPUTE_BUDGET_PROGRAM_ADDRESS } from '../programs';\n\nexport const SET_LOADED_ACCOUNTS_DATA_SIZE_LIMIT_DISCRIMINATOR = 4;\n\nexport function getSetLoadedAccountsDataSizeLimitDiscriminatorBytes() {\n return getU8Encoder().encode(SET_LOADED_ACCOUNTS_DATA_SIZE_LIMIT_DISCRIMINATOR);\n}\n\nexport type SetLoadedAccountsDataSizeLimitInstruction<\n TProgram extends string = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array> & InstructionWithAccounts<TRemainingAccounts>;\n\nexport type SetLoadedAccountsDataSizeLimitInstructionData = { discriminator: number; accountDataSizeLimit: number };\n\nexport type SetLoadedAccountsDataSizeLimitInstructionDataArgs = { accountDataSizeLimit: number };\n\nexport function getSetLoadedAccountsDataSizeLimitInstructionDataEncoder(): FixedSizeEncoder<SetLoadedAccountsDataSizeLimitInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', getU8Encoder()],\n ['accountDataSizeLimit', getU32Encoder()],\n ]),\n value => ({ ...value, discriminator: SET_LOADED_ACCOUNTS_DATA_SIZE_LIMIT_DISCRIMINATOR }),\n );\n}\n\nexport function getSetLoadedAccountsDataSizeLimitInstructionDataDecoder(): FixedSizeDecoder<SetLoadedAccountsDataSizeLimitInstructionData> {\n return getStructDecoder([\n ['discriminator', getU8Decoder()],\n ['accountDataSizeLimit', getU32Decoder()],\n ]);\n}\n\nexport function getSetLoadedAccountsDataSizeLimitInstructionDataCodec(): FixedSizeCodec<\n SetLoadedAccountsDataSizeLimitInstructionDataArgs,\n SetLoadedAccountsDataSizeLimitInstructionData\n> {\n return combineCodec(\n getSetLoadedAccountsDataSizeLimitInstructionDataEncoder(),\n getSetLoadedAccountsDataSizeLimitInstructionDataDecoder(),\n );\n}\n\nexport type SetLoadedAccountsDataSizeLimitInput = {\n accountDataSizeLimit: SetLoadedAccountsDataSizeLimitInstructionDataArgs['accountDataSizeLimit'];\n};\n\nexport function getSetLoadedAccountsDataSizeLimitInstruction<\n TProgramAddress extends Address = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS,\n>(\n input: SetLoadedAccountsDataSizeLimitInput,\n config?: { programAddress?: TProgramAddress },\n): SetLoadedAccountsDataSizeLimitInstruction<TProgramAddress> {\n // Program address.\n const programAddress = config?.programAddress ?? COMPUTE_BUDGET_PROGRAM_ADDRESS;\n\n // Original args.\n const args = { ...input };\n\n return Object.freeze({\n data: getSetLoadedAccountsDataSizeLimitInstructionDataEncoder().encode(\n args as SetLoadedAccountsDataSizeLimitInstructionDataArgs,\n ),\n programAddress,\n } as SetLoadedAccountsDataSizeLimitInstruction<TProgramAddress>);\n}\n\nexport type ParsedSetLoadedAccountsDataSizeLimitInstruction<\n TProgram extends string = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS,\n> = { programAddress: Address<TProgram>; data: SetLoadedAccountsDataSizeLimitInstructionData };\n\nexport function parseSetLoadedAccountsDataSizeLimitInstruction<TProgram extends string>(\n instruction: Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array>,\n): ParsedSetLoadedAccountsDataSizeLimitInstruction<TProgram> {\n return {\n programAddress: instruction.programAddress,\n data: getSetLoadedAccountsDataSizeLimitInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * A provisory compute unit limit is used to indicate that the transaction\n * should be estimated for compute units before being sent to the network.\n *\n * Setting it to zero ensures the transaction fails unless it is properly estimated.\n */\nexport const PROVISORY_COMPUTE_UNIT_LIMIT = 0;\n\n/**\n * The maximum compute unit limit that can be set for a transaction.\n */\nexport const MAX_COMPUTE_UNIT_LIMIT = 1_400_000;\n","import {\n TransactionMessage,\n getU32Decoder,\n getU64Decoder,\n Instruction,\n MicroLamports,\n ReadonlyUint8Array,\n} from '@solana/kit';\nimport {\n COMPUTE_BUDGET_PROGRAM_ADDRESS,\n ComputeBudgetInstruction,\n identifyComputeBudgetInstruction,\n SetComputeUnitLimitInstruction,\n SetComputeUnitPriceInstruction,\n} from './generated';\n\n/**\n * Finds the index of the first `SetComputeUnitLimit` instruction in a transaction message\n * and its set limit, if any.\n */\nexport function getSetComputeUnitLimitInstructionIndexAndUnits(\n transactionMessage: TransactionMessage,\n): { index: number; units: number } | null {\n const index = getSetComputeUnitLimitInstructionIndex(transactionMessage);\n if (index < 0) {\n return null;\n }\n\n const units = getU32Decoder().decode(transactionMessage.instructions[index].data as ReadonlyUint8Array, 1);\n\n return { index, units };\n}\n\n/**\n * Finds the index of the first `SetComputeUnitLimit` instruction in a transaction message, if any.\n */\nexport function getSetComputeUnitLimitInstructionIndex(transactionMessage: TransactionMessage) {\n return transactionMessage.instructions.findIndex(isSetComputeUnitLimitInstruction);\n}\n\n/**\n * Checks if the given instruction is a `SetComputeUnitLimit` instruction.\n */\nexport function isSetComputeUnitLimitInstruction(\n instruction: Instruction,\n): instruction is SetComputeUnitLimitInstruction {\n return (\n instruction.programAddress === COMPUTE_BUDGET_PROGRAM_ADDRESS &&\n identifyComputeBudgetInstruction(instruction.data as Uint8Array) ===\n ComputeBudgetInstruction.SetComputeUnitLimit\n );\n}\n\n/**\n * Finds the index of the first `SetComputeUnitPrice` instruction in a transaction message\n * and its set micro-lamports, if any.\n */\nexport function getSetComputeUnitPriceInstructionIndexAndMicroLamports(\n transactionMessage: TransactionMessage,\n): { index: number; microLamports: MicroLamports } | null {\n const index = getSetComputeUnitPriceInstructionIndex(transactionMessage);\n if (index < 0) {\n return null;\n }\n\n const microLamports = getU64Decoder().decode(\n transactionMessage.instructions[index].data as ReadonlyUint8Array,\n 1,\n ) as MicroLamports;\n\n return { index, microLamports };\n}\n\n/**\n * Finds the index of the first `SetComputeUnitPrice` instruction in a transaction message, if any.\n */\nexport function getSetComputeUnitPriceInstructionIndex(transactionMessage: TransactionMessage) {\n return transactionMessage.instructions.findIndex(isSetComputeUnitPriceInstruction);\n}\n\n/**\n * Checks if the given instruction is a `SetComputeUnitPrice` instruction.\n */\nexport function isSetComputeUnitPriceInstruction(\n instruction: Instruction,\n): instruction is SetComputeUnitPriceInstruction {\n return (\n instruction.programAddress === COMPUTE_BUDGET_PROGRAM_ADDRESS &&\n identifyComputeBudgetInstruction(instruction.data as Uint8Array) ===\n ComputeBudgetInstruction.SetComputeUnitPrice\n );\n}\n","import { appendTransactionMessageInstruction, TransactionMessage } from '@solana/kit';\nimport { PROVISORY_COMPUTE_UNIT_LIMIT } from './constants';\nimport { getSetComputeUnitLimitInstruction } from './generated';\nimport { getSetComputeUnitLimitInstructionIndexAndUnits } from './internal';\n\n/**\n * Appends a `SetComputeUnitLimit` instruction with a provisory\n * compute unit limit to a given transaction message\n * if and only if it does not already have one.\n *\n * @example\n * ```ts\n * const transactionMessage = pipe(\n * createTransactionMessage({ version: 0 }),\n * fillProvisorySetComputeUnitLimitInstruction,\n * // ...\n * );\n * ```\n */\nexport function fillProvisorySetComputeUnitLimitInstruction<TTransactionMessage extends TransactionMessage>(\n transactionMessage: TTransactionMessage,\n) {\n return updateOrAppendSetComputeUnitLimitInstruction(\n previousUnits => (previousUnits === null ? PROVISORY_COMPUTE_UNIT_LIMIT : previousUnits),\n transactionMessage,\n );\n}\n\n/**\n * Updates the first `SetComputeUnitLimit` instruction in a transaction message\n * with the given units, or appends a new instruction if none exists.\n * A function of the current value can be provided instead of a static value.\n *\n * @param units - The new compute unit limit, or a function that takes the previous\n * compute unit limit and returns the new limit.\n * @param transactionMessage - The transaction message to update.\n *\n * @example\n * ```ts\n * const updatedTransactionMessage = updateOrAppendSetComputeUnitLimitInstruction(\n * // E.g. Keep the current limit if it is set, otherwise set it to the maximum.\n * (currentUnits) => currentUnits === null ? MAX_COMPUTE_UNIT_LIMIT : currentUnits,\n * transactionMessage,\n * );\n * ```\n */\nexport function updateOrAppendSetComputeUnitLimitInstruction<TTransactionMessage extends TransactionMessage>(\n units: number | ((previousUnits: number | null) => number),\n transactionMessage: TTransactionMessage,\n): TTransactionMessage {\n const getUnits = (previousUnits: number | null): number =>\n typeof units === 'function' ? units(previousUnits) : units;\n const instructionDetails = getSetComputeUnitLimitInstructionIndexAndUnits(transactionMessage);\n\n if (!instructionDetails) {\n return appendTransactionMessageInstruction(\n getSetComputeUnitLimitInstruction({ units: getUnits(null) }),\n transactionMessage,\n ) as TTransactionMessage;\n }\n\n const { index, units: previousUnits } = instructionDetails;\n const newUnits = getUnits(previousUnits);\n if (newUnits === previousUnits) {\n return transactionMessage;\n }\n\n const newInstruction = getSetComputeUnitLimitInstruction({ units: newUnits });\n const newInstructions = [...transactionMessage.instructions];\n newInstructions.splice(index, 1, newInstruction);\n return Object.freeze({\n ...transactionMessage,\n instructions: newInstructions,\n }) as TTransactionMessage;\n}\n","import { TransactionMessage, TransactionMessageWithFeePayer } from '@solana/kit';\nimport { MAX_COMPUTE_UNIT_LIMIT, PROVISORY_COMPUTE_UNIT_LIMIT } from './constants';\nimport {\n EstimateComputeUnitLimitFactoryFunction,\n EstimateComputeUnitLimitFactoryFunctionConfig,\n} from './estimateComputeLimitInternal';\nimport { getSetComputeUnitLimitInstructionIndexAndUnits } from './internal';\nimport { updateOrAppendSetComputeUnitLimitInstruction } from './setComputeLimit';\n\ntype EstimateAndUpdateProvisoryComputeUnitLimitFactoryFunction = <\n TTransactionMessage extends TransactionMessage & TransactionMessageWithFeePayer,\n>(\n transactionMessage: TTransactionMessage,\n config?: EstimateComputeUnitLimitFactoryFunctionConfig,\n) => Promise<TTransactionMessage>;\n\n/**\n * Given a transaction message, if it does not have an explicit compute unit limit,\n * estimates the compute unit limit and updates the transaction message with\n * the estimated limit. Otherwise, returns the transaction message unchanged.\n *\n * It requires a function that estimates the compute unit limit.\n *\n * @example\n * ```ts\n * const estimateAndUpdateCUs = estimateAndUpdateProvisoryComputeUnitLimitFactory(\n * estimateComputeUnitLimitFactory({ rpc })\n * );\n *\n * const transactionMessageWithCUs = await estimateAndUpdateCUs(transactionMessage);\n * ```\n *\n * @see {@link estimateAndUpdateProvisoryComputeUnitLimitFactory}\n */\nexport function estimateAndUpdateProvisoryComputeUnitLimitFactory(\n estimateComputeUnitLimit: EstimateComputeUnitLimitFactoryFunction,\n): EstimateAndUpdateProvisoryComputeUnitLimitFactoryFunction {\n return async function fn(transactionMessage, config) {\n const instructionDetails = getSetComputeUnitLimitInstructionIndexAndUnits(transactionMessage);\n\n // If the transaction message already has a compute unit limit instruction\n // which is set to a specific value — i.e. not 0 or the maximum limit —\n // we don't need to estimate the compute unit limit.\n if (\n instructionDetails &&\n instructionDetails.units !== PROVISORY_COMPUTE_UNIT_LIMIT &&\n instructionDetails.units !== MAX_COMPUTE_UNIT_LIMIT\n ) {\n return transactionMessage;\n }\n\n return updateOrAppendSetComputeUnitLimitInstruction(\n await estimateComputeUnitLimit(transactionMessage, config),\n transactionMessage,\n );\n };\n}\n","import {\n TransactionMessage,\n Commitment,\n compileTransaction,\n getBase64EncodedWireTransaction,\n getSolanaErrorFromTransactionError,\n isSolanaError,\n isTransactionMessageWithDurableNonceLifetime,\n pipe,\n Rpc,\n SimulateTransactionApi,\n Slot,\n SOLANA_ERROR__TRANSACTION__FAILED_TO_ESTIMATE_COMPUTE_LIMIT,\n SOLANA_ERROR__TRANSACTION__FAILED_WHEN_SIMULATING_TO_ESTIMATE_COMPUTE_LIMIT,\n SolanaError,\n Transaction,\n TransactionMessageWithFeePayer,\n} from '@solana/kit';\nimport { updateOrAppendSetComputeUnitLimitInstruction } from './setComputeLimit';\nimport { MAX_COMPUTE_UNIT_LIMIT } from './constants';\n\nexport type EstimateComputeUnitLimitFactoryConfig = Readonly<{\n /** An object that supports the {@link SimulateTransactionApi} of the Solana RPC API */\n rpc: Rpc<SimulateTransactionApi>;\n}>;\n\nexport type EstimateComputeUnitLimitFactoryFunction = (\n transactionMessage: TransactionMessage & TransactionMessageWithFeePayer,\n config?: EstimateComputeUnitLimitFactoryFunctionConfig,\n) => Promise<number>;\n\nexport type EstimateComputeUnitLimitFactoryFunctionConfig = {\n abortSignal?: AbortSignal;\n /**\n * Compute the estimate as of the highest slot that has reached this level of commitment.\n *\n * @defaultValue Whichever default is applied by the underlying {@link RpcApi} in use. For\n * example, when using an API created by a `createSolanaRpc*()` helper, the default commitment\n * is `\"confirmed\"` unless configured otherwise. Unmitigated by an API layer on the client, the\n * default commitment applied by the server is `\"finalized\"`.\n */\n commitment?: Commitment;\n /**\n * Prevents accessing stale data by enforcing that the RPC node has processed transactions up to\n * this slot\n */\n minContextSlot?: Slot;\n};\n\ntype EstimateComputeUnitLimitConfig = EstimateComputeUnitLimitFactoryFunctionConfig &\n Readonly<{\n rpc: Rpc<SimulateTransactionApi>;\n transactionMessage: TransactionMessage & TransactionMessageWithFeePayer;\n }>;\n\n/**\n * Simulates a transaction message on the network and returns the number of compute units it\n * consumed during simulation.\n *\n * The estimate this function returns can be used to set a compute unit limit on the transaction.\n * Correctly budgeting a compute unit limit for your transaction message can increase the probability\n * that your transaction will be accepted for processing.\n *\n * If you don't declare a compute unit limit on your transaction, validators will assume an upper\n * limit of 200K compute units (CU) per instruction. Since validators have an incentive to pack as\n * many transactions into each block as possible, they may choose to include transactions that they\n * know will fit into the remaining compute budget for the current block over transactions that\n * might not. For this reason, you should set a compute unit limit on each of your transaction\n * messages, whenever possible.\n *\n * ## Example\n *\n * ```ts\n * import { getSetComputeLimitInstruction } from '@solana-program/compute-budget';\n * import { createSolanaRpc, getComputeUnitEstimateForTransactionMessageFactory, pipe } from '@solana/kit';\n *\n * // Create an estimator function.\n * const rpc = createSolanaRpc('http://127.0.0.1:8899');\n * const getComputeUnitEstimateForTransactionMessage =\n * getComputeUnitEstimateForTransactionMessageFactory({ rpc });\n *\n * // Create your transaction message.\n * const transactionMessage = pipe(\n * createTransactionMessage({ version: 'legacy' }),\n * /* ... *\\/\n * );\n *\n * // Request an estimate of the actual compute units this message will consume.\n * const computeUnitsEstimate =\n * await getComputeUnitEstimateForTransactionMessage(transactionMessage);\n *\n * // Set the transaction message's compute unit budget.\n * const transactionMessageWithComputeUnitLimit = prependTransactionMessageInstruction(\n * getSetComputeLimitInstruction({ units: computeUnitsEstimate }),\n * transactionMessage,\n * );\n * ```\n *\n * > [!WARNING]\n * > The compute unit estimate is just that – an estimate. The compute unit consumption of the\n * > actual transaction might be higher or lower than what was observed in simulation. Unless you\n * > are confident that your particular transaction message will consume the same or fewer compute\n * > units as was estimated, you might like to augment the estimate by either a fixed number of CUs\n * > or a multiplier.\n *\n * > [!NOTE]\n * > If you are preparing an _unsigned_ transaction, destined to be signed and submitted to the\n * > network by a wallet, you might like to leave it up to the wallet to determine the compute unit\n * > limit. Consider that the wallet might have a more global view of how many compute units certain\n * > types of transactions consume, and might be able to make better estimates of an appropriate\n * > compute unit budget.\n */\nexport async function estimateComputeUnitLimit({\n transactionMessage,\n ...configs\n}: EstimateComputeUnitLimitConfig): Promise<number> {\n const replaceRecentBlockhash = !isTransactionMessageWithDurableNonceLifetime(transactionMessage);\n const transaction = pipe(\n transactionMessage,\n m => updateOrAppendSetComputeUnitLimitInstruction(MAX_COMPUTE_UNIT_LIMIT, m),\n compileTransaction,\n );\n\n return await simulateTransactionAndGetConsumedUnits({\n transaction,\n replaceRecentBlockhash,\n ...configs,\n });\n}\n\ntype SimulateTransactionAndGetConsumedUnitsConfig = Omit<EstimateComputeUnitLimitConfig, 'transactionMessage'> &\n Readonly<{ replaceRecentBlockhash?: boolean; transaction: Transaction }>;\n\nasync function simulateTransactionAndGetConsumedUnits({\n abortSignal,\n rpc,\n transaction,\n ...simulateConfig\n}: SimulateTransactionAndGetConsumedUnitsConfig): Promise<number> {\n const wireTransactionBytes = getBase64EncodedWireTransaction(transaction);\n\n try {\n const {\n value: { err: transactionError, unitsConsumed },\n } = await rpc\n .simulateTransaction(wireTransactionBytes, {\n ...simulateConfig,\n encoding: 'base64',\n sigVerify: false,\n })\n .send({ abortSignal });\n if (unitsConsumed == null) {\n // This should never be hit, because all RPCs should support `unitsConsumed` by now.\n throw new SolanaError(SOLANA_ERROR__TRANSACTION__FAILED_TO_ESTIMATE_COMPUTE_LIMIT);\n }\n // FIXME(https://github.com/anza-xyz/agave/issues/1295): The simulation response returns\n // compute units as a u64, but the `SetComputeLimit` instruction only accepts a u32. Until\n // this changes, downcast it.\n const downcastUnitsConsumed = unitsConsumed > 4_294_967_295n ? 4_294_967_295 : Number(unitsConsumed);\n if (transactionError) {\n throw new SolanaError(SOLANA_ERROR__TRANSACTION__FAILED_WHEN_SIMULATING_TO_ESTIMATE_COMPUTE_LIMIT, {\n cause: getSolanaErrorFromTransactionError(transactionError),\n unitsConsumed: downcastUnitsConsumed,\n });\n }\n return downcastUnitsConsumed;\n } catch (e) {\n if (isSolanaError(e, SOLANA_ERROR__TRANSACTION__FAILED_WHEN_SIMULATING_TO_ESTIMATE_COMPUTE_LIMIT)) throw e;\n throw new SolanaError(SOLANA_ERROR__TRANSACTION__FAILED_TO_ESTIMATE_COMPUTE_LIMIT, { cause: e });\n }\n}\n","import {\n estimateComputeUnitLimit,\n EstimateComputeUnitLimitFactoryConfig,\n EstimateComputeUnitLimitFactoryFunction,\n} from './estimateComputeLimitInternal';\n\n/**\n * Use this utility to estimate the actual compute unit cost of a given transaction message.\n *\n * Correctly budgeting a compute unit limit for your transaction message can increase the\n * probability that your transaction will be accepted for processing. If you don't declare a compute\n * unit limit on your transaction, validators will assume an upper limit of 200K compute units (CU)\n * per instruction.\n *\n * Since validators have an incentive to pack as many transactions into each block as possible, they\n * may choose to include transactions that they know will fit into the remaining compute budget for\n * the current block over transactions that might not. For this reason, you should set a compute\n * unit limit on each of your transaction messages, whenever possible.\n *\n * > [!WARNING]\n * > The compute unit estimate is just that -- an estimate. The compute unit consumption of the\n * > actual transaction might be higher or lower than what was observed in simulation. Unless you\n * > are confident that your particular transaction message will consume the same or fewer compute\n * > units as was estimated, you might like to augment the estimate by either a fixed number of CUs\n * > or a multiplier.\n *\n * > [!NOTE]\n * > If you are preparing an _unsigned_ transaction, destined to be signed and submitted to the\n * > network by a wallet, you might like to leave it up to the wallet to determine the compute unit\n * > limit. Consider that the wallet might have a more global view of how many compute units certain\n * > types of transactions consume, and might be able to make better estimates of an appropriate\n * > compute unit budget.\n *\n * > [!INFO]\n * > In the event that a transaction message does not already have a `SetComputeUnitLimit`\n * > instruction, this function will add one before simulation. This ensures that the compute unit\n * > consumption of the `SetComputeUnitLimit` instruction itself is included in the estimate.\n *\n * @param config\n *\n * @example\n * ```ts\n * import { getSetComputeUnitLimitInstruction } from '@solana-program/compute-budget';\n * import { createSolanaRpc, estimateComputeUnitLimitFactory, pipe } from '@solana/kit';\n *\n * // Create an estimator function.\n * const rpc = createSolanaRpc('http://127.0.0.1:8899');\n * const estimateComputeUnitLimit = estimateComputeUnitLimitFactory({ rpc });\n *\n * // Create your transaction message.\n * const transactionMessage = pipe(\n * createTransactionMessage({ version: 'legacy' }),\n * /* ... *\\/\n * );\n *\n * // Request an estimate of the actual compute units this message will consume. This is done by\n * // simulating the transaction and grabbing the estimated compute units from the result.\n * const estimatedUnits = await estimateComputeUnitLimit(transactionMessage);\n *\n * // Set the transaction message's compute unit budget.\n * const transactionMessageWithComputeUnitLimit = prependTransactionMessageInstruction(\n * getSetComputeUnitLimitInstruction({ units: estimatedUnits }),\n * transactionMessage,\n * );\n * ```\n */\nexport function estimateComputeUnitLimitFactory({\n rpc,\n}: EstimateComputeUnitLimitFactoryConfig): EstimateComputeUnitLimitFactoryFunction {\n return async function estimateComputeUnitLimitFactoryFunction(transactionMessage, config) {\n return await estimateComputeUnitLimit({\n ...config,\n rpc,\n transactionMessage,\n });\n };\n}\n","import { appendTransactionMessageInstruction, TransactionMessage, MicroLamports } from '@solana/kit';\nimport { getSetComputeUnitPriceInstruction } from './generated';\nimport { getSetComputeUnitPriceInstructionIndexAndMicroLamports } from './internal';\n\n/**\n * Sets the compute unit price of a transaction message in micro-Lamports.\n *\n * @example\n * ```ts\n * const transactionMessage = pipe(\n * createTransactionMessage({ version: 0 }),\n * (m) => setTransactionMessageComputeUnitPrice(10_000, m),\n * // ...\n * );\n * ```\n */\nexport function setTransactionMessageComputeUnitPrice<TTransactionMessage extends TransactionMessage>(\n microLamports: number | bigint,\n transactionMessage: TTransactionMessage,\n) {\n return appendTransactionMessageInstruction(\n getSetComputeUnitPriceInstruction({ microLamports }),\n transactionMessage,\n );\n}\n\n/**\n * Updates the first `SetComputeUnitPrice` instruction in a transaction message\n * with the given micro-Lamports, or appends a new instruction if none exists.\n * A function of the current value can be provided instead of a static value.\n *\n * @param microLamports - The new compute unit price, or a function that\n * takes the previous price and returns the new one.\n * @param transactionMessage - The transaction message to update.\n *\n * @example\n * ```ts\n * const updatedTransactionMessage = updateOrAppendSetComputeUnitPriceInstruction(\n * // E.g. double the current price or set it to 10_000 if it isn't set.\n * (currentPrice) => currentPrice === null ? 10_000 : currentPrice * 2,\n * transactionMessage,\n * );\n * ```\n */\nexport function updateOrAppendSetComputeUnitPriceInstruction<TTransactionMessage extends TransactionMessage>(\n microLamports: MicroLamports | ((previousMicroLamports: MicroLamports | null) => MicroLamports),\n transactionMessage: TTransactionMessage,\n): TTransactionMessage {\n const getMicroLamports = (previousMicroLamports: MicroLamports | null): MicroLamports =>\n typeof microLamports === 'function' ? microLamports(previousMicroLamports) : microLamports;\n const instructionDetails = getSetComputeUnitPriceInstructionIndexAndMicroLamports(transactionMessage);\n\n if (!instructionDetails) {\n return appendTransactionMessageInstruction(\n getSetComputeUnitPriceInstruction({\n microLamports: getMicroLamports(null),\n }),\n transactionMessage,\n ) as TTransactionMessage;\n }\n\n const { index, microLamports: previousMicroLamports } = instructionDetails;\n const newMicroLamports = getMicroLamports(previousMicroLamports);\n if (newMicroLamports === previousMicroLamports) {\n return transactionMessage;\n }\n\n const newInstruction = getSetComputeUnitPriceInstruction({\n microLamports: newMicroLamports,\n });\n const newInstructions = [...transactionMessage.instructions];\n newInstructions.splice(index, 1, newInstruction);\n return Object.freeze({\n ...transactionMessage,\n instructions: newInstructions,\n }) as TTransactionMessage;\n}\n"]} | ||
| {"version":3,"sources":["../../src/generated/programs/computeBudget.ts","../../src/generated/instructions/requestHeapFrame.ts","../../src/generated/instructions/requestUnits.ts","../../src/generated/instructions/setComputeUnitLimit.ts","../../src/generated/instructions/setComputeUnitPrice.ts","../../src/generated/instructions/setLoadedAccountsDataSizeLimit.ts","../../src/constants.ts","../../src/introspect.ts","../../src/setComputeLimit.ts","../../src/estimateAndSetComputeLimit.ts","../../src/estimateComputeLimitInternal.ts","../../src/estimateComputeLimit.ts","../../src/setComputePrice.ts"],"names":["ComputeBudgetInstruction","getU8Encoder","transformEncoder","getStructEncoder","getU32Encoder","getStructDecoder","getU8Decoder","getU32Decoder","combineCodec","getU64Decoder","previousUnits","estimateComputeUnitLimit","SolanaError","appendTransactionMessageInstruction","previousMicroLamports"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n containsBytes,\n getU8Encoder,\n SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_INSTRUCTION,\n SOLANA_ERROR__PROGRAM_CLIENTS__UNRECOGNIZED_INSTRUCTION_TYPE,\n SolanaError,\n type Address,\n type ClientWithTransactionPlanning,\n type ClientWithTransactionSending,\n type Instruction,\n type InstructionWithData,\n type ReadonlyUint8Array,\n} from '@solana/kit';\nimport { addSelfPlanAndSendFunctions, type SelfPlanAndSendFunctions } from '@solana/kit/program-client-core';\nimport {\n getRequestHeapFrameInstruction,\n getRequestUnitsInstruction,\n getSetComputeUnitLimitInstruction,\n getSetComputeUnitPriceInstruction,\n getSetLoadedAccountsDataSizeLimitInstruction,\n parseRequestHeapFrameInstruction,\n parseRequestUnitsInstruction,\n parseSetComputeUnitLimitInstruction,\n parseSetComputeUnitPriceInstruction,\n parseSetLoadedAccountsDataSizeLimitInstruction,\n type ParsedRequestHeapFrameInstruction,\n type ParsedRequestUnitsInstruction,\n type ParsedSetComputeUnitLimitInstruction,\n type ParsedSetComputeUnitPriceInstruction,\n type ParsedSetLoadedAccountsDataSizeLimitInstruction,\n type RequestHeapFrameInput,\n type RequestUnitsInput,\n type SetComputeUnitLimitInput,\n type SetComputeUnitPriceInput,\n type SetLoadedAccountsDataSizeLimitInput,\n} from '../instructions';\n\nexport const COMPUTE_BUDGET_PROGRAM_ADDRESS =\n 'ComputeBudget111111111111111111111111111111' as Address<'ComputeBudget111111111111111111111111111111'>;\n\nexport enum ComputeBudgetInstruction {\n RequestUnits,\n RequestHeapFrame,\n SetComputeUnitLimit,\n SetComputeUnitPrice,\n SetLoadedAccountsDataSizeLimit,\n}\n\nexport function identifyComputeBudgetInstruction(\n instruction: { data: ReadonlyUint8Array } | ReadonlyUint8Array,\n): ComputeBudgetInstruction {\n const data = 'data' in instruction ? instruction.data : instruction;\n if (containsBytes(data, getU8Encoder().encode(0), 0)) {\n return ComputeBudgetInstruction.RequestUnits;\n }\n if (containsBytes(data, getU8Encoder().encode(1), 0)) {\n return ComputeBudgetInstruction.RequestHeapFrame;\n }\n if (containsBytes(data, getU8Encoder().encode(2), 0)) {\n return ComputeBudgetInstruction.SetComputeUnitLimit;\n }\n if (containsBytes(data, getU8Encoder().encode(3), 0)) {\n return ComputeBudgetInstruction.SetComputeUnitPrice;\n }\n if (containsBytes(data, getU8Encoder().encode(4), 0)) {\n return ComputeBudgetInstruction.SetLoadedAccountsDataSizeLimit;\n }\n throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_INSTRUCTION, {\n instructionData: data,\n programName: 'computeBudget',\n });\n}\n\nexport type ParsedComputeBudgetInstruction<TProgram extends string = 'ComputeBudget111111111111111111111111111111'> =\n | ({ instructionType: ComputeBudgetInstruction.RequestUnits } & ParsedRequestUnitsInstruction<TProgram>)\n | ({ instructionType: ComputeBudgetInstruction.RequestHeapFrame } & ParsedRequestHeapFrameInstruction<TProgram>)\n | ({\n instructionType: ComputeBudgetInstruction.SetComputeUnitLimit;\n } & ParsedSetComputeUnitLimitInstruction<TProgram>)\n | ({\n instructionType: ComputeBudgetInstruction.SetComputeUnitPrice;\n } & ParsedSetComputeUnitPriceInstruction<TProgram>)\n | ({\n instructionType: ComputeBudgetInstruction.SetLoadedAccountsDataSizeLimit;\n } & ParsedSetLoadedAccountsDataSizeLimitInstruction<TProgram>);\n\nexport function parseComputeBudgetInstruction<TProgram extends string>(\n instruction: Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array>,\n): ParsedComputeBudgetInstruction<TProgram> {\n const instructionType = identifyComputeBudgetInstruction(instruction);\n switch (instructionType) {\n case ComputeBudgetInstruction.RequestUnits: {\n return {\n instructionType: ComputeBudgetInstruction.RequestUnits,\n ...parseRequestUnitsInstruction(instruction),\n };\n }\n case ComputeBudgetInstruction.RequestHeapFrame: {\n return {\n instructionType: ComputeBudgetInstruction.RequestHeapFrame,\n ...parseRequestHeapFrameInstruction(instruction),\n };\n }\n case ComputeBudgetInstruction.SetComputeUnitLimit: {\n return {\n instructionType: ComputeBudgetInstruction.SetComputeUnitLimit,\n ...parseSetComputeUnitLimitInstruction(instruction),\n };\n }\n case ComputeBudgetInstruction.SetComputeUnitPrice: {\n return {\n instructionType: ComputeBudgetInstruction.SetComputeUnitPrice,\n ...parseSetComputeUnitPriceInstruction(instruction),\n };\n }\n case ComputeBudgetInstruction.SetLoadedAccountsDataSizeLimit: {\n return {\n instructionType: ComputeBudgetInstruction.SetLoadedAccountsDataSizeLimit,\n ...parseSetLoadedAccountsDataSizeLimitInstruction(instruction),\n };\n }\n default:\n throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__UNRECOGNIZED_INSTRUCTION_TYPE, {\n instructionType: instructionType as string,\n programName: 'computeBudget',\n });\n }\n}\n\nexport type ComputeBudgetPlugin = { instructions: ComputeBudgetPluginInstructions };\n\nexport type ComputeBudgetPluginInstructions = {\n requestUnits: (\n input: RequestUnitsInput,\n ) => ReturnType<typeof getRequestUnitsInstruction> & SelfPlanAndSendFunctions;\n requestHeapFrame: (\n input: RequestHeapFrameInput,\n ) => ReturnType<typeof getRequestHeapFrameInstruction> & SelfPlanAndSendFunctions;\n setComputeUnitLimit: (\n input: SetComputeUnitLimitInput,\n ) => ReturnType<typeof getSetComputeUnitLimitInstruction> & SelfPlanAndSendFunctions;\n setComputeUnitPrice: (\n input: SetComputeUnitPriceInput,\n ) => ReturnType<typeof getSetComputeUnitPriceInstruction> & SelfPlanAndSendFunctions;\n setLoadedAccountsDataSizeLimit: (\n input: SetLoadedAccountsDataSizeLimitInput,\n ) => ReturnType<typeof getSetLoadedAccountsDataSizeLimitInstruction> & SelfPlanAndSendFunctions;\n};\n\nexport type ComputeBudgetPluginRequirements = ClientWithTransactionPlanning & ClientWithTransactionSending;\n\nexport function computeBudgetProgram() {\n return <T extends ComputeBudgetPluginRequirements>(client: T) => {\n return {\n ...client,\n computeBudget: <ComputeBudgetPlugin>{\n instructions: {\n requestUnits: input => addSelfPlanAndSendFunctions(client, getRequestUnitsInstruction(input)),\n requestHeapFrame: input =>\n addSelfPlanAndSendFunctions(client, getRequestHeapFrameInstruction(input)),\n setComputeUnitLimit: input =>\n addSelfPlanAndSendFunctions(client, getSetComputeUnitLimitInstruction(input)),\n setComputeUnitPrice: input =>\n addSelfPlanAndSendFunctions(client, getSetComputeUnitPriceInstruction(input)),\n setLoadedAccountsDataSizeLimit: input =>\n addSelfPlanAndSendFunctions(client, getSetLoadedAccountsDataSizeLimitInstruction(input)),\n },\n },\n };\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n getStructDecoder,\n getStructEncoder,\n getU32Decoder,\n getU32Encoder,\n getU8Decoder,\n getU8Encoder,\n transformEncoder,\n type AccountMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyUint8Array,\n} from '@solana/kit';\nimport { COMPUTE_BUDGET_PROGRAM_ADDRESS } from '../programs';\n\nexport const REQUEST_HEAP_FRAME_DISCRIMINATOR = 1;\n\nexport function getRequestHeapFrameDiscriminatorBytes() {\n return getU8Encoder().encode(REQUEST_HEAP_FRAME_DISCRIMINATOR);\n}\n\nexport type RequestHeapFrameInstruction<\n TProgram extends string = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array> & InstructionWithAccounts<TRemainingAccounts>;\n\nexport type RequestHeapFrameInstructionData = {\n discriminator: number;\n /**\n * Requested transaction-wide program heap size in bytes.\n * Must be multiple of 1024. Applies to each program, including CPIs.\n */\n bytes: number;\n};\n\nexport type RequestHeapFrameInstructionDataArgs = {\n /**\n * Requested transaction-wide program heap size in bytes.\n * Must be multiple of 1024. Applies to each program, including CPIs.\n */\n bytes: number;\n};\n\nexport function getRequestHeapFrameInstructionDataEncoder(): FixedSizeEncoder<RequestHeapFrameInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', getU8Encoder()],\n ['bytes', getU32Encoder()],\n ]),\n value => ({ ...value, discriminator: REQUEST_HEAP_FRAME_DISCRIMINATOR }),\n );\n}\n\nexport function getRequestHeapFrameInstructionDataDecoder(): FixedSizeDecoder<RequestHeapFrameInstructionData> {\n return getStructDecoder([\n ['discriminator', getU8Decoder()],\n ['bytes', getU32Decoder()],\n ]);\n}\n\nexport function getRequestHeapFrameInstructionDataCodec(): FixedSizeCodec<\n RequestHeapFrameInstructionDataArgs,\n RequestHeapFrameInstructionData\n> {\n return combineCodec(getRequestHeapFrameInstructionDataEncoder(), getRequestHeapFrameInstructionDataDecoder());\n}\n\nexport type RequestHeapFrameInput = {\n bytes: RequestHeapFrameInstructionDataArgs['bytes'];\n};\n\nexport function getRequestHeapFrameInstruction<TProgramAddress extends Address = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS>(\n input: RequestHeapFrameInput,\n config?: { programAddress?: TProgramAddress },\n): RequestHeapFrameInstruction<TProgramAddress> {\n // Program address.\n const programAddress = config?.programAddress ?? COMPUTE_BUDGET_PROGRAM_ADDRESS;\n\n // Original args.\n const args = { ...input };\n\n return Object.freeze({\n data: getRequestHeapFrameInstructionDataEncoder().encode(args as RequestHeapFrameInstructionDataArgs),\n programAddress,\n } as RequestHeapFrameInstruction<TProgramAddress>);\n}\n\nexport type ParsedRequestHeapFrameInstruction<TProgram extends string = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS> = {\n programAddress: Address<TProgram>;\n data: RequestHeapFrameInstructionData;\n};\n\nexport function parseRequestHeapFrameInstruction<TProgram extends string>(\n instruction: Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array>,\n): ParsedRequestHeapFrameInstruction<TProgram> {\n return {\n programAddress: instruction.programAddress,\n data: getRequestHeapFrameInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n getStructDecoder,\n getStructEncoder,\n getU32Decoder,\n getU32Encoder,\n getU8Decoder,\n getU8Encoder,\n transformEncoder,\n type AccountMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyUint8Array,\n} from '@solana/kit';\nimport { COMPUTE_BUDGET_PROGRAM_ADDRESS } from '../programs';\n\nexport const REQUEST_UNITS_DISCRIMINATOR = 0;\n\nexport function getRequestUnitsDiscriminatorBytes() {\n return getU8Encoder().encode(REQUEST_UNITS_DISCRIMINATOR);\n}\n\nexport type RequestUnitsInstruction<\n TProgram extends string = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array> & InstructionWithAccounts<TRemainingAccounts>;\n\nexport type RequestUnitsInstructionData = {\n discriminator: number;\n /** Units to request for transaction-wide compute. */\n units: number;\n /** Prioritization fee lamports. */\n additionalFee: number;\n};\n\nexport type RequestUnitsInstructionDataArgs = {\n /** Units to request for transaction-wide compute. */\n units: number;\n /** Prioritization fee lamports. */\n additionalFee: number;\n};\n\nexport function getRequestUnitsInstructionDataEncoder(): FixedSizeEncoder<RequestUnitsInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', getU8Encoder()],\n ['units', getU32Encoder()],\n ['additionalFee', getU32Encoder()],\n ]),\n value => ({ ...value, discriminator: REQUEST_UNITS_DISCRIMINATOR }),\n );\n}\n\nexport function getRequestUnitsInstructionDataDecoder(): FixedSizeDecoder<RequestUnitsInstructionData> {\n return getStructDecoder([\n ['discriminator', getU8Decoder()],\n ['units', getU32Decoder()],\n ['additionalFee', getU32Decoder()],\n ]);\n}\n\nexport function getRequestUnitsInstructionDataCodec(): FixedSizeCodec<\n RequestUnitsInstructionDataArgs,\n RequestUnitsInstructionData\n> {\n return combineCodec(getRequestUnitsInstructionDataEncoder(), getRequestUnitsInstructionDataDecoder());\n}\n\nexport type RequestUnitsInput = {\n units: RequestUnitsInstructionDataArgs['units'];\n additionalFee: RequestUnitsInstructionDataArgs['additionalFee'];\n};\n\nexport function getRequestUnitsInstruction<TProgramAddress extends Address = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS>(\n input: RequestUnitsInput,\n config?: { programAddress?: TProgramAddress },\n): RequestUnitsInstruction<TProgramAddress> {\n // Program address.\n const programAddress = config?.programAddress ?? COMPUTE_BUDGET_PROGRAM_ADDRESS;\n\n // Original args.\n const args = { ...input };\n\n return Object.freeze({\n data: getRequestUnitsInstructionDataEncoder().encode(args as RequestUnitsInstructionDataArgs),\n programAddress,\n } as RequestUnitsInstruction<TProgramAddress>);\n}\n\nexport type ParsedRequestUnitsInstruction<TProgram extends string = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS> = {\n programAddress: Address<TProgram>;\n data: RequestUnitsInstructionData;\n};\n\nexport function parseRequestUnitsInstruction<TProgram extends string>(\n instruction: Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array>,\n): ParsedRequestUnitsInstruction<TProgram> {\n return {\n programAddress: instruction.programAddress,\n data: getRequestUnitsInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n getStructDecoder,\n getStructEncoder,\n getU32Decoder,\n getU32Encoder,\n getU8Decoder,\n getU8Encoder,\n transformEncoder,\n type AccountMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyUint8Array,\n} from '@solana/kit';\nimport { COMPUTE_BUDGET_PROGRAM_ADDRESS } from '../programs';\n\nexport const SET_COMPUTE_UNIT_LIMIT_DISCRIMINATOR = 2;\n\nexport function getSetComputeUnitLimitDiscriminatorBytes() {\n return getU8Encoder().encode(SET_COMPUTE_UNIT_LIMIT_DISCRIMINATOR);\n}\n\nexport type SetComputeUnitLimitInstruction<\n TProgram extends string = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array> & InstructionWithAccounts<TRemainingAccounts>;\n\nexport type SetComputeUnitLimitInstructionData = {\n discriminator: number;\n /** Transaction-wide compute unit limit. */\n units: number;\n};\n\nexport type SetComputeUnitLimitInstructionDataArgs = {\n /** Transaction-wide compute unit limit. */\n units: number;\n};\n\nexport function getSetComputeUnitLimitInstructionDataEncoder(): FixedSizeEncoder<SetComputeUnitLimitInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', getU8Encoder()],\n ['units', getU32Encoder()],\n ]),\n value => ({ ...value, discriminator: SET_COMPUTE_UNIT_LIMIT_DISCRIMINATOR }),\n );\n}\n\nexport function getSetComputeUnitLimitInstructionDataDecoder(): FixedSizeDecoder<SetComputeUnitLimitInstructionData> {\n return getStructDecoder([\n ['discriminator', getU8Decoder()],\n ['units', getU32Decoder()],\n ]);\n}\n\nexport function getSetComputeUnitLimitInstructionDataCodec(): FixedSizeCodec<\n SetComputeUnitLimitInstructionDataArgs,\n SetComputeUnitLimitInstructionData\n> {\n return combineCodec(getSetComputeUnitLimitInstructionDataEncoder(), getSetComputeUnitLimitInstructionDataDecoder());\n}\n\nexport type SetComputeUnitLimitInput = {\n units: SetComputeUnitLimitInstructionDataArgs['units'];\n};\n\nexport function getSetComputeUnitLimitInstruction<\n TProgramAddress extends Address = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS,\n>(\n input: SetComputeUnitLimitInput,\n config?: { programAddress?: TProgramAddress },\n): SetComputeUnitLimitInstruction<TProgramAddress> {\n // Program address.\n const programAddress = config?.programAddress ?? COMPUTE_BUDGET_PROGRAM_ADDRESS;\n\n // Original args.\n const args = { ...input };\n\n return Object.freeze({\n data: getSetComputeUnitLimitInstructionDataEncoder().encode(args as SetComputeUnitLimitInstructionDataArgs),\n programAddress,\n } as SetComputeUnitLimitInstruction<TProgramAddress>);\n}\n\nexport type ParsedSetComputeUnitLimitInstruction<TProgram extends string = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS> = {\n programAddress: Address<TProgram>;\n data: SetComputeUnitLimitInstructionData;\n};\n\nexport function parseSetComputeUnitLimitInstruction<TProgram extends string>(\n instruction: Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array>,\n): ParsedSetComputeUnitLimitInstruction<TProgram> {\n return {\n programAddress: instruction.programAddress,\n data: getSetComputeUnitLimitInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n getStructDecoder,\n getStructEncoder,\n getU64Decoder,\n getU64Encoder,\n getU8Decoder,\n getU8Encoder,\n transformEncoder,\n type AccountMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyUint8Array,\n} from '@solana/kit';\nimport { COMPUTE_BUDGET_PROGRAM_ADDRESS } from '../programs';\n\nexport const SET_COMPUTE_UNIT_PRICE_DISCRIMINATOR = 3;\n\nexport function getSetComputeUnitPriceDiscriminatorBytes() {\n return getU8Encoder().encode(SET_COMPUTE_UNIT_PRICE_DISCRIMINATOR);\n}\n\nexport type SetComputeUnitPriceInstruction<\n TProgram extends string = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array> & InstructionWithAccounts<TRemainingAccounts>;\n\nexport type SetComputeUnitPriceInstructionData = {\n discriminator: number;\n /** Transaction compute unit price used for prioritization fees. */\n microLamports: bigint;\n};\n\nexport type SetComputeUnitPriceInstructionDataArgs = {\n /** Transaction compute unit price used for prioritization fees. */\n microLamports: number | bigint;\n};\n\nexport function getSetComputeUnitPriceInstructionDataEncoder(): FixedSizeEncoder<SetComputeUnitPriceInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', getU8Encoder()],\n ['microLamports', getU64Encoder()],\n ]),\n value => ({ ...value, discriminator: SET_COMPUTE_UNIT_PRICE_DISCRIMINATOR }),\n );\n}\n\nexport function getSetComputeUnitPriceInstructionDataDecoder(): FixedSizeDecoder<SetComputeUnitPriceInstructionData> {\n return getStructDecoder([\n ['discriminator', getU8Decoder()],\n ['microLamports', getU64Decoder()],\n ]);\n}\n\nexport function getSetComputeUnitPriceInstructionDataCodec(): FixedSizeCodec<\n SetComputeUnitPriceInstructionDataArgs,\n SetComputeUnitPriceInstructionData\n> {\n return combineCodec(getSetComputeUnitPriceInstructionDataEncoder(), getSetComputeUnitPriceInstructionDataDecoder());\n}\n\nexport type SetComputeUnitPriceInput = {\n microLamports: SetComputeUnitPriceInstructionDataArgs['microLamports'];\n};\n\nexport function getSetComputeUnitPriceInstruction<\n TProgramAddress extends Address = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS,\n>(\n input: SetComputeUnitPriceInput,\n config?: { programAddress?: TProgramAddress },\n): SetComputeUnitPriceInstruction<TProgramAddress> {\n // Program address.\n const programAddress = config?.programAddress ?? COMPUTE_BUDGET_PROGRAM_ADDRESS;\n\n // Original args.\n const args = { ...input };\n\n return Object.freeze({\n data: getSetComputeUnitPriceInstructionDataEncoder().encode(args as SetComputeUnitPriceInstructionDataArgs),\n programAddress,\n } as SetComputeUnitPriceInstruction<TProgramAddress>);\n}\n\nexport type ParsedSetComputeUnitPriceInstruction<TProgram extends string = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS> = {\n programAddress: Address<TProgram>;\n data: SetComputeUnitPriceInstructionData;\n};\n\nexport function parseSetComputeUnitPriceInstruction<TProgram extends string>(\n instruction: Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array>,\n): ParsedSetComputeUnitPriceInstruction<TProgram> {\n return {\n programAddress: instruction.programAddress,\n data: getSetComputeUnitPriceInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * This code was AUTOGENERATED using the Codama library.\n * Please DO NOT EDIT THIS FILE, instead use visitors\n * to add features, then rerun Codama to update it.\n *\n * @see https://github.com/codama-idl/codama\n */\n\nimport {\n combineCodec,\n getStructDecoder,\n getStructEncoder,\n getU32Decoder,\n getU32Encoder,\n getU8Decoder,\n getU8Encoder,\n transformEncoder,\n type AccountMeta,\n type Address,\n type FixedSizeCodec,\n type FixedSizeDecoder,\n type FixedSizeEncoder,\n type Instruction,\n type InstructionWithAccounts,\n type InstructionWithData,\n type ReadonlyUint8Array,\n} from '@solana/kit';\nimport { COMPUTE_BUDGET_PROGRAM_ADDRESS } from '../programs';\n\nexport const SET_LOADED_ACCOUNTS_DATA_SIZE_LIMIT_DISCRIMINATOR = 4;\n\nexport function getSetLoadedAccountsDataSizeLimitDiscriminatorBytes() {\n return getU8Encoder().encode(SET_LOADED_ACCOUNTS_DATA_SIZE_LIMIT_DISCRIMINATOR);\n}\n\nexport type SetLoadedAccountsDataSizeLimitInstruction<\n TProgram extends string = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS,\n TRemainingAccounts extends readonly AccountMeta<string>[] = [],\n> = Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array> & InstructionWithAccounts<TRemainingAccounts>;\n\nexport type SetLoadedAccountsDataSizeLimitInstructionData = { discriminator: number; accountDataSizeLimit: number };\n\nexport type SetLoadedAccountsDataSizeLimitInstructionDataArgs = { accountDataSizeLimit: number };\n\nexport function getSetLoadedAccountsDataSizeLimitInstructionDataEncoder(): FixedSizeEncoder<SetLoadedAccountsDataSizeLimitInstructionDataArgs> {\n return transformEncoder(\n getStructEncoder([\n ['discriminator', getU8Encoder()],\n ['accountDataSizeLimit', getU32Encoder()],\n ]),\n value => ({ ...value, discriminator: SET_LOADED_ACCOUNTS_DATA_SIZE_LIMIT_DISCRIMINATOR }),\n );\n}\n\nexport function getSetLoadedAccountsDataSizeLimitInstructionDataDecoder(): FixedSizeDecoder<SetLoadedAccountsDataSizeLimitInstructionData> {\n return getStructDecoder([\n ['discriminator', getU8Decoder()],\n ['accountDataSizeLimit', getU32Decoder()],\n ]);\n}\n\nexport function getSetLoadedAccountsDataSizeLimitInstructionDataCodec(): FixedSizeCodec<\n SetLoadedAccountsDataSizeLimitInstructionDataArgs,\n SetLoadedAccountsDataSizeLimitInstructionData\n> {\n return combineCodec(\n getSetLoadedAccountsDataSizeLimitInstructionDataEncoder(),\n getSetLoadedAccountsDataSizeLimitInstructionDataDecoder(),\n );\n}\n\nexport type SetLoadedAccountsDataSizeLimitInput = {\n accountDataSizeLimit: SetLoadedAccountsDataSizeLimitInstructionDataArgs['accountDataSizeLimit'];\n};\n\nexport function getSetLoadedAccountsDataSizeLimitInstruction<\n TProgramAddress extends Address = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS,\n>(\n input: SetLoadedAccountsDataSizeLimitInput,\n config?: { programAddress?: TProgramAddress },\n): SetLoadedAccountsDataSizeLimitInstruction<TProgramAddress> {\n // Program address.\n const programAddress = config?.programAddress ?? COMPUTE_BUDGET_PROGRAM_ADDRESS;\n\n // Original args.\n const args = { ...input };\n\n return Object.freeze({\n data: getSetLoadedAccountsDataSizeLimitInstructionDataEncoder().encode(\n args as SetLoadedAccountsDataSizeLimitInstructionDataArgs,\n ),\n programAddress,\n } as SetLoadedAccountsDataSizeLimitInstruction<TProgramAddress>);\n}\n\nexport type ParsedSetLoadedAccountsDataSizeLimitInstruction<\n TProgram extends string = typeof COMPUTE_BUDGET_PROGRAM_ADDRESS,\n> = { programAddress: Address<TProgram>; data: SetLoadedAccountsDataSizeLimitInstructionData };\n\nexport function parseSetLoadedAccountsDataSizeLimitInstruction<TProgram extends string>(\n instruction: Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array>,\n): ParsedSetLoadedAccountsDataSizeLimitInstruction<TProgram> {\n return {\n programAddress: instruction.programAddress,\n data: getSetLoadedAccountsDataSizeLimitInstructionDataDecoder().decode(instruction.data),\n };\n}\n","/**\n * A provisory compute unit limit is used to indicate that the transaction\n * should be estimated for compute units before being sent to the network.\n *\n * Setting it to zero ensures the transaction fails unless it is properly estimated.\n */\nexport const PROVISORY_COMPUTE_UNIT_LIMIT = 0;\n\n/**\n * The maximum compute unit limit that can be set for a transaction.\n */\nexport const MAX_COMPUTE_UNIT_LIMIT = 1_400_000;\n","import {\n TransactionMessage,\n getU32Decoder,\n getU64Decoder,\n Instruction,\n MicroLamports,\n ReadonlyUint8Array,\n} from '@solana/kit';\nimport {\n COMPUTE_BUDGET_PROGRAM_ADDRESS,\n ComputeBudgetInstruction,\n identifyComputeBudgetInstruction,\n SetComputeUnitLimitInstruction,\n SetComputeUnitPriceInstruction,\n} from './generated';\n\n/**\n * Finds the index of the first `SetComputeUnitLimit` instruction in a transaction message\n * and its set limit, if any.\n */\nexport function findSetComputeUnitLimitInstructionIndexAndUnits(\n transactionMessage: TransactionMessage,\n): { index: number; units: number } | null {\n const index = transactionMessage.instructions.findIndex(isSetComputeUnitLimitInstruction);\n if (index < 0) {\n return null;\n }\n\n const units = getU32Decoder().decode(transactionMessage.instructions[index].data as ReadonlyUint8Array, 1);\n\n return { index, units };\n}\n\n/**\n * Checks if the given instruction is a `SetComputeUnitLimit` instruction.\n */\nfunction isSetComputeUnitLimitInstruction(instruction: Instruction): instruction is SetComputeUnitLimitInstruction {\n return (\n instruction.programAddress === COMPUTE_BUDGET_PROGRAM_ADDRESS &&\n identifyComputeBudgetInstruction(instruction.data as Uint8Array) ===\n ComputeBudgetInstruction.SetComputeUnitLimit\n );\n}\n\n/**\n * Finds the index of the first `SetComputeUnitPrice` instruction in a transaction message\n * and its set micro-lamports, if any.\n */\nexport function findSetComputeUnitPriceInstructionIndexAndMicroLamports(\n transactionMessage: TransactionMessage,\n): { index: number; microLamports: MicroLamports } | null {\n const index = transactionMessage.instructions.findIndex(isSetComputeUnitPriceInstruction);\n if (index < 0) {\n return null;\n }\n\n const microLamports = getU64Decoder().decode(\n transactionMessage.instructions[index].data as ReadonlyUint8Array,\n 1,\n ) as MicroLamports;\n\n return { index, microLamports };\n}\n\n/**\n * Checks if the given instruction is a `SetComputeUnitPrice` instruction.\n */\nfunction isSetComputeUnitPriceInstruction(instruction: Instruction): instruction is SetComputeUnitPriceInstruction {\n return (\n instruction.programAddress === COMPUTE_BUDGET_PROGRAM_ADDRESS &&\n identifyComputeBudgetInstruction(instruction.data as Uint8Array) ===\n ComputeBudgetInstruction.SetComputeUnitPrice\n );\n}\n","import { appendTransactionMessageInstruction, TransactionMessage } from '@solana/kit';\nimport { PROVISORY_COMPUTE_UNIT_LIMIT } from './constants';\nimport { getSetComputeUnitLimitInstruction } from './generated';\nimport { findSetComputeUnitLimitInstructionIndexAndUnits } from './introspect';\n\n/**\n * Appends a `SetComputeUnitLimit` instruction with a provisory\n * compute unit limit to a given transaction message\n * if and only if it does not already have one.\n *\n * @example\n * ```ts\n * const transactionMessage = pipe(\n * createTransactionMessage({ version: 0 }),\n * fillProvisorySetComputeUnitLimitInstruction,\n * // ...\n * );\n * ```\n */\nexport function fillProvisorySetComputeUnitLimitInstruction<TTransactionMessage extends TransactionMessage>(\n transactionMessage: TTransactionMessage,\n) {\n return updateOrAppendSetComputeUnitLimitInstruction(\n previousUnits => (previousUnits === null ? PROVISORY_COMPUTE_UNIT_LIMIT : previousUnits),\n transactionMessage,\n );\n}\n\n/**\n * Updates the first `SetComputeUnitLimit` instruction in a transaction message\n * with the given units, or appends a new instruction if none exists.\n * A function of the current value can be provided instead of a static value.\n *\n * @param units - The new compute unit limit, or a function that takes the previous\n * compute unit limit and returns the new limit.\n * @param transactionMessage - The transaction message to update.\n *\n * @example\n * ```ts\n * const updatedTransactionMessage = updateOrAppendSetComputeUnitLimitInstruction(\n * // E.g. Keep the current limit if it is set, otherwise set it to the maximum.\n * (currentUnits) => currentUnits === null ? MAX_COMPUTE_UNIT_LIMIT : currentUnits,\n * transactionMessage,\n * );\n * ```\n */\nexport function updateOrAppendSetComputeUnitLimitInstruction<TTransactionMessage extends TransactionMessage>(\n units: number | ((previousUnits: number | null) => number),\n transactionMessage: TTransactionMessage,\n): TTransactionMessage {\n const getUnits = (previousUnits: number | null): number =>\n typeof units === 'function' ? units(previousUnits) : units;\n const instructionDetails = findSetComputeUnitLimitInstructionIndexAndUnits(transactionMessage);\n\n if (!instructionDetails) {\n return appendTransactionMessageInstruction(\n getSetComputeUnitLimitInstruction({ units: getUnits(null) }),\n transactionMessage,\n ) as TTransactionMessage;\n }\n\n const { index, units: previousUnits } = instructionDetails;\n const newUnits = getUnits(previousUnits);\n if (newUnits === previousUnits) {\n return transactionMessage;\n }\n\n const newInstruction = getSetComputeUnitLimitInstruction({ units: newUnits });\n const newInstructions = [...transactionMessage.instructions];\n newInstructions.splice(index, 1, newInstruction);\n return Object.freeze({\n ...transactionMessage,\n instructions: newInstructions,\n }) as TTransactionMessage;\n}\n","import { TransactionMessage, TransactionMessageWithFeePayer } from '@solana/kit';\nimport { MAX_COMPUTE_UNIT_LIMIT, PROVISORY_COMPUTE_UNIT_LIMIT } from './constants';\nimport {\n EstimateComputeUnitLimitFactoryFunction,\n EstimateComputeUnitLimitFactoryFunctionConfig,\n} from './estimateComputeLimitInternal';\nimport { findSetComputeUnitLimitInstructionIndexAndUnits } from './introspect';\nimport { updateOrAppendSetComputeUnitLimitInstruction } from './setComputeLimit';\n\ntype EstimateAndUpdateProvisoryComputeUnitLimitFactoryFunction = <\n TTransactionMessage extends TransactionMessage & TransactionMessageWithFeePayer,\n>(\n transactionMessage: TTransactionMessage,\n config?: EstimateComputeUnitLimitFactoryFunctionConfig,\n) => Promise<TTransactionMessage>;\n\n/**\n * Given a transaction message, if it does not have an explicit compute unit limit,\n * estimates the compute unit limit and updates the transaction message with\n * the estimated limit. Otherwise, returns the transaction message unchanged.\n *\n * It requires a function that estimates the compute unit limit.\n *\n * @example\n * ```ts\n * const estimateAndUpdateCUs = estimateAndUpdateProvisoryComputeUnitLimitFactory(\n * estimateComputeUnitLimitFactory({ rpc })\n * );\n *\n * const transactionMessageWithCUs = await estimateAndUpdateCUs(transactionMessage);\n * ```\n *\n * @see {@link estimateAndUpdateProvisoryComputeUnitLimitFactory}\n */\nexport function estimateAndUpdateProvisoryComputeUnitLimitFactory(\n estimateComputeUnitLimit: EstimateComputeUnitLimitFactoryFunction,\n): EstimateAndUpdateProvisoryComputeUnitLimitFactoryFunction {\n return async function fn(transactionMessage, config) {\n const instructionDetails = findSetComputeUnitLimitInstructionIndexAndUnits(transactionMessage);\n\n // If the transaction message already has a compute unit limit instruction\n // which is set to a specific value — i.e. not 0 or the maximum limit —\n // we don't need to estimate the compute unit limit.\n if (\n instructionDetails &&\n instructionDetails.units !== PROVISORY_COMPUTE_UNIT_LIMIT &&\n instructionDetails.units !== MAX_COMPUTE_UNIT_LIMIT\n ) {\n return transactionMessage;\n }\n\n return updateOrAppendSetComputeUnitLimitInstruction(\n await estimateComputeUnitLimit(transactionMessage, config),\n transactionMessage,\n );\n };\n}\n","import {\n TransactionMessage,\n Commitment,\n compileTransaction,\n getBase64EncodedWireTransaction,\n getSolanaErrorFromTransactionError,\n isSolanaError,\n isTransactionMessageWithDurableNonceLifetime,\n pipe,\n Rpc,\n SimulateTransactionApi,\n Slot,\n SOLANA_ERROR__TRANSACTION__FAILED_TO_ESTIMATE_COMPUTE_LIMIT,\n SOLANA_ERROR__TRANSACTION__FAILED_WHEN_SIMULATING_TO_ESTIMATE_COMPUTE_LIMIT,\n SolanaError,\n Transaction,\n TransactionMessageWithFeePayer,\n} from '@solana/kit';\nimport { updateOrAppendSetComputeUnitLimitInstruction } from './setComputeLimit';\nimport { MAX_COMPUTE_UNIT_LIMIT } from './constants';\n\nexport type EstimateComputeUnitLimitFactoryConfig = Readonly<{\n /** An object that supports the {@link SimulateTransactionApi} of the Solana RPC API */\n rpc: Rpc<SimulateTransactionApi>;\n}>;\n\nexport type EstimateComputeUnitLimitFactoryFunction = (\n transactionMessage: TransactionMessage & TransactionMessageWithFeePayer,\n config?: EstimateComputeUnitLimitFactoryFunctionConfig,\n) => Promise<number>;\n\nexport type EstimateComputeUnitLimitFactoryFunctionConfig = {\n abortSignal?: AbortSignal;\n /**\n * Compute the estimate as of the highest slot that has reached this level of commitment.\n *\n * @defaultValue Whichever default is applied by the underlying {@link RpcApi} in use. For\n * example, when using an API created by a `createSolanaRpc*()` helper, the default commitment\n * is `\"confirmed\"` unless configured otherwise. Unmitigated by an API layer on the client, the\n * default commitment applied by the server is `\"finalized\"`.\n */\n commitment?: Commitment;\n /**\n * Prevents accessing stale data by enforcing that the RPC node has processed transactions up to\n * this slot\n */\n minContextSlot?: Slot;\n};\n\ntype EstimateComputeUnitLimitConfig = EstimateComputeUnitLimitFactoryFunctionConfig &\n Readonly<{\n rpc: Rpc<SimulateTransactionApi>;\n transactionMessage: TransactionMessage & TransactionMessageWithFeePayer;\n }>;\n\n/**\n * Simulates a transaction message on the network and returns the number of compute units it\n * consumed during simulation.\n *\n * The estimate this function returns can be used to set a compute unit limit on the transaction.\n * Correctly budgeting a compute unit limit for your transaction message can increase the probability\n * that your transaction will be accepted for processing.\n *\n * If you don't declare a compute unit limit on your transaction, validators will assume an upper\n * limit of 200K compute units (CU) per instruction. Since validators have an incentive to pack as\n * many transactions into each block as possible, they may choose to include transactions that they\n * know will fit into the remaining compute budget for the current block over transactions that\n * might not. For this reason, you should set a compute unit limit on each of your transaction\n * messages, whenever possible.\n *\n * ## Example\n *\n * ```ts\n * import { getSetComputeLimitInstruction } from '@solana-program/compute-budget';\n * import { createSolanaRpc, getComputeUnitEstimateForTransactionMessageFactory, pipe } from '@solana/kit';\n *\n * // Create an estimator function.\n * const rpc = createSolanaRpc('http://127.0.0.1:8899');\n * const getComputeUnitEstimateForTransactionMessage =\n * getComputeUnitEstimateForTransactionMessageFactory({ rpc });\n *\n * // Create your transaction message.\n * const transactionMessage = pipe(\n * createTransactionMessage({ version: 'legacy' }),\n * /* ... *\\/\n * );\n *\n * // Request an estimate of the actual compute units this message will consume.\n * const computeUnitsEstimate =\n * await getComputeUnitEstimateForTransactionMessage(transactionMessage);\n *\n * // Set the transaction message's compute unit budget.\n * const transactionMessageWithComputeUnitLimit = prependTransactionMessageInstruction(\n * getSetComputeLimitInstruction({ units: computeUnitsEstimate }),\n * transactionMessage,\n * );\n * ```\n *\n * > [!WARNING]\n * > The compute unit estimate is just that – an estimate. The compute unit consumption of the\n * > actual transaction might be higher or lower than what was observed in simulation. Unless you\n * > are confident that your particular transaction message will consume the same or fewer compute\n * > units as was estimated, you might like to augment the estimate by either a fixed number of CUs\n * > or a multiplier.\n *\n * > [!NOTE]\n * > If you are preparing an _unsigned_ transaction, destined to be signed and submitted to the\n * > network by a wallet, you might like to leave it up to the wallet to determine the compute unit\n * > limit. Consider that the wallet might have a more global view of how many compute units certain\n * > types of transactions consume, and might be able to make better estimates of an appropriate\n * > compute unit budget.\n */\nexport async function estimateComputeUnitLimit({\n transactionMessage,\n ...configs\n}: EstimateComputeUnitLimitConfig): Promise<number> {\n const replaceRecentBlockhash = !isTransactionMessageWithDurableNonceLifetime(transactionMessage);\n const transaction = pipe(\n transactionMessage,\n m => updateOrAppendSetComputeUnitLimitInstruction(MAX_COMPUTE_UNIT_LIMIT, m),\n compileTransaction,\n );\n\n return await simulateTransactionAndGetConsumedUnits({\n transaction,\n replaceRecentBlockhash,\n ...configs,\n });\n}\n\ntype SimulateTransactionAndGetConsumedUnitsConfig = Omit<EstimateComputeUnitLimitConfig, 'transactionMessage'> &\n Readonly<{ replaceRecentBlockhash?: boolean; transaction: Transaction }>;\n\nasync function simulateTransactionAndGetConsumedUnits({\n abortSignal,\n rpc,\n transaction,\n ...simulateConfig\n}: SimulateTransactionAndGetConsumedUnitsConfig): Promise<number> {\n const wireTransactionBytes = getBase64EncodedWireTransaction(transaction);\n\n try {\n const {\n value: { err: transactionError, unitsConsumed },\n } = await rpc\n .simulateTransaction(wireTransactionBytes, {\n ...simulateConfig,\n encoding: 'base64',\n sigVerify: false,\n })\n .send({ abortSignal });\n if (unitsConsumed == null) {\n // This should never be hit, because all RPCs should support `unitsConsumed` by now.\n throw new SolanaError(SOLANA_ERROR__TRANSACTION__FAILED_TO_ESTIMATE_COMPUTE_LIMIT);\n }\n // FIXME(https://github.com/anza-xyz/agave/issues/1295): The simulation response returns\n // compute units as a u64, but the `SetComputeLimit` instruction only accepts a u32. Until\n // this changes, downcast it.\n const downcastUnitsConsumed = unitsConsumed > 4_294_967_295n ? 4_294_967_295 : Number(unitsConsumed);\n if (transactionError) {\n throw new SolanaError(SOLANA_ERROR__TRANSACTION__FAILED_WHEN_SIMULATING_TO_ESTIMATE_COMPUTE_LIMIT, {\n cause: getSolanaErrorFromTransactionError(transactionError),\n unitsConsumed: downcastUnitsConsumed,\n });\n }\n return downcastUnitsConsumed;\n } catch (e) {\n if (isSolanaError(e, SOLANA_ERROR__TRANSACTION__FAILED_WHEN_SIMULATING_TO_ESTIMATE_COMPUTE_LIMIT)) throw e;\n throw new SolanaError(SOLANA_ERROR__TRANSACTION__FAILED_TO_ESTIMATE_COMPUTE_LIMIT, { cause: e });\n }\n}\n","import {\n estimateComputeUnitLimit,\n EstimateComputeUnitLimitFactoryConfig,\n EstimateComputeUnitLimitFactoryFunction,\n} from './estimateComputeLimitInternal';\n\n/**\n * Use this utility to estimate the actual compute unit cost of a given transaction message.\n *\n * Correctly budgeting a compute unit limit for your transaction message can increase the\n * probability that your transaction will be accepted for processing. If you don't declare a compute\n * unit limit on your transaction, validators will assume an upper limit of 200K compute units (CU)\n * per instruction.\n *\n * Since validators have an incentive to pack as many transactions into each block as possible, they\n * may choose to include transactions that they know will fit into the remaining compute budget for\n * the current block over transactions that might not. For this reason, you should set a compute\n * unit limit on each of your transaction messages, whenever possible.\n *\n * > [!WARNING]\n * > The compute unit estimate is just that -- an estimate. The compute unit consumption of the\n * > actual transaction might be higher or lower than what was observed in simulation. Unless you\n * > are confident that your particular transaction message will consume the same or fewer compute\n * > units as was estimated, you might like to augment the estimate by either a fixed number of CUs\n * > or a multiplier.\n *\n * > [!NOTE]\n * > If you are preparing an _unsigned_ transaction, destined to be signed and submitted to the\n * > network by a wallet, you might like to leave it up to the wallet to determine the compute unit\n * > limit. Consider that the wallet might have a more global view of how many compute units certain\n * > types of transactions consume, and might be able to make better estimates of an appropriate\n * > compute unit budget.\n *\n * > [!INFO]\n * > In the event that a transaction message does not already have a `SetComputeUnitLimit`\n * > instruction, this function will add one before simulation. This ensures that the compute unit\n * > consumption of the `SetComputeUnitLimit` instruction itself is included in the estimate.\n *\n * @param config\n *\n * @example\n * ```ts\n * import { getSetComputeUnitLimitInstruction } from '@solana-program/compute-budget';\n * import { createSolanaRpc, estimateComputeUnitLimitFactory, pipe } from '@solana/kit';\n *\n * // Create an estimator function.\n * const rpc = createSolanaRpc('http://127.0.0.1:8899');\n * const estimateComputeUnitLimit = estimateComputeUnitLimitFactory({ rpc });\n *\n * // Create your transaction message.\n * const transactionMessage = pipe(\n * createTransactionMessage({ version: 'legacy' }),\n * /* ... *\\/\n * );\n *\n * // Request an estimate of the actual compute units this message will consume. This is done by\n * // simulating the transaction and grabbing the estimated compute units from the result.\n * const estimatedUnits = await estimateComputeUnitLimit(transactionMessage);\n *\n * // Set the transaction message's compute unit budget.\n * const transactionMessageWithComputeUnitLimit = prependTransactionMessageInstruction(\n * getSetComputeUnitLimitInstruction({ units: estimatedUnits }),\n * transactionMessage,\n * );\n * ```\n */\nexport function estimateComputeUnitLimitFactory({\n rpc,\n}: EstimateComputeUnitLimitFactoryConfig): EstimateComputeUnitLimitFactoryFunction {\n return async function estimateComputeUnitLimitFactoryFunction(transactionMessage, config) {\n return await estimateComputeUnitLimit({\n ...config,\n rpc,\n transactionMessage,\n });\n };\n}\n","import { appendTransactionMessageInstruction, TransactionMessage, MicroLamports } from '@solana/kit';\nimport { getSetComputeUnitPriceInstruction } from './generated';\nimport { findSetComputeUnitPriceInstructionIndexAndMicroLamports } from './introspect';\n\n/**\n * Sets the compute unit price of a transaction message in micro-Lamports.\n *\n * @example\n * ```ts\n * const transactionMessage = pipe(\n * createTransactionMessage({ version: 0 }),\n * (m) => setTransactionMessageComputeUnitPrice(10_000, m),\n * // ...\n * );\n * ```\n */\nexport function setTransactionMessageComputeUnitPrice<TTransactionMessage extends TransactionMessage>(\n microLamports: number | bigint,\n transactionMessage: TTransactionMessage,\n) {\n return appendTransactionMessageInstruction(\n getSetComputeUnitPriceInstruction({ microLamports }),\n transactionMessage,\n );\n}\n\n/**\n * Updates the first `SetComputeUnitPrice` instruction in a transaction message\n * with the given micro-Lamports, or appends a new instruction if none exists.\n * A function of the current value can be provided instead of a static value.\n *\n * @param microLamports - The new compute unit price, or a function that\n * takes the previous price and returns the new one.\n * @param transactionMessage - The transaction message to update.\n *\n * @example\n * ```ts\n * const updatedTransactionMessage = updateOrAppendSetComputeUnitPriceInstruction(\n * // E.g. double the current price or set it to 10_000 if it isn't set.\n * (currentPrice) => currentPrice === null ? 10_000 : currentPrice * 2,\n * transactionMessage,\n * );\n * ```\n */\nexport function updateOrAppendSetComputeUnitPriceInstruction<TTransactionMessage extends TransactionMessage>(\n microLamports: MicroLamports | ((previousMicroLamports: MicroLamports | null) => MicroLamports),\n transactionMessage: TTransactionMessage,\n): TTransactionMessage {\n const getMicroLamports = (previousMicroLamports: MicroLamports | null): MicroLamports =>\n typeof microLamports === 'function' ? microLamports(previousMicroLamports) : microLamports;\n const instructionDetails = findSetComputeUnitPriceInstructionIndexAndMicroLamports(transactionMessage);\n\n if (!instructionDetails) {\n return appendTransactionMessageInstruction(\n getSetComputeUnitPriceInstruction({\n microLamports: getMicroLamports(null),\n }),\n transactionMessage,\n ) as TTransactionMessage;\n }\n\n const { index, microLamports: previousMicroLamports } = instructionDetails;\n const newMicroLamports = getMicroLamports(previousMicroLamports);\n if (newMicroLamports === previousMicroLamports) {\n return transactionMessage;\n }\n\n const newInstruction = getSetComputeUnitPriceInstruction({\n microLamports: newMicroLamports,\n });\n const newInstructions = [...transactionMessage.instructions];\n newInstructions.splice(index, 1, newInstruction);\n return Object.freeze({\n ...transactionMessage,\n instructions: newInstructions,\n }) as TTransactionMessage;\n}\n"]} |
@@ -8,4 +8,5 @@ /** | ||
| */ | ||
| import { type Address, type Instruction, type InstructionWithData, type ReadonlyUint8Array } from '@solana/kit'; | ||
| import { type ParsedRequestHeapFrameInstruction, type ParsedRequestUnitsInstruction, type ParsedSetComputeUnitLimitInstruction, type ParsedSetComputeUnitPriceInstruction, type ParsedSetLoadedAccountsDataSizeLimitInstruction } from '../instructions'; | ||
| import { type Address, type ClientWithTransactionPlanning, type ClientWithTransactionSending, type Instruction, type InstructionWithData, type ReadonlyUint8Array } from '@solana/kit'; | ||
| import { type SelfPlanAndSendFunctions } from '@solana/kit/program-client-core'; | ||
| import { getRequestHeapFrameInstruction, getRequestUnitsInstruction, getSetComputeUnitLimitInstruction, getSetComputeUnitPriceInstruction, getSetLoadedAccountsDataSizeLimitInstruction, type ParsedRequestHeapFrameInstruction, type ParsedRequestUnitsInstruction, type ParsedSetComputeUnitLimitInstruction, type ParsedSetComputeUnitPriceInstruction, type ParsedSetLoadedAccountsDataSizeLimitInstruction, type RequestHeapFrameInput, type RequestUnitsInput, type SetComputeUnitLimitInput, type SetComputeUnitPriceInput, type SetLoadedAccountsDataSizeLimitInput } from '../instructions'; | ||
| export declare const COMPUTE_BUDGET_PROGRAM_ADDRESS: Address<"ComputeBudget111111111111111111111111111111">; | ||
@@ -34,2 +35,16 @@ export declare enum ComputeBudgetInstruction { | ||
| export declare function parseComputeBudgetInstruction<TProgram extends string>(instruction: Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array>): ParsedComputeBudgetInstruction<TProgram>; | ||
| export type ComputeBudgetPlugin = { | ||
| instructions: ComputeBudgetPluginInstructions; | ||
| }; | ||
| export type ComputeBudgetPluginInstructions = { | ||
| requestUnits: (input: RequestUnitsInput) => ReturnType<typeof getRequestUnitsInstruction> & SelfPlanAndSendFunctions; | ||
| requestHeapFrame: (input: RequestHeapFrameInput) => ReturnType<typeof getRequestHeapFrameInstruction> & SelfPlanAndSendFunctions; | ||
| setComputeUnitLimit: (input: SetComputeUnitLimitInput) => ReturnType<typeof getSetComputeUnitLimitInstruction> & SelfPlanAndSendFunctions; | ||
| setComputeUnitPrice: (input: SetComputeUnitPriceInput) => ReturnType<typeof getSetComputeUnitPriceInstruction> & SelfPlanAndSendFunctions; | ||
| setLoadedAccountsDataSizeLimit: (input: SetLoadedAccountsDataSizeLimitInput) => ReturnType<typeof getSetLoadedAccountsDataSizeLimitInstruction> & SelfPlanAndSendFunctions; | ||
| }; | ||
| export type ComputeBudgetPluginRequirements = ClientWithTransactionPlanning & ClientWithTransactionSending; | ||
| export declare function computeBudgetProgram(): <T extends ComputeBudgetPluginRequirements>(client: T) => T & { | ||
| computeBudget: ComputeBudgetPlugin; | ||
| }; | ||
| //# sourceMappingURL=computeBudget.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"computeBudget.d.ts","sourceRoot":"","sources":["../../../../src/generated/programs/computeBudget.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAGH,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EAMH,KAAK,iCAAiC,EACtC,KAAK,6BAA6B,EAClC,KAAK,oCAAoC,EACzC,KAAK,oCAAoC,EACzC,KAAK,+CAA+C,EACvD,MAAM,iBAAiB,CAAC;AAEzB,eAAO,MAAM,8BAA8B,EACU,OAAO,CAAC,6CAA6C,CAAC,CAAC;AAE5G,oBAAY,wBAAwB;IAChC,YAAY,IAAA;IACZ,gBAAgB,IAAA;IAChB,mBAAmB,IAAA;IACnB,mBAAmB,IAAA;IACnB,8BAA8B,IAAA;CACjC;AAED,wBAAgB,gCAAgC,CAC5C,WAAW,EAAE;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE,GAAG,kBAAkB,GAC/D,wBAAwB,CAkB1B;AAED,MAAM,MAAM,8BAA8B,CAAC,QAAQ,SAAS,MAAM,GAAG,6CAA6C,IAC5G,CAAC;IAAE,eAAe,EAAE,wBAAwB,CAAC,YAAY,CAAA;CAAE,GAAG,6BAA6B,CAAC,QAAQ,CAAC,CAAC,GACtG,CAAC;IAAE,eAAe,EAAE,wBAAwB,CAAC,gBAAgB,CAAA;CAAE,GAAG,iCAAiC,CAAC,QAAQ,CAAC,CAAC,GAC9G,CAAC;IACG,eAAe,EAAE,wBAAwB,CAAC,mBAAmB,CAAC;CACjE,GAAG,oCAAoC,CAAC,QAAQ,CAAC,CAAC,GACnD,CAAC;IACG,eAAe,EAAE,wBAAwB,CAAC,mBAAmB,CAAC;CACjE,GAAG,oCAAoC,CAAC,QAAQ,CAAC,CAAC,GACnD,CAAC;IACG,eAAe,EAAE,wBAAwB,CAAC,8BAA8B,CAAC;CAC5E,GAAG,+CAA+C,CAAC,QAAQ,CAAC,CAAC,CAAC;AAErE,wBAAgB,6BAA6B,CAAC,QAAQ,SAAS,MAAM,EACjE,WAAW,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,mBAAmB,CAAC,kBAAkB,CAAC,GAC7E,8BAA8B,CAAC,QAAQ,CAAC,CAoC1C"} | ||
| {"version":3,"file":"computeBudget.d.ts","sourceRoot":"","sources":["../../../../src/generated/programs/computeBudget.ts"],"names":[],"mappings":"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"} |
@@ -5,4 +5,5 @@ export * from './generated'; | ||
| export * from './estimateComputeLimit'; | ||
| export * from './introspect'; | ||
| export * from './setComputeLimit'; | ||
| export * from './setComputePrice'; | ||
| //# sourceMappingURL=index.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAE5B,cAAc,aAAa,CAAC;AAC5B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAE5B,cAAc,aAAa,CAAC;AAC5B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC"} |
+3
-3
| { | ||
| "name": "@solana-program/compute-budget", | ||
| "version": "0.13.0", | ||
| "version": "0.14.0", | ||
| "description": "JavaScript client for the Compute Budget program", | ||
@@ -35,7 +35,7 @@ "sideEffects": false, | ||
| "peerDependencies": { | ||
| "@solana/kit": "^6.0.0" | ||
| "@solana/kit": "^6.1.0" | ||
| }, | ||
| "devDependencies": { | ||
| "@solana/eslint-config-solana": "^3.0.3", | ||
| "@solana/kit": "^6.0.0", | ||
| "@solana/kit": "^6.1.0", | ||
| "@types/node": "^24", | ||
@@ -42,0 +42,0 @@ "@typescript-eslint/eslint-plugin": "^7.16.1", |
| /** | ||
| * This code was AUTOGENERATED using the Codama library. | ||
| * Please DO NOT EDIT THIS FILE, instead use visitors | ||
| * to add features, then rerun Codama to update it. | ||
| * | ||
| * @see https://github.com/codama-idl/codama | ||
| */ | ||
| import { type AccountMeta, type AccountSignerMeta, type Address, type ProgramDerivedAddress, type TransactionSigner } from '@solana/kit'; | ||
| /** | ||
| * Asserts that the given value is not null or undefined. | ||
| * @internal | ||
| */ | ||
| export declare function expectSome<T>(value: T | null | undefined): T; | ||
| /** | ||
| * Asserts that the given value is a PublicKey. | ||
| * @internal | ||
| */ | ||
| export declare function expectAddress<T extends string = string>(value: Address<T> | ProgramDerivedAddress<T> | TransactionSigner<T> | null | undefined): Address<T>; | ||
| /** | ||
| * Asserts that the given value is a PDA. | ||
| * @internal | ||
| */ | ||
| export declare function expectProgramDerivedAddress<T extends string = string>(value: Address<T> | ProgramDerivedAddress<T> | TransactionSigner<T> | null | undefined): ProgramDerivedAddress<T>; | ||
| /** | ||
| * Asserts that the given value is a TransactionSigner. | ||
| * @internal | ||
| */ | ||
| export declare function expectTransactionSigner<T extends string = string>(value: Address<T> | ProgramDerivedAddress<T> | TransactionSigner<T> | null | undefined): TransactionSigner<T>; | ||
| /** | ||
| * Defines an instruction account to resolve. | ||
| * @internal | ||
| */ | ||
| export type ResolvedAccount<T extends string = string, U extends Address<T> | ProgramDerivedAddress<T> | TransactionSigner<T> | null = Address<T> | ProgramDerivedAddress<T> | TransactionSigner<T> | null> = { | ||
| isWritable: boolean; | ||
| value: U; | ||
| }; | ||
| /** | ||
| * Defines an instruction that stores additional bytes on-chain. | ||
| * @internal | ||
| */ | ||
| export type InstructionWithByteDelta = { | ||
| byteDelta: number; | ||
| }; | ||
| /** | ||
| * Get account metas and signers from resolved accounts. | ||
| * @internal | ||
| */ | ||
| export declare function getAccountMetaFactory(programAddress: Address, optionalAccountStrategy: 'omitted' | 'programId'): (account: ResolvedAccount) => AccountMeta | AccountSignerMeta | undefined; | ||
| export declare function isTransactionSigner<TAddress extends string = string>(value: Address<TAddress> | ProgramDerivedAddress<TAddress> | TransactionSigner<TAddress>): value is TransactionSigner<TAddress>; | ||
| //# sourceMappingURL=index.d.ts.map |
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/generated/shared/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAIH,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,OAAO,EACZ,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EAEzB,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,CAAC,CAK5D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EACnD,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,GACvF,OAAO,CAAC,CAAC,CAAC,CAWZ;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EACjE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,GACvF,qBAAqB,CAAC,CAAC,CAAC,CAK1B;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAC7D,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,GACvF,iBAAiB,CAAC,CAAC,CAAC,CAKtB;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,CACvB,CAAC,SAAS,MAAM,GAAG,MAAM,EACzB,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,IAAI,GACvE,OAAO,CAAC,CAAC,CAAC,GACV,qBAAqB,CAAC,CAAC,CAAC,GACxB,iBAAiB,CAAC,CAAC,CAAC,GACpB,IAAI,IACV;IACA,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,CAAC,CAAC;CACZ,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,OAAO,EAAE,uBAAuB,EAAE,SAAS,GAAG,WAAW,IACnG,SAAS,eAAe,KAAG,WAAW,GAAG,iBAAiB,GAAG,SAAS,CAajF;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,EAChE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,qBAAqB,CAAC,QAAQ,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC,GACzF,KAAK,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAEtC"} |
| import { TransactionMessage, Instruction, MicroLamports } from '@solana/kit'; | ||
| import { SetComputeUnitLimitInstruction, SetComputeUnitPriceInstruction } from './generated'; | ||
| /** | ||
| * Finds the index of the first `SetComputeUnitLimit` instruction in a transaction message | ||
| * and its set limit, if any. | ||
| */ | ||
| export declare function getSetComputeUnitLimitInstructionIndexAndUnits(transactionMessage: TransactionMessage): { | ||
| index: number; | ||
| units: number; | ||
| } | null; | ||
| /** | ||
| * Finds the index of the first `SetComputeUnitLimit` instruction in a transaction message, if any. | ||
| */ | ||
| export declare function getSetComputeUnitLimitInstructionIndex(transactionMessage: TransactionMessage): number; | ||
| /** | ||
| * Checks if the given instruction is a `SetComputeUnitLimit` instruction. | ||
| */ | ||
| export declare function isSetComputeUnitLimitInstruction(instruction: Instruction): instruction is SetComputeUnitLimitInstruction; | ||
| /** | ||
| * Finds the index of the first `SetComputeUnitPrice` instruction in a transaction message | ||
| * and its set micro-lamports, if any. | ||
| */ | ||
| export declare function getSetComputeUnitPriceInstructionIndexAndMicroLamports(transactionMessage: TransactionMessage): { | ||
| index: number; | ||
| microLamports: MicroLamports; | ||
| } | null; | ||
| /** | ||
| * Finds the index of the first `SetComputeUnitPrice` instruction in a transaction message, if any. | ||
| */ | ||
| export declare function getSetComputeUnitPriceInstructionIndex(transactionMessage: TransactionMessage): number; | ||
| /** | ||
| * Checks if the given instruction is a `SetComputeUnitPrice` instruction. | ||
| */ | ||
| export declare function isSetComputeUnitPriceInstruction(instruction: Instruction): instruction is SetComputeUnitPriceInstruction; | ||
| //# sourceMappingURL=internal.d.ts.map |
| {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,kBAAkB,EAGlB,WAAW,EACX,aAAa,EAEhB,MAAM,aAAa,CAAC;AACrB,OAAO,EAIH,8BAA8B,EAC9B,8BAA8B,EACjC,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,wBAAgB,8CAA8C,CAC1D,kBAAkB,EAAE,kBAAkB,GACvC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CASzC;AAED;;GAEG;AACH,wBAAgB,sCAAsC,CAAC,kBAAkB,EAAE,kBAAkB,UAE5F;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAC5C,WAAW,EAAE,WAAW,GACzB,WAAW,IAAI,8BAA8B,CAM/C;AAED;;;GAGG;AACH,wBAAgB,sDAAsD,CAClE,kBAAkB,EAAE,kBAAkB,GACvC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,aAAa,CAAA;CAAE,GAAG,IAAI,CAYxD;AAED;;GAEG;AACH,wBAAgB,sCAAsC,CAAC,kBAAkB,EAAE,kBAAkB,UAE5F;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAC5C,WAAW,EAAE,WAAW,GACzB,WAAW,IAAI,8BAA8B,CAM/C"} |
Sorry, the diff of this file is too big to display
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
218231
2.6%0
-100%40
-4.76%1485
-0.74%