{"version":3,"sources":["../src/blockhash.ts","../src/transaction-message.ts","../src/codecs/legacy/header.ts","../src/codecs/legacy/instruction.ts","../../codecs-strings/src/assertions.ts","../../codecs-strings/src/baseX.ts","../../codecs-strings/src/base58.ts","../src/codecs/legacy/lifetime-token.ts","../src/codecs/legacy/message.ts","../src/codecs/transaction-version.ts","../src/codecs/v0/address-table-lookup.ts","../src/codecs/v0/message.ts","../src/v1-transaction-config.ts","../src/codecs/v1/config.ts","../src/codecs/v1/instruction.ts","../src/codecs/v1/message.ts","../src/codecs/message.ts","../src/compile/legacy/accounts.ts","../src/compile/legacy/header.ts","../src/compile/legacy/instructions.ts","../src/compile/legacy/lifetime-token.ts","../src/compile/legacy/message.ts","../src/compile/v0/accounts.ts","../src/compile/v0/address-table-lookups.ts","../src/compile/v0/instructions.ts","../src/compile/v0/static-accounts.ts","../src/compile/v0/message.ts","../src/compile/v1/config.ts","../src/compile/v1/instructions.ts","../src/compile/v1/message.ts","../src/compile/message.ts","../src/compress-transaction-message.ts","../src/compute-budget-instruction.ts","../src/instructions.ts","../src/compute-unit-limit.ts","../src/compute-unit-price.ts","../src/create-transaction-message.ts","../src/fee-payer.ts","../src/decompile/legacy/account-metas.ts","../src/decompile/legacy/convert-instruction.ts","../src/decompile/legacy/fee-payer.ts","../src/durable-nonce-instruction.ts","../src/decompile/legacy/lifetime-constraint.ts","../src/decompile/legacy/message.ts","../src/durable-nonce.ts","../src/decompile/v0/address-lookup-metas.ts","../src/decompile/v0/message.ts","../src/decompile/v1/config.ts","../src/decompile/v1/instructions.ts","../src/decompile/v1/message.ts","../src/decompile/message.ts","../src/heap-size.ts","../src/loaded-accounts-data-size-limit.ts","../src/priority-fee-lamports.ts"],"names":["getStructEncoder","getU8Encoder","getStructDecoder","getU8Decoder","alphabet","SolanaError","transformEncoder","getArrayEncoder","getShortU16Encoder","transformDecoder","getArrayDecoder","getShortU16Decoder","createEncoder","createDecoder","combineCodec","getAddressEncoder","getAddressDecoder","getMessageEncoder","getMessageDecoder","config","getBytesEncoder","fixDecoderSize","getBytesDecoder","getU32Encoder","getU32Decoder","header","getPatternMatchEncoder","SOLANA_ERROR__TRANSACTION__VERSION_NUMBER_NOT_SUPPORTED","isWritableRole","isSignerRole","upsert","AccountRole","TYPE","getAddressMapFromInstructions","SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_CANNOT_PAY_FEES","SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_MUST_NOT_BE_WRITABLE","mergeRoles","getAddressComparator","getOrderedAccountsFromAddressMap","getAccountIndex","getCompiledInstructions","compileTransactionMessage","SOLANA_ERROR__TRANSACTION__TOO_MANY_ACCOUNT_ADDRESSES","SOLANA_ERROR__TRANSACTION__TOO_MANY_SIGNER_ADDRESSES","SOLANA_ERROR__TRANSACTION__TOO_MANY_INSTRUCTIONS","SOLANA_ERROR__TRANSACTION__TOO_MANY_ACCOUNTS_IN_INSTRUCTION","getU64Encoder","getU64Decoder","decompileTransactionMessage","pipe","SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_INSTRUCTION_PROGRAM_ADDRESS_NOT_FOUND"],"mappings":"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","file":"index.native.mjs","sourcesContent":["import { SOLANA_ERROR__TRANSACTION__EXPECTED_BLOCKHASH_LIFETIME, SolanaError } from '@solana/errors';\nimport { type Blockhash, isBlockhash } from '@solana/rpc-types';\n\nimport { ExcludeTransactionMessageLifetime, TransactionMessageWithLifetime } from './lifetime';\nimport { TransactionMessage } from './transaction-message';\n\n/**\n * A constraint which, when applied to a transaction message, makes that transaction message\n * eligible to land on the network. The transaction message will continue to be eligible to land\n * until the network considers the `blockhash` to be expired.\n *\n * This can happen when the network proceeds past the `lastValidBlockHeight` for which the blockhash\n * is considered valid, or when the network switches to a fork where that blockhash is not present.\n */\nexport type BlockhashLifetimeConstraint = Readonly<{\n    /**\n     * A recent blockhash observed by the transaction proposer.\n     *\n     * The transaction message will be considered eligible to land until the network determines this\n     * blockhash to be too old, or has switched to a fork where it is not present.\n     */\n    blockhash: Blockhash;\n    /**\n     * This is the block height beyond which the network will consider the blockhash to be too old\n     * to make a transaction message eligible to land.\n     */\n    lastValidBlockHeight: bigint;\n}>;\n\n/**\n * Represents a transaction message whose lifetime is defined by the age of the blockhash it\n * includes.\n *\n * Such a transaction can only be landed on the network if the current block height of the network\n * is less than or equal to the value of\n * `TransactionMessageWithBlockhashLifetime['lifetimeConstraint']['lastValidBlockHeight']`.\n */\nexport interface TransactionMessageWithBlockhashLifetime {\n    readonly lifetimeConstraint: BlockhashLifetimeConstraint;\n}\n\n/**\n * A type guard that returns `true` if the transaction message conforms to the\n * {@link TransactionMessageWithBlockhashLifetime} type, and refines its type for use in your\n * program.\n *\n * @example\n * ```ts\n * import { isTransactionMessageWithBlockhashLifetime } from '@solana/transaction-messages';\n *\n * if (isTransactionMessageWithBlockhashLifetime(message)) {\n *     // At this point, `message` has been refined to a `TransactionMessageWithBlockhashLifetime`.\n *     const { blockhash } = message.lifetimeConstraint;\n *     const { value: blockhashIsValid } = await rpc.isBlockhashValid(blockhash).send();\n *     setBlockhashIsValid(blockhashIsValid);\n * } else {\n *     setError(\n *         `${getSignatureFromTransaction(transaction)} does not have a blockhash-based lifetime`,\n *     );\n * }\n * ```\n */\nexport function isTransactionMessageWithBlockhashLifetime(\n    transactionMessage: TransactionMessage | (TransactionMessage & TransactionMessageWithBlockhashLifetime),\n): transactionMessage is TransactionMessage & TransactionMessageWithBlockhashLifetime {\n    return (\n        'lifetimeConstraint' in transactionMessage &&\n        typeof transactionMessage.lifetimeConstraint.blockhash === 'string' &&\n        typeof transactionMessage.lifetimeConstraint.lastValidBlockHeight === 'bigint' &&\n        isBlockhash(transactionMessage.lifetimeConstraint.blockhash)\n    );\n}\n\n/**\n * From time to time you might acquire a transaction message, that you expect to have a\n * blockhash-based lifetime, from an untrusted network API or user input. Use this function to\n * assert that such a transaction message actually has a blockhash-based lifetime.\n *\n * @example\n * ```ts\n * import { assertIsTransactionMessageWithBlockhashLifetime } from '@solana/transaction-messages';\n *\n * try {\n *     // If this type assertion function doesn't throw, then\n *     // Typescript will upcast `message` to `TransactionMessageWithBlockhashLifetime`.\n *     assertIsTransactionMessageWithBlockhashLifetime(message);\n *     // At this point, `message` is a `TransactionMessageWithBlockhashLifetime` that can be used\n *     // with the RPC.\n *     const { blockhash } = message.lifetimeConstraint;\n *     const { value: blockhashIsValid } = await rpc.isBlockhashValid(blockhash).send();\n * } catch (e) {\n *     // `message` turned out not to have a blockhash-based lifetime\n * }\n * ```\n */\nexport function assertIsTransactionMessageWithBlockhashLifetime(\n    transactionMessage: TransactionMessage | (TransactionMessage & TransactionMessageWithBlockhashLifetime),\n): asserts transactionMessage is TransactionMessage & TransactionMessageWithBlockhashLifetime {\n    if (!isTransactionMessageWithBlockhashLifetime(transactionMessage)) {\n        throw new SolanaError(SOLANA_ERROR__TRANSACTION__EXPECTED_BLOCKHASH_LIFETIME);\n    }\n}\n\n/**\n * Given a blockhash and the last block height at which that blockhash is considered usable to land\n * transactions, this method will return a new transaction message having the same type as the one\n * supplied plus the `TransactionMessageWithBlockhashLifetime` type.\n *\n * @example\n * ```ts\n * import { setTransactionMessageLifetimeUsingBlockhash } from '@solana/transaction-messages';\n *\n * const { value: latestBlockhash } = await rpc.getLatestBlockhash().send();\n * const txMessageWithBlockhashLifetime = setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, txMessage);\n * ```\n */\nexport function setTransactionMessageLifetimeUsingBlockhash<\n    TTransactionMessage extends Partial<Pick<TransactionMessageWithLifetime, 'lifetimeConstraint'>> &\n        TransactionMessage,\n>(\n    blockhashLifetimeConstraint: BlockhashLifetimeConstraint,\n    transactionMessage: TTransactionMessage,\n): ExcludeTransactionMessageLifetime<TTransactionMessage> & TransactionMessageWithBlockhashLifetime {\n    type ReturnType = ExcludeTransactionMessageLifetime<TTransactionMessage> & TransactionMessageWithBlockhashLifetime;\n\n    if (\n        'lifetimeConstraint' in transactionMessage &&\n        transactionMessage.lifetimeConstraint &&\n        'blockhash' in transactionMessage.lifetimeConstraint &&\n        transactionMessage.lifetimeConstraint.blockhash === blockhashLifetimeConstraint.blockhash &&\n        transactionMessage.lifetimeConstraint.lastValidBlockHeight === blockhashLifetimeConstraint.lastValidBlockHeight\n    ) {\n        return transactionMessage as ReturnType;\n    }\n\n    return Object.freeze({\n        ...transactionMessage,\n        lifetimeConstraint: Object.freeze(blockhashLifetimeConstraint),\n    }) as ReturnType;\n}\n","import { AccountMeta, Instruction } from '@solana/instructions';\n\nimport { V1TransactionConfig } from './v1-transaction-config';\n\ntype BaseTransactionMessage<\n    TVersion extends TransactionVersion = TransactionVersion,\n    TInstruction extends Instruction = Instruction,\n> = Readonly<{\n    instructions: readonly TInstruction[];\n    version: TVersion;\n}>;\n\nexport const MAX_SUPPORTED_TRANSACTION_VERSION = 1;\n\ntype InstructionWithoutLookupTables<TProgramAddress extends string = string> = Instruction<\n    TProgramAddress,\n    readonly AccountMeta[]\n>;\ntype LegacyTransactionMessage = BaseTransactionMessage<'legacy', InstructionWithoutLookupTables>;\ntype V0TransactionMessage = BaseTransactionMessage<0, Instruction>;\ntype V1TransactionMessage = BaseTransactionMessage<1, InstructionWithoutLookupTables> &\n    Readonly<{\n        /** A set of optional configuration values for the transaction */\n        config?: V1TransactionConfig;\n    }>;\nexport type TransactionMessage = LegacyTransactionMessage | V0TransactionMessage | V1TransactionMessage;\nexport type TransactionVersion = 'legacy' | 0 | 1;\n","import { FixedSizeCodec, FixedSizeDecoder, FixedSizeEncoder } from '@solana/codecs-core';\nimport { getStructCodec, getStructDecoder, getStructEncoder } from '@solana/codecs-data-structures';\nimport { getU8Codec, getU8Decoder, getU8Encoder } from '@solana/codecs-numbers';\n\nimport { getCompiledMessageHeader } from '../../compile/legacy/header';\n\ntype MessageHeader = ReturnType<typeof getCompiledMessageHeader>;\n\nlet memoizedU8Encoder: FixedSizeEncoder<number, 1> | undefined;\nfunction getMemoizedU8Encoder(): FixedSizeEncoder<number, 1> {\n    if (!memoizedU8Encoder) memoizedU8Encoder = getU8Encoder();\n    return memoizedU8Encoder;\n}\n\nlet memoizedU8Decoder: FixedSizeDecoder<number, 1> | undefined;\nfunction getMemoizedU8Decoder(): FixedSizeDecoder<number, 1> {\n    if (!memoizedU8Decoder) memoizedU8Decoder = getU8Decoder();\n    return memoizedU8Decoder;\n}\n\nlet memoizedU8Codec: FixedSizeCodec<number, number, 1> | undefined;\nfunction getMemoizedU8Codec(): FixedSizeCodec<number, number, 1> {\n    if (!memoizedU8Codec) memoizedU8Codec = getU8Codec();\n    return memoizedU8Codec;\n}\n\nexport function getMessageHeaderEncoder(): FixedSizeEncoder<MessageHeader, 3> {\n    return getStructEncoder([\n        ['numSignerAccounts', getMemoizedU8Encoder()],\n        ['numReadonlySignerAccounts', getMemoizedU8Encoder()],\n        ['numReadonlyNonSignerAccounts', getMemoizedU8Encoder()],\n    ]) as FixedSizeEncoder<MessageHeader, 3>;\n}\n\nexport function getMessageHeaderDecoder(): FixedSizeDecoder<MessageHeader, 3> {\n    return getStructDecoder([\n        ['numSignerAccounts', getMemoizedU8Decoder()],\n        ['numReadonlySignerAccounts', getMemoizedU8Decoder()],\n        ['numReadonlyNonSignerAccounts', getMemoizedU8Decoder()],\n    ]) as FixedSizeDecoder<MessageHeader, 3>;\n}\n\nexport function getMessageHeaderCodec(): FixedSizeCodec<MessageHeader, MessageHeader, 3> {\n    return getStructCodec([\n        ['numSignerAccounts', getMemoizedU8Codec()],\n        ['numReadonlySignerAccounts', getMemoizedU8Codec()],\n        ['numReadonlyNonSignerAccounts', getMemoizedU8Codec()],\n    ]) as FixedSizeCodec<MessageHeader, MessageHeader, 3>;\n}\n","import {\n    addDecoderSizePrefix,\n    addEncoderSizePrefix,\n    combineCodec,\n    transformDecoder,\n    transformEncoder,\n    VariableSizeCodec,\n    VariableSizeDecoder,\n    VariableSizeEncoder,\n} from '@solana/codecs-core';\nimport {\n    getArrayDecoder,\n    getArrayEncoder,\n    getBytesDecoder,\n    getBytesEncoder,\n    getStructDecoder,\n    getStructEncoder,\n} from '@solana/codecs-data-structures';\nimport { getShortU16Decoder, getShortU16Encoder, getU8Decoder, getU8Encoder } from '@solana/codecs-numbers';\n\nimport { getCompiledInstructions } from '../../compile/v0/instructions';\n\ntype CompiledInstruction = ReturnType<typeof getCompiledInstructions>[number];\n\nlet memoizedGetInstructionEncoder: VariableSizeEncoder<CompiledInstruction> | undefined;\nexport function getInstructionEncoder(): VariableSizeEncoder<CompiledInstruction> {\n    if (!memoizedGetInstructionEncoder) {\n        memoizedGetInstructionEncoder = transformEncoder<Required<CompiledInstruction>, CompiledInstruction>(\n            getStructEncoder([\n                ['programAddressIndex', getU8Encoder()],\n                ['accountIndices', getArrayEncoder(getU8Encoder(), { size: getShortU16Encoder() })],\n                ['data', addEncoderSizePrefix(getBytesEncoder(), getShortU16Encoder())],\n            ]),\n            // Convert an instruction to have all fields defined\n            (instruction: CompiledInstruction): Required<CompiledInstruction> => {\n                if (instruction.accountIndices !== undefined && instruction.data !== undefined) {\n                    return instruction as Required<CompiledInstruction>;\n                }\n                return {\n                    ...instruction,\n                    accountIndices: instruction.accountIndices ?? [],\n                    data: instruction.data ?? new Uint8Array(0),\n                } as Required<CompiledInstruction>;\n            },\n        );\n    }\n\n    return memoizedGetInstructionEncoder;\n}\n\nlet memoizedGetInstructionDecoder: VariableSizeDecoder<CompiledInstruction> | undefined;\nexport function getInstructionDecoder(): VariableSizeDecoder<CompiledInstruction> {\n    if (!memoizedGetInstructionDecoder) {\n        memoizedGetInstructionDecoder = transformDecoder<Required<CompiledInstruction>, CompiledInstruction>(\n            getStructDecoder([\n                ['programAddressIndex', getU8Decoder()],\n                ['accountIndices', getArrayDecoder(getU8Decoder(), { size: getShortU16Decoder() })],\n                [\n                    'data',\n                    addDecoderSizePrefix(getBytesDecoder(), getShortU16Decoder()) as VariableSizeDecoder<Uint8Array>,\n                ],\n            ]),\n            // Convert an instruction to exclude optional fields if they are empty\n            (instruction: Required<CompiledInstruction>): CompiledInstruction => {\n                if (instruction.accountIndices.length && instruction.data.byteLength) {\n                    return instruction;\n                }\n                const { accountIndices, data, ...rest } = instruction;\n                return {\n                    ...rest,\n                    ...(accountIndices.length ? { accountIndices } : null),\n                    ...(data.byteLength ? { data } : null),\n                };\n            },\n        );\n    }\n    return memoizedGetInstructionDecoder;\n}\n\nexport function getInstructionCodec(): VariableSizeCodec<CompiledInstruction> {\n    return combineCodec(getInstructionEncoder(), getInstructionDecoder());\n}\n","import { SOLANA_ERROR__CODECS__INVALID_STRING_FOR_BASE, SolanaError } from '@solana/errors';\n\n/**\n * Asserts that a given string contains only characters from the specified alphabet.\n *\n * This function validates whether a string consists exclusively of characters\n * from the provided `alphabet`. If the validation fails, it throws an error\n * indicating the invalid base string.\n *\n * @param alphabet - The allowed set of characters for the base encoding.\n * @param testValue - The string to validate against the given alphabet.\n * @param givenValue - The original string provided by the user (defaults to `testValue`).\n *\n * @throws {SolanaError} If `testValue` contains characters not present in `alphabet`.\n *\n * @example\n * Validating a base-8 encoded string.\n * ```ts\n * assertValidBaseString('01234567', '123047'); // Passes\n * assertValidBaseString('01234567', '128');    // Throws error\n * ```\n */\nexport function assertValidBaseString(alphabet: string, testValue: string, givenValue = testValue) {\n    if (!testValue.match(new RegExp(`^[${alphabet}]*$`))) {\n        throw new SolanaError(SOLANA_ERROR__CODECS__INVALID_STRING_FOR_BASE, {\n            alphabet,\n            base: alphabet.length,\n            value: givenValue,\n        });\n    }\n}\n","import {\n    combineCodec,\n    createDecoder,\n    createEncoder,\n    VariableSizeCodec,\n    VariableSizeDecoder,\n    VariableSizeEncoder,\n} from '@solana/codecs-core';\n\nimport { assertValidBaseString } from './assertions';\n\n/**\n * Returns an encoder for base-X encoded strings.\n *\n * This encoder serializes strings using a custom alphabet, treating the length of the alphabet as the base.\n * The encoding process involves converting the input string to a numeric value in base-X, then\n * encoding that value into bytes while preserving leading zeroes.\n *\n * For more details, see {@link getBaseXCodec}.\n *\n * @param alphabet - The set of characters defining the base-X encoding.\n * @returns A `VariableSizeEncoder<string>` for encoding base-X strings.\n *\n * @example\n * Encoding a base-X string using a custom alphabet.\n * ```ts\n * const encoder = getBaseXEncoder('0123456789abcdef');\n * const bytes = encoder.encode('deadface'); // 0xdeadface\n * ```\n *\n * @see {@link getBaseXCodec}\n */\nexport const getBaseXEncoder = (alphabet: string): VariableSizeEncoder<string> => {\n    return createEncoder({\n        getSizeFromValue: (value: string): number => {\n            const [leadingZeroes, tailChars] = partitionLeadingZeroes(value, alphabet[0]);\n            if (!tailChars) return value.length;\n\n            const base10Number = getBigIntFromBaseX(tailChars, alphabet);\n            return leadingZeroes.length + Math.ceil(base10Number.toString(16).length / 2);\n        },\n        write(value: string, bytes, offset) {\n            // Check if the value is valid.\n            assertValidBaseString(alphabet, value);\n            if (value === '') return offset;\n\n            // Handle leading zeroes.\n            const [leadingZeroes, tailChars] = partitionLeadingZeroes(value, alphabet[0]);\n            if (!tailChars) {\n                bytes.set(new Uint8Array(leadingZeroes.length).fill(0), offset);\n                return offset + leadingZeroes.length;\n            }\n\n            // From baseX to base10.\n            let base10Number = getBigIntFromBaseX(tailChars, alphabet);\n\n            // From base10 to bytes.\n            const tailBytes: number[] = [];\n            while (base10Number > 0n) {\n                tailBytes.unshift(Number(base10Number % 256n));\n                base10Number /= 256n;\n            }\n\n            const bytesToAdd = [...Array(leadingZeroes.length).fill(0), ...tailBytes];\n            bytes.set(bytesToAdd, offset);\n            return offset + bytesToAdd.length;\n        },\n    });\n};\n\n/**\n * Returns a decoder for base-X encoded strings.\n *\n * This decoder deserializes base-X encoded strings from a byte array using a custom alphabet.\n * The decoding process converts the byte array into a numeric value in base-10, then\n * maps that value back to characters in the specified base-X alphabet.\n *\n * For more details, see {@link getBaseXCodec}.\n *\n * @param alphabet - The set of characters defining the base-X encoding.\n * @returns A `VariableSizeDecoder<string>` for decoding base-X strings.\n *\n * @example\n * Decoding a base-X string using a custom alphabet.\n * ```ts\n * const decoder = getBaseXDecoder('0123456789abcdef');\n * const value = decoder.decode(new Uint8Array([0xde, 0xad, 0xfa, 0xce])); // \"deadface\"\n * ```\n *\n * @see {@link getBaseXCodec}\n */\nexport const getBaseXDecoder = (alphabet: string): VariableSizeDecoder<string> => {\n    return createDecoder({\n        read(rawBytes, offset): [string, number] {\n            const bytes = offset === 0 || offset <= -rawBytes.byteLength ? rawBytes : rawBytes.slice(offset);\n            if (bytes.length === 0) return ['', 0];\n\n            // Handle leading zeroes.\n            let trailIndex = bytes.findIndex(n => n !== 0);\n            trailIndex = trailIndex === -1 ? bytes.length : trailIndex;\n            const leadingZeroes = alphabet[0].repeat(trailIndex);\n            if (trailIndex === bytes.length) return [leadingZeroes, rawBytes.length];\n\n            // From bytes to base10.\n            const base10Number = bytes.slice(trailIndex).reduce((sum, byte) => sum * 256n + BigInt(byte), 0n);\n\n            // From base10 to baseX.\n            const tailChars = getBaseXFromBigInt(base10Number, alphabet);\n\n            return [leadingZeroes + tailChars, rawBytes.length];\n        },\n    });\n};\n\n/**\n * Returns a codec for encoding and decoding base-X strings.\n *\n * This codec serializes strings using a custom alphabet, treating the length of the alphabet as the base.\n * The encoding process converts the input string into a numeric value in base-X, which is then encoded as bytes.\n * The decoding process reverses this transformation to reconstruct the original string.\n *\n * This codec supports leading zeroes by treating the first character of the alphabet as the zero character.\n *\n * @param alphabet - The set of characters defining the base-X encoding.\n * @returns A `VariableSizeCodec<string>` for encoding and decoding base-X strings.\n *\n * @example\n * Encoding and decoding a base-X string using a custom alphabet.\n * ```ts\n * const codec = getBaseXCodec('0123456789abcdef');\n * const bytes = codec.encode('deadface'); // 0xdeadface\n * const value = codec.decode(bytes);      // \"deadface\"\n * ```\n *\n * @remarks\n * This codec does not enforce a size boundary. It will encode and decode all bytes necessary to represent the string.\n *\n * If you need a fixed-size base-X codec, consider using {@link fixCodecSize}.\n *\n * ```ts\n * const codec = fixCodecSize(getBaseXCodec('0123456789abcdef'), 8);\n * ```\n *\n * If you need a size-prefixed base-X codec, consider using {@link addCodecSizePrefix}.\n *\n * ```ts\n * const codec = addCodecSizePrefix(getBaseXCodec('0123456789abcdef'), getU32Codec());\n * ```\n *\n * Separate {@link getBaseXEncoder} and {@link getBaseXDecoder} functions are available.\n *\n * ```ts\n * const bytes = getBaseXEncoder('0123456789abcdef').encode('deadface');\n * const value = getBaseXDecoder('0123456789abcdef').decode(bytes);\n * ```\n *\n * @see {@link getBaseXEncoder}\n * @see {@link getBaseXDecoder}\n */\nexport const getBaseXCodec = (alphabet: string): VariableSizeCodec<string> =>\n    combineCodec(getBaseXEncoder(alphabet), getBaseXDecoder(alphabet));\n\nfunction partitionLeadingZeroes(\n    value: string,\n    zeroCharacter: string,\n): [leadingZeros: string, tailChars: string | undefined] {\n    const [leadingZeros, tailChars] = value.split(new RegExp(`((?!${zeroCharacter}).*)`));\n    return [leadingZeros, tailChars];\n}\n\nfunction getBigIntFromBaseX(value: string, alphabet: string): bigint {\n    const base = BigInt(alphabet.length);\n    let sum = 0n;\n    for (const char of value) {\n        sum *= base;\n        sum += BigInt(alphabet.indexOf(char));\n    }\n    return sum;\n}\n\nfunction getBaseXFromBigInt(value: bigint, alphabet: string): string {\n    const base = BigInt(alphabet.length);\n    const tailChars = [];\n    while (value > 0n) {\n        tailChars.unshift(alphabet[Number(value % base)]);\n        value /= base;\n    }\n    return tailChars.join('');\n}\n","import { getBaseXCodec, getBaseXDecoder, getBaseXEncoder } from './baseX';\n\nconst alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\n\n/**\n * Returns an encoder for base-58 strings.\n *\n * This encoder serializes strings using a base-58 encoding scheme,\n * commonly used in cryptocurrency addresses and other compact representations.\n *\n * For more details, see {@link getBase58Codec}.\n *\n * @returns A `VariableSizeEncoder<string>` for encoding base-58 strings.\n *\n * @example\n * Encoding a base-58 string.\n * ```ts\n * const encoder = getBase58Encoder();\n * const bytes = encoder.encode('heLLo'); // 0x1b6a3070\n * ```\n *\n * @see {@link getBase58Codec}\n */\nexport const getBase58Encoder = () => getBaseXEncoder(alphabet);\n\n/**\n * Returns a decoder for base-58 strings.\n *\n * This decoder deserializes base-58 encoded strings from a byte array.\n *\n * For more details, see {@link getBase58Codec}.\n *\n * @returns A `VariableSizeDecoder<string>` for decoding base-58 strings.\n *\n * @example\n * Decoding a base-58 string.\n * ```ts\n * const decoder = getBase58Decoder();\n * const value = decoder.decode(new Uint8Array([0x1b, 0x6a, 0x30, 0x70])); // \"heLLo\"\n * ```\n *\n * @see {@link getBase58Codec}\n */\nexport const getBase58Decoder = () => getBaseXDecoder(alphabet);\n\n/**\n * Returns a codec for encoding and decoding base-58 strings.\n *\n * This codec serializes strings using a base-58 encoding scheme,\n * commonly used in cryptocurrency addresses and other compact representations.\n *\n * @returns A `VariableSizeCodec<string>` for encoding and decoding base-58 strings.\n *\n * @example\n * Encoding and decoding a base-58 string.\n * ```ts\n * const codec = getBase58Codec();\n * const bytes = codec.encode('heLLo'); // 0x1b6a3070\n * const value = codec.decode(bytes);   // \"heLLo\"\n * ```\n *\n * @remarks\n * This codec does not enforce a size boundary. It will encode and decode all bytes necessary to represent the string.\n *\n * If you need a fixed-size base-58 codec, consider using {@link fixCodecSize}.\n *\n * ```ts\n * const codec = fixCodecSize(getBase58Codec(), 8);\n * ```\n *\n * If you need a size-prefixed base-58 codec, consider using {@link addCodecSizePrefix}.\n *\n * ```ts\n * const codec = addCodecSizePrefix(getBase58Codec(), getU32Codec());\n * ```\n *\n * Separate {@link getBase58Encoder} and {@link getBase58Decoder} functions are available.\n *\n * ```ts\n * const bytes = getBase58Encoder().encode('heLLo');\n * const value = getBase58Decoder().decode(bytes);\n * ```\n *\n * @see {@link getBase58Encoder}\n * @see {@link getBase58Decoder}\n */\nexport const getBase58Codec = () => getBaseXCodec(alphabet);\n","import {\n    fixDecoderSize,\n    FixedSizeDecoder,\n    FixedSizeEncoder,\n    fixEncoderSize,\n    transformEncoder,\n} from '@solana/codecs-core';\nimport { getNullableEncoder } from '@solana/codecs-data-structures';\nimport { getBase58Decoder, getBase58Encoder } from '@solana/codecs-strings';\n\nimport { getCompiledLifetimeToken } from '../../compile/legacy/lifetime-token';\n\ntype LifetimeToken = ReturnType<typeof getCompiledLifetimeToken>;\n\nexport function getLifetimeTokenEncoder(): FixedSizeEncoder<LifetimeToken | undefined> {\n    return transformEncoder(\n        getNullableEncoder(fixEncoderSize(getBase58Encoder(), 32), {\n            noneValue: 'zeroes',\n            prefix: null,\n        }),\n        token => token ?? null,\n    );\n}\n\nexport function getLifetimeTokenDecoder(): FixedSizeDecoder<LifetimeToken> {\n    return fixDecoderSize(getBase58Decoder(), 32);\n}\n","import { getAddressDecoder, getAddressEncoder } from '@solana/addresses';\nimport {\n    combineCodec,\n    transformDecoder,\n    transformEncoder,\n    VariableSizeCodec,\n    VariableSizeDecoder,\n    VariableSizeEncoder,\n} from '@solana/codecs-core';\nimport { getArrayDecoder, getArrayEncoder, getStructDecoder, getStructEncoder } from '@solana/codecs-data-structures';\nimport { getShortU16Decoder, getShortU16Encoder } from '@solana/codecs-numbers';\n\nimport { CompiledTransactionMessage, CompiledTransactionMessageWithLifetime } from '../..';\nimport { getMessageHeaderDecoder, getMessageHeaderEncoder } from './header';\nimport { getInstructionDecoder, getInstructionEncoder } from './instruction';\nimport { getLifetimeTokenDecoder, getLifetimeTokenEncoder } from './lifetime-token';\n\ntype LegacyCompiledTransactionMessage = CompiledTransactionMessage & { version: 'legacy' };\n\nexport function getMessageEncoder(): VariableSizeEncoder<\n    LegacyCompiledTransactionMessage | (CompiledTransactionMessageWithLifetime & LegacyCompiledTransactionMessage)\n> {\n    return transformEncoder(\n        getStructEncoder([\n            ['header', getMessageHeaderEncoder()],\n            ['staticAccounts', getArrayEncoder(getAddressEncoder(), { size: getShortU16Encoder() })],\n            ['lifetimeToken', getLifetimeTokenEncoder()],\n            ['instructions', getArrayEncoder(getInstructionEncoder(), { size: getShortU16Encoder() })],\n        ]),\n        value => ({\n            ...value,\n            lifetimeToken: 'lifetimeToken' in value ? value.lifetimeToken : undefined,\n        }),\n    );\n}\nexport function getMessageDecoder(): VariableSizeDecoder<\n    CompiledTransactionMessageWithLifetime & LegacyCompiledTransactionMessage\n> {\n    return transformDecoder(\n        getStructDecoder([\n            ['header', getMessageHeaderDecoder()],\n            ['staticAccounts', getArrayDecoder(getAddressDecoder(), { size: getShortU16Decoder() })],\n            ['lifetimeToken', getLifetimeTokenDecoder()],\n            ['instructions', getArrayDecoder(getInstructionDecoder(), { size: getShortU16Decoder() })],\n        ]),\n        value => ({\n            ...value,\n            version: 'legacy',\n        }),\n    );\n}\n\nexport function getMessageCodec(): VariableSizeCodec<\n    LegacyCompiledTransactionMessage | (CompiledTransactionMessageWithLifetime & LegacyCompiledTransactionMessage),\n    CompiledTransactionMessageWithLifetime & LegacyCompiledTransactionMessage\n> {\n    return combineCodec(getMessageEncoder(), getMessageDecoder());\n}\n","import {\n    combineCodec,\n    createDecoder,\n    createEncoder,\n    VariableSizeCodec,\n    VariableSizeDecoder,\n    VariableSizeEncoder,\n} from '@solana/codecs-core';\nimport {\n    SOLANA_ERROR__TRANSACTION__VERSION_NUMBER_NOT_SUPPORTED,\n    SOLANA_ERROR__TRANSACTION__VERSION_NUMBER_OUT_OF_RANGE,\n    SolanaError,\n} from '@solana/errors';\n\nimport { MAX_SUPPORTED_TRANSACTION_VERSION, TransactionVersion } from '../transaction-message';\n\nconst VERSION_FLAG_MASK = 0x80;\n\n/**\n * Returns an encoder that you can use to encode a {@link TransactionVersion} to a byte array.\n *\n * Legacy messages will produce an empty array and will not advance the offset. Versioned messages\n * will produce an array with a single byte.\n */\nexport function getTransactionVersionEncoder(): VariableSizeEncoder<TransactionVersion> {\n    return createEncoder({\n        getSizeFromValue: value => (value === 'legacy' ? 0 : 1),\n        maxSize: 1,\n        write: (value, bytes, offset) => {\n            if (value === 'legacy') {\n                return offset;\n            }\n            if (value < 0 || value > 127) {\n                throw new SolanaError(SOLANA_ERROR__TRANSACTION__VERSION_NUMBER_OUT_OF_RANGE, {\n                    actualVersion: value,\n                });\n            }\n\n            if (value > MAX_SUPPORTED_TRANSACTION_VERSION) {\n                throw new SolanaError(SOLANA_ERROR__TRANSACTION__VERSION_NUMBER_NOT_SUPPORTED, {\n                    unsupportedVersion: value,\n                });\n            }\n            bytes.set([value | VERSION_FLAG_MASK], offset);\n            return offset + 1;\n        },\n    });\n}\n\n/**\n * Returns a decoder that you can use to decode a byte array representing a\n * {@link TransactionVersion}.\n *\n * When the byte at the current offset is determined to represent a legacy transaction, this decoder\n * will return `'legacy'` and will not advance the offset.\n */\nexport function getTransactionVersionDecoder(): VariableSizeDecoder<TransactionVersion> {\n    return createDecoder({\n        maxSize: 1,\n        read: (bytes, offset) => {\n            const firstByte = bytes[offset];\n            if ((firstByte & VERSION_FLAG_MASK) === 0) {\n                // No version flag set; it's a legacy (unversioned) transaction.\n                return ['legacy', offset];\n            } else {\n                const version = firstByte ^ VERSION_FLAG_MASK;\n                if (version > MAX_SUPPORTED_TRANSACTION_VERSION) {\n                    throw new SolanaError(SOLANA_ERROR__TRANSACTION__VERSION_NUMBER_NOT_SUPPORTED, {\n                        unsupportedVersion: version,\n                    });\n                }\n                return [version as TransactionVersion, offset + 1];\n            }\n        },\n    });\n}\n\n/**\n * Returns a codec that you can use to encode from or decode to {@link TransactionVersion}\n *\n * @see {@link getTransactionVersionDecoder}\n * @see {@link getTransactionVersionEncoder}\n */\nexport function getTransactionVersionCodec(): VariableSizeCodec<TransactionVersion> {\n    return combineCodec(getTransactionVersionEncoder(), getTransactionVersionDecoder());\n}\n","import { getAddressDecoder, getAddressEncoder } from '@solana/addresses';\nimport {\n    combineCodec,\n    type Encoder,\n    type VariableSizeCodec,\n    type VariableSizeDecoder,\n    type VariableSizeEncoder,\n} from '@solana/codecs-core';\nimport { getArrayDecoder, getArrayEncoder, getStructDecoder, getStructEncoder } from '@solana/codecs-data-structures';\nimport { getShortU16Decoder, getShortU16Encoder, getU8Decoder, getU8Encoder } from '@solana/codecs-numbers';\n\nimport type { getCompiledAddressTableLookups } from '../../compile/v0/address-table-lookups';\n\ntype AddressTableLookup = ReturnType<typeof getCompiledAddressTableLookups>[number];\n\nlet memoizedAddressTableLookupEncoder: VariableSizeEncoder<AddressTableLookup> | undefined;\nexport function getAddressTableLookupEncoder(): VariableSizeEncoder<AddressTableLookup> {\n    if (!memoizedAddressTableLookupEncoder) {\n        const indexEncoder = getArrayEncoder(getU8Encoder(), { size: getShortU16Encoder() }) as Encoder<\n            readonly number[]\n        >;\n        memoizedAddressTableLookupEncoder = getStructEncoder([\n            ['lookupTableAddress', getAddressEncoder()],\n            ['writableIndexes', indexEncoder],\n            ['readonlyIndexes', indexEncoder],\n        ]);\n    }\n\n    return memoizedAddressTableLookupEncoder;\n}\n\nlet memoizedAddressTableLookupDecoder: VariableSizeDecoder<AddressTableLookup> | undefined;\nexport function getAddressTableLookupDecoder(): VariableSizeDecoder<AddressTableLookup> {\n    if (!memoizedAddressTableLookupDecoder) {\n        const indexEncoder = getArrayDecoder(getU8Decoder(), { size: getShortU16Decoder() });\n        memoizedAddressTableLookupDecoder = getStructDecoder([\n            ['lookupTableAddress', getAddressDecoder()],\n            ['writableIndexes', indexEncoder],\n            ['readonlyIndexes', indexEncoder],\n        ]);\n    }\n\n    return memoizedAddressTableLookupDecoder;\n}\n\nexport function getAddressTableLookupCodec(): VariableSizeCodec<AddressTableLookup> {\n    return combineCodec(getAddressTableLookupEncoder(), getAddressTableLookupDecoder());\n}\n","import { getAddressDecoder, getAddressEncoder } from '@solana/addresses';\nimport {\n    combineCodec,\n    transformDecoder,\n    transformEncoder,\n    VariableSizeCodec,\n    VariableSizeDecoder,\n    VariableSizeEncoder,\n} from '@solana/codecs-core';\nimport { getArrayDecoder, getArrayEncoder, getStructDecoder, getStructEncoder } from '@solana/codecs-data-structures';\nimport { getShortU16Decoder, getShortU16Encoder } from '@solana/codecs-numbers';\n\nimport {\n    CompiledTransactionMessage,\n    CompiledTransactionMessageWithLifetime,\n    getTransactionVersionDecoder,\n    getTransactionVersionEncoder,\n} from '../..';\nimport { getMessageHeaderDecoder, getMessageHeaderEncoder } from '../legacy/header';\nimport { getInstructionDecoder, getInstructionEncoder } from '../legacy/instruction';\nimport { getLifetimeTokenDecoder, getLifetimeTokenEncoder } from '../legacy/lifetime-token';\nimport { getAddressTableLookupDecoder, getAddressTableLookupEncoder } from './address-table-lookup';\n\ntype V0CompiledTransactionMessage = CompiledTransactionMessage & { version: 0 };\n\nexport function getMessageEncoder(): VariableSizeEncoder<\n    V0CompiledTransactionMessage | (CompiledTransactionMessageWithLifetime & V0CompiledTransactionMessage)\n> {\n    return transformEncoder(\n        getStructEncoder([\n            ['version', getTransactionVersionEncoder()],\n            ['header', getMessageHeaderEncoder()],\n            ['staticAccounts', getArrayEncoder(getAddressEncoder(), { size: getShortU16Encoder() })],\n            ['lifetimeToken', getLifetimeTokenEncoder()],\n            ['instructions', getArrayEncoder(getInstructionEncoder(), { size: getShortU16Encoder() })],\n            ['addressTableLookups', getArrayEncoder(getAddressTableLookupEncoder(), { size: getShortU16Encoder() })],\n        ]),\n        value => ({\n            ...value,\n            addressTableLookups: value.addressTableLookups ?? [],\n            lifetimeToken: 'lifetimeToken' in value ? value.lifetimeToken : undefined,\n        }),\n    );\n}\n\nexport function getMessageDecoder(): VariableSizeDecoder<\n    CompiledTransactionMessageWithLifetime & V0CompiledTransactionMessage\n> {\n    return transformDecoder(\n        getStructDecoder([\n            ['version', getTransactionVersionDecoder()],\n            ['header', getMessageHeaderDecoder()],\n            ['staticAccounts', getArrayDecoder(getAddressDecoder(), { size: getShortU16Decoder() })],\n            ['lifetimeToken', getLifetimeTokenDecoder()],\n            ['instructions', getArrayDecoder(getInstructionDecoder(), { size: getShortU16Decoder() })],\n            ['addressTableLookups', getArrayDecoder(getAddressTableLookupDecoder(), { size: getShortU16Decoder() })],\n        ]),\n        ({ addressTableLookups, ...restOfMessage }) => {\n            if (!addressTableLookups?.length) {\n                return { ...restOfMessage, version: 0 };\n            }\n            return { ...restOfMessage, addressTableLookups, version: 0 };\n        },\n    );\n}\n\nexport function getMessageCodec(): VariableSizeCodec<\n    V0CompiledTransactionMessage | (CompiledTransactionMessageWithLifetime & V0CompiledTransactionMessage),\n    CompiledTransactionMessageWithLifetime & V0CompiledTransactionMessage\n> {\n    return combineCodec(getMessageEncoder(), getMessageDecoder());\n}\n","import { SOLANA_ERROR__TRANSACTION__INVALID_CONFIG_MASK_PRIORITY_FEE_BITS, SolanaError } from '@solana/errors';\n\nimport { TransactionMessage, TransactionVersion } from './transaction-message';\n\n/**\n * Configuration options for transaction messages.\n *\n * These options allow fine-grained control over transaction resource usage and\n * prioritization. All fields are optional and will be encoded into the transaction\n * when present.\n */\nexport type V1TransactionConfig = {\n    /**\n     * Maximum number of compute units the transaction may consume.\n     *\n     * If not specified, defaults to 200,000 CUs per instruction. The maximum\n     * allowed value is 1,400,000 CUs.\n     */\n    computeUnitLimit?: number;\n    /**\n     * Requested heap frame size in bytes for the transaction's execution.\n     */\n    heapSize?: number;\n    /**\n     * Maximum size in bytes for loaded account data.\n     */\n    loadedAccountsDataSizeLimit?: number;\n    /**\n     * Total priority fee in lamports to pay for transaction prioritization.\n     */\n    priorityFeeLamports?: bigint;\n};\n\nexport function isV1ConfigEmpty(config: V1TransactionConfig): boolean {\n    return (\n        config.computeUnitLimit === undefined &&\n        config.heapSize === undefined &&\n        config.loadedAccountsDataSizeLimit === undefined &&\n        config.priorityFeeLamports === undefined\n    );\n}\n\nexport function areV1ConfigsEqual(config1: V1TransactionConfig, config2: V1TransactionConfig) {\n    return (\n        config1.computeUnitLimit === config2.computeUnitLimit &&\n        config1.heapSize === config2.heapSize &&\n        config1.loadedAccountsDataSizeLimit === config2.loadedAccountsDataSizeLimit &&\n        config1.priorityFeeLamports === config2.priorityFeeLamports\n    );\n}\n\ntype SupportedTransactionVersions = Extract<TransactionVersion, 1>;\n\n/**\n * Sets configuration options on a transaction message.\n *\n * This function merges the provided configuration with any existing configuration\n * on the transaction message. Configuration values control resource limits and\n * transaction prioritization.\n *\n * @param config - The configuration options to apply.\n * @param transactionMessage - The transaction message to configure.\n * @typeParam TTransactionMessage - The transaction message type.\n * @return A new transaction message with the merged configuration.\n *\n * @example\n * ```ts\n * const configuredTx = setTransactionMessageConfig(\n *     {\n *         computeUnitLimit: 300_000,\n *         priorityFeeLamports: 50_000n,\n *     },\n *     transactionMessage,\n * );\n * ```\n *\n * @example\n * Incrementally adding configuration values.\n * ```ts\n * const txMessage = pipe(\n *     baseTransaction,\n *     tx => setTransactionMessageConfig({ computeUnitLimit: 300_000 }, tx),\n *     tx => setTransactionMessageConfig({ priorityFeeLamports: 50_000n }, tx),\n * );\n * ```\n *\n * @example\n * Removing a configuration value.\n * ```ts\n * const txMessage = setTransactionMessageConfig({ computeUnitLimit: undefined }, tx);\n * ```\n *\n * @see {@link setTransactionMessageComputeUnitLimit}\n * @see {@link setTransactionMessagePriorityFeeLamports}\n */\nexport function setTransactionMessageConfig<\n    TTransactionMessage extends TransactionMessage & { version: SupportedTransactionVersions },\n>(config: V1TransactionConfig, transactionMessage: TTransactionMessage): TTransactionMessage {\n    const mergedConfig = {\n        ...transactionMessage.config,\n        ...config,\n    };\n\n    if (isV1ConfigEmpty(mergedConfig)) {\n        // If config has no defined values, remove it entirely\n        if (!transactionMessage.config) {\n            // No config before, no config after - return same reference\n            return transactionMessage;\n        }\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        const { config, ...rest } = transactionMessage;\n        return Object.freeze(rest) as TTransactionMessage;\n    }\n\n    // Check if config is identical for idempotency\n    if (transactionMessage.config && areV1ConfigsEqual(transactionMessage.config, mergedConfig)) {\n        return transactionMessage;\n    }\n\n    return Object.freeze({\n        ...transactionMessage,\n        config: Object.freeze(mergedConfig),\n    }) as TTransactionMessage;\n}\n\nexport const TRANSACTION_CONFIG_PRIORITY_FEE_LAMPORTS_BIT_MASK = 0b11;\nexport const TRANSACTION_CONFIG_COMPUTE_UNIT_LIMIT_BIT_MASK = 0b100;\nexport const TRANSACTION_CONFIG_LOADED_ACCOUNTS_DATA_SIZE_LIMIT_BIT_MASK = 0b1000;\nexport const TRANSACTION_CONFIG_HEAP_SIZE_BIT_MASK = 0b10000;\n\n/**\n * Checks whether the transaction config mask indicates a priority fee is present.\n *\n * The priority fee uses bits 0 and 1 of the mask. Both bits must be set or\n * both must be unset — having only one bit set is invalid and will throw an error.\n *\n * @param mask - The transaction config mask to check.\n * @return `true` if the mask indicates a priority fee is present, `false` otherwise.\n *\n * @throws {SolanaError} Throws `SOLANA_ERROR__TRANSACTION__INVALID_CONFIG_MASK_PRIORITY_FEE_BITS`\n * if only one of the two priority fee bits is set.\n *\n * @example\n * Check if a mask has a priority fee.\n * ```ts\n * const hasPriorityFee = transactionConfigMaskHasPriorityFee(0b11);\n * // true (both bits 0 and 1 are set)\n * ```\n */\nexport function transactionConfigMaskHasPriorityFee(mask: number): boolean {\n    // bits 0 and 1 must both be set or both be unset\n    const priorityFeeBits = mask & TRANSACTION_CONFIG_PRIORITY_FEE_LAMPORTS_BIT_MASK;\n    if (priorityFeeBits === 0b01 || priorityFeeBits === 0b10) {\n        throw new SolanaError(SOLANA_ERROR__TRANSACTION__INVALID_CONFIG_MASK_PRIORITY_FEE_BITS, { mask });\n    }\n    return priorityFeeBits === TRANSACTION_CONFIG_PRIORITY_FEE_LAMPORTS_BIT_MASK;\n}\n\n/**\n * Checks whether the transaction config mask indicates a compute unit limit is present.\n *\n * The compute unit limit uses bit 2 of the mask.\n *\n * @param mask - The transaction config mask to check.\n * @return `true` if the mask indicates a compute unit limit is present, `false` otherwise.\n *\n * @example\n * ```ts\n * const hasComputeUnitLimit = transactionConfigMaskHasComputeUnitLimit(0b100);\n * // true (bit 2 is set)\n * ```\n */\nexport function transactionConfigMaskHasComputeUnitLimit(mask: number): boolean {\n    return (mask & TRANSACTION_CONFIG_COMPUTE_UNIT_LIMIT_BIT_MASK) !== 0;\n}\n\n/**\n * Checks whether the transaction config mask indicates a loaded accounts data size limit is present.\n *\n * The loaded accounts data size limit uses bit 3 of the mask.\n *\n * @param mask - The transaction config mask to check.\n * @return `true` if the mask indicates a loaded accounts data size limit is present, `false` otherwise.\n *\n * @example\n * ```ts\n * const hasLimit = transactionConfigMaskHasLoadedAccountsDataSizeLimit(0b1000);\n * // true (bit 3 is set)\n * ```\n */\nexport function transactionConfigMaskHasLoadedAccountsDataSizeLimit(mask: number): boolean {\n    return (mask & TRANSACTION_CONFIG_LOADED_ACCOUNTS_DATA_SIZE_LIMIT_BIT_MASK) !== 0;\n}\n\n/**\n * Checks whether the transaction config mask indicates a heap size is present.\n *\n * The heap size uses bit 4 of the mask.\n *\n * @param mask - The transaction config mask to check.\n * @return `true` if the mask indicates a heap size is present, `false` otherwise.\n *\n * @example\n * ```ts\n * const hasHeapSize = transactionConfigMaskHasHeapSize(0b10000);\n * // true (bit 4 is set)\n * ```\n */\nexport function transactionConfigMaskHasHeapSize(mask: number): boolean {\n    return (mask & TRANSACTION_CONFIG_HEAP_SIZE_BIT_MASK) !== 0;\n}\n","import { transformDecoder, VariableSizeDecoder, VariableSizeEncoder } from '@solana/codecs-core';\nimport {\n    getArrayEncoder,\n    getPatternMatchEncoder,\n    getStructEncoder,\n    getTupleDecoder,\n    getUnitDecoder,\n} from '@solana/codecs-data-structures';\nimport { getU32Decoder, getU32Encoder, getU64Decoder, getU64Encoder } from '@solana/codecs-numbers';\n\nimport { CompiledTransactionConfigValue } from '../../compile/v1/config';\nimport {\n    transactionConfigMaskHasComputeUnitLimit,\n    transactionConfigMaskHasHeapSize,\n    transactionConfigMaskHasLoadedAccountsDataSizeLimit,\n    transactionConfigMaskHasPriorityFee,\n} from '../../v1-transaction-config';\n\n/* TODO issue #1143 - we have a type error on `getPatternMatchEncoder` where it incorrectly\n * types the return as FixedSizeEncoder when used with differently sized FixedSizEencoder\n * inputs. For now we cast to VariableSizeEncoder, which is what the underlying union codec\n * actually returns.\n */\nfunction getCompiledTransactionConfigValueEncoder(): VariableSizeEncoder<CompiledTransactionConfigValue> {\n    return getPatternMatchEncoder<CompiledTransactionConfigValue>([\n        [value => value.kind === 'u32', getStructEncoder([['value', getU32Encoder()]])],\n        [value => value.kind === 'u64', getStructEncoder([['value', getU64Encoder()]])],\n    ]) as unknown as VariableSizeEncoder<CompiledTransactionConfigValue>;\n}\n\n/**\n * Encode a {@link TransactionMessageConfig} into a variable length byte array, where the fields set are encoded based on their data size.\n * @returns An Encoder for {@link TransactionMessageConfig}\n */\nexport function getCompiledTransactionConfigValuesEncoder(): VariableSizeEncoder<CompiledTransactionConfigValue[]> {\n    return getArrayEncoder(getCompiledTransactionConfigValueEncoder(), { size: 'remainder' });\n}\n\n/**\n * Decode a {@link TransactionMessageConfig} from a byte array of values, using the provided mask.\n * @param mask A mask indicating which fields are set\n * @returns A Decoder for {@link TransactionMessageConfig}\n */\nexport function getCompiledTransactionConfigValuesDecoder(\n    mask: number,\n): VariableSizeDecoder<CompiledTransactionConfigValue[]> {\n    const hasPriorityFee = transactionConfigMaskHasPriorityFee(mask);\n    const hasComputeUnitLimit = transactionConfigMaskHasComputeUnitLimit(mask);\n    const hasLoadedAccountsDataSizeLimit = transactionConfigMaskHasLoadedAccountsDataSizeLimit(mask);\n    const hasHeapSize = transactionConfigMaskHasHeapSize(mask);\n\n    const u32Decoder = transformDecoder(getU32Decoder(), value => ({ kind: 'u32', value }));\n    const u64Decoder = transformDecoder(getU64Decoder(), value => ({ kind: 'u64', value }));\n    const unitDecoder = getUnitDecoder();\n\n    return transformDecoder(\n        getTupleDecoder([\n            hasPriorityFee ? u64Decoder : unitDecoder,\n            hasComputeUnitLimit ? u32Decoder : unitDecoder,\n            hasLoadedAccountsDataSizeLimit ? u32Decoder : unitDecoder,\n            hasHeapSize ? u32Decoder : unitDecoder,\n        ]),\n        arr => arr.filter(Boolean) as CompiledTransactionConfigValue[],\n    );\n}\n","import {\n    combineCodec,\n    fixDecoderSize,\n    FixedSizeCodec,\n    FixedSizeDecoder,\n    FixedSizeEncoder,\n    VariableSizeDecoder,\n    VariableSizeEncoder,\n} from '@solana/codecs-core';\nimport {\n    getArrayDecoder,\n    getArrayEncoder,\n    getBytesDecoder,\n    getBytesEncoder,\n    getStructDecoder,\n    getStructEncoder,\n} from '@solana/codecs-data-structures';\nimport { getU8Decoder, getU8Encoder, getU16Decoder, getU16Encoder } from '@solana/codecs-numbers';\n\nimport { InstructionHeader, InstructionPayload } from '../../compile/v1/instructions';\n\n/**\n * Encode the fixed size {@link InstructionHeader}\n * @returns A FixedSizeEncoder for the instruction header\n */\nexport function getInstructionHeaderEncoder(): FixedSizeEncoder<InstructionHeader> {\n    return getStructEncoder([\n        ['programAccountIndex', getU8Encoder()],\n        ['numInstructionAccounts', getU8Encoder()],\n        ['numInstructionDataBytes', getU16Encoder()],\n    ]);\n}\n\n/**\n * Decode an {@link InstructionHeader} from a byte array\n * @returns A FixedSizeDecoder for the instruction header\n */\nexport function getInstructionHeaderDecoder(): FixedSizeDecoder<InstructionHeader> {\n    return getStructDecoder([\n        ['programAccountIndex', getU8Decoder()],\n        ['numInstructionAccounts', getU8Decoder()],\n        ['numInstructionDataBytes', getU16Decoder()],\n    ]);\n}\n\n/**\n * Get a codec for the {@link InstructionHeader}, which includes both the encoder and decoder\n * @returns A FixedSizeCodec for the instruction header\n */\nexport function getInstructionHeaderCodec(): FixedSizeCodec<InstructionHeader> {\n    return combineCodec(getInstructionHeaderEncoder(), getInstructionHeaderDecoder());\n}\n\n/**\n * Encode the variable size {@link InstructionPayload}, which includes the account indices and instruction data.\n * Both arrays may be empty\n * @returns A VariableSizeEncoder for the instruction payload\n */\nexport function getInstructionPayloadEncoder(): VariableSizeEncoder<InstructionPayload> {\n    return getStructEncoder([\n        ['instructionAccountIndices', getArrayEncoder(getU8Encoder(), { size: 'remainder' })],\n        ['instructionData', getBytesEncoder()],\n    ]);\n}\n\n/**\n * Decode an {@link InstructionPayload} from a byte array, given the instruction header\n * @param instructionHeader The header for the instruction\n * @returns A decoder for InstructionPayload\n */\nexport function getInstructionPayloadDecoder(\n    instructionHeader: Pick<InstructionHeader, 'numInstructionAccounts' | 'numInstructionDataBytes'>,\n): VariableSizeDecoder<InstructionPayload> {\n    return getStructDecoder([\n        [\n            'instructionAccountIndices',\n            getArrayDecoder(getU8Decoder(), { size: instructionHeader.numInstructionAccounts }),\n        ],\n        ['instructionData', fixDecoderSize(getBytesDecoder(), instructionHeader.numInstructionDataBytes)],\n    ]);\n}\n","import { getAddressDecoder, getAddressEncoder } from '@solana/addresses';\nimport {\n    combineCodec,\n    createDecoder,\n    transformEncoder,\n    VariableSizeCodec,\n    VariableSizeDecoder,\n    VariableSizeEncoder,\n} from '@solana/codecs-core';\nimport { getArrayDecoder, getArrayEncoder, getStructDecoder, getStructEncoder } from '@solana/codecs-data-structures';\nimport { getU8Decoder, getU8Encoder, getU32Decoder, getU32Encoder } from '@solana/codecs-numbers';\n\nimport { CompiledTransactionMessageWithLifetime, V1CompiledTransactionMessage } from '../..';\nimport { InstructionPayload } from '../../compile/v1/instructions';\nimport { getMessageHeaderDecoder, getMessageHeaderEncoder } from '../legacy/header';\nimport { getLifetimeTokenDecoder, getLifetimeTokenEncoder } from '../legacy/lifetime-token';\nimport { getTransactionVersionDecoder, getTransactionVersionEncoder } from '../transaction-version';\nimport { getCompiledTransactionConfigValuesDecoder, getCompiledTransactionConfigValuesEncoder } from './config';\nimport {\n    getInstructionHeaderDecoder,\n    getInstructionHeaderEncoder,\n    getInstructionPayloadDecoder,\n    getInstructionPayloadEncoder,\n} from './instruction';\n\nexport function getMessageEncoder(): VariableSizeEncoder<\n    V1CompiledTransactionMessage | (CompiledTransactionMessageWithLifetime & V1CompiledTransactionMessage)\n> {\n    return transformEncoder(\n        getStructEncoder([\n            ['version', getTransactionVersionEncoder()],\n            ['header', getMessageHeaderEncoder()],\n            ['configMask', getU32Encoder()],\n            ['lifetimeToken', getLifetimeTokenEncoder()],\n            ['numInstructions', getU8Encoder()],\n            ['numStaticAccounts', getU8Encoder()],\n            ['staticAccounts', getArrayEncoder(getAddressEncoder(), { size: 'remainder' })],\n            ['configValues', getCompiledTransactionConfigValuesEncoder()],\n            ['instructionHeaders', getArrayEncoder(getInstructionHeaderEncoder(), { size: 'remainder' })],\n            ['instructionPayloads', getArrayEncoder(getInstructionPayloadEncoder(), { size: 'remainder' })],\n        ]),\n        value => ({\n            ...value,\n            lifetimeToken: 'lifetimeToken' in value ? value.lifetimeToken : undefined,\n        }),\n    );\n}\n\nexport function getMessageDecoder(): VariableSizeDecoder<\n    CompiledTransactionMessageWithLifetime & V1CompiledTransactionMessage\n> {\n    return createDecoder({\n        read(bytes, offset) {\n            const [{ header, configMask, lifetimeToken, numInstructions, numStaticAccounts }, afterFixedFields] =\n                getStructDecoder([\n                    ['version', getTransactionVersionDecoder()],\n                    ['header', getMessageHeaderDecoder()],\n                    ['configMask', getU32Decoder()],\n                    ['lifetimeToken', getLifetimeTokenDecoder()],\n                    ['numInstructions', getU8Decoder()],\n                    ['numStaticAccounts', getU8Decoder()],\n                ]).read(bytes, offset);\n\n            let nextOffset = afterFixedFields;\n            const [staticAccounts, afterAddresses] = getArrayDecoder(getAddressDecoder(), {\n                size: numStaticAccounts,\n            }).read(bytes, nextOffset);\n            nextOffset = afterAddresses;\n\n            const [configValues, afterConfig] = getCompiledTransactionConfigValuesDecoder(configMask).read(\n                bytes,\n                nextOffset,\n            );\n            nextOffset = afterConfig;\n\n            const [instructionHeaders, afterHeaders] = getArrayDecoder(getInstructionHeaderDecoder(), {\n                size: numInstructions,\n            }).read(bytes, nextOffset);\n            nextOffset = afterHeaders;\n\n            const instructionPayloads: InstructionPayload[] = [];\n            for (const header of instructionHeaders) {\n                const [payload, next] = getInstructionPayloadDecoder(header).read(bytes, nextOffset);\n                instructionPayloads.push(payload);\n                nextOffset = next;\n            }\n\n            const compiledMessage: CompiledTransactionMessageWithLifetime & V1CompiledTransactionMessage = {\n                configMask,\n                configValues,\n                header,\n                instructionHeaders,\n                instructionPayloads,\n                lifetimeToken,\n                numInstructions,\n                numStaticAccounts,\n                staticAccounts,\n                version: 1,\n            };\n\n            return [compiledMessage, nextOffset];\n        },\n    });\n}\n\nexport function getMessageCodec(): VariableSizeCodec<\n    V1CompiledTransactionMessage | (CompiledTransactionMessageWithLifetime & V1CompiledTransactionMessage),\n    CompiledTransactionMessageWithLifetime & V1CompiledTransactionMessage\n> {\n    return combineCodec(getMessageEncoder(), getMessageDecoder());\n}\n","import {\n    combineCodec,\n    createDecoder,\n    transformEncoder,\n    VariableSizeCodec,\n    VariableSizeDecoder,\n    VariableSizeEncoder,\n} from '@solana/codecs-core';\nimport { getPatternMatchDecoder, getPatternMatchEncoder } from '@solana/codecs-data-structures';\nimport { SOLANA_ERROR__TRANSACTION__VERSION_NUMBER_NOT_SUPPORTED, SolanaError } from '@solana/errors';\n\nimport { CompiledTransactionMessage, CompiledTransactionMessageWithLifetime } from '../compile/message';\nimport { MAX_SUPPORTED_TRANSACTION_VERSION } from '../transaction-message';\nimport {\n    getMessageDecoder as getLegacyMessageDecoder,\n    getMessageEncoder as getLegacyMessageEncoder,\n} from './legacy/message';\nimport { getTransactionVersionDecoder } from './transaction-version';\nimport { getMessageDecoder as getV0MessageDecoder, getMessageEncoder as getV0MessageEncoder } from './v0/message';\nimport { getMessageDecoder as getV1MessageDecoder, getMessageEncoder as getV1MessageEncoder } from './v1/message';\n\n/**\n * Returns an encoder that you can use to encode a {@link CompiledTransactionMessage} to a byte\n * array.\n *\n * The wire format of a Solana transaction consists of signatures followed by a compiled transaction\n * message. The byte array produced by this encoder is the message part.\n */\nexport function getCompiledTransactionMessageEncoder(): VariableSizeEncoder<\n    CompiledTransactionMessage | (CompiledTransactionMessage & CompiledTransactionMessageWithLifetime)\n> {\n    return transformEncoder(\n        getPatternMatchEncoder<\n            CompiledTransactionMessage | (CompiledTransactionMessage & CompiledTransactionMessageWithLifetime)\n        >([\n            [m => m.version === 'legacy', getLegacyMessageEncoder()],\n            [m => m.version === 0, getV0MessageEncoder()],\n            [m => m.version === 1, getV1MessageEncoder()],\n        ]),\n        value => {\n            // check version is valid before encoding, so we don't get the generic pattern match error\n            if (value.version !== 'legacy' && value.version > MAX_SUPPORTED_TRANSACTION_VERSION) {\n                throw new SolanaError(SOLANA_ERROR__TRANSACTION__VERSION_NUMBER_NOT_SUPPORTED, {\n                    unsupportedVersion: value.version,\n                });\n            }\n            return value;\n        },\n    );\n}\n\n/**\n * Returns a decoder that you can use to decode a byte array representing a\n * {@link CompiledTransactionMessage}.\n *\n * The wire format of a Solana transaction consists of signatures followed by a compiled transaction\n * message. You can use this decoder to decode the message part.\n */\nexport function getCompiledTransactionMessageDecoder(): VariableSizeDecoder<\n    CompiledTransactionMessage & CompiledTransactionMessageWithLifetime\n> {\n    type ReturnType = VariableSizeDecoder<CompiledTransactionMessage & CompiledTransactionMessageWithLifetime>;\n\n    return createDecoder({\n        read(bytes, offset) {\n            const [version] = getTransactionVersionDecoder().read(bytes, offset);\n\n            return getPatternMatchDecoder([\n                [() => version === 'legacy', getLegacyMessageDecoder() as ReturnType],\n                [() => version === 0, getV0MessageDecoder() as ReturnType],\n                [() => version === 1, getV1MessageDecoder() as ReturnType],\n            ]).read(bytes, offset);\n        },\n    });\n}\n\n/**\n * Returns a codec that you can use to encode from or decode to {@link CompiledTransactionMessage}\n *\n * @see {@link getCompiledTransactionMessageDecoder}\n * @see {@link getCompiledTransactionMessageEncoder}\n */\nexport function getCompiledTransactionMessageCodec(): VariableSizeCodec<\n    CompiledTransactionMessage | (CompiledTransactionMessage & CompiledTransactionMessageWithLifetime),\n    CompiledTransactionMessage & CompiledTransactionMessageWithLifetime\n> {\n    return combineCodec(getCompiledTransactionMessageEncoder(), getCompiledTransactionMessageDecoder());\n}\n","import { Address, getAddressComparator } from '@solana/addresses';\nimport {\n    SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_CANNOT_PAY_FEES,\n    SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_MUST_NOT_BE_WRITABLE,\n    SolanaError,\n} from '@solana/errors';\nimport {\n    AccountMeta,\n    AccountRole,\n    Instruction,\n    isSignerRole,\n    isWritableRole,\n    mergeRoles,\n    ReadonlyAccount,\n    ReadonlySignerAccount,\n    WritableAccount,\n    WritableSignerAccount,\n} from '@solana/instructions';\nimport { Brand } from '@solana/nominal-types';\n\nexport const enum AddressMapEntryType {\n    FEE_PAYER,\n    STATIC,\n}\n\ntype AddressMap = {\n    [address: string]: FeePayerAccountEntry | StaticAccountEntry;\n};\ntype FeePayerAccountEntry = Omit<WritableSignerAccount, 'address'> & {\n    [TYPE]: AddressMapEntryType.FEE_PAYER;\n};\nexport type OrderedAccounts = Brand<AccountMeta[], 'OrderedAccounts'>;\ntype StaticAccountEntry = Omit<\n    ReadonlyAccount | ReadonlySignerAccount | WritableAccount | WritableSignerAccount,\n    'address'\n> & { [TYPE]: AddressMapEntryType.STATIC };\n\nfunction upsert(\n    addressMap: AddressMap,\n    address: Address,\n    update: (entry: FeePayerAccountEntry | Record<never, never> | StaticAccountEntry) => AddressMap[Address],\n) {\n    addressMap[address] = update(addressMap[address] ?? { role: AccountRole.READONLY });\n}\n\nconst TYPE = Symbol('AddressMapTypeProperty');\nexport const ADDRESS_MAP_TYPE_PROPERTY: typeof TYPE = TYPE;\n\nexport function getAddressMapFromInstructions(feePayer: Address, instructions: readonly Instruction[]): AddressMap {\n    const addressMap: AddressMap = {\n        [feePayer]: { [TYPE]: AddressMapEntryType.FEE_PAYER, role: AccountRole.WRITABLE_SIGNER },\n    };\n    const addressesOfInvokedPrograms = new Set<Address>();\n    for (const instruction of instructions) {\n        upsert(addressMap, instruction.programAddress, entry => {\n            addressesOfInvokedPrograms.add(instruction.programAddress);\n            if (TYPE in entry) {\n                if (isWritableRole(entry.role)) {\n                    switch (entry[TYPE]) {\n                        case AddressMapEntryType.FEE_PAYER:\n                            throw new SolanaError(SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_CANNOT_PAY_FEES, {\n                                programAddress: instruction.programAddress,\n                            });\n                        default:\n                            throw new SolanaError(SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_MUST_NOT_BE_WRITABLE, {\n                                programAddress: instruction.programAddress,\n                            });\n                    }\n                }\n                if (entry[TYPE] === AddressMapEntryType.STATIC) {\n                    return entry;\n                }\n            }\n            return { [TYPE]: AddressMapEntryType.STATIC, role: AccountRole.READONLY };\n        });\n        if (!instruction.accounts) {\n            continue;\n        }\n        for (const account of instruction.accounts) {\n            upsert(addressMap, account.address, entry => {\n                const {\n                    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n                    address: _,\n                    ...accountMeta\n                } = account;\n                if (TYPE in entry) {\n                    switch (entry[TYPE]) {\n                        case AddressMapEntryType.FEE_PAYER:\n                            // The fee payer already has the highest rank -- it is by definition\n                            // writable-signer. Return it, no matter how `account` is configured\n                            return entry;\n                        case AddressMapEntryType.STATIC: {\n                            const nextRole = mergeRoles(entry.role, accountMeta.role);\n                            if (\n                                // Check to see if this address represents a program that is invoked\n                                // in this transaction.\n                                addressesOfInvokedPrograms.has(account.address)\n                            ) {\n                                if (isWritableRole(accountMeta.role)) {\n                                    throw new SolanaError(\n                                        SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_MUST_NOT_BE_WRITABLE,\n                                        {\n                                            programAddress: account.address,\n                                        },\n                                    );\n                                }\n                                if (entry.role !== nextRole) {\n                                    return {\n                                        ...entry,\n                                        role: nextRole,\n                                    } as StaticAccountEntry;\n                                } else {\n                                    return entry;\n                                }\n                            } else {\n                                if (entry.role !== nextRole) {\n                                    // The account's role ranks higher than the current entry's.\n                                    return {\n                                        ...entry,\n                                        role: nextRole,\n                                    } as StaticAccountEntry;\n                                } else {\n                                    return entry;\n                                }\n                            }\n                        }\n                    }\n                }\n                return {\n                    ...accountMeta,\n                    [TYPE]: AddressMapEntryType.STATIC,\n                };\n            });\n        }\n    }\n    return addressMap;\n}\n\nexport function getOrderedAccountsFromAddressMap(addressMap: AddressMap): OrderedAccounts {\n    let addressComparator: ReturnType<typeof getAddressComparator>;\n    const orderedAccounts: AccountMeta[] = Object.entries(addressMap)\n        .sort(([leftAddress, leftEntry], [rightAddress, rightEntry]) => {\n            // STEP 1: Rapid precedence check. Fee payer, then static addresses\n            if (leftEntry[TYPE] !== rightEntry[TYPE]) {\n                if (leftEntry[TYPE] === AddressMapEntryType.FEE_PAYER) {\n                    return -1;\n                } else if (rightEntry[TYPE] === AddressMapEntryType.FEE_PAYER) {\n                    return 1;\n                } else if (leftEntry[TYPE] === AddressMapEntryType.STATIC) {\n                    return -1;\n                } else if (rightEntry[TYPE] === AddressMapEntryType.STATIC) {\n                    return 1;\n                }\n            }\n            // STEP 2: Sort by signer-writability.\n            const leftIsSigner = isSignerRole(leftEntry.role);\n            if (leftIsSigner !== isSignerRole(rightEntry.role)) {\n                return leftIsSigner ? -1 : 1;\n            }\n            const leftIsWritable = isWritableRole(leftEntry.role);\n            if (leftIsWritable !== isWritableRole(rightEntry.role)) {\n                return leftIsWritable ? -1 : 1;\n            }\n            // STEP 3: Sort by address.\n            addressComparator ||= getAddressComparator();\n            return addressComparator(leftAddress, rightAddress);\n        })\n        .map(([address, addressMeta]) => ({\n            address: address as Address<typeof address>,\n            ...addressMeta,\n        }));\n    return orderedAccounts as unknown as OrderedAccounts;\n}\n","import { isSignerRole, isWritableRole } from '@solana/instructions';\n\nimport { OrderedAccounts } from '../v0/accounts';\n\ntype MessageHeader = Readonly<{\n    /**\n     * The number of accounts in the static accounts list that are neither writable nor\n     * signers.\n     *\n     * Adding this number to `numSignerAccounts` yields the index of the first read-only non-signer\n     * account in the static accounts list.\n     */\n    numReadonlyNonSignerAccounts: number;\n    /**\n     * The number of read-only accounts in the static accounts list that must sign this\n     * transaction.\n     *\n     * Subtracting this number from `numSignerAccounts` yields the index of the first read-only\n     * signer account in the static accounts list.\n     */\n    numReadonlySignerAccounts: number;\n    /**\n     * The number of accounts in the static accounts list that must sign this transaction.\n     *\n     * Subtracting `numReadonlySignerAccounts` from this number yields the number of\n     * writable signer accounts in the static accounts list. Writable signer accounts always\n     * begin at index zero in the static accounts list.\n     *\n     * This number itself is the index of the first non-signer account in the static\n     * accounts list.\n     */\n    numSignerAccounts: number;\n}>;\n\nexport function getCompiledMessageHeader(orderedAccounts: OrderedAccounts): MessageHeader {\n    let numReadonlyNonSignerAccounts = 0;\n    let numReadonlySignerAccounts = 0;\n    let numSignerAccounts = 0;\n    for (const account of orderedAccounts) {\n        if ('lookupTableAddress' in account) {\n            break;\n        }\n        const accountIsWritable = isWritableRole(account.role);\n        if (isSignerRole(account.role)) {\n            numSignerAccounts++;\n            if (!accountIsWritable) {\n                numReadonlySignerAccounts++;\n            }\n        } else if (!accountIsWritable) {\n            numReadonlyNonSignerAccounts++;\n        }\n    }\n    return {\n        numReadonlyNonSignerAccounts,\n        numReadonlySignerAccounts,\n        numSignerAccounts,\n    };\n}\n","import { Address } from '@solana/addresses';\nimport { ReadonlyUint8Array } from '@solana/codecs-core';\nimport { Instruction } from '@solana/instructions';\n\nimport { OrderedAccounts } from './accounts';\n\nexport type CompiledInstruction = Readonly<{\n    /**\n     * An ordered list of indices that indicate which accounts in the transaction message's\n     * accounts list are loaded by this instruction.\n     */\n    accountIndices?: number[];\n    /** The input to the invoked program */\n    data?: ReadonlyUint8Array;\n    /**\n     * The index of the address in the transaction message's accounts list associated with the\n     * program to invoke.\n     */\n    programAddressIndex: number;\n}>;\n\nexport function getAccountIndex(orderedAccounts: OrderedAccounts) {\n    const out: Record<Address, number> = {};\n    for (const [index, account] of orderedAccounts.entries()) {\n        out[account.address] = index;\n    }\n    return out;\n}\n\nexport function getCompiledInstructions(\n    instructions: readonly Instruction[],\n    orderedAccounts: OrderedAccounts,\n): CompiledInstruction[] {\n    const accountIndex = getAccountIndex(orderedAccounts);\n    return instructions.map(({ accounts, data, programAddress }) => {\n        return {\n            programAddressIndex: accountIndex[programAddress],\n            ...(accounts ? { accountIndices: accounts.map(({ address }) => accountIndex[address]) } : null),\n            ...(data ? { data } : null),\n        };\n    });\n}\n","import { TransactionMessageWithBlockhashLifetime, TransactionMessageWithDurableNonceLifetime } from '../../index';\n\nexport function getCompiledLifetimeToken(\n    lifetimeConstraint: (\n        | TransactionMessageWithBlockhashLifetime\n        | TransactionMessageWithDurableNonceLifetime\n    )['lifetimeConstraint'],\n): string {\n    if ('nonce' in lifetimeConstraint) {\n        return lifetimeConstraint.nonce;\n    }\n    return lifetimeConstraint.blockhash;\n}\n","import { Address } from '@solana/addresses';\nimport {\n    SOLANA_ERROR__TRANSACTION__TOO_MANY_ACCOUNT_ADDRESSES,\n    SOLANA_ERROR__TRANSACTION__TOO_MANY_ACCOUNTS_IN_INSTRUCTION,\n    SOLANA_ERROR__TRANSACTION__TOO_MANY_INSTRUCTIONS,\n    SOLANA_ERROR__TRANSACTION__TOO_MANY_SIGNER_ADDRESSES,\n    SolanaError,\n} from '@solana/errors';\nimport { isSignerRole } from '@solana/instructions';\n\nimport { TransactionMessageWithFeePayer, TransactionMessageWithLifetime } from '../..';\nimport { TransactionMessage } from '../../transaction-message';\nimport { ForwardTransactionMessageLifetime } from '../message-types';\nimport { getAddressMapFromInstructions, getOrderedAccountsFromAddressMap } from './accounts';\nimport { getCompiledMessageHeader } from './header';\nimport { getCompiledInstructions } from './instructions';\nimport { getCompiledLifetimeToken } from './lifetime-token';\n\nexport type LegacyCompiledTransactionMessage = Readonly<{\n    /** Information about the role of the accounts loaded. */\n    header: ReturnType<typeof getCompiledMessageHeader>;\n    /** A list of instructions that this transaction will execute */\n    instructions: ReturnType<typeof getCompiledInstructions>;\n    /** A list of addresses indicating which accounts to load */\n    staticAccounts: Address[];\n    version: 'legacy';\n}>;\n\n/**\n * Converts the type of transaction message data structure that you create in your application to\n * the type of transaction message data structure that can be encoded for execution on the network.\n *\n * This is a lossy process; you can not fully reconstruct a source message from a compiled message\n * without extra information. In particular, supporting details about the lifetime constraint will\n * be lost to compilation.\n *\n * @see {@link decompileTransactionMessage}\n */\nexport function compileTransactionMessage<\n    TTransactionMessage extends TransactionMessage & TransactionMessageWithFeePayer & { version: 'legacy' },\n>(\n    transactionMessage: TTransactionMessage,\n): ForwardTransactionMessageLifetime<LegacyCompiledTransactionMessage, TTransactionMessage> {\n    type ReturnType = ForwardTransactionMessageLifetime<LegacyCompiledTransactionMessage, TTransactionMessage>;\n\n    const addressMap = getAddressMapFromInstructions(\n        transactionMessage.feePayer.address,\n        transactionMessage.instructions,\n    );\n    const orderedAccounts = getOrderedAccountsFromAddressMap(addressMap);\n    const numAccounts = orderedAccounts.length;\n    if (numAccounts > 64) {\n        throw new SolanaError(SOLANA_ERROR__TRANSACTION__TOO_MANY_ACCOUNT_ADDRESSES, {\n            actualCount: numAccounts,\n            maxAllowed: 64,\n        });\n    }\n    const numSigners = orderedAccounts.filter(account => isSignerRole(account.role)).length;\n    if (numSigners > 12) {\n        throw new SolanaError(SOLANA_ERROR__TRANSACTION__TOO_MANY_SIGNER_ADDRESSES, {\n            actualCount: numSigners,\n            maxAllowed: 12,\n        });\n    }\n    const numInstructions = transactionMessage.instructions.length;\n    if (numInstructions > 64) {\n        throw new SolanaError(SOLANA_ERROR__TRANSACTION__TOO_MANY_INSTRUCTIONS, {\n            actualCount: numInstructions,\n            maxAllowed: 64,\n        });\n    }\n    for (let i = 0; i < transactionMessage.instructions.length; i++) {\n        const numAccountsInInstruction = transactionMessage.instructions[i].accounts?.length ?? 0;\n        if (numAccountsInInstruction > 255) {\n            throw new SolanaError(SOLANA_ERROR__TRANSACTION__TOO_MANY_ACCOUNTS_IN_INSTRUCTION, {\n                actualCount: numAccountsInInstruction,\n                instructionIndex: i,\n                maxAllowed: 255,\n            });\n        }\n    }\n    const lifetimeConstraint = (transactionMessage as Partial<TransactionMessageWithLifetime>).lifetimeConstraint;\n\n    return {\n        ...(lifetimeConstraint ? { lifetimeToken: getCompiledLifetimeToken(lifetimeConstraint) } : null),\n        header: getCompiledMessageHeader(orderedAccounts),\n        instructions: getCompiledInstructions(transactionMessage.instructions, orderedAccounts),\n        staticAccounts: orderedAccounts.map(account => account.address),\n        version: transactionMessage.version,\n    } as ReturnType;\n}\n","import { Address, getAddressComparator } from '@solana/addresses';\nimport {\n    SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_CANNOT_PAY_FEES,\n    SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_MUST_NOT_BE_WRITABLE,\n    SolanaError,\n} from '@solana/errors';\nimport {\n    AccountLookupMeta,\n    AccountMeta,\n    AccountRole,\n    Instruction,\n    isSignerRole,\n    isWritableRole,\n    mergeRoles,\n    ReadonlyAccount,\n    ReadonlyAccountLookup,\n    ReadonlySignerAccount,\n    WritableAccount,\n    WritableAccountLookup,\n    WritableSignerAccount,\n} from '@solana/instructions';\nimport { Brand } from '@solana/nominal-types';\n\nexport const enum AddressMapEntryType {\n    FEE_PAYER,\n    LOOKUP_TABLE,\n    STATIC,\n}\n\ntype AddressMap = {\n    [address: string]: FeePayerAccountEntry | LookupTableAccountEntry | StaticAccountEntry;\n};\ntype FeePayerAccountEntry = Omit<WritableSignerAccount, 'address'> & {\n    [TYPE]: AddressMapEntryType.FEE_PAYER;\n};\ntype LookupTableAccountEntry = Omit<ReadonlyAccountLookup | WritableAccountLookup, 'address'> & {\n    [TYPE]: AddressMapEntryType.LOOKUP_TABLE;\n};\nexport type OrderedAccounts = Brand<(AccountLookupMeta | AccountMeta)[], 'OrderedAccounts'>;\ntype StaticAccountEntry = Omit<\n    ReadonlyAccount | ReadonlySignerAccount | WritableAccount | WritableSignerAccount,\n    'address'\n> & { [TYPE]: AddressMapEntryType.STATIC };\n\nfunction upsert(\n    addressMap: AddressMap,\n    address: Address,\n    update: (\n        entry: FeePayerAccountEntry | LookupTableAccountEntry | Record<never, never> | StaticAccountEntry,\n    ) => AddressMap[Address],\n) {\n    addressMap[address] = update(addressMap[address] ?? { role: AccountRole.READONLY });\n}\n\nconst TYPE = Symbol('AddressMapTypeProperty');\nexport const ADDRESS_MAP_TYPE_PROPERTY: typeof TYPE = TYPE;\n\nexport function getAddressMapFromInstructions(feePayer: Address, instructions: readonly Instruction[]): AddressMap {\n    const addressMap: AddressMap = {\n        [feePayer]: { [TYPE]: AddressMapEntryType.FEE_PAYER, role: AccountRole.WRITABLE_SIGNER },\n    };\n    const addressesOfInvokedPrograms = new Set<Address>();\n    for (const instruction of instructions) {\n        upsert(addressMap, instruction.programAddress, entry => {\n            addressesOfInvokedPrograms.add(instruction.programAddress);\n            if (TYPE in entry) {\n                if (isWritableRole(entry.role)) {\n                    switch (entry[TYPE]) {\n                        case AddressMapEntryType.FEE_PAYER:\n                            throw new SolanaError(SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_CANNOT_PAY_FEES, {\n                                programAddress: instruction.programAddress,\n                            });\n                        default:\n                            throw new SolanaError(SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_MUST_NOT_BE_WRITABLE, {\n                                programAddress: instruction.programAddress,\n                            });\n                    }\n                }\n                if (entry[TYPE] === AddressMapEntryType.STATIC) {\n                    return entry;\n                }\n            }\n            return { [TYPE]: AddressMapEntryType.STATIC, role: AccountRole.READONLY };\n        });\n        let addressComparator: ReturnType<typeof getAddressComparator>;\n        if (!instruction.accounts) {\n            continue;\n        }\n        for (const account of instruction.accounts) {\n            upsert(addressMap, account.address, entry => {\n                const {\n                    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n                    address: _,\n                    ...accountMeta\n                } = account;\n                if (TYPE in entry) {\n                    switch (entry[TYPE]) {\n                        case AddressMapEntryType.FEE_PAYER:\n                            // The fee payer already has the highest rank -- it is by definition\n                            // writable-signer. Return it, no matter how `account` is configured\n                            return entry;\n                        case AddressMapEntryType.LOOKUP_TABLE: {\n                            const nextRole = mergeRoles(entry.role, accountMeta.role);\n                            if ('lookupTableAddress' in accountMeta) {\n                                const shouldReplaceEntry =\n                                    // Consider using the new LOOKUP_TABLE if its address is different...\n                                    entry.lookupTableAddress !== accountMeta.lookupTableAddress &&\n                                    // ...and sorts before the existing one.\n                                    (addressComparator ||= getAddressComparator())(\n                                        accountMeta.lookupTableAddress,\n                                        entry.lookupTableAddress,\n                                    ) < 0;\n                                if (shouldReplaceEntry) {\n                                    return {\n                                        [TYPE]: AddressMapEntryType.LOOKUP_TABLE,\n                                        ...accountMeta,\n                                        role: nextRole,\n                                    } as LookupTableAccountEntry;\n                                }\n                            } else if (isSignerRole(accountMeta.role)) {\n                                // Upgrade this LOOKUP_TABLE entry to a static entry if it must sign.\n                                return {\n                                    [TYPE]: AddressMapEntryType.STATIC,\n                                    role: nextRole,\n                                } as StaticAccountEntry;\n                            }\n                            if (entry.role !== nextRole) {\n                                return {\n                                    ...entry,\n                                    role: nextRole,\n                                } as LookupTableAccountEntry;\n                            } else {\n                                return entry;\n                            }\n                        }\n                        case AddressMapEntryType.STATIC: {\n                            const nextRole = mergeRoles(entry.role, accountMeta.role);\n                            if (\n                                // Check to see if this address represents a program that is invoked\n                                // in this transaction.\n                                addressesOfInvokedPrograms.has(account.address)\n                            ) {\n                                if (isWritableRole(accountMeta.role)) {\n                                    throw new SolanaError(\n                                        SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_MUST_NOT_BE_WRITABLE,\n                                        {\n                                            programAddress: account.address,\n                                        },\n                                    );\n                                }\n                                if (entry.role !== nextRole) {\n                                    return {\n                                        ...entry,\n                                        role: nextRole,\n                                    } as StaticAccountEntry;\n                                } else {\n                                    return entry;\n                                }\n                            } else if (\n                                'lookupTableAddress' in accountMeta &&\n                                // Static accounts can be 'upgraded' to lookup table accounts as\n                                // long as they are not require to sign the transaction.\n                                !isSignerRole(entry.role)\n                            ) {\n                                return {\n                                    ...accountMeta,\n                                    [TYPE]: AddressMapEntryType.LOOKUP_TABLE,\n                                    role: nextRole,\n                                } as LookupTableAccountEntry;\n                            } else {\n                                if (entry.role !== nextRole) {\n                                    // The account's role ranks higher than the current entry's.\n                                    return {\n                                        ...entry,\n                                        role: nextRole,\n                                    } as StaticAccountEntry;\n                                } else {\n                                    return entry;\n                                }\n                            }\n                        }\n                    }\n                }\n                if ('lookupTableAddress' in accountMeta) {\n                    return {\n                        ...accountMeta,\n                        [TYPE]: AddressMapEntryType.LOOKUP_TABLE,\n                    };\n                } else {\n                    return {\n                        ...accountMeta,\n                        [TYPE]: AddressMapEntryType.STATIC,\n                    };\n                }\n            });\n        }\n    }\n    return addressMap;\n}\n\nexport function getOrderedAccountsFromAddressMap(addressMap: AddressMap): OrderedAccounts {\n    let addressComparator: ReturnType<typeof getAddressComparator>;\n    const orderedAccounts: (AccountLookupMeta | AccountMeta)[] = Object.entries(addressMap)\n        .sort(([leftAddress, leftEntry], [rightAddress, rightEntry]) => {\n            // STEP 1: Rapid precedence check. Fee payer, then static addresses, then lookups.\n            if (leftEntry[TYPE] !== rightEntry[TYPE]) {\n                if (leftEntry[TYPE] === AddressMapEntryType.FEE_PAYER) {\n                    return -1;\n                } else if (rightEntry[TYPE] === AddressMapEntryType.FEE_PAYER) {\n                    return 1;\n                } else if (leftEntry[TYPE] === AddressMapEntryType.STATIC) {\n                    return -1;\n                } else if (rightEntry[TYPE] === AddressMapEntryType.STATIC) {\n                    return 1;\n                }\n            }\n            // STEP 2: Sort by signer-writability.\n            const leftIsSigner = isSignerRole(leftEntry.role);\n            if (leftIsSigner !== isSignerRole(rightEntry.role)) {\n                return leftIsSigner ? -1 : 1;\n            }\n            const leftIsWritable = isWritableRole(leftEntry.role);\n            if (leftIsWritable !== isWritableRole(rightEntry.role)) {\n                return leftIsWritable ? -1 : 1;\n            }\n            // STEP 3: Sort by address.\n            addressComparator ||= getAddressComparator();\n            if (\n                leftEntry[TYPE] === AddressMapEntryType.LOOKUP_TABLE &&\n                rightEntry[TYPE] === AddressMapEntryType.LOOKUP_TABLE &&\n                leftEntry.lookupTableAddress !== rightEntry.lookupTableAddress\n            ) {\n                return addressComparator(leftEntry.lookupTableAddress, rightEntry.lookupTableAddress);\n            } else {\n                return addressComparator(leftAddress, rightAddress);\n            }\n        })\n        .map(([address, addressMeta]) => ({\n            address: address as Address<typeof address>,\n            ...addressMeta,\n        }));\n    return orderedAccounts as unknown as OrderedAccounts;\n}\n","import { Address, getAddressComparator } from '@solana/addresses';\nimport { AccountRole } from '@solana/instructions';\n\nimport { OrderedAccounts } from './accounts';\n\ntype AddressTableLookup = Readonly<{\n    /** The address of the address lookup table account. */\n    lookupTableAddress: Address;\n    /** Indexes of accounts in a lookup table to load as read-only. */\n    readonlyIndexes: readonly number[];\n    /** Indexes of accounts in a lookup table to load as writable. */\n    writableIndexes: readonly number[];\n}>;\n\nexport function getCompiledAddressTableLookups(orderedAccounts: OrderedAccounts): AddressTableLookup[] {\n    const index: Record<\n        Address,\n        Readonly<{\n            [K in keyof Omit<AddressTableLookup, 'lookupTableAddress'>]: number[];\n        }>\n    > = {};\n    for (const account of orderedAccounts) {\n        if (!('lookupTableAddress' in account)) {\n            continue;\n        }\n        const entry = (index[account.lookupTableAddress] ||= {\n            readonlyIndexes: [],\n            writableIndexes: [],\n        });\n        if (account.role === AccountRole.WRITABLE) {\n            entry.writableIndexes.push(account.addressIndex);\n        } else {\n            entry.readonlyIndexes.push(account.addressIndex);\n        }\n    }\n    return Object.keys(index)\n        .sort(getAddressComparator())\n        .map(lookupTableAddress => ({\n            lookupTableAddress: lookupTableAddress as Address,\n            ...index[lookupTableAddress as unknown as Address],\n        }));\n}\n","import { Address } from '@solana/addresses';\nimport { Instruction } from '@solana/instructions';\n\nimport { CompiledInstruction } from '../legacy/instructions';\nimport { OrderedAccounts } from './accounts';\n\nfunction getAccountIndex(orderedAccounts: OrderedAccounts) {\n    const out: Record<Address, number> = {};\n    for (const [index, account] of orderedAccounts.entries()) {\n        out[account.address] = index;\n    }\n    return out;\n}\n\nexport function getCompiledInstructions(\n    instructions: readonly Instruction[],\n    orderedAccounts: OrderedAccounts,\n): CompiledInstruction[] {\n    const accountIndex = getAccountIndex(orderedAccounts);\n    return instructions.map(({ accounts, data, programAddress }) => {\n        return {\n            programAddressIndex: accountIndex[programAddress],\n            ...(accounts ? { accountIndices: accounts.map(({ address }) => accountIndex[address]) } : null),\n            ...(data ? { data } : null),\n        };\n    });\n}\n","import { Address } from '@solana/addresses';\n\nimport { OrderedAccounts } from './accounts';\n\nexport function getCompiledStaticAccounts(orderedAccounts: OrderedAccounts): Address[] {\n    const firstLookupTableAccountIndex = orderedAccounts.findIndex(account => 'lookupTableAddress' in account);\n    const orderedStaticAccounts =\n        firstLookupTableAccountIndex === -1 ? orderedAccounts : orderedAccounts.slice(0, firstLookupTableAccountIndex);\n    return orderedStaticAccounts.map(({ address }) => address);\n}\n","import { Address } from '@solana/addresses';\nimport {\n    SOLANA_ERROR__TRANSACTION__TOO_MANY_ACCOUNT_ADDRESSES,\n    SOLANA_ERROR__TRANSACTION__TOO_MANY_ACCOUNTS_IN_INSTRUCTION,\n    SOLANA_ERROR__TRANSACTION__TOO_MANY_INSTRUCTIONS,\n    SOLANA_ERROR__TRANSACTION__TOO_MANY_SIGNER_ADDRESSES,\n    SolanaError,\n} from '@solana/errors';\nimport { isSignerRole } from '@solana/instructions';\n\nimport { TransactionMessageWithFeePayer } from '../../fee-payer';\nimport { TransactionMessageWithLifetime } from '../../lifetime';\nimport { TransactionMessage } from '../../transaction-message';\nimport { getCompiledMessageHeader } from '../legacy/header';\nimport { getCompiledLifetimeToken } from '../legacy/lifetime-token';\nimport { ForwardTransactionMessageLifetime } from '../message-types';\nimport { getAddressMapFromInstructions, getOrderedAccountsFromAddressMap } from './accounts';\nimport { getCompiledAddressTableLookups } from './address-table-lookups';\nimport { getCompiledInstructions } from './instructions';\nimport { getCompiledStaticAccounts } from './static-accounts';\n\nexport type V0CompiledTransactionMessage = Readonly<{\n    /** A list of address tables and the accounts that this transaction loads from them */\n    addressTableLookups?: ReturnType<typeof getCompiledAddressTableLookups>;\n    /** Information about the role of the accounts loaded. */\n    header: ReturnType<typeof getCompiledMessageHeader>;\n    /** A list of instructions that this transaction will execute */\n    instructions: ReturnType<typeof getCompiledInstructions>;\n    /** A list of addresses indicating which accounts to load */\n    staticAccounts: Address[];\n    version: 0;\n}>;\n\nexport function compileTransactionMessage<\n    TTransactionMessage extends TransactionMessage & TransactionMessageWithFeePayer,\n>(\n    transactionMessage: TTransactionMessage,\n): ForwardTransactionMessageLifetime<V0CompiledTransactionMessage, TTransactionMessage> {\n    type ReturnType = ForwardTransactionMessageLifetime<V0CompiledTransactionMessage, TTransactionMessage>;\n\n    const addressMap = getAddressMapFromInstructions(\n        transactionMessage.feePayer.address,\n        transactionMessage.instructions,\n    );\n    const orderedAccounts = getOrderedAccountsFromAddressMap(addressMap);\n    const numAccounts = orderedAccounts.length;\n    if (numAccounts > 64) {\n        throw new SolanaError(SOLANA_ERROR__TRANSACTION__TOO_MANY_ACCOUNT_ADDRESSES, {\n            actualCount: numAccounts,\n            maxAllowed: 64,\n        });\n    }\n    const numSigners = orderedAccounts.filter(account => isSignerRole(account.role)).length;\n    if (numSigners > 12) {\n        throw new SolanaError(SOLANA_ERROR__TRANSACTION__TOO_MANY_SIGNER_ADDRESSES, {\n            actualCount: numSigners,\n            maxAllowed: 12,\n        });\n    }\n    const numInstructions = transactionMessage.instructions.length;\n    if (numInstructions > 64) {\n        throw new SolanaError(SOLANA_ERROR__TRANSACTION__TOO_MANY_INSTRUCTIONS, {\n            actualCount: numInstructions,\n            maxAllowed: 64,\n        });\n    }\n    for (let i = 0; i < transactionMessage.instructions.length; i++) {\n        const numAccountsInInstruction = transactionMessage.instructions[i].accounts?.length ?? 0;\n        if (numAccountsInInstruction > 255) {\n            throw new SolanaError(SOLANA_ERROR__TRANSACTION__TOO_MANY_ACCOUNTS_IN_INSTRUCTION, {\n                actualCount: numAccountsInInstruction,\n                instructionIndex: i,\n                maxAllowed: 255,\n            });\n        }\n    }\n    const lifetimeConstraint = (transactionMessage as Partial<TransactionMessageWithLifetime>).lifetimeConstraint;\n\n    return {\n        addressTableLookups: getCompiledAddressTableLookups(orderedAccounts),\n        ...(lifetimeConstraint ? { lifetimeToken: getCompiledLifetimeToken(lifetimeConstraint) } : null),\n        header: getCompiledMessageHeader(orderedAccounts),\n        instructions: getCompiledInstructions(transactionMessage.instructions, orderedAccounts),\n        staticAccounts: getCompiledStaticAccounts(orderedAccounts),\n        version: transactionMessage.version,\n    } as ReturnType;\n}\n","import {\n    TRANSACTION_CONFIG_COMPUTE_UNIT_LIMIT_BIT_MASK,\n    TRANSACTION_CONFIG_HEAP_SIZE_BIT_MASK,\n    TRANSACTION_CONFIG_LOADED_ACCOUNTS_DATA_SIZE_LIMIT_BIT_MASK,\n    TRANSACTION_CONFIG_PRIORITY_FEE_LAMPORTS_BIT_MASK,\n} from '../../v1-transaction-config';\nimport { V1TransactionConfig } from '../../v1-transaction-config';\n\nexport function getTransactionConfigMask(config: V1TransactionConfig): number {\n    let mask = 0;\n    // Set the lowest 2 bits for priority fee lamports\n    if (config.priorityFeeLamports !== undefined) mask |= TRANSACTION_CONFIG_PRIORITY_FEE_LAMPORTS_BIT_MASK;\n    // Set the 3rd lowest bit for compute unit limit\n    if (config.computeUnitLimit !== undefined) mask |= TRANSACTION_CONFIG_COMPUTE_UNIT_LIMIT_BIT_MASK;\n    // Set the 4th lowest bit for loaded accounts data size limit\n    if (config.loadedAccountsDataSizeLimit !== undefined)\n        mask |= TRANSACTION_CONFIG_LOADED_ACCOUNTS_DATA_SIZE_LIMIT_BIT_MASK;\n    // Set the 5th lowest bit for heap size\n    if (config.heapSize !== undefined) mask |= TRANSACTION_CONFIG_HEAP_SIZE_BIT_MASK;\n    return mask;\n}\n\nexport type CompiledTransactionConfigValue =\n    | {\n          kind: 'u32';\n          value: number;\n      }\n    | {\n          kind: 'u64';\n          value: bigint;\n      };\n\nexport function getTransactionConfigValues(config: V1TransactionConfig): CompiledTransactionConfigValue[] {\n    const values: CompiledTransactionConfigValue[] = [];\n    if (config.priorityFeeLamports !== undefined) {\n        values.push({ kind: 'u64', value: config.priorityFeeLamports });\n    }\n    if (config.computeUnitLimit !== undefined) {\n        values.push({ kind: 'u32', value: config.computeUnitLimit });\n    }\n    if (config.loadedAccountsDataSizeLimit !== undefined) {\n        values.push({ kind: 'u32', value: config.loadedAccountsDataSizeLimit });\n    }\n    if (config.heapSize !== undefined) {\n        values.push({ kind: 'u32', value: config.heapSize });\n    }\n    return values;\n}\n","import { ReadonlyUint8Array } from '@solana/codecs-core';\nimport { Instruction } from '@solana/instructions';\n\nimport { getAccountIndex } from '../legacy/instructions';\n\nexport type InstructionHeader = {\n    numInstructionAccounts: number;\n    numInstructionDataBytes: number;\n    programAccountIndex: number;\n};\n\nexport type InstructionPayload = {\n    instructionAccountIndices: number[];\n    instructionData: ReadonlyUint8Array;\n};\n\nexport function getInstructionHeader(\n    instruction: Instruction,\n    accountIndex: ReturnType<typeof getAccountIndex>,\n): InstructionHeader {\n    return {\n        numInstructionAccounts: instruction.accounts?.length ?? 0,\n        numInstructionDataBytes: instruction.data?.byteLength ?? 0,\n        programAccountIndex: accountIndex[instruction.programAddress],\n    };\n}\n\nexport function getInstructionPayload(\n    instruction: Instruction,\n    accountIndex: ReturnType<typeof getAccountIndex>,\n): InstructionPayload {\n    return {\n        instructionAccountIndices: instruction.accounts?.map(({ address }) => accountIndex[address]) ?? [],\n        instructionData: instruction.data ?? new Uint8Array(),\n    };\n}\n","import { Address } from '@solana/addresses';\nimport {\n    SOLANA_ERROR__TRANSACTION__TOO_MANY_ACCOUNT_ADDRESSES,\n    SOLANA_ERROR__TRANSACTION__TOO_MANY_ACCOUNTS_IN_INSTRUCTION,\n    SOLANA_ERROR__TRANSACTION__TOO_MANY_INSTRUCTIONS,\n    SOLANA_ERROR__TRANSACTION__TOO_MANY_SIGNER_ADDRESSES,\n    SolanaError,\n} from '@solana/errors';\nimport { isSignerRole } from '@solana/instructions';\n\nimport { TransactionMessageWithFeePayer } from '../../fee-payer';\nimport { TransactionMessageWithLifetime } from '../../lifetime';\nimport { TransactionMessage } from '../../transaction-message';\nimport { getAddressMapFromInstructions, getOrderedAccountsFromAddressMap } from '../legacy/accounts';\nimport { getCompiledMessageHeader } from '../legacy/header';\nimport { getAccountIndex } from '../legacy/instructions';\nimport { getCompiledLifetimeToken } from '../legacy/lifetime-token';\nimport { ForwardTransactionMessageLifetime } from '../message-types';\nimport { getTransactionConfigMask, getTransactionConfigValues } from './config';\nimport { getInstructionHeader, getInstructionPayload } from './instructions';\n\nexport type V1CompiledTransactionMessage = Readonly<{\n    /** A mask indicating which transaction config values are present */\n    configMask: number;\n    /** The configuration values for the transaction */\n    configValues: ReturnType<typeof getTransactionConfigValues>;\n    /** Information about the role of the accounts loaded. */\n    header: ReturnType<typeof getCompiledMessageHeader>;\n    /** The headers for each instruction in the transaction */\n    instructionHeaders: ReturnType<typeof getInstructionHeader>[];\n    /** The payload for each instruction in the transaction */\n    instructionPayloads: ReturnType<typeof getInstructionPayload>[];\n    /** The number of instructions in the transaction */\n    numInstructions: number;\n    /** The number of static accounts in the transaction */\n    numStaticAccounts: number;\n    /** A list of addresses indicating which accounts to load */\n    staticAccounts: Address[];\n    version: 1;\n}>;\n\nexport function compileTransactionMessage<\n    TTransactionMessage extends TransactionMessage & TransactionMessageWithFeePayer & { version: 1 },\n>(\n    transactionMessage: TTransactionMessage,\n): ForwardTransactionMessageLifetime<V1CompiledTransactionMessage, TTransactionMessage> {\n    type ReturnType = ForwardTransactionMessageLifetime<V1CompiledTransactionMessage, TTransactionMessage>;\n    const addressMap = getAddressMapFromInstructions(\n        transactionMessage.feePayer.address,\n        transactionMessage.instructions,\n    );\n    const orderedAccounts = getOrderedAccountsFromAddressMap(addressMap);\n    const numAccounts = orderedAccounts.length;\n    if (numAccounts > 64) {\n        throw new SolanaError(SOLANA_ERROR__TRANSACTION__TOO_MANY_ACCOUNT_ADDRESSES, {\n            actualCount: numAccounts,\n            maxAllowed: 64,\n        });\n    }\n    const numSigners = orderedAccounts.filter(account => isSignerRole(account.role)).length;\n    if (numSigners > 12) {\n        throw new SolanaError(SOLANA_ERROR__TRANSACTION__TOO_MANY_SIGNER_ADDRESSES, {\n            actualCount: numSigners,\n            maxAllowed: 12,\n        });\n    }\n    const numInstructions = transactionMessage.instructions.length;\n    if (numInstructions > 64) {\n        throw new SolanaError(SOLANA_ERROR__TRANSACTION__TOO_MANY_INSTRUCTIONS, {\n            actualCount: numInstructions,\n            maxAllowed: 64,\n        });\n    }\n    for (let i = 0; i < transactionMessage.instructions.length; i++) {\n        const numAccountsInInstruction = transactionMessage.instructions[i].accounts?.length ?? 0;\n        if (numAccountsInInstruction > 255) {\n            throw new SolanaError(SOLANA_ERROR__TRANSACTION__TOO_MANY_ACCOUNTS_IN_INSTRUCTION, {\n                actualCount: numAccountsInInstruction,\n                instructionIndex: i,\n                maxAllowed: 255,\n            });\n        }\n    }\n    const accountIndex = getAccountIndex(orderedAccounts);\n    const lifetimeConstraint = (transactionMessage as Partial<TransactionMessageWithLifetime>).lifetimeConstraint;\n\n    return {\n        version: 1,\n        ...(lifetimeConstraint ? { lifetimeToken: getCompiledLifetimeToken(lifetimeConstraint) } : null),\n        configMask: getTransactionConfigMask(transactionMessage.config ?? {}),\n        configValues: getTransactionConfigValues(transactionMessage.config ?? {}),\n        header: getCompiledMessageHeader(orderedAccounts),\n        instructionHeaders: transactionMessage.instructions.map(instruction =>\n            getInstructionHeader(instruction, accountIndex),\n        ),\n        instructionPayloads: transactionMessage.instructions.map(instruction =>\n            getInstructionPayload(instruction, accountIndex),\n        ),\n        numInstructions: transactionMessage.instructions.length,\n        numStaticAccounts: orderedAccounts.length,\n        staticAccounts: orderedAccounts.map(account => account.address),\n    } as ReturnType;\n}\n","import { SOLANA_ERROR__TRANSACTION__VERSION_NUMBER_NOT_SUPPORTED, SolanaError } from '@solana/errors';\n\nimport { TransactionMessageWithFeePayer } from '../fee-payer';\nimport { TransactionMessageWithLifetime } from '../lifetime';\nimport { TransactionMessage } from '../transaction-message';\nimport { getCompiledLifetimeToken } from './legacy/lifetime-token';\nimport {\n    compileTransactionMessage as compileLegacyTransactionMessage,\n    LegacyCompiledTransactionMessage,\n} from './legacy/message';\nimport { compileTransactionMessage as compileV0TransactionMessage, V0CompiledTransactionMessage } from './v0/message';\nimport { compileTransactionMessage as compileV1TransactionMessage, V1CompiledTransactionMessage } from './v1/message';\n\n/**\n * A transaction message in a form suitable for encoding for execution on the network.\n *\n * You can not fully reconstruct a source message from a compiled message without extra information.\n * In particular, supporting details about the lifetime constraint and the concrete addresses of\n * accounts sourced from account lookup tables are lost to compilation.\n */\nexport type CompiledTransactionMessage =\n    | LegacyCompiledTransactionMessage\n    | V0CompiledTransactionMessage\n    | V1CompiledTransactionMessage;\n\nexport type { LegacyCompiledTransactionMessage, V0CompiledTransactionMessage, V1CompiledTransactionMessage };\n\nexport type CompiledTransactionMessageWithLifetime = Readonly<{\n    /**\n     * 32 bytes of data observed by the transaction proposed that makes a transaction eligible to\n     * land on the network.\n     *\n     * In the case of a transaction message with a nonce lifetime constraint, this will be the value\n     * of the nonce itself. In all other cases this will be a recent blockhash.\n     */\n    lifetimeToken: ReturnType<typeof getCompiledLifetimeToken>;\n}>;\n\n/**\n * Converts the type of transaction message data structure that you create in your application to\n * the type of transaction message data structure that can be encoded for execution on the network.\n *\n * This is a lossy process; you can not fully reconstruct a source message from a compiled message\n * without extra information. In particular, supporting details about the lifetime constraint and\n * the concrete addresses of accounts sourced from account lookup tables will be lost to\n * compilation.\n *\n * @see {@link decompileTransactionMessage}\n */\nexport function compileTransactionMessage<\n    TTransactionMessage extends TransactionMessage & TransactionMessageWithFeePayer & { version: 'legacy' },\n>(\n    transactionMessage: TTransactionMessage,\n): ForwardTransactionMessageLifetime<LegacyCompiledTransactionMessage, TTransactionMessage>;\nexport function compileTransactionMessage<\n    TTransactionMessage extends TransactionMessage & TransactionMessageWithFeePayer & { version: 0 },\n>(\n    transactionMessage: TTransactionMessage,\n): ForwardTransactionMessageLifetime<V0CompiledTransactionMessage, TTransactionMessage>;\nexport function compileTransactionMessage<\n    TTransactionMessage extends TransactionMessage & TransactionMessageWithFeePayer & { version: 1 },\n>(\n    transactionMessage: TTransactionMessage,\n): ForwardTransactionMessageLifetime<V1CompiledTransactionMessage, TTransactionMessage>;\nexport function compileTransactionMessage<\n    TTransactionMessage extends TransactionMessage & TransactionMessageWithFeePayer,\n>(\n    transactionMessage: TTransactionMessage,\n): ForwardTransactionMessageLifetime<CompiledTransactionMessage, TTransactionMessage>;\nexport function compileTransactionMessage<\n    TTransactionMessage extends TransactionMessage & TransactionMessageWithFeePayer,\n>(\n    transactionMessage: TTransactionMessage,\n): ForwardTransactionMessageLifetime<CompiledTransactionMessage, TTransactionMessage> {\n    type ReturnType = ForwardTransactionMessageLifetime<CompiledTransactionMessage, TTransactionMessage>;\n\n    const version = transactionMessage.version;\n    if (version === 'legacy') {\n        return compileLegacyTransactionMessage(transactionMessage) as ReturnType;\n    } else if (version === 0) {\n        return compileV0TransactionMessage(transactionMessage) as ReturnType;\n    } else if (version === 1) {\n        return compileV1TransactionMessage(transactionMessage) as ReturnType;\n    } else {\n        throw new SolanaError(SOLANA_ERROR__TRANSACTION__VERSION_NUMBER_NOT_SUPPORTED, {\n            version,\n        });\n    }\n}\n\ntype ForwardTransactionMessageLifetime<\n    TCompiledTransactionMessage extends CompiledTransactionMessage,\n    TTransactionMessage extends TransactionMessage,\n> = TTransactionMessage extends TransactionMessageWithLifetime\n    ? CompiledTransactionMessageWithLifetime & TCompiledTransactionMessage\n    : TCompiledTransactionMessage;\n","import { Address } from '@solana/addresses';\nimport { AccountLookupMeta, AccountMeta, AccountRole, Instruction, isSignerRole } from '@solana/instructions';\n\nimport { AddressesByLookupTableAddress } from './addresses-by-lookup-table-address';\nimport { TransactionMessage } from './transaction-message';\n\ntype Mutable<T> = {\n    -readonly [P in keyof T]: T[P];\n};\n\n// Look up the address in lookup tables, return a lookup meta if it is found in any of them\nfunction findAddressInLookupTables(\n    address: Address,\n    role: AccountRole.READONLY | AccountRole.WRITABLE,\n    addressesByLookupTableAddress: AddressesByLookupTableAddress,\n): AccountLookupMeta | undefined {\n    for (const [lookupTableAddress, addresses] of Object.entries(addressesByLookupTableAddress)) {\n        for (let i = 0; i < addresses.length; i++) {\n            if (address === addresses[i]) {\n                return {\n                    address,\n                    addressIndex: i,\n                    lookupTableAddress: lookupTableAddress as Address,\n                    role,\n                };\n            }\n        }\n    }\n}\n\ntype TransactionMessageNotLegacy = Exclude<TransactionMessage, { version: 'legacy' }>;\n\n// Each account can be AccountLookupMeta | AccountMeta\ntype WidenInstructionAccounts<TInstruction extends Instruction> =\n    TInstruction extends Instruction<infer TProgramAddress, infer TAccounts>\n        ? Instruction<\n              TProgramAddress,\n              {\n                  [K in keyof TAccounts]: TAccounts[K] extends AccountMeta<infer TAddress>\n                      ? AccountLookupMeta<TAddress> | AccountMeta<TAddress>\n                      : TAccounts[K];\n              }\n          >\n        : TInstruction;\n\ntype WidenTransactionMessageInstructions<TTransactionMessage extends TransactionMessage> = TTransactionMessage extends {\n    readonly instructions: readonly (infer TInstruction extends Instruction)[];\n}\n    ? Omit<TTransactionMessage, 'instructions'> & {\n          readonly instructions: readonly WidenInstructionAccounts<TInstruction>[];\n      }\n    : TTransactionMessage;\n\n/**\n * Given a transaction message and a mapping of lookup tables to the addresses stored in them, this\n * function will return a new transaction message with the same instructions but with all non-signer\n * accounts that are found in the given lookup tables represented by an {@link AccountLookupMeta}\n * instead of an {@link AccountMeta}.\n *\n * This means that these accounts will take up less space in the compiled transaction message. This\n * size reduction is most significant when the transaction includes many accounts from the same\n * lookup table.\n *\n * @example\n * ```ts\n * import { address } from '@solana/addresses';\n * import {\n *     AddressesByLookupTableAddress,\n *     compressTransactionMessageUsingAddressLookupTables,\n * } from '@solana/transaction-messages';\n * import { fetchAddressLookupTable } from '@solana-program/address-lookup-table';\n *\n * const lookupTableAddress = address('4QwSwNriKPrz8DLW4ju5uxC2TN5cksJx6tPUPj7DGLAW');\n * const {\n *     data: { addresses },\n * } = await fetchAddressLookupTable(rpc, lookupTableAddress);\n * const addressesByAddressLookupTable: AddressesByLookupTableAddress = {\n *     [lookupTableAddress]: addresses,\n * };\n *\n * const compressedTransactionMessage = compressTransactionMessageUsingAddressLookupTables(\n *     transactionMessage,\n *     addressesByAddressLookupTable,\n * );\n * ```\n */\nexport function compressTransactionMessageUsingAddressLookupTables<\n    TTransactionMessage extends TransactionMessageNotLegacy = TransactionMessageNotLegacy,\n>(\n    transactionMessage: TTransactionMessage,\n    addressesByLookupTableAddress: AddressesByLookupTableAddress,\n): TTransactionMessage | WidenTransactionMessageInstructions<TTransactionMessage> {\n    const programAddresses = new Set(transactionMessage.instructions.map(ix => ix.programAddress));\n    const eligibleLookupAddresses = new Set(\n        Object.values(addressesByLookupTableAddress)\n            .flatMap(a => a)\n            .filter(address => !programAddresses.has(address)),\n    );\n    const newInstructions: Instruction[] = [];\n    let updatedAnyInstructions = false;\n    for (const instruction of transactionMessage.instructions) {\n        if (!instruction.accounts) {\n            newInstructions.push(instruction);\n            continue;\n        }\n\n        const newAccounts: Mutable<NonNullable<Instruction['accounts']>> = [];\n        let updatedAnyAccounts = false;\n        for (const account of instruction.accounts) {\n            // If the address is already a lookup, is not in any lookup tables, or is a signer role, return as-is\n            if (\n                'lookupTableAddress' in account ||\n                !eligibleLookupAddresses.has(account.address) ||\n                isSignerRole(account.role)\n            ) {\n                newAccounts.push(account);\n                continue;\n            }\n\n            // We already checked it's in one of the lookup tables\n            const lookupMetaAccount = findAddressInLookupTables(\n                account.address,\n                account.role,\n                addressesByLookupTableAddress,\n            )!;\n            newAccounts.push(Object.freeze(lookupMetaAccount));\n            updatedAnyAccounts = true;\n            updatedAnyInstructions = true;\n        }\n\n        newInstructions.push(\n            Object.freeze(updatedAnyAccounts ? { ...instruction, accounts: newAccounts } : instruction),\n        );\n    }\n\n    return Object.freeze(\n        updatedAnyInstructions ? { ...transactionMessage, instructions: newInstructions } : transactionMessage,\n    );\n}\n","import { Address } from '@solana/addresses';\nimport { ReadonlyUint8Array } from '@solana/codecs-core';\nimport { getBytesEncoder, getStructEncoder } from '@solana/codecs-data-structures';\nimport { getU8Encoder, getU32Decoder, getU32Encoder, getU64Decoder, getU64Encoder } from '@solana/codecs-numbers';\nimport { Instruction, InstructionWithData } from '@solana/instructions';\n\nimport type { TransactionMessage } from './transaction-message';\n\n/** Address of the Compute Budget program. */\nexport const COMPUTE_BUDGET_PROGRAM_ADDRESS =\n    'ComputeBudget111111111111111111111111111111' as Address<'ComputeBudget111111111111111111111111111111'>;\n\n/** The maximum compute unit limit that can be set for a transaction (1.4M CU). */\nexport const MAX_COMPUTE_UNIT_LIMIT = 1_400_000;\n\nconst REQUEST_HEAP_FRAME_DISCRIMINATOR = 1;\nconst SET_COMPUTE_UNIT_LIMIT_DISCRIMINATOR = 2;\nconst SET_COMPUTE_UNIT_PRICE_DISCRIMINATOR = 3;\nconst SET_LOADED_ACCOUNTS_DATA_SIZE_LIMIT_DISCRIMINATOR = 4;\n\ntype ComputeBudgetInstruction = Instruction<typeof COMPUTE_BUDGET_PROGRAM_ADDRESS> &\n    InstructionWithData<ReadonlyUint8Array>;\n\nfunction getComputeBudgetInstruction(discriminator: number, value: ReadonlyUint8Array): ComputeBudgetInstruction {\n    const data = getStructEncoder([\n        ['discriminator', getU8Encoder()],\n        ['value', getBytesEncoder()],\n    ]).encode({ discriminator, value });\n    return Object.freeze({\n        data,\n        programAddress: COMPUTE_BUDGET_PROGRAM_ADDRESS,\n    }) as ComputeBudgetInstruction;\n}\n\nfunction isComputeBudgetInstruction(\n    instruction: Instruction,\n    discriminator: number,\n    expectedDataLength: number,\n): instruction is ComputeBudgetInstruction {\n    return (\n        instruction.programAddress === COMPUTE_BUDGET_PROGRAM_ADDRESS &&\n        'data' in instruction &&\n        instruction.data != null &&\n        instruction.data.byteLength === expectedDataLength &&\n        instruction.data[0] === discriminator\n    );\n}\n\nexport function getSetComputeUnitLimitInstruction(units: number): ComputeBudgetInstruction {\n    return getComputeBudgetInstruction(SET_COMPUTE_UNIT_LIMIT_DISCRIMINATOR, getU32Encoder().encode(units));\n}\n\nexport function isSetComputeUnitLimitInstruction(instruction: Instruction): instruction is ComputeBudgetInstruction {\n    return isComputeBudgetInstruction(instruction, SET_COMPUTE_UNIT_LIMIT_DISCRIMINATOR, 5);\n}\n\nexport function getComputeUnitLimitFromInstructionData(data: ReadonlyUint8Array): number {\n    return getU32Decoder().decode(data, 1);\n}\n\nexport function getSetComputeUnitPriceInstruction(microLamports: bigint): ComputeBudgetInstruction {\n    return getComputeBudgetInstruction(SET_COMPUTE_UNIT_PRICE_DISCRIMINATOR, getU64Encoder().encode(microLamports));\n}\n\nexport function isSetComputeUnitPriceInstruction(instruction: Instruction): instruction is ComputeBudgetInstruction {\n    return isComputeBudgetInstruction(instruction, SET_COMPUTE_UNIT_PRICE_DISCRIMINATOR, 9);\n}\n\nexport function getPriorityFeeFromInstructionData(data: ReadonlyUint8Array): bigint {\n    return getU64Decoder().decode(data, 1);\n}\n\nexport function getRequestHeapFrameInstruction(bytes: number): ComputeBudgetInstruction {\n    return getComputeBudgetInstruction(REQUEST_HEAP_FRAME_DISCRIMINATOR, getU32Encoder().encode(bytes));\n}\n\nexport function isRequestHeapFrameInstruction(instruction: Instruction): instruction is ComputeBudgetInstruction {\n    return isComputeBudgetInstruction(instruction, REQUEST_HEAP_FRAME_DISCRIMINATOR, 5);\n}\n\nexport function getHeapSizeFromInstructionData(data: ReadonlyUint8Array): number {\n    return getU32Decoder().decode(data, 1);\n}\n\nexport function getSetLoadedAccountsDataSizeLimitInstruction(limit: number): ComputeBudgetInstruction {\n    return getComputeBudgetInstruction(\n        SET_LOADED_ACCOUNTS_DATA_SIZE_LIMIT_DISCRIMINATOR,\n        getU32Encoder().encode(limit),\n    );\n}\n\nexport function isSetLoadedAccountsDataSizeLimitInstruction(\n    instruction: Instruction,\n): instruction is ComputeBudgetInstruction {\n    return isComputeBudgetInstruction(instruction, SET_LOADED_ACCOUNTS_DATA_SIZE_LIMIT_DISCRIMINATOR, 5);\n}\n\nexport function getLoadedAccountsDataSizeLimitFromInstructionData(data: ReadonlyUint8Array): number {\n    return getU32Decoder().decode(data, 1);\n}\n\nexport function replaceTransactionMessageInstruction<TTransactionMessage extends TransactionMessage>(\n    index: number,\n    newInstruction: Instruction,\n    transactionMessage: TTransactionMessage,\n) {\n    const nextInstructions = [...transactionMessage.instructions];\n    nextInstructions[index] = newInstruction;\n    return Object.freeze({\n        ...transactionMessage,\n        instructions: Object.freeze(nextInstructions),\n    }) as TTransactionMessage;\n}\n\nexport function removeTransactionMessageInstruction<TTransactionMessage extends TransactionMessage>(\n    index: number,\n    transactionMessage: TTransactionMessage,\n) {\n    return Object.freeze({\n        ...transactionMessage,\n        instructions: Object.freeze([\n            ...transactionMessage.instructions.slice(0, index),\n            ...transactionMessage.instructions.slice(index + 1),\n        ]),\n    }) as TTransactionMessage;\n}\n","import { Instruction } from '@solana/instructions';\n\nimport { ExcludeTransactionMessageDurableNonceLifetime } from './durable-nonce';\nimport { TransactionMessage } from './transaction-message';\nimport { ExcludeTransactionMessageWithinSizeLimit } from './transaction-message-size';\n\n/**\n * A helper type to append instructions to a transaction message\n * without losing type information about the current instructions.\n */\ntype AppendTransactionMessageInstructions<\n    TTransactionMessage extends TransactionMessage,\n    TInstructions extends readonly Instruction[],\n> = TTransactionMessage extends TransactionMessage\n    ? Omit<ExcludeTransactionMessageWithinSizeLimit<TTransactionMessage>, 'instructions'> & {\n          readonly instructions: readonly [...TTransactionMessage['instructions'], ...TInstructions];\n      }\n    : never;\n\n/**\n * A helper type to prepend instructions to a transaction message\n * without losing type information about the current instructions.\n */\ntype PrependTransactionMessageInstructions<\n    TTransactionMessage extends TransactionMessage,\n    TInstructions extends readonly Instruction[],\n> = TTransactionMessage extends TransactionMessage\n    ? Omit<\n          ExcludeTransactionMessageWithinSizeLimit<ExcludeTransactionMessageDurableNonceLifetime<TTransactionMessage>>,\n          'instructions'\n      > & {\n          readonly instructions: readonly [...TInstructions, ...TTransactionMessage['instructions']];\n      }\n    : never;\n\n/**\n * Given an instruction, this method will return a new transaction message with that instruction\n * having been added to the end of the list of existing instructions.\n *\n * @see {@link appendTransactionInstructions} if you need to append multiple instructions to a\n * transaction message.\n *\n * @example\n * ```ts\n * import { address } from '@solana/addresses';\n * import { getUtf8Encoder } from '@solana/codecs-strings';\n * import { appendTransactionMessageInstruction } from '@solana/transaction-messages';\n *\n * const memoTransactionMessage = appendTransactionMessageInstruction(\n *     {\n *         data: getUtf8Encoder().encode('Hello world!'),\n *         programAddress: address('MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr'),\n *     },\n *     transactionMessage,\n * );\n * ```\n */\nexport function appendTransactionMessageInstruction<\n    TTransactionMessage extends TransactionMessage,\n    TInstruction extends Instruction,\n>(\n    instruction: TInstruction,\n    transactionMessage: TTransactionMessage,\n): AppendTransactionMessageInstructions<TTransactionMessage, [TInstruction]> {\n    return appendTransactionMessageInstructions([instruction], transactionMessage);\n}\n\n/**\n * Given an array of instructions, this method will return a new transaction message with those\n * instructions having been added to the end of the list of existing instructions.\n *\n * @see {@link appendTransactionInstruction} if you only need to append one instruction to a\n * transaction message.\n *\n * @example\n * ```ts\n * import { address } from '@solana/addresses';\n * import { appendTransactionMessageInstructions } from '@solana/transaction-messages';\n *\n * const memoTransaction = appendTransactionMessageInstructions(\n *     [\n *         {\n *             data: new TextEncoder().encode('Hello world!'),\n *             programAddress: address('MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr'),\n *         },\n *         {\n *             data: new TextEncoder().encode('How are you?'),\n *             programAddress: address('MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr'),\n *         },\n *     ],\n *     tx,\n * );\n * ```\n */\nexport function appendTransactionMessageInstructions<\n    TTransactionMessage extends TransactionMessage,\n    const TInstructions extends readonly Instruction[],\n>(\n    instructions: TInstructions,\n    transactionMessage: TTransactionMessage,\n): AppendTransactionMessageInstructions<TTransactionMessage, TInstructions> {\n    return Object.freeze({\n        ...transactionMessage,\n        instructions: Object.freeze([\n            ...(transactionMessage.instructions as TTransactionMessage['instructions']),\n            ...instructions,\n        ] as readonly [...TTransactionMessage['instructions'], ...TInstructions]),\n    }) as AppendTransactionMessageInstructions<TTransactionMessage, TInstructions>;\n}\n\n/**\n * Given an instruction, this method will return a new transaction message with that instruction\n * having been added to the beginning of the list of existing instructions.\n *\n * @see {@link prependTransactionInstructions} if you need to prepend multiple instructions to a\n * transaction message.\n *\n * @example\n * ```ts\n * import { address } from '@solana/addresses';\n * import { prependTransactionMessageInstruction } from '@solana/transaction-messages';\n *\n * const memoTransaction = prependTransactionMessageInstruction(\n *     {\n *         data: new TextEncoder().encode('Hello world!'),\n *         programAddress: address('MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr'),\n *     },\n *     tx,\n * );\n * ```\n */\nexport function prependTransactionMessageInstruction<\n    TTransactionMessage extends TransactionMessage,\n    TInstruction extends Instruction,\n>(\n    instruction: TInstruction,\n    transactionMessage: TTransactionMessage,\n): PrependTransactionMessageInstructions<TTransactionMessage, [TInstruction]> {\n    return prependTransactionMessageInstructions([instruction], transactionMessage);\n}\n\n/**\n * Given an array of instructions, this method will return a new transaction message with those\n * instructions having been added to the beginning of the list of existing instructions.\n *\n * @see {@link prependTransactionInstruction} if you only need to prepend one instruction to a\n * transaction message.\n *\n * @example\n * ```ts\n * import { address } from '@solana/addresses';\n * import { prependTransactionMessageInstructions } from '@solana/transaction-messages';\n *\n * const memoTransaction = prependTransactionMessageInstructions(\n *     [\n *         {\n *             data: new TextEncoder().encode('Hello world!'),\n *             programAddress: address('MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr'),\n *         },\n *         {\n *             data: new TextEncoder().encode('How are you?'),\n *             programAddress: address('MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr'),\n *         },\n *     ],\n *     tx,\n * );\n * ```\n */\nexport function prependTransactionMessageInstructions<\n    TTransactionMessage extends TransactionMessage,\n    const TInstructions extends readonly Instruction[],\n>(\n    instructions: TInstructions,\n    transactionMessage: TTransactionMessage,\n): PrependTransactionMessageInstructions<TTransactionMessage, TInstructions> {\n    return Object.freeze({\n        ...(transactionMessage as ExcludeTransactionMessageDurableNonceLifetime<TTransactionMessage>),\n        instructions: Object.freeze([\n            ...instructions,\n            ...(transactionMessage.instructions as TTransactionMessage['instructions']),\n        ] as readonly [...TInstructions, ...TTransactionMessage['instructions']]),\n    }) as unknown as PrependTransactionMessageInstructions<TTransactionMessage, TInstructions>;\n}\n","import type { Instruction } from '@solana/instructions';\n\nimport {\n    getComputeUnitLimitFromInstructionData,\n    getSetComputeUnitLimitInstruction,\n    isSetComputeUnitLimitInstruction,\n    removeTransactionMessageInstruction,\n    replaceTransactionMessageInstruction,\n} from './compute-budget-instruction';\nimport { appendTransactionMessageInstruction } from './instructions';\nimport { TransactionMessage } from './transaction-message';\nimport { areV1ConfigsEqual, isV1ConfigEmpty } from './v1-transaction-config';\n\n/**\n * Returns the compute unit limit currently set on a transaction message, or `undefined` if none is\n * set.\n *\n * This function works with all transaction versions:\n * - **V1**: Reads from the transaction message's `config.computeUnitLimit`.\n * - **Legacy / V0**: Searches the instructions for a `SetComputeUnitLimit` instruction and decodes\n *   its value.\n *\n * @param transactionMessage - The transaction message to inspect.\n * @return The compute unit limit, or `undefined` if none is set.\n *\n * @example\n * ```ts\n * const limit = getTransactionMessageComputeUnitLimit(transactionMessage);\n * if (limit !== undefined) {\n *     console.log(`Compute unit limit: ${limit}`);\n * }\n * ```\n */\nexport function getTransactionMessageComputeUnitLimit(transactionMessage: TransactionMessage): number | undefined {\n    switch (transactionMessage.version) {\n        case 1:\n            return transactionMessage.config?.computeUnitLimit;\n        default:\n            return getTransactionMessageComputeUnitLimitUsingInstruction(transactionMessage);\n    }\n}\n\nfunction getTransactionMessageComputeUnitLimitUsingInstruction(\n    transactionMessage: TransactionMessage,\n): number | undefined {\n    const instructions = transactionMessage.instructions as Instruction[];\n    const existingInstruction = instructions.find(isSetComputeUnitLimitInstruction);\n    return existingInstruction ? getComputeUnitLimitFromInstructionData(existingInstruction.data) : undefined;\n}\n\n/**\n * Sets the compute unit limit for a transaction message.\n *\n * This function works with all transaction versions:\n * - **V1**: Sets the `computeUnitLimit` field in the transaction message's config.\n * - **Legacy / V0**: Appends (or replaces) a `SetComputeUnitLimit` instruction from the Compute\n *   Budget program.\n *\n * @param computeUnitLimit - The maximum compute units (CUs) allowed, or `undefined` to remove the\n *   limit.\n * @param transactionMessage - The transaction message to configure.\n * @typeParam TTransactionMessage - The transaction message type.\n * @return A new transaction message with the compute unit limit set.\n *\n * @example\n * ```ts\n * const txMessage = setTransactionMessageComputeUnitLimit(\n *     400_000,\n *     transactionMessage,\n * );\n * ```\n */\nexport function setTransactionMessageComputeUnitLimit<TTransactionMessage extends TransactionMessage>(\n    computeUnitLimit: number | undefined,\n    transactionMessage: TTransactionMessage,\n): TTransactionMessage {\n    switch (transactionMessage.version) {\n        case 1:\n            return setTransactionMessageComputeUnitLimitUsingConfig(\n                computeUnitLimit,\n                transactionMessage,\n            ) as TTransactionMessage;\n        default:\n            return setTransactionMessageComputeUnitLimitUsingInstruction(computeUnitLimit, transactionMessage);\n    }\n}\n\nfunction setTransactionMessageComputeUnitLimitUsingConfig<\n    TTransactionMessage extends TransactionMessage & { version: 1 },\n>(computeUnitLimit: number | undefined, transactionMessage: TTransactionMessage): TTransactionMessage {\n    const mergedConfig = { ...(transactionMessage.config ?? {}), computeUnitLimit };\n    const nextConfig = isV1ConfigEmpty(mergedConfig) ? undefined : Object.freeze(mergedConfig);\n    if (nextConfig === undefined) {\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        const { config, ...rest } = transactionMessage;\n        return Object.freeze(rest) as TTransactionMessage;\n    }\n\n    if (transactionMessage.config && areV1ConfigsEqual(transactionMessage.config, nextConfig)) {\n        return transactionMessage;\n    }\n\n    return Object.freeze({ ...transactionMessage, config: nextConfig }) as TTransactionMessage;\n}\n\nfunction setTransactionMessageComputeUnitLimitUsingInstruction<TTransactionMessage extends TransactionMessage>(\n    computeUnitLimit: number | undefined,\n    transactionMessage: TTransactionMessage,\n): TTransactionMessage {\n    const existingIndex = transactionMessage.instructions.findIndex(isSetComputeUnitLimitInstruction);\n\n    // Remove the compute unit limit instruction if there is one and the new limit is undefined.\n    if (computeUnitLimit === undefined) {\n        return existingIndex === -1\n            ? transactionMessage\n            : removeTransactionMessageInstruction(existingIndex, transactionMessage);\n    }\n\n    // Ignore if the new compute unit limit is the same as the existing one.\n    if (getTransactionMessageComputeUnitLimit(transactionMessage) === computeUnitLimit) {\n        return transactionMessage;\n    }\n\n    // Add or replace the compute unit limit instruction with the new limit.\n    const newInstruction = getSetComputeUnitLimitInstruction(computeUnitLimit);\n    return existingIndex === -1\n        ? (appendTransactionMessageInstruction(newInstruction, transactionMessage) as TTransactionMessage)\n        : replaceTransactionMessageInstruction(existingIndex, newInstruction, transactionMessage);\n}\n","import type { Instruction } from '@solana/instructions';\n\nimport {\n    getPriorityFeeFromInstructionData,\n    getSetComputeUnitPriceInstruction,\n    isSetComputeUnitPriceInstruction,\n    removeTransactionMessageInstruction,\n    replaceTransactionMessageInstruction,\n} from './compute-budget-instruction';\nimport { appendTransactionMessageInstruction } from './instructions';\nimport { TransactionMessage, TransactionVersion } from './transaction-message';\n\ntype SupportedTransactionVersions = Extract<TransactionVersion, 'legacy' | 0>;\n\n/**\n * Returns the compute unit price currently set on a legacy or v0 transaction message, or\n * `undefined` if none is set.\n *\n * This searches the instructions for a `SetComputeUnitPrice` instruction and decodes its value.\n * The value represents the price in **micro-lamports per compute unit**.\n *\n * @param transactionMessage - The legacy or v0 transaction message to inspect.\n * @return The compute unit price in micro-lamports per compute unit, or `undefined` if none is set.\n *\n * @example\n * ```ts\n * const price = getTransactionMessageComputeUnitPrice(transactionMessage);\n * if (price !== undefined) {\n *     console.log(`Compute unit price: ${price} micro-lamports`);\n * }\n * ```\n *\n * @see {@link setTransactionMessageComputeUnitPrice}\n * @see {@link getTransactionMessagePriorityFeeLamports} for v1 transactions.\n */\nexport function getTransactionMessageComputeUnitPrice<\n    TTransactionMessage extends TransactionMessage & { version: SupportedTransactionVersions },\n>(transactionMessage: TTransactionMessage): bigint | undefined {\n    const instructions = transactionMessage.instructions as Instruction[];\n    const existingInstruction = instructions.find(isSetComputeUnitPriceInstruction);\n    return existingInstruction ? getPriorityFeeFromInstructionData(existingInstruction.data) : undefined;\n}\n\n/**\n * Sets the compute unit price for a legacy or v0 transaction message.\n *\n * The value represents the price in **micro-lamports per compute unit**. The actual priority fee\n * paid is `computeUnitPrice × computeUnitLimit`.\n *\n * This appends, replaces, or removes a `SetComputeUnitPrice` instruction from the Compute Budget\n * program. The operation is idempotent: setting the same value returns the same reference, and\n * setting `undefined` removes the instruction.\n *\n * @param computeUnitPrice - The price in micro-lamports per compute unit, or `undefined` to remove\n *   the instruction.\n * @param transactionMessage - The legacy or v0 transaction message to configure.\n * @typeParam TTransactionMessage - The transaction message type.\n * @return A new transaction message with the compute unit price set.\n *\n * @example\n * ```ts\n * const txMessage = setTransactionMessageComputeUnitPrice(\n *     10_000n,\n *     transactionMessage,\n * );\n * ```\n *\n * @see {@link getTransactionMessageComputeUnitPrice}\n * @see {@link setTransactionMessagePriorityFeeLamports} for v1 transactions.\n */\nexport function setTransactionMessageComputeUnitPrice<\n    TTransactionMessage extends TransactionMessage & { version: SupportedTransactionVersions },\n>(computeUnitPrice: bigint | undefined, transactionMessage: TTransactionMessage): TTransactionMessage {\n    const existingIndex = transactionMessage.instructions.findIndex(isSetComputeUnitPriceInstruction);\n\n    // Remove the compute unit price instruction if there is one and the new price is undefined.\n    if (computeUnitPrice === undefined) {\n        return existingIndex === -1\n            ? transactionMessage\n            : removeTransactionMessageInstruction(existingIndex, transactionMessage);\n    }\n\n    // Ignore if the new compute unit price is the same as the existing one.\n    if (getTransactionMessageComputeUnitPrice(transactionMessage) === computeUnitPrice) {\n        return transactionMessage;\n    }\n\n    // Add or replace the compute unit price instruction with the new price.\n    const newInstruction = getSetComputeUnitPriceInstruction(computeUnitPrice);\n    return existingIndex === -1\n        ? (appendTransactionMessageInstruction(newInstruction, transactionMessage) as TTransactionMessage)\n        : replaceTransactionMessageInstruction(existingIndex, newInstruction, transactionMessage);\n}\n","import { TransactionMessage, TransactionVersion } from './transaction-message';\nimport { TransactionMessageWithinSizeLimit } from './transaction-message-size';\n\n// Note: v1 transactions are not yet supported by these functions\ntype SupportedTransactionVersion = Exclude<TransactionVersion, 1>;\n\ntype TransactionConfig<TVersion extends SupportedTransactionVersion> = Readonly<{\n    version: TVersion;\n}>;\n\ntype EmptyTransactionMessage<TVersion extends SupportedTransactionVersion> = Omit<\n    Extract<TransactionMessage, { version: TVersion }>,\n    'instructions'\n> &\n    TransactionMessageWithinSizeLimit & { instructions: readonly [] };\n\n/**\n * Given a {@link TransactionVersion} this method will return an empty transaction having the\n * capabilities of that version.\n *\n * @example\n * ```ts\n * import { createTransactionMessage } from '@solana/transaction-messages';\n *\n * const message = createTransactionMessage({ version: 0 });\n * ```\n */\nexport function createTransactionMessage<TVersion extends SupportedTransactionVersion>(\n    config: TransactionConfig<TVersion>,\n): EmptyTransactionMessage<TVersion> {\n    return Object.freeze({\n        instructions: Object.freeze([]),\n        version: config.version,\n    }) as EmptyTransactionMessage<TVersion>;\n}\n","import { Address } from '@solana/addresses';\n\nimport { TransactionMessage } from './transaction-message';\n\n/**\n * Represents a transaction message for which a fee payer has been declared. A transaction must\n * conform to this type to be compiled and landed on the network.\n */\nexport interface TransactionMessageWithFeePayer<TAddress extends string = string> {\n    readonly feePayer: Readonly<{ address: Address<TAddress> }>;\n}\n\n/**\n * A helper type to exclude the fee payer from a transaction message.\n */\ntype ExcludeTransactionMessageFeePayer<TTransactionMessage extends TransactionMessage> =\n    TTransactionMessage extends unknown ? Omit<TTransactionMessage, 'feePayer'> : never;\n\n/**\n * Given a base58-encoded address of a system account, this method will return a new transaction\n * message having the same type as the one supplied plus the {@link TransactionMessageWithFeePayer}\n * type.\n *\n * @example\n * ```ts\n * import { address } from '@solana/addresses';\n * import { setTransactionMessageFeePayer } from '@solana/transaction-messages';\n *\n * const myAddress = address('mpngsFd4tmbUfzDYJayjKZwZcaR7aWb2793J6grLsGu');\n * const txPaidByMe = setTransactionMessageFeePayer(myAddress, tx);\n * ```\n */\nexport function setTransactionMessageFeePayer<\n    TFeePayerAddress extends string,\n    TTransactionMessage extends Partial<TransactionMessageWithFeePayer> & TransactionMessage,\n>(\n    feePayer: Address<TFeePayerAddress>,\n    transactionMessage: TTransactionMessage,\n): ExcludeTransactionMessageFeePayer<TTransactionMessage> & TransactionMessageWithFeePayer<TFeePayerAddress> {\n    if (\n        'feePayer' in transactionMessage &&\n        feePayer === transactionMessage.feePayer?.address &&\n        isAddressOnlyFeePayer(transactionMessage.feePayer)\n    ) {\n        return transactionMessage as ExcludeTransactionMessageFeePayer<TTransactionMessage> &\n            TransactionMessageWithFeePayer<TFeePayerAddress>;\n    }\n    const out = {\n        ...transactionMessage,\n        feePayer: Object.freeze({ address: feePayer }),\n    };\n    Object.freeze(out);\n    return out as ExcludeTransactionMessageFeePayer<TTransactionMessage> &\n        TransactionMessageWithFeePayer<TFeePayerAddress>;\n}\n\nfunction isAddressOnlyFeePayer(\n    feePayer: Partial<TransactionMessageWithFeePayer>['feePayer'],\n): feePayer is { address: Address } {\n    return (\n        !!feePayer &&\n        'address' in feePayer &&\n        typeof feePayer.address === 'string' &&\n        Object.keys(feePayer).length === 1\n    );\n}\n","import { AccountMeta, AccountRole } from '@solana/instructions';\n\nimport { CompiledTransactionMessage } from '../..';\n\nexport function getAccountMetas(message: CompiledTransactionMessage): AccountMeta[] {\n    const { header } = message;\n    const numWritableSignerAccounts = header.numSignerAccounts - header.numReadonlySignerAccounts;\n    const numWritableNonSignerAccounts =\n        message.staticAccounts.length - header.numSignerAccounts - header.numReadonlyNonSignerAccounts;\n\n    const accountMetas: AccountMeta[] = [];\n\n    let accountIndex = 0;\n    for (let i = 0; i < numWritableSignerAccounts; i++) {\n        accountMetas.push({\n            address: message.staticAccounts[accountIndex],\n            role: AccountRole.WRITABLE_SIGNER,\n        });\n        accountIndex++;\n    }\n\n    for (let i = 0; i < header.numReadonlySignerAccounts; i++) {\n        accountMetas.push({\n            address: message.staticAccounts[accountIndex],\n            role: AccountRole.READONLY_SIGNER,\n        });\n        accountIndex++;\n    }\n\n    for (let i = 0; i < numWritableNonSignerAccounts; i++) {\n        accountMetas.push({\n            address: message.staticAccounts[accountIndex],\n            role: AccountRole.WRITABLE,\n        });\n        accountIndex++;\n    }\n\n    for (let i = 0; i < header.numReadonlyNonSignerAccounts; i++) {\n        accountMetas.push({\n            address: message.staticAccounts[accountIndex],\n            role: AccountRole.READONLY,\n        });\n        accountIndex++;\n    }\n\n    return accountMetas;\n}\n","import {\n    SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_INSTRUCTION_PROGRAM_ADDRESS_NOT_FOUND,\n    SolanaError,\n} from '@solana/errors';\nimport { AccountMeta, Instruction } from '@solana/instructions';\n\nimport { LegacyCompiledTransactionMessage } from '../../compile/legacy/message';\n\nfunction convertInstruction(\n    instruction: LegacyCompiledTransactionMessage['instructions'][number],\n    accountMetas: AccountMeta[],\n): Instruction {\n    const programAddress = accountMetas[instruction.programAddressIndex]?.address;\n    if (!programAddress) {\n        throw new SolanaError(SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_INSTRUCTION_PROGRAM_ADDRESS_NOT_FOUND, {\n            index: instruction.programAddressIndex,\n        });\n    }\n\n    const accounts = instruction.accountIndices?.map(accountIndex => accountMetas[accountIndex]);\n    const { data } = instruction;\n\n    return Object.freeze({\n        programAddress,\n        ...(accounts && accounts.length ? { accounts: Object.freeze(accounts) } : {}),\n        ...(data && data.length ? { data } : {}),\n    });\n}\n\nexport function convertInstructions(\n    instructions: LegacyCompiledTransactionMessage['instructions'],\n    accountMetas: AccountMeta[],\n): Instruction[] {\n    return instructions.map(instruction => convertInstruction(instruction, accountMetas));\n}\n","import { SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_FEE_PAYER_MISSING, SolanaError } from '@solana/errors';\n\nimport { CompiledTransactionMessage } from '../..';\n\nexport function getFeePayer(staticAccounts: CompiledTransactionMessage['staticAccounts']) {\n    const feePayer = staticAccounts[0];\n    if (!feePayer) {\n        throw new SolanaError(SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_FEE_PAYER_MISSING);\n    }\n    return feePayer;\n}\n","import { Address } from '@solana/addresses';\nimport { ReadonlyUint8Array } from '@solana/codecs-core';\nimport {\n    AccountRole,\n    Instruction,\n    InstructionWithAccounts,\n    InstructionWithData,\n    isSignerRole,\n    ReadonlyAccount,\n    ReadonlySignerAccount,\n    WritableAccount,\n    WritableSignerAccount,\n} from '@solana/instructions';\nimport { Brand } from '@solana/nominal-types';\n\nexport type AdvanceNonceAccountInstruction<\n    TNonceAccountAddress extends string = string,\n    TNonceAuthorityAddress extends string = string,\n> = Instruction<'11111111111111111111111111111111'> &\n    InstructionWithAccounts<\n        readonly [\n            WritableAccount<TNonceAccountAddress>,\n            ReadonlyAccount<'SysvarRecentB1ockHashes11111111111111111111'>,\n            ReadonlySignerAccount<TNonceAuthorityAddress> | WritableSignerAccount<TNonceAuthorityAddress>,\n        ]\n    > &\n    InstructionWithData<AdvanceNonceAccountInstructionData>;\n\ntype AdvanceNonceAccountInstructionData = Brand<Uint8Array, 'AdvanceNonceAccountInstructionData'>;\n\nconst RECENT_BLOCKHASHES_SYSVAR_ADDRESS =\n    'SysvarRecentB1ockHashes11111111111111111111' as Address<'SysvarRecentB1ockHashes11111111111111111111'>;\nconst SYSTEM_PROGRAM_ADDRESS = '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\n\n/**\n * Creates an instruction for the System program to advance a nonce.\n *\n * This instruction is a prerequisite for a transaction with a nonce-based lifetime to be landed on\n * the network. In order to be considered valid, the transaction must meet all of these criteria.\n *\n * 1. Its lifetime constraint must be a {@link NonceLifetimeConstraint}.\n * 2. The value contained in the on-chain account at the address `nonceAccountAddress` must be equal\n *    to {@link NonceLifetimeConstraint.nonce} at the time the transaction is landed.\n * 3. The first instruction in that transaction message must be the one returned by this function.\n *\n * You could also use the `getAdvanceNonceAccountInstruction` method of `@solana-program/system`.\n */\nexport function createAdvanceNonceAccountInstruction<\n    TNonceAccountAddress extends string = string,\n    TNonceAuthorityAddress extends string = string,\n>(\n    nonceAccountAddress: Address<TNonceAccountAddress>,\n    nonceAuthorityAddress: Address<TNonceAuthorityAddress>,\n): AdvanceNonceAccountInstruction<TNonceAccountAddress, TNonceAuthorityAddress> {\n    return {\n        accounts: [\n            { address: nonceAccountAddress, role: AccountRole.WRITABLE },\n            {\n                address: RECENT_BLOCKHASHES_SYSVAR_ADDRESS,\n                role: AccountRole.READONLY,\n            },\n            { address: nonceAuthorityAddress, role: AccountRole.READONLY_SIGNER },\n        ],\n        data: new Uint8Array([4, 0, 0, 0]) as AdvanceNonceAccountInstructionData,\n        programAddress: SYSTEM_PROGRAM_ADDRESS,\n    };\n}\n\n/**\n * A type guard that returns `true` if the instruction conforms to the\n * {@link AdvanceNonceAccountInstruction} type, and refines its type for use in your program.\n *\n * @example\n * ```ts\n * import { isAdvanceNonceAccountInstruction } from '@solana/transaction-messages';\n *\n * if (isAdvanceNonceAccountInstruction(message.instructions[0])) {\n *     // At this point, the first instruction in the message has been refined to a\n *     // `AdvanceNonceAccountInstruction`.\n *     setNonceAccountAddress(message.instructions[0].accounts[0].address);\n * } else {\n *     setError('The first instruction is not an `AdvanceNonce` instruction');\n * }\n * ```\n */\nexport function isAdvanceNonceAccountInstruction(\n    instruction: Instruction,\n): instruction is AdvanceNonceAccountInstruction {\n    return (\n        instruction.programAddress === SYSTEM_PROGRAM_ADDRESS &&\n        // Test for `AdvanceNonceAccount` instruction data\n        instruction.data != null &&\n        isAdvanceNonceAccountInstructionData(instruction.data) &&\n        // Test for exactly 3 accounts\n        instruction.accounts?.length === 3 &&\n        // First account is nonce account address\n        instruction.accounts[0].address != null &&\n        instruction.accounts[0].role === AccountRole.WRITABLE &&\n        // Second account is recent blockhashes sysvar\n        instruction.accounts[1].address === RECENT_BLOCKHASHES_SYSVAR_ADDRESS &&\n        instruction.accounts[1].role === AccountRole.READONLY &&\n        // Third account is nonce authority account\n        instruction.accounts[2].address != null &&\n        isSignerRole(instruction.accounts[2].role)\n    );\n}\n\nfunction isAdvanceNonceAccountInstructionData(data: ReadonlyUint8Array): data is AdvanceNonceAccountInstructionData {\n    // AdvanceNonceAccount is the fifth instruction in the System Program (index 4)\n    return data.byteLength === 4 && data[0] === 4 && data[1] === 0 && data[2] === 0 && data[3] === 0;\n}\n","import { assertIsAddress } from '@solana/addresses';\nimport { Instruction } from '@solana/instructions';\nimport { Blockhash } from '@solana/rpc-types';\n\nimport { BlockhashLifetimeConstraint } from '../../blockhash';\nimport { Nonce, setTransactionMessageLifetimeUsingDurableNonce } from '../../durable-nonce';\nimport { isAdvanceNonceAccountInstruction } from '../../durable-nonce-instruction';\n\ntype LifetimeConstraint =\n    | BlockhashLifetimeConstraint\n    | Parameters<typeof setTransactionMessageLifetimeUsingDurableNonce>[0];\n\nexport function getLifetimeConstraint(\n    messageLifetimeToken: string,\n    instructions: Instruction[],\n    lastValidBlockHeight?: bigint,\n): LifetimeConstraint {\n    const firstInstruction = instructions[0];\n    if (!firstInstruction || !isAdvanceNonceAccountInstruction(firstInstruction)) {\n        // first instruction is not advance durable nonce, so use blockhash lifetime constraint\n        return {\n            blockhash: messageLifetimeToken as Blockhash,\n            lastValidBlockHeight: lastValidBlockHeight ?? 2n ** 64n - 1n, // U64 MAX\n        };\n    } else {\n        // We know these accounts are defined because we checked `isAdvanceNonceAccountInstruction`\n        const nonceAccountAddress = firstInstruction.accounts[0].address;\n        assertIsAddress(nonceAccountAddress);\n\n        const nonceAuthorityAddress = firstInstruction.accounts[2].address;\n        assertIsAddress(nonceAuthorityAddress);\n\n        return {\n            nonce: messageLifetimeToken as Nonce,\n            nonceAccountAddress,\n            nonceAuthorityAddress,\n        };\n    }\n}\n","import { pipe } from '@solana/functional';\n\nimport {\n    appendTransactionMessageInstructions,\n    CompiledTransactionMessage,\n    CompiledTransactionMessageWithLifetime,\n    createTransactionMessage,\n    setTransactionMessageLifetimeUsingBlockhash,\n    setTransactionMessageLifetimeUsingDurableNonce,\n} from '../..';\nimport { setTransactionMessageFeePayer, TransactionMessageWithFeePayer } from '../../fee-payer';\nimport { TransactionMessageWithLifetime } from '../../lifetime';\nimport { TransactionMessage } from '../../transaction-message';\nimport { getAccountMetas } from './account-metas';\nimport { convertInstructions } from './convert-instruction';\nimport { getFeePayer } from './fee-payer';\nimport { getLifetimeConstraint } from './lifetime-constraint';\n\nexport function decompileTransactionMessage(\n    compiledTransactionMessage: CompiledTransactionMessage &\n        CompiledTransactionMessageWithLifetime & { version: 'legacy' },\n    config?: {\n        lastValidBlockHeight?: bigint;\n    },\n): TransactionMessage & TransactionMessageWithFeePayer & TransactionMessageWithLifetime & { version: 'legacy' } {\n    const feePayer = getFeePayer(compiledTransactionMessage.staticAccounts);\n    const accountMetas = getAccountMetas(compiledTransactionMessage);\n    const instructions = convertInstructions(compiledTransactionMessage.instructions, accountMetas);\n    const lifetimeConstraint = getLifetimeConstraint(\n        compiledTransactionMessage.lifetimeToken,\n        instructions,\n        config?.lastValidBlockHeight,\n    );\n\n    return pipe(\n        createTransactionMessage({ version: 'legacy' }),\n        m => setTransactionMessageFeePayer(feePayer, m),\n        m => appendTransactionMessageInstructions(instructions, m),\n        m =>\n            'blockhash' in lifetimeConstraint\n                ? setTransactionMessageLifetimeUsingBlockhash(lifetimeConstraint, m)\n                : setTransactionMessageLifetimeUsingDurableNonce(lifetimeConstraint, m),\n    );\n}\n","import { Address } from '@solana/addresses';\nimport { SOLANA_ERROR__TRANSACTION__EXPECTED_NONCE_LIFETIME, SolanaError } from '@solana/errors';\nimport { Instruction } from '@solana/instructions';\nimport { Brand } from '@solana/nominal-types';\n\nimport {\n    AdvanceNonceAccountInstruction,\n    createAdvanceNonceAccountInstruction,\n    isAdvanceNonceAccountInstruction,\n} from './durable-nonce-instruction';\nimport { ExcludeTransactionMessageLifetime } from './lifetime';\nimport { TransactionMessage } from './transaction-message';\nimport { ExcludeTransactionMessageWithinSizeLimit } from './transaction-message-size';\n\ntype DurableNonceConfig<\n    TNonceAccountAddress extends string = string,\n    TNonceAuthorityAddress extends string = string,\n    TNonceValue extends string = string,\n> = Readonly<{\n    readonly nonce: Nonce<TNonceValue>;\n    readonly nonceAccountAddress: Address<TNonceAccountAddress>;\n    readonly nonceAuthorityAddress: Address<TNonceAuthorityAddress>;\n}>;\n\n/** Represents a string that is particularly known to be the base58-encoded value of a nonce. */\nexport type Nonce<TNonceValue extends string = string> = Brand<TNonceValue, 'Nonce'>;\n\n/**\n * A constraint which, when applied to a transaction message, makes that transaction message\n * eligible to land on the network.\n *\n * The transaction message will continue to be eligible to land until the network considers the\n * `nonce` to have advanced. This can happen when the nonce account in which this nonce is found is\n * destroyed, or the nonce value within changes.\n */\nexport type NonceLifetimeConstraint<TNonceValue extends string = string> = Readonly<{\n    /**\n     * A value contained in the related nonce account at the time the transaction was prepared.\n     *\n     * The transaction will be considered eligible to land until the nonce account ceases to exist\n     * or contain this value.\n     */\n    nonce: Nonce<TNonceValue>;\n}>;\n\n/**\n * Represents a transaction message whose lifetime is defined by the value of a nonce it includes.\n *\n * Such a transaction can only be landed on the network if the nonce is known to the network and has\n * not already been used to land a different transaction.\n */\nexport interface TransactionMessageWithDurableNonceLifetime<\n    TNonceAccountAddress extends string = string,\n    TNonceAuthorityAddress extends string = string,\n    TNonceValue extends string = string,\n> {\n    readonly instructions: readonly [\n        // The first instruction *must* be the system program's `AdvanceNonceAccount` instruction.\n        AdvanceNonceAccountInstruction<TNonceAccountAddress, TNonceAuthorityAddress>,\n        ...Instruction[],\n    ];\n    readonly lifetimeConstraint: NonceLifetimeConstraint<TNonceValue>;\n}\n\n/**\n * A helper type to exclude the durable nonce lifetime constraint from a transaction message.\n */\nexport type ExcludeTransactionMessageDurableNonceLifetime<TTransactionMessage extends TransactionMessage> =\n    TTransactionMessage extends TransactionMessageWithDurableNonceLifetime\n        ? ExcludeTransactionMessageLifetime<TTransactionMessage>\n        : TTransactionMessage;\n\n/**\n * A type guard that returns `true` if the transaction message conforms to the\n * {@link TransactionMessageWithDurableNonceLifetime} type, and refines its type for use in your\n * program.\n *\n * @example\n * ```ts\n * import { isTransactionMessageWithDurableNonceLifetime } from '@solana/transaction-messages';\n * import { fetchNonce } from \"@solana-program/system\";\n *\n * if (isTransactionMessageWithDurableNonceLifetime(message)) {\n *     // At this point, `message` has been refined to a\n *     // `TransactionMessageWithDurableNonceLifetime`.\n *     const { nonce, nonceAccountAddress } = message.lifetimeConstraint;\n *     const { data: { blockhash: actualNonce } } = await fetchNonce(nonceAccountAddress);\n *     setNonceIsValid(nonce === actualNonce);\n * } else {\n *     setError(\n *         `${getSignatureFromTransaction(transaction)} does not have a nonce-based lifetime`,\n *     );\n * }\n * ```\n */\nexport function isTransactionMessageWithDurableNonceLifetime(\n    transactionMessage: TransactionMessage | (TransactionMessage & TransactionMessageWithDurableNonceLifetime),\n): transactionMessage is TransactionMessage & TransactionMessageWithDurableNonceLifetime {\n    return (\n        'lifetimeConstraint' in transactionMessage &&\n        typeof transactionMessage.lifetimeConstraint.nonce === 'string' &&\n        transactionMessage.instructions[0] != null &&\n        isAdvanceNonceAccountInstruction(transactionMessage.instructions[0])\n    );\n}\n\n/**\n * From time to time you might acquire a transaction message, that you expect to have a\n * nonce-based lifetime, from an untrusted network API or user input. Use this function to assert\n * that such a transaction message actually has a nonce-based lifetime.\n *\n * @example\n * ```ts\n * import { assertIsTransactionMessageWithDurableNonceLifetime } from '@solana/transaction-messages';\n *\n * try {\n *     // If this type assertion function doesn't throw, then\n *     // Typescript will upcast `message` to `TransactionMessageWithDurableNonceLifetime`.\n *     assertIsTransactionMessageWithDurableNonceLifetime(message);\n *     // At this point, `message` is a `TransactionMessageWithDurableNonceLifetime` that can be used\n *     // with the RPC.\n *     const { nonce, nonceAccountAddress } = message.lifetimeConstraint;\n *     const { data: { blockhash: actualNonce } } = await fetchNonce(nonceAccountAddress);\n * } catch (e) {\n *     // `message` turned out not to have a nonce-based lifetime\n * }\n * ```\n */\nexport function assertIsTransactionMessageWithDurableNonceLifetime(\n    transactionMessage: TransactionMessage | (TransactionMessage & TransactionMessageWithDurableNonceLifetime),\n): asserts transactionMessage is TransactionMessage & TransactionMessageWithDurableNonceLifetime {\n    if (!isTransactionMessageWithDurableNonceLifetime(transactionMessage)) {\n        throw new SolanaError(SOLANA_ERROR__TRANSACTION__EXPECTED_NONCE_LIFETIME);\n    }\n}\n\nfunction isAdvanceNonceAccountInstructionForNonce<\n    TNonceAccountAddress extends Address = Address,\n    TNonceAuthorityAddress extends Address = Address,\n>(\n    instruction: AdvanceNonceAccountInstruction,\n    nonceAccountAddress: TNonceAccountAddress,\n    nonceAuthorityAddress: TNonceAuthorityAddress,\n): instruction is AdvanceNonceAccountInstruction<TNonceAccountAddress, TNonceAuthorityAddress> {\n    return (\n        instruction.accounts[0].address === nonceAccountAddress &&\n        instruction.accounts[2].address === nonceAuthorityAddress\n    );\n}\n\n/**\n * Given a nonce, the account where the value of the nonce is stored, and the address of the account\n * authorized to consume that nonce, this method will return a new transaction having the same type\n * as the one supplied plus the {@link TransactionMessageWithDurableNonceLifetime} type.\n *\n * In particular, this method _prepends_ an instruction to the transaction message designed to\n * consume (or 'advance') the nonce in the same transaction whose lifetime is defined by it.\n *\n * @param config\n *\n * @example\n * ```ts\n * import { Nonce, setTransactionMessageLifetimeUsingDurableNonce } from '@solana/transaction-messages';\n * import { fetchNonce } from '@solana-program/system';\n *\n * const nonceAccountAddress = address('EGtMh4yvXswwHhwVhyPxGrVV2TkLTgUqGodbATEPvojZ');\n * const nonceAuthorityAddress = address('4KD1Rdrd89NG7XbzW3xsX9Aqnx2EExJvExiNme6g9iAT');\n *\n * const {\n *     data: { blockhash },\n * } = await fetchNonce(rpc, nonceAccountAddress);\n * const nonce = blockhash as string as Nonce;\n *\n * const durableNonceTransactionMessage = setTransactionMessageLifetimeUsingDurableNonce(\n *     { nonce, nonceAccountAddress, nonceAuthorityAddress },\n *     tx,\n * );\n * ```\n */\nexport function setTransactionMessageLifetimeUsingDurableNonce<\n    TTransactionMessage extends TransactionMessage,\n    TNonceAccountAddress extends string = string,\n    TNonceAuthorityAddress extends string = string,\n    TNonceValue extends string = string,\n>(\n    {\n        nonce,\n        nonceAccountAddress,\n        nonceAuthorityAddress,\n    }: DurableNonceConfig<TNonceAccountAddress, TNonceAuthorityAddress, TNonceValue>,\n    transactionMessage: TTransactionMessage,\n): SetTransactionMessageWithDurableNonceLifetime<\n    TTransactionMessage,\n    TNonceAccountAddress,\n    TNonceAuthorityAddress,\n    TNonceValue\n> {\n    type ReturnType = SetTransactionMessageWithDurableNonceLifetime<\n        TTransactionMessage,\n        TNonceAccountAddress,\n        TNonceAuthorityAddress,\n        TNonceValue\n    >;\n\n    let newInstructions: [\n        AdvanceNonceAccountInstruction<TNonceAccountAddress, TNonceAuthorityAddress>,\n        ...Instruction[],\n    ];\n\n    const firstInstruction = transactionMessage.instructions[0];\n    if (firstInstruction && isAdvanceNonceAccountInstruction(firstInstruction)) {\n        if (isAdvanceNonceAccountInstructionForNonce(firstInstruction, nonceAccountAddress, nonceAuthorityAddress)) {\n            if (\n                isTransactionMessageWithDurableNonceLifetime(transactionMessage) &&\n                transactionMessage.lifetimeConstraint.nonce === nonce\n            ) {\n                return transactionMessage as unknown as ReturnType;\n            } else {\n                // we already have the right first instruction, leave it as-is\n                newInstructions = [firstInstruction, ...transactionMessage.instructions.slice(1)];\n            }\n        } else {\n            // we have a different advance nonce instruction as the first instruction, replace it\n            newInstructions = [\n                Object.freeze(createAdvanceNonceAccountInstruction(nonceAccountAddress, nonceAuthorityAddress)),\n                ...transactionMessage.instructions.slice(1),\n            ];\n        }\n    } else {\n        // we don't have an existing advance nonce instruction as the first instruction, prepend one\n        newInstructions = [\n            Object.freeze(createAdvanceNonceAccountInstruction(nonceAccountAddress, nonceAuthorityAddress)),\n            ...transactionMessage.instructions,\n        ];\n    }\n\n    return Object.freeze({\n        ...transactionMessage,\n        instructions: Object.freeze(newInstructions),\n        lifetimeConstraint: Object.freeze({ nonce }),\n    }) as unknown as ReturnType;\n}\n\n/**\n * Helper type that transforms a given transaction message type into a new one that has the\n * `AdvanceNonceAccount` instruction as the first instruction and a lifetime constraint\n * representing the nonce value.\n */\ntype SetTransactionMessageWithDurableNonceLifetime<\n    TTransactionMessage extends TransactionMessage,\n    TNonceAccountAddress extends string = string,\n    TNonceAuthorityAddress extends string = string,\n    TNonceValue extends string = string,\n> = TTransactionMessage extends unknown\n    ? Omit<\n          // 1. The transaction message only grows in size if it currently has a different (or no) lifetime.\n          TTransactionMessage extends TransactionMessageWithDurableNonceLifetime\n              ? TTransactionMessage\n              : ExcludeTransactionMessageWithinSizeLimit<TTransactionMessage>,\n          // 2. Remove the instructions array as we are going to replace it with a new one.\n          | 'instructions'\n          // 3. Remove the existing lifetime constraint as we are going to replace it with a new one.\n          | 'lifetimeConstraint'\n      > & {\n          // 4. Replace or prepend the first instruction with the advance nonce account instruction.\n          readonly instructions: TTransactionMessage['instructions'] extends readonly [\n              AdvanceNonceAccountInstruction,\n              ...infer TTail extends readonly Instruction[],\n          ]\n              ? readonly [AdvanceNonceAccountInstruction<TNonceAccountAddress, TNonceAuthorityAddress>, ...TTail]\n              : readonly [\n                    AdvanceNonceAccountInstruction<TNonceAccountAddress, TNonceAuthorityAddress>,\n                    ...TTransactionMessage['instructions'],\n                ];\n          // 5. Set the lifetime constraint to the nonce value.\n          readonly lifetimeConstraint: NonceLifetimeConstraint<TNonceValue>;\n      }\n    : never;\n","import {\n    SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_ADDRESS_LOOKUP_TABLE_CONTENTS_MISSING,\n    SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_ADDRESS_LOOKUP_TABLE_INDEX_OUT_OF_RANGE,\n    SolanaError,\n} from '@solana/errors';\nimport { AccountLookupMeta, AccountRole } from '@solana/instructions';\n\nimport { AddressesByLookupTableAddress } from '../../addresses-by-lookup-table-address';\nimport { getCompiledAddressTableLookups } from '../../compile/v0/address-table-lookups';\n\nexport function getAddressLookupMetas(\n    compiledAddressTableLookups: ReturnType<typeof getCompiledAddressTableLookups>,\n    addressesByLookupTableAddress: AddressesByLookupTableAddress,\n): AccountLookupMeta[] {\n    // check that all message lookups are known\n    const compiledAddressTableLookupAddresses = compiledAddressTableLookups.map(l => l.lookupTableAddress);\n    const missing = compiledAddressTableLookupAddresses.filter(a => addressesByLookupTableAddress[a] === undefined);\n    if (missing.length > 0) {\n        throw new SolanaError(SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_ADDRESS_LOOKUP_TABLE_CONTENTS_MISSING, {\n            lookupTableAddresses: missing,\n        });\n    }\n\n    const readOnlyMetas: AccountLookupMeta[] = [];\n    const writableMetas: AccountLookupMeta[] = [];\n\n    // we know that for each lookup, knownLookups[lookup.lookupTableAddress] is defined\n    for (const lookup of compiledAddressTableLookups) {\n        const addresses = addressesByLookupTableAddress[lookup.lookupTableAddress];\n        const readonlyIndexes = lookup.readonlyIndexes;\n        const writableIndexes = lookup.writableIndexes;\n\n        const highestIndex = Math.max(...readonlyIndexes, ...writableIndexes);\n        if (highestIndex >= addresses.length) {\n            throw new SolanaError(\n                SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_ADDRESS_LOOKUP_TABLE_INDEX_OUT_OF_RANGE,\n                {\n                    highestKnownIndex: addresses.length - 1,\n                    highestRequestedIndex: highestIndex,\n                    lookupTableAddress: lookup.lookupTableAddress,\n                },\n            );\n        }\n\n        const readOnlyForLookup: AccountLookupMeta[] = readonlyIndexes.map(r => ({\n            address: addresses[r],\n            addressIndex: r,\n            lookupTableAddress: lookup.lookupTableAddress,\n            role: AccountRole.READONLY,\n        }));\n        readOnlyMetas.push(...readOnlyForLookup);\n\n        const writableForLookup: AccountLookupMeta[] = writableIndexes.map(w => ({\n            address: addresses[w],\n            addressIndex: w,\n            lookupTableAddress: lookup.lookupTableAddress,\n            role: AccountRole.WRITABLE,\n        }));\n        writableMetas.push(...writableForLookup);\n    }\n\n    return [...writableMetas, ...readOnlyMetas];\n}\n","import { pipe } from '@solana/functional';\n\nimport { CompiledTransactionMessage, CompiledTransactionMessageWithLifetime } from '../..';\nimport { AddressesByLookupTableAddress } from '../../addresses-by-lookup-table-address';\nimport { setTransactionMessageLifetimeUsingBlockhash } from '../../blockhash';\nimport { createTransactionMessage } from '../../create-transaction-message';\nimport { setTransactionMessageLifetimeUsingDurableNonce } from '../../durable-nonce';\nimport { setTransactionMessageFeePayer, TransactionMessageWithFeePayer } from '../../fee-payer';\nimport { appendTransactionMessageInstructions } from '../../instructions';\nimport { TransactionMessageWithLifetime } from '../../lifetime';\nimport { TransactionMessage } from '../../transaction-message';\nimport { getAccountMetas } from '../legacy/account-metas';\nimport { convertInstructions } from '../legacy/convert-instruction';\nimport { getFeePayer } from '../legacy/fee-payer';\nimport { getLifetimeConstraint } from '../legacy/lifetime-constraint';\nimport { getAddressLookupMetas } from './address-lookup-metas';\n\nexport type DecompileTransactionMessageConfig = {\n    addressesByLookupTableAddress?: AddressesByLookupTableAddress;\n    lastValidBlockHeight?: bigint;\n};\n\nexport function decompileTransactionMessage(\n    compiledTransactionMessage: CompiledTransactionMessage & CompiledTransactionMessageWithLifetime & { version: 0 },\n    config?: DecompileTransactionMessageConfig,\n): TransactionMessage & TransactionMessageWithFeePayer & TransactionMessageWithLifetime {\n    const feePayer = getFeePayer(compiledTransactionMessage.staticAccounts);\n\n    const accountMetas = getAccountMetas(compiledTransactionMessage);\n    const accountLookupMetas =\n        'addressTableLookups' in compiledTransactionMessage &&\n        compiledTransactionMessage.addressTableLookups !== undefined &&\n        compiledTransactionMessage.addressTableLookups.length > 0\n            ? getAddressLookupMetas(\n                  compiledTransactionMessage.addressTableLookups,\n                  config?.addressesByLookupTableAddress ?? {},\n              )\n            : [];\n    const transactionMetas = [...accountMetas, ...accountLookupMetas];\n    const instructions = convertInstructions(compiledTransactionMessage.instructions, transactionMetas);\n\n    const lifetimeConstraint = getLifetimeConstraint(\n        compiledTransactionMessage.lifetimeToken,\n        instructions,\n        config?.lastValidBlockHeight,\n    );\n\n    return pipe(\n        createTransactionMessage({ version: 0 }),\n        m => setTransactionMessageFeePayer(feePayer, m),\n        m => appendTransactionMessageInstructions(instructions, m),\n        m =>\n            'blockhash' in lifetimeConstraint\n                ? setTransactionMessageLifetimeUsingBlockhash(lifetimeConstraint, m)\n                : setTransactionMessageLifetimeUsingDurableNonce(lifetimeConstraint, m),\n    ) as TransactionMessage & TransactionMessageWithFeePayer & TransactionMessageWithLifetime;\n}\n","import { SOLANA_ERROR__TRANSACTION__INVALID_CONFIG_VALUE_KIND, SolanaError } from '@solana/errors';\n\nimport { CompiledTransactionConfigValue } from '../../compile/v1/config';\nimport {\n    transactionConfigMaskHasComputeUnitLimit,\n    transactionConfigMaskHasHeapSize,\n    transactionConfigMaskHasLoadedAccountsDataSizeLimit,\n    transactionConfigMaskHasPriorityFee,\n    V1TransactionConfig,\n} from '../../v1-transaction-config';\n\ntype SupportedConfig = [keyof V1TransactionConfig, 'u32' | 'u64', (mask: number) => boolean];\n\nexport function decompileTransactionConfig(\n    configMask: number,\n    configValues: CompiledTransactionConfigValue[],\n): V1TransactionConfig {\n    const supportedConfigs: SupportedConfig[] = [\n        ['priorityFeeLamports', 'u64', transactionConfigMaskHasPriorityFee],\n        ['computeUnitLimit', 'u32', transactionConfigMaskHasComputeUnitLimit],\n        ['loadedAccountsDataSizeLimit', 'u32', transactionConfigMaskHasLoadedAccountsDataSizeLimit],\n        ['heapSize', 'u32', transactionConfigMaskHasHeapSize],\n    ];\n\n    const [config] = supportedConfigs.reduce(\n        ([acc, index], [name, kind, predicate]) => {\n            if (!predicate(configMask)) return [acc, index];\n            const configValue = configValues[index];\n            if (configValue.kind !== kind) {\n                throw new SolanaError(SOLANA_ERROR__TRANSACTION__INVALID_CONFIG_VALUE_KIND, {\n                    actualKind: configValue.kind,\n                    configName: name,\n                    expectedKind: kind,\n                });\n            }\n            return [{ ...acc, [name]: configValue.value }, index + 1];\n        },\n        [{}, 0] as [V1TransactionConfig, number],\n    );\n\n    return config;\n}\n","import {\n    SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_INSTRUCTION_PROGRAM_ADDRESS_NOT_FOUND,\n    SOLANA_ERROR__TRANSACTION__INSTRUCTION_HEADERS_PAYLOADS_MISMATCH,\n    SolanaError,\n} from '@solana/errors';\nimport { AccountMeta, Instruction } from '@solana/instructions';\n\nimport { InstructionHeader, InstructionPayload } from '../../compile/v1/instructions';\n\nfunction decompileInstruction(\n    instructionHeader: InstructionHeader,\n    instructionPayload: InstructionPayload,\n    accountMetas: AccountMeta[],\n): Instruction {\n    const programAddress = accountMetas[instructionHeader.programAccountIndex]?.address;\n    if (!programAddress) {\n        throw new SolanaError(SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_INSTRUCTION_PROGRAM_ADDRESS_NOT_FOUND, {\n            index: instructionHeader.programAccountIndex,\n        });\n    }\n\n    const accounts = instructionPayload.instructionAccountIndices.map(accountIndex => accountMetas[accountIndex]);\n    const data = instructionPayload.instructionData;\n\n    return Object.freeze({\n        programAddress,\n        ...(accounts && accounts.length ? { accounts: Object.freeze(accounts) } : {}),\n        ...(data && data.length ? { data } : {}),\n    });\n}\n\nexport function decompileInstructions(\n    instructionHeaders: InstructionHeader[],\n    instructionPayloads: InstructionPayload[],\n    accountMetas: AccountMeta[],\n): Instruction[] {\n    if (instructionHeaders.length !== instructionPayloads.length) {\n        throw new SolanaError(SOLANA_ERROR__TRANSACTION__INSTRUCTION_HEADERS_PAYLOADS_MISMATCH, {\n            numInstructionHeaders: instructionHeaders.length,\n            numInstructionPayloads: instructionPayloads.length,\n        });\n    }\n\n    return instructionHeaders.map((instructionHeader, index) =>\n        decompileInstruction(instructionHeader, instructionPayloads[index], accountMetas),\n    );\n}\n","import { pipe } from '@solana/functional';\n\nimport { setTransactionMessageLifetimeUsingBlockhash } from '../../blockhash';\nimport { CompiledTransactionMessage, CompiledTransactionMessageWithLifetime } from '../../compile';\nimport { createTransactionMessage } from '../../create-transaction-message';\nimport { setTransactionMessageLifetimeUsingDurableNonce } from '../../durable-nonce';\nimport { setTransactionMessageFeePayer, TransactionMessageWithFeePayer } from '../../fee-payer';\nimport { appendTransactionMessageInstructions } from '../../instructions';\nimport { TransactionMessageWithLifetime } from '../../lifetime';\nimport { TransactionMessage } from '../../transaction-message';\nimport { setTransactionMessageConfig } from '../../v1-transaction-config';\nimport { getAccountMetas } from '../legacy/account-metas';\nimport { getFeePayer } from '../legacy/fee-payer';\nimport { getLifetimeConstraint } from '../legacy/lifetime-constraint';\nimport { decompileTransactionConfig } from './config';\nimport { decompileInstructions } from './instructions';\n\nexport function decompileTransactionMessage(\n    compiledTransactionMessage: CompiledTransactionMessage & CompiledTransactionMessageWithLifetime & { version: 1 },\n    config?: {\n        lastValidBlockHeight?: bigint;\n    },\n): TransactionMessage & TransactionMessageWithFeePayer & TransactionMessageWithLifetime & { version: 1 } {\n    const feePayer = getFeePayer(compiledTransactionMessage.staticAccounts);\n    const accountMetas = getAccountMetas(compiledTransactionMessage);\n    const transactionConfig = decompileTransactionConfig(\n        compiledTransactionMessage.configMask,\n        compiledTransactionMessage.configValues,\n    );\n    const instructions = decompileInstructions(\n        compiledTransactionMessage.instructionHeaders,\n        compiledTransactionMessage.instructionPayloads,\n        accountMetas,\n    );\n    const lifetimeConstraint = getLifetimeConstraint(\n        compiledTransactionMessage.lifetimeToken,\n        instructions,\n        config?.lastValidBlockHeight,\n    );\n\n    return pipe(\n        // @ts-expect-error We don't expose v1 on `createTransactionMessage` yet\n        createTransactionMessage({ version: 1 }),\n        // Won't need this cast after we support v1 on `createTransactionMessage`\n        m => setTransactionMessageConfig(transactionConfig, m as unknown as TransactionMessage & { version: 1 }),\n        m => setTransactionMessageFeePayer(feePayer, m),\n        m => appendTransactionMessageInstructions(instructions, m),\n        m =>\n            'blockhash' in lifetimeConstraint\n                ? setTransactionMessageLifetimeUsingBlockhash(lifetimeConstraint, m)\n                : setTransactionMessageLifetimeUsingDurableNonce(lifetimeConstraint, m),\n    );\n}\n","import { SOLANA_ERROR__TRANSACTION__VERSION_NUMBER_NOT_SUPPORTED, SolanaError } from '@solana/errors';\n\nimport { CompiledTransactionMessage, CompiledTransactionMessageWithLifetime } from '..';\nimport { AddressesByLookupTableAddress } from '../addresses-by-lookup-table-address';\nimport { TransactionMessageWithFeePayer } from '../fee-payer';\nimport { TransactionMessageWithLifetime } from '../lifetime';\nimport { TransactionMessage } from '../transaction-message';\nimport { decompileTransactionMessage as decompileLegacyTransactionMessage } from './legacy/message';\nimport { decompileTransactionMessage as decompileV0TransactionMessage } from './v0/message';\nimport { decompileTransactionMessage as decompileV1TransactionMessage } from './v1/message';\n\nexport type DecompileTransactionMessageConfig = {\n    /**\n     * Only used for V0 transactions. If the compiled message loads addresses from one or more\n     * address lookup tables, you will have to supply a map of those tables to an array of\n     * the addresses they contained at the time that the transaction message was constructed.\n     *\n     * @see {@link decompileTransactionMessageFetchingLookupTables} if you do not already have this.\n     */\n    addressesByLookupTableAddress?: AddressesByLookupTableAddress;\n    /**\n     * If the compiled message has a blockhash-based lifetime constraint, you will have to supply\n     * the block height after which that blockhash is no longer valid for use as a lifetime\n     * constraint.\n     */\n    lastValidBlockHeight?: bigint;\n};\n\n/**\n * Converts the type of transaction message data structure appropriate for execution on the network\n * to the type of transaction message data structure designed for use in your application.\n *\n * Because compilation is a lossy process, you can not fully reconstruct a source message from a\n * compiled message without extra information. In order to faithfully reconstruct the original\n * source message you will need to supply supporting details about the lifetime constraint and the\n * concrete addresses of any accounts sourced from account lookup tables (for v0 transactions).\n *\n * @see {@link compileTransactionMessage}\n */\nexport function decompileTransactionMessage(\n    compiledTransactionMessage: CompiledTransactionMessage &\n        CompiledTransactionMessageWithLifetime & { version: 'legacy' },\n    config?: DecompileTransactionMessageConfig,\n): TransactionMessage & TransactionMessageWithFeePayer & TransactionMessageWithLifetime & { version: 'legacy' };\nexport function decompileTransactionMessage(\n    compiledTransactionMessage: CompiledTransactionMessage & CompiledTransactionMessageWithLifetime & { version: 0 },\n    config?: DecompileTransactionMessageConfig,\n): TransactionMessage & TransactionMessageWithFeePayer & TransactionMessageWithLifetime & { version: 0 };\nexport function decompileTransactionMessage(\n    compiledTransactionMessage: CompiledTransactionMessage & CompiledTransactionMessageWithLifetime & { version: 1 },\n    config?: DecompileTransactionMessageConfig,\n): TransactionMessage & TransactionMessageWithFeePayer & TransactionMessageWithLifetime & { version: 1 };\nexport function decompileTransactionMessage(\n    compiledTransactionMessage: CompiledTransactionMessage & CompiledTransactionMessageWithLifetime,\n    config?: DecompileTransactionMessageConfig,\n): TransactionMessage & TransactionMessageWithFeePayer & TransactionMessageWithLifetime;\nexport function decompileTransactionMessage(\n    compiledTransactionMessage: CompiledTransactionMessage & CompiledTransactionMessageWithLifetime,\n    config?: DecompileTransactionMessageConfig,\n): TransactionMessage & TransactionMessageWithFeePayer & TransactionMessageWithLifetime {\n    const version = compiledTransactionMessage.version;\n\n    if (version === 'legacy') {\n        return decompileLegacyTransactionMessage(compiledTransactionMessage, config);\n    } else if (version === 0) {\n        return decompileV0TransactionMessage(compiledTransactionMessage, config);\n    } else if (version === 1) {\n        return decompileV1TransactionMessage(compiledTransactionMessage, config);\n    } else {\n        throw new SolanaError(SOLANA_ERROR__TRANSACTION__VERSION_NUMBER_NOT_SUPPORTED, {\n            version,\n        });\n    }\n}\n","import type { Instruction } from '@solana/instructions';\n\nimport {\n    getHeapSizeFromInstructionData,\n    getRequestHeapFrameInstruction,\n    isRequestHeapFrameInstruction,\n    removeTransactionMessageInstruction,\n    replaceTransactionMessageInstruction,\n} from './compute-budget-instruction';\nimport { appendTransactionMessageInstruction } from './instructions';\nimport { TransactionMessage } from './transaction-message';\nimport { areV1ConfigsEqual, isV1ConfigEmpty } from './v1-transaction-config';\n\n/**\n * Returns the heap size currently set on a transaction message, or `undefined` if none is set.\n *\n * This function works with all transaction versions:\n * - **V1**: Reads from the transaction message's `config.heapSize`.\n * - **Legacy / V0**: Searches the instructions for a `RequestHeapFrame` instruction and decodes its\n *   value.\n *\n * @param transactionMessage - The transaction message to inspect.\n * @return The heap size in bytes, or `undefined` if none is set.\n *\n * @example\n * ```ts\n * const heapSize = getTransactionMessageHeapSize(transactionMessage);\n * if (heapSize !== undefined) {\n *     console.log(`Heap size: ${heapSize}`);\n * }\n * ```\n */\nexport function getTransactionMessageHeapSize(transactionMessage: TransactionMessage): number | undefined {\n    switch (transactionMessage.version) {\n        case 1:\n            return transactionMessage.config?.heapSize;\n        default:\n            return getTransactionMessageHeapSizeUsingInstruction(transactionMessage);\n    }\n}\n\nfunction getTransactionMessageHeapSizeUsingInstruction(transactionMessage: TransactionMessage): number | undefined {\n    const instructions = transactionMessage.instructions as Instruction[];\n    const existingInstruction = instructions.find(isRequestHeapFrameInstruction);\n    return existingInstruction ? getHeapSizeFromInstructionData(existingInstruction.data) : undefined;\n}\n\n/**\n * Sets the heap frame size for a transaction message.\n *\n * This function works with all transaction versions:\n * - **V1**: Sets the `heapSize` field in the transaction message's config.\n * - **Legacy / V0**: Appends (or replaces) a `RequestHeapFrame` instruction from the Compute\n *   Budget program.\n *\n * @param heapSize - The requested heap frame size in bytes, or `undefined` to remove the setting.\n * @param transactionMessage - The transaction message to configure.\n * @typeParam TTransactionMessage - The transaction message type.\n * @return A new transaction message with the heap size set.\n *\n * @example\n * ```ts\n * const txMessage = setTransactionMessageHeapSize(\n *     256_000,\n *     transactionMessage,\n * );\n * ```\n */\nexport function setTransactionMessageHeapSize<TTransactionMessage extends TransactionMessage>(\n    heapSize: number | undefined,\n    transactionMessage: TTransactionMessage,\n): TTransactionMessage {\n    switch (transactionMessage.version) {\n        case 1:\n            return setTransactionMessageHeapSizeUsingConfig(heapSize, transactionMessage) as TTransactionMessage;\n        default:\n            return setTransactionMessageHeapSizeUsingInstruction(heapSize, transactionMessage);\n    }\n}\n\nfunction setTransactionMessageHeapSizeUsingConfig<TTransactionMessage extends TransactionMessage & { version: 1 }>(\n    heapSize: number | undefined,\n    transactionMessage: TTransactionMessage,\n): TTransactionMessage {\n    const mergedConfig = { ...(transactionMessage.config ?? {}), heapSize };\n    const nextConfig = isV1ConfigEmpty(mergedConfig) ? undefined : Object.freeze(mergedConfig);\n    if (nextConfig === undefined) {\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        const { config, ...rest } = transactionMessage;\n        return Object.freeze(rest) as TTransactionMessage;\n    }\n\n    if (transactionMessage.config && areV1ConfigsEqual(transactionMessage.config, nextConfig)) {\n        return transactionMessage;\n    }\n\n    return Object.freeze({ ...transactionMessage, config: nextConfig }) as TTransactionMessage;\n}\n\nfunction setTransactionMessageHeapSizeUsingInstruction<TTransactionMessage extends TransactionMessage>(\n    heapSize: number | undefined,\n    transactionMessage: TTransactionMessage,\n): TTransactionMessage {\n    const existingIndex = transactionMessage.instructions.findIndex(isRequestHeapFrameInstruction);\n\n    // Remove the heap size instruction if there is one and the new size is undefined.\n    if (heapSize === undefined) {\n        return existingIndex === -1\n            ? transactionMessage\n            : removeTransactionMessageInstruction(existingIndex, transactionMessage);\n    }\n\n    // Ignore if the new heap size is the same as the existing one.\n    if (getTransactionMessageHeapSize(transactionMessage) === heapSize) {\n        return transactionMessage;\n    }\n\n    // Add or replace the heap size instruction with the new size.\n    const newInstruction = getRequestHeapFrameInstruction(heapSize);\n    return existingIndex === -1\n        ? (appendTransactionMessageInstruction(newInstruction, transactionMessage) as TTransactionMessage)\n        : replaceTransactionMessageInstruction(existingIndex, newInstruction, transactionMessage);\n}\n","import type { Instruction } from '@solana/instructions';\n\nimport {\n    getLoadedAccountsDataSizeLimitFromInstructionData,\n    getSetLoadedAccountsDataSizeLimitInstruction,\n    isSetLoadedAccountsDataSizeLimitInstruction,\n    removeTransactionMessageInstruction,\n    replaceTransactionMessageInstruction,\n} from './compute-budget-instruction';\nimport { appendTransactionMessageInstruction } from './instructions';\nimport { TransactionMessage } from './transaction-message';\nimport { areV1ConfigsEqual, isV1ConfigEmpty } from './v1-transaction-config';\n\n/**\n * Returns the loaded accounts data size limit currently set on a transaction message, or\n * `undefined` if none is set.\n *\n * This function works with all transaction versions:\n * - **V1**: Reads from the transaction message's `config.loadedAccountsDataSizeLimit`.\n * - **Legacy / V0**: Searches the instructions for a `SetLoadedAccountsDataSizeLimit` instruction\n *   and decodes its value.\n *\n * @param transactionMessage - The transaction message to inspect.\n * @return The loaded accounts data size limit in bytes, or `undefined` if none is set.\n *\n * @example\n * ```ts\n * const limit = getTransactionMessageLoadedAccountsDataSizeLimit(transactionMessage);\n * if (limit !== undefined) {\n *     console.log(`Loaded accounts data size limit: ${limit}`);\n * }\n * ```\n */\nexport function getTransactionMessageLoadedAccountsDataSizeLimit(\n    transactionMessage: TransactionMessage,\n): number | undefined {\n    switch (transactionMessage.version) {\n        case 1:\n            return transactionMessage.config?.loadedAccountsDataSizeLimit;\n        default:\n            return getTransactionMessageLoadedAccountsDataSizeLimitUsingInstruction(transactionMessage);\n    }\n}\n\nfunction getTransactionMessageLoadedAccountsDataSizeLimitUsingInstruction(\n    transactionMessage: TransactionMessage,\n): number | undefined {\n    const instructions = transactionMessage.instructions as Instruction[];\n    const existingInstruction = instructions.find(isSetLoadedAccountsDataSizeLimitInstruction);\n    return existingInstruction\n        ? getLoadedAccountsDataSizeLimitFromInstructionData(existingInstruction.data)\n        : undefined;\n}\n\n/**\n * Sets the loaded accounts data size limit for a transaction message.\n *\n * This function works with all transaction versions:\n * - **V1**: Sets the `loadedAccountsDataSizeLimit` field in the transaction message's config.\n * - **Legacy / V0**: Appends (or replaces) a `SetLoadedAccountsDataSizeLimit` instruction from\n *   the Compute Budget program.\n *\n * @param loadedAccountsDataSizeLimit - The maximum size in bytes for loaded account data, or\n *   `undefined` to remove the limit.\n * @param transactionMessage - The transaction message to configure.\n * @typeParam TTransactionMessage - The transaction message type.\n * @return A new transaction message with the loaded accounts data size limit set.\n *\n * @example\n * ```ts\n * const txMessage = setTransactionMessageLoadedAccountsDataSizeLimit(\n *     64_000,\n *     transactionMessage,\n * );\n * ```\n */\nexport function setTransactionMessageLoadedAccountsDataSizeLimit<TTransactionMessage extends TransactionMessage>(\n    loadedAccountsDataSizeLimit: number | undefined,\n    transactionMessage: TTransactionMessage,\n): TTransactionMessage {\n    switch (transactionMessage.version) {\n        case 1:\n            return setTransactionMessageLoadedAccountsDataSizeLimitUsingConfig(\n                loadedAccountsDataSizeLimit,\n                transactionMessage,\n            ) as TTransactionMessage;\n        default:\n            return setTransactionMessageLoadedAccountsDataSizeLimitUsingInstruction(\n                loadedAccountsDataSizeLimit,\n                transactionMessage,\n            );\n    }\n}\n\nfunction setTransactionMessageLoadedAccountsDataSizeLimitUsingConfig<\n    TTransactionMessage extends TransactionMessage & { version: 1 },\n>(loadedAccountsDataSizeLimit: number | undefined, transactionMessage: TTransactionMessage): TTransactionMessage {\n    const mergedConfig = { ...(transactionMessage.config ?? {}), loadedAccountsDataSizeLimit };\n    const nextConfig = isV1ConfigEmpty(mergedConfig) ? undefined : Object.freeze(mergedConfig);\n    if (nextConfig === undefined) {\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        const { config, ...rest } = transactionMessage;\n        return Object.freeze(rest) as TTransactionMessage;\n    }\n\n    if (transactionMessage.config && areV1ConfigsEqual(transactionMessage.config, nextConfig)) {\n        return transactionMessage;\n    }\n\n    return Object.freeze({ ...transactionMessage, config: nextConfig }) as TTransactionMessage;\n}\n\nfunction setTransactionMessageLoadedAccountsDataSizeLimitUsingInstruction<\n    TTransactionMessage extends TransactionMessage,\n>(loadedAccountsDataSizeLimit: number | undefined, transactionMessage: TTransactionMessage): TTransactionMessage {\n    const existingIndex = transactionMessage.instructions.findIndex(isSetLoadedAccountsDataSizeLimitInstruction);\n\n    // Remove the loaded accounts data size limit instruction if there is one and the new limit is undefined.\n    if (loadedAccountsDataSizeLimit === undefined) {\n        return existingIndex === -1\n            ? transactionMessage\n            : removeTransactionMessageInstruction(existingIndex, transactionMessage);\n    }\n\n    // Ignore if the new loaded accounts data size limit is the same as the existing one.\n    if (getTransactionMessageLoadedAccountsDataSizeLimit(transactionMessage) === loadedAccountsDataSizeLimit) {\n        return transactionMessage;\n    }\n\n    // Add or replace the loaded accounts data size limit instruction with the new limit.\n    const newInstruction = getSetLoadedAccountsDataSizeLimitInstruction(loadedAccountsDataSizeLimit);\n    return existingIndex === -1\n        ? (appendTransactionMessageInstruction(newInstruction, transactionMessage) as TTransactionMessage)\n        : replaceTransactionMessageInstruction(existingIndex, newInstruction, transactionMessage);\n}\n","import { TransactionMessage, TransactionVersion } from './transaction-message';\nimport { areV1ConfigsEqual, isV1ConfigEmpty } from './v1-transaction-config';\n\ntype SupportedTransactionVersions = Extract<TransactionVersion, 1>;\n\n/**\n * Returns the priority fee in lamports currently set on a v1 transaction message, or `undefined`\n * if none is set.\n *\n * This reads from the transaction message's `config.priorityFeeLamports`.\n *\n * @param transactionMessage - The v1 transaction message to inspect.\n * @return The priority fee in lamports, or `undefined` if none is set.\n *\n * @example\n * ```ts\n * const fee = getTransactionMessagePriorityFeeLamports(transactionMessage);\n * if (fee !== undefined) {\n *     console.log(`Priority fee: ${fee}`);\n * }\n * ```\n *\n * @see {@link setTransactionMessagePriorityFeeLamports}\n * @see {@link setTransactionMessageComputeUnitPrice} for legacy/v0 transactions.\n */\nexport function getTransactionMessagePriorityFeeLamports<\n    TTransactionMessage extends TransactionMessage & { version: SupportedTransactionVersions },\n>(transactionMessage: TTransactionMessage): bigint | undefined {\n    return transactionMessage.config?.priorityFeeLamports;\n}\n\n/**\n * Sets the total priority fee for a v1 transaction message.\n *\n * In v1 transactions, the priority fee is expressed as a total amount in lamports — what you set is\n * what you pay, regardless of the compute unit limit.\n *\n * @param priorityFeeLamports - The priority fee amount in lamports, or `undefined` to remove the\n *   fee.\n * @param transactionMessage - The v1 transaction message to configure.\n * @typeParam TTransactionMessage - The transaction message type.\n * @return A new transaction message with the priority fee set.\n *\n * @example\n * ```ts\n * const txMessage = setTransactionMessagePriorityFeeLamports(\n *     10_000n,\n *     transactionMessage,\n * );\n * ```\n *\n * @see {@link getTransactionMessagePriorityFeeLamports}\n * @see {@link setTransactionMessageComputeUnitPrice} for legacy/v0 transactions.\n */\nexport function setTransactionMessagePriorityFeeLamports<\n    TTransactionMessage extends TransactionMessage & { version: SupportedTransactionVersions },\n>(priorityFeeLamports: bigint | undefined, transactionMessage: TTransactionMessage): TTransactionMessage {\n    const mergedConfig = { ...(transactionMessage.config ?? {}), priorityFeeLamports };\n    const nextConfig = isV1ConfigEmpty(mergedConfig) ? undefined : Object.freeze(mergedConfig);\n    if (nextConfig === undefined) {\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        const { config, ...rest } = transactionMessage;\n        return Object.freeze(rest) as TTransactionMessage;\n    }\n\n    if (transactionMessage.config && areV1ConfigsEqual(transactionMessage.config, nextConfig)) {\n        return transactionMessage;\n    }\n\n    return Object.freeze({ ...transactionMessage, config: nextConfig }) as TTransactionMessage;\n}\n"]}