@solana/transaction-messages 2.0.0-rc.0 → 2.0.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,15 +6,15 @@
6
6
 
7
7
  [code-style-prettier-image]: https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square
8
8
  [code-style-prettier-url]: https://github.com/prettier/prettier
9
- [npm-downloads-image]: https://img.shields.io/npm/dm/@solana/transactions/experimental.svg?style=flat
10
- [npm-image]: https://img.shields.io/npm/v/@solana/transactions/experimental.svg?style=flat
11
- [npm-url]: https://www.npmjs.com/package/@solana/transactions/v/experimental
9
+ [npm-downloads-image]: https://img.shields.io/npm/dm/@solana/transactions/rc.svg?style=flat
10
+ [npm-image]: https://img.shields.io/npm/v/@solana/transactions/rc.svg?style=flat
11
+ [npm-url]: https://www.npmjs.com/package/@solana/transactions/v/rc
12
12
  [semantic-release-image]: https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
13
13
  [semantic-release-url]: https://github.com/semantic-release/semantic-release
14
14
 
15
15
  # @solana/transaction-messages
16
16
 
17
- This package contains types and functions for creating transaction messages. It can be used standalone, but it is also exported as part of the Solana JavaScript SDK [`@solana/web3.js@experimental`](https://github.com/solana-labs/solana-web3.js/tree/master/packages/library).
17
+ This package contains types and functions for creating transaction messages. It can be used standalone, but it is also exported as part of the Solana JavaScript SDK [`@solana/web3.js@rc`](https://github.com/solana-labs/solana-web3.js/tree/master/packages/library).
18
18
 
19
19
  Transaction messages are built one step at a time using the transform functions offered by this package. To make it more ergonomic to apply consecutive transforms to your transaction messages, consider using a pipelining helper like the one in `@solana/functional`.
20
20
 
@@ -587,7 +587,7 @@ function getCompiledStaticAccounts(orderedAccounts) {
587
587
 
588
588
  // src/compile/message.ts
589
589
  function compileTransactionMessage(transaction) {
590
- const addressMap = getAddressMapFromInstructions(transaction.feePayer, transaction.instructions);
590
+ const addressMap = getAddressMapFromInstructions(transaction.feePayer.address, transaction.instructions);
591
591
  const orderedAccounts = getOrderedAccountsFromAddressMap(addressMap);
592
592
  return {
593
593
  ...transaction.version !== "legacy" ? { addressTableLookups: getCompiledAddressTableLookups(orderedAccounts) } : null,
@@ -729,17 +729,20 @@ function setTransactionMessageLifetimeUsingDurableNonce({
729
729
  }
730
730
 
731
731
  // src/fee-payer.ts
732
- function setTransactionMessageFeePayer(feePayer, transaction) {
733
- if ("feePayer" in transaction && feePayer === transaction.feePayer) {
734
- return transaction;
732
+ function setTransactionMessageFeePayer(feePayer, transactionMessage) {
733
+ if ("feePayer" in transactionMessage && feePayer === transactionMessage.feePayer?.address && isAddressOnlyFeePayer(transactionMessage.feePayer)) {
734
+ return transactionMessage;
735
735
  }
736
736
  const out = {
737
- ...transaction,
738
- feePayer
737
+ ...transactionMessage,
738
+ feePayer: Object.freeze({ address: feePayer })
739
739
  };
740
740
  Object.freeze(out);
741
741
  return out;
742
742
  }
743
+ function isAddressOnlyFeePayer(feePayer) {
744
+ return !!feePayer && "address" in feePayer && typeof feePayer.address === "string" && Object.keys(feePayer).length === 1;
745
+ }
743
746
 
744
747
  // src/instructions.ts
745
748
  function appendTransactionMessageInstruction(instruction, transaction) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/blockhash.ts","../../codecs-strings/src/assertions.ts","../../codecs-strings/src/baseX.ts","../../codecs-strings/src/base58.ts","../src/codecs/address-table-lookup.ts","../src/codecs/header.ts","../src/codecs/instruction.ts","../src/codecs/transaction-version.ts","../src/codecs/message.ts","../src/compile/accounts.ts","../src/compile/address-table-lookups.ts","../src/compile/header.ts","../src/compile/instructions.ts","../src/compile/lifetime-token.ts","../src/compile/static-accounts.ts","../src/compile/message.ts","../src/compress-transaction-message.ts","../src/create-transaction-message.ts","../src/durable-nonce.ts","../src/fee-payer.ts","../src/instructions.ts","../src/decompile-message.ts"],"names":["assertIsBlockhash","SolanaError","SOLANA_ERROR__TRANSACTION__EXPECTED_BLOCKHASH_LIFETIME","alphabet","SOLANA_ERROR__CODECS__INVALID_STRING_FOR_BASE","createEncoder","createDecoder","getStructEncoder","getAddressEncoder","getArrayEncoder","getU8Encoder","getShortU16Encoder","getStructDecoder","getAddressDecoder","getArrayDecoder","getU8Decoder","getShortU16Decoder","transformEncoder","addEncoderSizePrefix","getBytesEncoder","transformDecoder","addDecoderSizePrefix","getBytesDecoder","SOLANA_ERROR__TRANSACTION__VERSION_NUMBER_OUT_OF_RANGE","combineCodec","fixEncoderSize","fixDecoderSize","AccountRole","instructions","isWritableRole","SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_CANNOT_PAY_FEES","SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_MUST_NOT_BE_WRITABLE","mergeRoles","getAddressComparator","isSignerRole","SOLANA_ERROR__TRANSACTION__EXPECTED_NONCE_LIFETIME","SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_ADDRESS_LOOKUP_TABLE_CONTENTS_MISSING","SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_ADDRESS_LOOKUP_TABLE_INDEX_OUT_OF_RANGE","SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_INSTRUCTION_PROGRAM_ADDRESS_NOT_FOUND","assertIsAddress","SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_FEE_PAYER_MISSING","pipe"],"mappings":"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","file":"index.browser.cjs","sourcesContent":["import { SOLANA_ERROR__TRANSACTION__EXPECTED_BLOCKHASH_LIFETIME, SolanaError } from '@solana/errors';\nimport { assertIsBlockhash, type Blockhash } from '@solana/rpc-types';\n\nimport { TransactionMessageWithDurableNonceLifetime } from './durable-nonce';\nimport { BaseTransactionMessage } from './transaction-message';\n\ntype BlockhashLifetimeConstraint = Readonly<{\n blockhash: Blockhash;\n lastValidBlockHeight: bigint;\n}>;\n\nexport interface TransactionMessageWithBlockhashLifetime {\n readonly lifetimeConstraint: BlockhashLifetimeConstraint;\n}\n\nexport function isTransactionMessageWithBlockhashLifetime(\n transaction: BaseTransactionMessage | (BaseTransactionMessage & TransactionMessageWithBlockhashLifetime),\n): transaction is BaseTransactionMessage & TransactionMessageWithBlockhashLifetime {\n const lifetimeConstraintShapeMatches =\n 'lifetimeConstraint' in transaction &&\n typeof transaction.lifetimeConstraint.blockhash === 'string' &&\n typeof transaction.lifetimeConstraint.lastValidBlockHeight === 'bigint';\n if (!lifetimeConstraintShapeMatches) return false;\n try {\n assertIsBlockhash(transaction.lifetimeConstraint.blockhash);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function assertIsTransactionMessageWithBlockhashLifetime(\n transaction: BaseTransactionMessage | (BaseTransactionMessage & TransactionMessageWithBlockhashLifetime),\n): asserts transaction is BaseTransactionMessage & TransactionMessageWithBlockhashLifetime {\n if (!isTransactionMessageWithBlockhashLifetime(transaction)) {\n throw new SolanaError(SOLANA_ERROR__TRANSACTION__EXPECTED_BLOCKHASH_LIFETIME);\n }\n}\n\nexport function setTransactionMessageLifetimeUsingBlockhash<\n TTransaction extends BaseTransactionMessage & TransactionMessageWithDurableNonceLifetime,\n>(\n blockhashLifetimeConstraint: BlockhashLifetimeConstraint,\n transaction: TTransaction,\n): Omit<TTransaction, 'lifetimeConstraint'> & TransactionMessageWithBlockhashLifetime;\n\nexport function setTransactionMessageLifetimeUsingBlockhash<\n TTransaction extends BaseTransactionMessage | (BaseTransactionMessage & TransactionMessageWithBlockhashLifetime),\n>(\n blockhashLifetimeConstraint: BlockhashLifetimeConstraint,\n transaction: TTransaction,\n): TransactionMessageWithBlockhashLifetime & TTransaction;\n\nexport function setTransactionMessageLifetimeUsingBlockhash(\n blockhashLifetimeConstraint: BlockhashLifetimeConstraint,\n transaction: BaseTransactionMessage | (BaseTransactionMessage & TransactionMessageWithBlockhashLifetime),\n) {\n if (\n 'lifetimeConstraint' in transaction &&\n transaction.lifetimeConstraint.blockhash === blockhashLifetimeConstraint.blockhash &&\n transaction.lifetimeConstraint.lastValidBlockHeight === blockhashLifetimeConstraint.lastValidBlockHeight\n ) {\n return transaction;\n }\n const out = {\n ...transaction,\n lifetimeConstraint: Object.freeze(blockhashLifetimeConstraint),\n };\n Object.freeze(out);\n return out;\n}\n","import { SOLANA_ERROR__CODECS__INVALID_STRING_FOR_BASE, SolanaError } from '@solana/errors';\n\n/**\n * Asserts that a given string matches a given alphabet.\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 * Encodes a string using a custom alphabet by dividing\n * by the base and handling leading zeroes.\n * @see {@link getBaseXCodec} for a more detailed description.\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 * Decodes a string using a custom alphabet by dividing\n * by the base and handling leading zeroes.\n * @see {@link getBaseXCodec} for a more detailed description.\n */\nexport const getBaseXDecoder = (alphabet: string): VariableSizeDecoder<string> => {\n return createDecoder({\n read(rawBytes, offset): [string, number] {\n const bytes = offset === 0 ? 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 * A string codec that requires a custom alphabet and uses\n * the length of that alphabet as the base. It then divides\n * the input by the base as many times as necessary to get\n * the output. It also supports leading zeroes by using the\n * first character of the alphabet as the zero character.\n *\n * This can be used to create codecs such as base10 or base58.\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/** Encodes strings in base58. */\nexport const getBase58Encoder = () => getBaseXEncoder(alphabet);\n\n/** Decodes strings in base58. */\nexport const getBase58Decoder = () => getBaseXDecoder(alphabet);\n\n/** Encodes and decodes strings in base58. */\nexport const getBase58Codec = () => getBaseXCodec(alphabet);\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/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 memoizedAddressTableLookupEncoder = getStructEncoder([\n ['lookupTableAddress', getAddressEncoder()],\n [\n 'writableIndices',\n getArrayEncoder(getU8Encoder(), { size: getShortU16Encoder() }) as Encoder<readonly number[]>,\n ],\n [\n 'readableIndices',\n getArrayEncoder(getU8Encoder(), { size: getShortU16Encoder() }) as Encoder<readonly number[]>,\n ],\n ]);\n }\n\n return memoizedAddressTableLookupEncoder;\n}\n\nlet memoizedAddressTableLookupDecoder: VariableSizeDecoder<AddressTableLookup> | undefined;\nexport function getAddressTableLookupDecoder(): VariableSizeDecoder<AddressTableLookup> {\n if (!memoizedAddressTableLookupDecoder) {\n memoizedAddressTableLookupDecoder = getStructDecoder([\n ['lookupTableAddress', getAddressDecoder()],\n ['writableIndices', getArrayDecoder(getU8Decoder(), { size: getShortU16Decoder() })],\n ['readableIndices', getArrayDecoder(getU8Decoder(), { size: getShortU16Decoder() })],\n ]);\n }\n\n return memoizedAddressTableLookupDecoder;\n}\n\nexport function getAddressTableLookupCodec(): VariableSizeCodec<AddressTableLookup> {\n return combineCodec(getAddressTableLookupEncoder(), getAddressTableLookupDecoder());\n}\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/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/instructions';\n\ntype Instruction = ReturnType<typeof getCompiledInstructions>[number];\n\nlet memoizedGetInstructionEncoder: VariableSizeEncoder<Instruction> | undefined;\nexport function getInstructionEncoder(): VariableSizeEncoder<Instruction> {\n if (!memoizedGetInstructionEncoder) {\n memoizedGetInstructionEncoder = transformEncoder<Required<Instruction>, Instruction>(\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: Instruction): Required<Instruction> => {\n if (instruction.accountIndices !== undefined && instruction.data !== undefined) {\n return instruction as Required<Instruction>;\n }\n return {\n ...instruction,\n accountIndices: instruction.accountIndices ?? [],\n data: instruction.data ?? new Uint8Array(0),\n } as Required<Instruction>;\n },\n );\n }\n\n return memoizedGetInstructionEncoder;\n}\n\nlet memoizedGetInstructionDecoder: VariableSizeDecoder<Instruction> | undefined;\nexport function getInstructionDecoder(): VariableSizeDecoder<Instruction> {\n if (!memoizedGetInstructionDecoder) {\n memoizedGetInstructionDecoder = transformDecoder<Required<Instruction>, Instruction>(\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<Instruction>): Instruction => {\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<Instruction> {\n return combineCodec(getInstructionEncoder(), getInstructionDecoder());\n}\n","import {\n combineCodec,\n createDecoder,\n createEncoder,\n VariableSizeCodec,\n VariableSizeDecoder,\n VariableSizeEncoder,\n} from '@solana/codecs-core';\nimport { SOLANA_ERROR__TRANSACTION__VERSION_NUMBER_OUT_OF_RANGE, SolanaError } from '@solana/errors';\n\nimport { TransactionVersion } from '../transaction-message';\n\nconst VERSION_FLAG_MASK = 0x80;\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 bytes.set([value | VERSION_FLAG_MASK], offset);\n return offset + 1;\n },\n });\n}\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) as TransactionVersion;\n return [version, offset + 1];\n }\n },\n });\n}\n\nexport function getTransactionVersionCodec(): VariableSizeCodec<TransactionVersion> {\n return combineCodec(getTransactionVersionEncoder(), getTransactionVersionDecoder());\n}\n","import { getAddressDecoder, getAddressEncoder } from '@solana/addresses';\nimport {\n combineCodec,\n createEncoder,\n Decoder,\n fixDecoderSize,\n fixEncoderSize,\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';\nimport { getBase58Decoder, getBase58Encoder } from '@solana/codecs-strings';\n\nimport { getCompiledAddressTableLookups } from '../compile/address-table-lookups';\nimport { CompiledTransactionMessage } from '../compile/message';\nimport { getAddressTableLookupDecoder, getAddressTableLookupEncoder } from './address-table-lookup';\nimport { getMessageHeaderDecoder, getMessageHeaderEncoder } from './header';\nimport { getInstructionDecoder, getInstructionEncoder } from './instruction';\nimport { getTransactionVersionDecoder, getTransactionVersionEncoder } from './transaction-version';\n\nfunction getCompiledMessageLegacyEncoder(): VariableSizeEncoder<CompiledTransactionMessage> {\n return getStructEncoder(getPreludeStructEncoderTuple()) as VariableSizeEncoder<CompiledTransactionMessage>;\n}\n\nfunction getCompiledMessageVersionedEncoder(): VariableSizeEncoder<CompiledTransactionMessage> {\n return transformEncoder(\n getStructEncoder([\n ...getPreludeStructEncoderTuple(),\n ['addressTableLookups', getAddressTableLookupArrayEncoder()],\n ]) as VariableSizeEncoder<CompiledTransactionMessage>,\n (value: CompiledTransactionMessage) => {\n if (value.version === 'legacy') {\n return value;\n }\n return {\n ...value,\n addressTableLookups: value.addressTableLookups ?? [],\n } as Exclude<CompiledTransactionMessage, { readonly version: 'legacy' }>;\n },\n ) as VariableSizeEncoder<CompiledTransactionMessage>;\n}\n\nfunction getPreludeStructEncoderTuple() {\n return [\n ['version', getTransactionVersionEncoder()],\n ['header', getMessageHeaderEncoder()],\n ['staticAccounts', getArrayEncoder(getAddressEncoder(), { size: getShortU16Encoder() })],\n ['lifetimeToken', fixEncoderSize(getBase58Encoder(), 32)],\n ['instructions', getArrayEncoder(getInstructionEncoder(), { size: getShortU16Encoder() })],\n ] as const;\n}\n\nfunction getPreludeStructDecoderTuple() {\n return [\n ['version', getTransactionVersionDecoder() as Decoder<number>],\n ['header', getMessageHeaderDecoder()],\n ['staticAccounts', getArrayDecoder(getAddressDecoder(), { size: getShortU16Decoder() })],\n ['lifetimeToken', fixDecoderSize(getBase58Decoder(), 32)],\n ['instructions', getArrayDecoder(getInstructionDecoder(), { size: getShortU16Decoder() })],\n ['addressTableLookups', getAddressTableLookupArrayDecoder()],\n ] as const;\n}\n\nfunction getAddressTableLookupArrayEncoder() {\n return getArrayEncoder(getAddressTableLookupEncoder(), { size: getShortU16Encoder() });\n}\n\nfunction getAddressTableLookupArrayDecoder() {\n return getArrayDecoder(getAddressTableLookupDecoder(), { size: getShortU16Decoder() });\n}\n\nexport function getCompiledTransactionMessageEncoder(): VariableSizeEncoder<CompiledTransactionMessage> {\n return createEncoder({\n getSizeFromValue: (compiledMessage: CompiledTransactionMessage) => {\n if (compiledMessage.version === 'legacy') {\n return getCompiledMessageLegacyEncoder().getSizeFromValue(compiledMessage);\n } else {\n return getCompiledMessageVersionedEncoder().getSizeFromValue(compiledMessage);\n }\n },\n write: (compiledMessage, bytes, offset) => {\n if (compiledMessage.version === 'legacy') {\n return getCompiledMessageLegacyEncoder().write(compiledMessage, bytes, offset);\n } else {\n return getCompiledMessageVersionedEncoder().write(compiledMessage, bytes, offset);\n }\n },\n });\n}\n\nexport function getCompiledTransactionMessageDecoder(): VariableSizeDecoder<CompiledTransactionMessage> {\n return transformDecoder(\n getStructDecoder(getPreludeStructDecoderTuple()) as VariableSizeDecoder<\n CompiledTransactionMessage & { addressTableLookups?: ReturnType<typeof getCompiledAddressTableLookups> }\n >,\n ({ addressTableLookups, ...restOfMessage }) => {\n if (restOfMessage.version === 'legacy' || !addressTableLookups?.length) {\n return restOfMessage;\n }\n return { ...restOfMessage, addressTableLookups } as Exclude<\n CompiledTransactionMessage,\n { readonly version: 'legacy' }\n >;\n },\n );\n}\n\nexport function getCompiledTransactionMessageCodec(): VariableSizeCodec<CompiledTransactionMessage> {\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 AccountRole,\n IAccountLookupMeta,\n IAccountMeta,\n IInstruction,\n isSignerRole,\n isWritableRole,\n mergeRoles,\n ReadonlyAccount,\n ReadonlyAccountLookup,\n ReadonlySignerAccount,\n WritableAccount,\n WritableAccountLookup,\n WritableSignerAccount,\n} from '@solana/instructions';\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 = (IAccountLookupMeta | IAccountMeta)[] & { readonly __brand: unique symbol };\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 IInstruction[]): 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 as FeePayerAccountEntry;\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 as LookupTableAccountEntry;\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 as StaticAccountEntry;\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 as StaticAccountEntry;\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: (IAccountLookupMeta | IAccountMeta)[] = 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 '../compile/accounts';\n\ntype AddressTableLookup = Readonly<{\n lookupTableAddress: Address;\n readableIndices: readonly number[];\n writableIndices: readonly number[];\n}>;\n\nexport function getCompiledAddressTableLookups(orderedAccounts: OrderedAccounts): AddressTableLookup[] {\n const index: Record<Address, { readonly readableIndices: number[]; readonly writableIndices: number[] }> = {};\n for (const account of orderedAccounts) {\n if (!('lookupTableAddress' in account)) {\n continue;\n }\n const entry = (index[account.lookupTableAddress] ||= {\n readableIndices: [],\n writableIndices: [],\n });\n if (account.role === AccountRole.WRITABLE) {\n entry.writableIndices.push(account.addressIndex);\n } else {\n entry.readableIndices.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 { isSignerRole, isWritableRole } from '@solana/instructions';\n\nimport { OrderedAccounts } from '../compile/accounts';\n\ntype MessageHeader = Readonly<{\n numReadonlyNonSignerAccounts: number;\n numReadonlySignerAccounts: number;\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 { IInstruction } from '@solana/instructions';\n\nimport { OrderedAccounts } from './accounts';\n\ntype CompiledInstruction = Readonly<{\n accountIndices?: number[];\n data?: Uint8Array;\n programAddressIndex: number;\n}>;\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 IInstruction[],\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';\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 { CompilableTransactionMessage } from '../compilable-transaction-message';\nimport { getAddressMapFromInstructions, getOrderedAccountsFromAddressMap } from './accounts';\nimport { getCompiledAddressTableLookups } from './address-table-lookups';\nimport { getCompiledMessageHeader } from './header';\nimport { getCompiledInstructions } from './instructions';\nimport { getCompiledLifetimeToken } from './lifetime-token';\nimport { getCompiledStaticAccounts } from './static-accounts';\n\ntype BaseCompiledTransactionMessage = Readonly<{\n header: ReturnType<typeof getCompiledMessageHeader>;\n instructions: ReturnType<typeof getCompiledInstructions>;\n lifetimeToken: ReturnType<typeof getCompiledLifetimeToken>;\n staticAccounts: ReturnType<typeof getCompiledStaticAccounts>;\n}>;\n\nexport type CompiledTransactionMessage = LegacyCompiledTransactionMessage | VersionedCompiledTransactionMessage;\n\ntype LegacyCompiledTransactionMessage = BaseCompiledTransactionMessage &\n Readonly<{\n version: 'legacy';\n }>;\n\ntype VersionedCompiledTransactionMessage = BaseCompiledTransactionMessage &\n Readonly<{\n addressTableLookups?: ReturnType<typeof getCompiledAddressTableLookups>;\n version: number;\n }>;\n\nexport function compileTransactionMessage(\n transaction: CompilableTransactionMessage & Readonly<{ version: 'legacy' }>,\n): LegacyCompiledTransactionMessage;\nexport function compileTransactionMessage(\n transaction: CompilableTransactionMessage,\n): VersionedCompiledTransactionMessage;\nexport function compileTransactionMessage(transaction: CompilableTransactionMessage): CompiledTransactionMessage {\n const addressMap = getAddressMapFromInstructions(transaction.feePayer, transaction.instructions);\n const orderedAccounts = getOrderedAccountsFromAddressMap(addressMap);\n return {\n ...(transaction.version !== 'legacy'\n ? { addressTableLookups: getCompiledAddressTableLookups(orderedAccounts) }\n : null),\n header: getCompiledMessageHeader(orderedAccounts),\n instructions: getCompiledInstructions(transaction.instructions, orderedAccounts),\n lifetimeToken: getCompiledLifetimeToken(transaction.lifetimeConstraint),\n staticAccounts: getCompiledStaticAccounts(orderedAccounts),\n version: transaction.version,\n };\n}\n","import { Address } from '@solana/addresses';\nimport { AccountRole, IAccountLookupMeta, IAccountMeta, IInstruction, isSignerRole } from '@solana/instructions';\n\nimport { AddressesByLookupTableAddress } from './addresses-by-lookup-table-address';\nimport { BaseTransactionMessage, 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): IAccountLookupMeta | 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 IAccountLookupMeta | IAccountMeta\ntype WidenInstructionAccounts<TInstruction extends IInstruction> =\n TInstruction extends IInstruction<infer TProgramAddress, infer TAccounts>\n ? IInstruction<\n TProgramAddress,\n {\n [K in keyof TAccounts]: TAccounts[K] extends IAccountMeta<infer TAddress>\n ? IAccountLookupMeta<TAddress> | IAccountMeta<TAddress>\n : TAccounts[K];\n }\n >\n : TInstruction;\n\ntype ExtractAdditionalProps<T, U> = Omit<T, keyof U>;\n\ntype WidenTransactionMessageInstructions<TTransactionMessage extends TransactionMessage> =\n TTransactionMessage extends BaseTransactionMessage<infer TVersion, infer TInstruction>\n ? BaseTransactionMessage<TVersion, WidenInstructionAccounts<TInstruction>> &\n ExtractAdditionalProps<\n TTransactionMessage,\n BaseTransactionMessage<TVersion, WidenInstructionAccounts<TInstruction>>\n >\n : TTransactionMessage;\n\nexport function compressTransactionMessageUsingAddressLookupTables<\n TTransactionMessage extends TransactionMessageNotLegacy = TransactionMessageNotLegacy,\n>(\n transactionMessage: TTransactionMessage,\n addressesByLookupTableAddress: AddressesByLookupTableAddress,\n): TTransactionMessage | WidenTransactionMessageInstructions<TTransactionMessage> {\n const lookupTableAddresses = new Set(Object.values(addressesByLookupTableAddress).flatMap(a => a));\n\n const newInstructions: IInstruction[] = [];\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<IInstruction['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 !lookupTableAddresses.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 { TransactionMessage, TransactionVersion } from './transaction-message';\n\ntype TransactionConfig<TVersion extends TransactionVersion> = Readonly<{\n version: TVersion;\n}>;\n\nexport function createTransactionMessage<TVersion extends TransactionVersion>(\n config: TransactionConfig<TVersion>,\n): Extract<TransactionMessage, { version: TVersion }>;\nexport function createTransactionMessage<TVersion extends TransactionVersion>({\n version,\n}: TransactionConfig<TVersion>): TransactionMessage {\n return Object.freeze({\n instructions: Object.freeze([]),\n version,\n }) as TransactionMessage;\n}\n","import { Address } from '@solana/addresses';\nimport { SOLANA_ERROR__TRANSACTION__EXPECTED_NONCE_LIFETIME, SolanaError } from '@solana/errors';\nimport {\n AccountRole,\n IInstruction,\n IInstructionWithAccounts,\n IInstructionWithData,\n isSignerRole,\n ReadonlyAccount,\n ReadonlySignerAccount,\n WritableAccount,\n WritableSignerAccount,\n} from '@solana/instructions';\n\nimport { BaseTransactionMessage } from './transaction-message';\n\ntype AdvanceNonceAccountInstruction<\n TNonceAccountAddress extends string = string,\n TNonceAuthorityAddress extends string = string,\n> = IInstruction<'11111111111111111111111111111111'> &\n IInstructionWithAccounts<\n readonly [\n WritableAccount<TNonceAccountAddress>,\n ReadonlyAccount<'SysvarRecentB1ockHashes11111111111111111111'>,\n ReadonlySignerAccount<TNonceAuthorityAddress> | WritableSignerAccount<TNonceAuthorityAddress>,\n ]\n > &\n IInstructionWithData<AdvanceNonceAccountInstructionData>;\ntype AdvanceNonceAccountInstructionData = Uint8Array & {\n readonly __brand: unique symbol;\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}>;\nexport type Nonce<TNonceValue extends string = string> = TNonceValue & { readonly __brand: unique symbol };\ntype NonceLifetimeConstraint<TNonceValue extends string = string> = Readonly<{\n nonce: Nonce<TNonceValue>;\n}>;\n\nconst RECENT_BLOCKHASHES_SYSVAR_ADDRESS =\n 'SysvarRecentB1ockHashes11111111111111111111' as Address<'SysvarRecentB1ockHashes11111111111111111111'>;\nconst SYSTEM_PROGRAM_ADDRESS = '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\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 ...IInstruction[],\n ];\n readonly lifetimeConstraint: NonceLifetimeConstraint<TNonceValue>;\n}\n\nexport function assertIsDurableNonceTransactionMessage(\n transaction: BaseTransactionMessage | (BaseTransactionMessage & TransactionMessageWithDurableNonceLifetime),\n): asserts transaction is BaseTransactionMessage & TransactionMessageWithDurableNonceLifetime {\n if (!isDurableNonceTransaction(transaction)) {\n throw new SolanaError(SOLANA_ERROR__TRANSACTION__EXPECTED_NONCE_LIFETIME);\n }\n}\n\nfunction 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\nexport function isAdvanceNonceAccountInstruction(\n instruction: IInstruction,\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: Uint8Array): 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\nexport function isDurableNonceTransaction(\n transaction: BaseTransactionMessage | (BaseTransactionMessage & TransactionMessageWithDurableNonceLifetime),\n): transaction is BaseTransactionMessage & TransactionMessageWithDurableNonceLifetime {\n return (\n 'lifetimeConstraint' in transaction &&\n typeof transaction.lifetimeConstraint.nonce === 'string' &&\n transaction.instructions[0] != null &&\n isAdvanceNonceAccountInstruction(transaction.instructions[0])\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\nexport function setTransactionMessageLifetimeUsingDurableNonce<\n TTransaction extends BaseTransactionMessage,\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 transaction: TTransaction | (TransactionMessageWithDurableNonceLifetime & TTransaction),\n): TransactionMessageWithDurableNonceLifetime<TNonceAccountAddress, TNonceAuthorityAddress, TNonceValue> &\n TTransaction {\n let newInstructions: [\n AdvanceNonceAccountInstruction<TNonceAccountAddress, TNonceAuthorityAddress>,\n ...IInstruction[],\n ];\n\n const firstInstruction = transaction.instructions[0];\n if (firstInstruction && isAdvanceNonceAccountInstruction(firstInstruction)) {\n if (isAdvanceNonceAccountInstructionForNonce(firstInstruction, nonceAccountAddress, nonceAuthorityAddress)) {\n if (isDurableNonceTransaction(transaction) && transaction.lifetimeConstraint.nonce === nonce) {\n return transaction as TransactionMessageWithDurableNonceLifetime<\n TNonceAccountAddress,\n TNonceAuthorityAddress,\n TNonceValue\n > &\n TTransaction;\n } else {\n // we already have the right first instruction, leave it as-is\n newInstructions = [firstInstruction, ...transaction.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 ...transaction.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 ...transaction.instructions,\n ];\n }\n\n return Object.freeze({\n ...transaction,\n instructions: Object.freeze(newInstructions),\n lifetimeConstraint: Object.freeze({\n nonce,\n }),\n }) as TransactionMessageWithDurableNonceLifetime<TNonceAccountAddress, TNonceAuthorityAddress, TNonceValue> &\n TTransaction;\n}\n","import { Address } from '@solana/addresses';\n\nimport { BaseTransactionMessage } from './transaction-message';\n\nexport interface ITransactionMessageWithFeePayer<TAddress extends string = string> {\n readonly feePayer: Address<TAddress>;\n}\n\nexport function setTransactionMessageFeePayer<\n TFeePayerAddress extends string,\n TTransaction extends BaseTransactionMessage,\n>(\n feePayer: Address<TFeePayerAddress>,\n transaction: TTransaction,\n): ITransactionMessageWithFeePayer<TFeePayerAddress> & Omit<TTransaction, 'feePayer'> {\n if ('feePayer' in transaction && feePayer === transaction.feePayer) {\n return transaction as ITransactionMessageWithFeePayer<TFeePayerAddress> & Omit<TTransaction, 'feePayer'>;\n }\n const out = {\n ...transaction,\n feePayer,\n };\n Object.freeze(out);\n return out;\n}\n","import { BaseTransactionMessage } from './transaction-message';\n\nexport function appendTransactionMessageInstruction<TTransaction extends BaseTransactionMessage>(\n instruction: TTransaction['instructions'][number],\n transaction: TTransaction,\n): TTransaction {\n return appendTransactionMessageInstructions([instruction], transaction);\n}\n\nexport function appendTransactionMessageInstructions<TTransaction extends BaseTransactionMessage>(\n instructions: ReadonlyArray<TTransaction['instructions'][number]>,\n transaction: TTransaction,\n): TTransaction {\n return Object.freeze({\n ...transaction,\n instructions: Object.freeze([...transaction.instructions, ...instructions]),\n });\n}\n\nexport function prependTransactionMessageInstruction<TTransaction extends BaseTransactionMessage>(\n instruction: TTransaction['instructions'][number],\n transaction: TTransaction,\n): TTransaction {\n return prependTransactionMessageInstructions([instruction], transaction);\n}\n\nexport function prependTransactionMessageInstructions<TTransaction extends BaseTransactionMessage>(\n instructions: ReadonlyArray<TTransaction['instructions'][number]>,\n transaction: TTransaction,\n): TTransaction {\n return Object.freeze({\n ...transaction,\n instructions: Object.freeze([...instructions, ...transaction.instructions]),\n });\n}\n","import { Address, assertIsAddress } from '@solana/addresses';\nimport {\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 SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_FEE_PAYER_MISSING,\n SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_INSTRUCTION_PROGRAM_ADDRESS_NOT_FOUND,\n SolanaError,\n} from '@solana/errors';\nimport { pipe } from '@solana/functional';\nimport { AccountRole, IAccountLookupMeta, IAccountMeta, IInstruction } from '@solana/instructions';\nimport type { Blockhash } from '@solana/rpc-types';\n\nimport { AddressesByLookupTableAddress } from './addresses-by-lookup-table-address';\nimport { setTransactionMessageLifetimeUsingBlockhash } from './blockhash';\nimport { CompilableTransactionMessage } from './compilable-transaction-message';\nimport { CompiledTransactionMessage } from './compile';\nimport type { getCompiledAddressTableLookups } from './compile/address-table-lookups';\nimport { createTransactionMessage } from './create-transaction-message';\nimport {\n isAdvanceNonceAccountInstruction,\n Nonce,\n setTransactionMessageLifetimeUsingDurableNonce,\n} from './durable-nonce';\nimport { setTransactionMessageFeePayer } from './fee-payer';\nimport { appendTransactionMessageInstruction } from './instructions';\nimport { TransactionVersion } from './transaction-message';\n\nfunction getAccountMetas(message: CompiledTransactionMessage): IAccountMeta[] {\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: IAccountMeta[] = [];\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\nfunction getAddressLookupMetas(\n compiledAddressTableLookups: ReturnType<typeof getCompiledAddressTableLookups>,\n addressesByLookupTableAddress: AddressesByLookupTableAddress,\n): IAccountLookupMeta[] {\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: IAccountLookupMeta[] = [];\n const writableMetas: IAccountLookupMeta[] = [];\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\n const highestIndex = Math.max(...lookup.readableIndices, ...lookup.writableIndices);\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: IAccountLookupMeta[] = lookup.readableIndices.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: IAccountLookupMeta[] = lookup.writableIndices.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\nfunction convertInstruction(\n instruction: CompiledTransactionMessage['instructions'][0],\n accountMetas: IAccountMeta[],\n): IInstruction {\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\ntype LifetimeConstraint =\n | {\n blockhash: Blockhash;\n lastValidBlockHeight: bigint;\n }\n | {\n nonce: Nonce;\n nonceAccountAddress: Address;\n nonceAuthorityAddress: Address;\n };\n\nfunction getLifetimeConstraint(\n messageLifetimeToken: string,\n firstInstruction?: IInstruction,\n lastValidBlockHeight?: bigint,\n): LifetimeConstraint {\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\nexport type DecompileTransactionMessageConfig = {\n addressesByLookupTableAddress?: AddressesByLookupTableAddress;\n lastValidBlockHeight?: bigint;\n};\n\nexport function decompileTransactionMessage(\n compiledTransactionMessage: CompiledTransactionMessage,\n config?: DecompileTransactionMessageConfig,\n): CompilableTransactionMessage {\n const feePayer = compiledTransactionMessage.staticAccounts[0];\n if (!feePayer) {\n throw new SolanaError(SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_FEE_PAYER_MISSING);\n }\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\n const instructions: IInstruction[] = compiledTransactionMessage.instructions.map(compiledInstruction =>\n convertInstruction(compiledInstruction, transactionMetas),\n );\n\n const firstInstruction = instructions[0];\n const lifetimeConstraint = getLifetimeConstraint(\n compiledTransactionMessage.lifetimeToken,\n firstInstruction,\n config?.lastValidBlockHeight,\n );\n\n return pipe(\n createTransactionMessage({ version: compiledTransactionMessage.version as TransactionVersion }),\n tx => setTransactionMessageFeePayer(feePayer, tx),\n tx =>\n instructions.reduce((acc, instruction) => {\n return appendTransactionMessageInstruction(instruction, acc);\n }, tx),\n tx =>\n 'blockhash' in lifetimeConstraint\n ? setTransactionMessageLifetimeUsingBlockhash(lifetimeConstraint, tx)\n : setTransactionMessageLifetimeUsingDurableNonce(lifetimeConstraint, tx),\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/blockhash.ts","../../codecs-strings/src/assertions.ts","../../codecs-strings/src/baseX.ts","../../codecs-strings/src/base58.ts","../src/codecs/address-table-lookup.ts","../src/codecs/header.ts","../src/codecs/instruction.ts","../src/codecs/transaction-version.ts","../src/codecs/message.ts","../src/compile/accounts.ts","../src/compile/address-table-lookups.ts","../src/compile/header.ts","../src/compile/instructions.ts","../src/compile/lifetime-token.ts","../src/compile/static-accounts.ts","../src/compile/message.ts","../src/compress-transaction-message.ts","../src/create-transaction-message.ts","../src/durable-nonce.ts","../src/fee-payer.ts","../src/instructions.ts","../src/decompile-message.ts"],"names":["assertIsBlockhash","SolanaError","SOLANA_ERROR__TRANSACTION__EXPECTED_BLOCKHASH_LIFETIME","alphabet","SOLANA_ERROR__CODECS__INVALID_STRING_FOR_BASE","createEncoder","createDecoder","getStructEncoder","getAddressEncoder","getArrayEncoder","getU8Encoder","getShortU16Encoder","getStructDecoder","getAddressDecoder","getArrayDecoder","getU8Decoder","getShortU16Decoder","transformEncoder","addEncoderSizePrefix","getBytesEncoder","transformDecoder","addDecoderSizePrefix","getBytesDecoder","SOLANA_ERROR__TRANSACTION__VERSION_NUMBER_OUT_OF_RANGE","combineCodec","fixEncoderSize","fixDecoderSize","AccountRole","instructions","isWritableRole","SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_CANNOT_PAY_FEES","SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_MUST_NOT_BE_WRITABLE","mergeRoles","getAddressComparator","isSignerRole","SOLANA_ERROR__TRANSACTION__EXPECTED_NONCE_LIFETIME","SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_ADDRESS_LOOKUP_TABLE_CONTENTS_MISSING","SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_ADDRESS_LOOKUP_TABLE_INDEX_OUT_OF_RANGE","SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_INSTRUCTION_PROGRAM_ADDRESS_NOT_FOUND","assertIsAddress","SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_FEE_PAYER_MISSING","pipe"],"mappings":"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","file":"index.browser.cjs","sourcesContent":["import { SOLANA_ERROR__TRANSACTION__EXPECTED_BLOCKHASH_LIFETIME, SolanaError } from '@solana/errors';\nimport { assertIsBlockhash, type Blockhash } from '@solana/rpc-types';\n\nimport { TransactionMessageWithDurableNonceLifetime } from './durable-nonce';\nimport { BaseTransactionMessage } from './transaction-message';\n\ntype BlockhashLifetimeConstraint = Readonly<{\n blockhash: Blockhash;\n lastValidBlockHeight: bigint;\n}>;\n\nexport interface TransactionMessageWithBlockhashLifetime {\n readonly lifetimeConstraint: BlockhashLifetimeConstraint;\n}\n\nexport function isTransactionMessageWithBlockhashLifetime(\n transaction: BaseTransactionMessage | (BaseTransactionMessage & TransactionMessageWithBlockhashLifetime),\n): transaction is BaseTransactionMessage & TransactionMessageWithBlockhashLifetime {\n const lifetimeConstraintShapeMatches =\n 'lifetimeConstraint' in transaction &&\n typeof transaction.lifetimeConstraint.blockhash === 'string' &&\n typeof transaction.lifetimeConstraint.lastValidBlockHeight === 'bigint';\n if (!lifetimeConstraintShapeMatches) return false;\n try {\n assertIsBlockhash(transaction.lifetimeConstraint.blockhash);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function assertIsTransactionMessageWithBlockhashLifetime(\n transaction: BaseTransactionMessage | (BaseTransactionMessage & TransactionMessageWithBlockhashLifetime),\n): asserts transaction is BaseTransactionMessage & TransactionMessageWithBlockhashLifetime {\n if (!isTransactionMessageWithBlockhashLifetime(transaction)) {\n throw new SolanaError(SOLANA_ERROR__TRANSACTION__EXPECTED_BLOCKHASH_LIFETIME);\n }\n}\n\nexport function setTransactionMessageLifetimeUsingBlockhash<\n TTransaction extends BaseTransactionMessage & TransactionMessageWithDurableNonceLifetime,\n>(\n blockhashLifetimeConstraint: BlockhashLifetimeConstraint,\n transaction: TTransaction,\n): Omit<TTransaction, 'lifetimeConstraint'> & TransactionMessageWithBlockhashLifetime;\n\nexport function setTransactionMessageLifetimeUsingBlockhash<\n TTransaction extends BaseTransactionMessage | (BaseTransactionMessage & TransactionMessageWithBlockhashLifetime),\n>(\n blockhashLifetimeConstraint: BlockhashLifetimeConstraint,\n transaction: TTransaction,\n): TransactionMessageWithBlockhashLifetime & TTransaction;\n\nexport function setTransactionMessageLifetimeUsingBlockhash(\n blockhashLifetimeConstraint: BlockhashLifetimeConstraint,\n transaction: BaseTransactionMessage | (BaseTransactionMessage & TransactionMessageWithBlockhashLifetime),\n) {\n if (\n 'lifetimeConstraint' in transaction &&\n transaction.lifetimeConstraint.blockhash === blockhashLifetimeConstraint.blockhash &&\n transaction.lifetimeConstraint.lastValidBlockHeight === blockhashLifetimeConstraint.lastValidBlockHeight\n ) {\n return transaction;\n }\n const out = {\n ...transaction,\n lifetimeConstraint: Object.freeze(blockhashLifetimeConstraint),\n };\n Object.freeze(out);\n return out;\n}\n","import { SOLANA_ERROR__CODECS__INVALID_STRING_FOR_BASE, SolanaError } from '@solana/errors';\n\n/**\n * Asserts that a given string matches a given alphabet.\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 * Encodes a string using a custom alphabet by dividing\n * by the base and handling leading zeroes.\n * @see {@link getBaseXCodec} for a more detailed description.\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 * Decodes a string using a custom alphabet by dividing\n * by the base and handling leading zeroes.\n * @see {@link getBaseXCodec} for a more detailed description.\n */\nexport const getBaseXDecoder = (alphabet: string): VariableSizeDecoder<string> => {\n return createDecoder({\n read(rawBytes, offset): [string, number] {\n const bytes = offset === 0 ? 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 * A string codec that requires a custom alphabet and uses\n * the length of that alphabet as the base. It then divides\n * the input by the base as many times as necessary to get\n * the output. It also supports leading zeroes by using the\n * first character of the alphabet as the zero character.\n *\n * This can be used to create codecs such as base10 or base58.\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/** Encodes strings in base58. */\nexport const getBase58Encoder = () => getBaseXEncoder(alphabet);\n\n/** Decodes strings in base58. */\nexport const getBase58Decoder = () => getBaseXDecoder(alphabet);\n\n/** Encodes and decodes strings in base58. */\nexport const getBase58Codec = () => getBaseXCodec(alphabet);\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/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 memoizedAddressTableLookupEncoder = getStructEncoder([\n ['lookupTableAddress', getAddressEncoder()],\n [\n 'writableIndices',\n getArrayEncoder(getU8Encoder(), { size: getShortU16Encoder() }) as Encoder<readonly number[]>,\n ],\n [\n 'readableIndices',\n getArrayEncoder(getU8Encoder(), { size: getShortU16Encoder() }) as Encoder<readonly number[]>,\n ],\n ]);\n }\n\n return memoizedAddressTableLookupEncoder;\n}\n\nlet memoizedAddressTableLookupDecoder: VariableSizeDecoder<AddressTableLookup> | undefined;\nexport function getAddressTableLookupDecoder(): VariableSizeDecoder<AddressTableLookup> {\n if (!memoizedAddressTableLookupDecoder) {\n memoizedAddressTableLookupDecoder = getStructDecoder([\n ['lookupTableAddress', getAddressDecoder()],\n ['writableIndices', getArrayDecoder(getU8Decoder(), { size: getShortU16Decoder() })],\n ['readableIndices', getArrayDecoder(getU8Decoder(), { size: getShortU16Decoder() })],\n ]);\n }\n\n return memoizedAddressTableLookupDecoder;\n}\n\nexport function getAddressTableLookupCodec(): VariableSizeCodec<AddressTableLookup> {\n return combineCodec(getAddressTableLookupEncoder(), getAddressTableLookupDecoder());\n}\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/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/instructions';\n\ntype Instruction = ReturnType<typeof getCompiledInstructions>[number];\n\nlet memoizedGetInstructionEncoder: VariableSizeEncoder<Instruction> | undefined;\nexport function getInstructionEncoder(): VariableSizeEncoder<Instruction> {\n if (!memoizedGetInstructionEncoder) {\n memoizedGetInstructionEncoder = transformEncoder<Required<Instruction>, Instruction>(\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: Instruction): Required<Instruction> => {\n if (instruction.accountIndices !== undefined && instruction.data !== undefined) {\n return instruction as Required<Instruction>;\n }\n return {\n ...instruction,\n accountIndices: instruction.accountIndices ?? [],\n data: instruction.data ?? new Uint8Array(0),\n } as Required<Instruction>;\n },\n );\n }\n\n return memoizedGetInstructionEncoder;\n}\n\nlet memoizedGetInstructionDecoder: VariableSizeDecoder<Instruction> | undefined;\nexport function getInstructionDecoder(): VariableSizeDecoder<Instruction> {\n if (!memoizedGetInstructionDecoder) {\n memoizedGetInstructionDecoder = transformDecoder<Required<Instruction>, Instruction>(\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<Instruction>): Instruction => {\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<Instruction> {\n return combineCodec(getInstructionEncoder(), getInstructionDecoder());\n}\n","import {\n combineCodec,\n createDecoder,\n createEncoder,\n VariableSizeCodec,\n VariableSizeDecoder,\n VariableSizeEncoder,\n} from '@solana/codecs-core';\nimport { SOLANA_ERROR__TRANSACTION__VERSION_NUMBER_OUT_OF_RANGE, SolanaError } from '@solana/errors';\n\nimport { TransactionVersion } from '../transaction-message';\n\nconst VERSION_FLAG_MASK = 0x80;\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 bytes.set([value | VERSION_FLAG_MASK], offset);\n return offset + 1;\n },\n });\n}\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) as TransactionVersion;\n return [version, offset + 1];\n }\n },\n });\n}\n\nexport function getTransactionVersionCodec(): VariableSizeCodec<TransactionVersion> {\n return combineCodec(getTransactionVersionEncoder(), getTransactionVersionDecoder());\n}\n","import { getAddressDecoder, getAddressEncoder } from '@solana/addresses';\nimport {\n combineCodec,\n createEncoder,\n Decoder,\n fixDecoderSize,\n fixEncoderSize,\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';\nimport { getBase58Decoder, getBase58Encoder } from '@solana/codecs-strings';\n\nimport { getCompiledAddressTableLookups } from '../compile/address-table-lookups';\nimport { CompiledTransactionMessage } from '../compile/message';\nimport { getAddressTableLookupDecoder, getAddressTableLookupEncoder } from './address-table-lookup';\nimport { getMessageHeaderDecoder, getMessageHeaderEncoder } from './header';\nimport { getInstructionDecoder, getInstructionEncoder } from './instruction';\nimport { getTransactionVersionDecoder, getTransactionVersionEncoder } from './transaction-version';\n\nfunction getCompiledMessageLegacyEncoder(): VariableSizeEncoder<CompiledTransactionMessage> {\n return getStructEncoder(getPreludeStructEncoderTuple()) as VariableSizeEncoder<CompiledTransactionMessage>;\n}\n\nfunction getCompiledMessageVersionedEncoder(): VariableSizeEncoder<CompiledTransactionMessage> {\n return transformEncoder(\n getStructEncoder([\n ...getPreludeStructEncoderTuple(),\n ['addressTableLookups', getAddressTableLookupArrayEncoder()],\n ]) as VariableSizeEncoder<CompiledTransactionMessage>,\n (value: CompiledTransactionMessage) => {\n if (value.version === 'legacy') {\n return value;\n }\n return {\n ...value,\n addressTableLookups: value.addressTableLookups ?? [],\n } as Exclude<CompiledTransactionMessage, { readonly version: 'legacy' }>;\n },\n );\n}\n\nfunction getPreludeStructEncoderTuple() {\n return [\n ['version', getTransactionVersionEncoder()],\n ['header', getMessageHeaderEncoder()],\n ['staticAccounts', getArrayEncoder(getAddressEncoder(), { size: getShortU16Encoder() })],\n ['lifetimeToken', fixEncoderSize(getBase58Encoder(), 32)],\n ['instructions', getArrayEncoder(getInstructionEncoder(), { size: getShortU16Encoder() })],\n ] as const;\n}\n\nfunction getPreludeStructDecoderTuple() {\n return [\n ['version', getTransactionVersionDecoder() as Decoder<number>],\n ['header', getMessageHeaderDecoder()],\n ['staticAccounts', getArrayDecoder(getAddressDecoder(), { size: getShortU16Decoder() })],\n ['lifetimeToken', fixDecoderSize(getBase58Decoder(), 32)],\n ['instructions', getArrayDecoder(getInstructionDecoder(), { size: getShortU16Decoder() })],\n ['addressTableLookups', getAddressTableLookupArrayDecoder()],\n ] as const;\n}\n\nfunction getAddressTableLookupArrayEncoder() {\n return getArrayEncoder(getAddressTableLookupEncoder(), { size: getShortU16Encoder() });\n}\n\nfunction getAddressTableLookupArrayDecoder() {\n return getArrayDecoder(getAddressTableLookupDecoder(), { size: getShortU16Decoder() });\n}\n\nexport function getCompiledTransactionMessageEncoder(): VariableSizeEncoder<CompiledTransactionMessage> {\n return createEncoder({\n getSizeFromValue: (compiledMessage: CompiledTransactionMessage) => {\n if (compiledMessage.version === 'legacy') {\n return getCompiledMessageLegacyEncoder().getSizeFromValue(compiledMessage);\n } else {\n return getCompiledMessageVersionedEncoder().getSizeFromValue(compiledMessage);\n }\n },\n write: (compiledMessage, bytes, offset) => {\n if (compiledMessage.version === 'legacy') {\n return getCompiledMessageLegacyEncoder().write(compiledMessage, bytes, offset);\n } else {\n return getCompiledMessageVersionedEncoder().write(compiledMessage, bytes, offset);\n }\n },\n });\n}\n\nexport function getCompiledTransactionMessageDecoder(): VariableSizeDecoder<CompiledTransactionMessage> {\n return transformDecoder(\n getStructDecoder(getPreludeStructDecoderTuple()) as VariableSizeDecoder<\n CompiledTransactionMessage & { addressTableLookups?: ReturnType<typeof getCompiledAddressTableLookups> }\n >,\n ({ addressTableLookups, ...restOfMessage }) => {\n if (restOfMessage.version === 'legacy' || !addressTableLookups?.length) {\n return restOfMessage;\n }\n return { ...restOfMessage, addressTableLookups } as Exclude<\n CompiledTransactionMessage,\n { readonly version: 'legacy' }\n >;\n },\n );\n}\n\nexport function getCompiledTransactionMessageCodec(): VariableSizeCodec<CompiledTransactionMessage> {\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 AccountRole,\n IAccountLookupMeta,\n IAccountMeta,\n IInstruction,\n isSignerRole,\n isWritableRole,\n mergeRoles,\n ReadonlyAccount,\n ReadonlyAccountLookup,\n ReadonlySignerAccount,\n WritableAccount,\n WritableAccountLookup,\n WritableSignerAccount,\n} from '@solana/instructions';\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 = (IAccountLookupMeta | IAccountMeta)[] & { readonly __brand: unique symbol };\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 IInstruction[]): 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: (IAccountLookupMeta | IAccountMeta)[] = 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 '../compile/accounts';\n\ntype AddressTableLookup = Readonly<{\n lookupTableAddress: Address;\n readableIndices: readonly number[];\n writableIndices: readonly number[];\n}>;\n\nexport function getCompiledAddressTableLookups(orderedAccounts: OrderedAccounts): AddressTableLookup[] {\n const index: Record<Address, { readonly readableIndices: number[]; readonly writableIndices: number[] }> = {};\n for (const account of orderedAccounts) {\n if (!('lookupTableAddress' in account)) {\n continue;\n }\n const entry = (index[account.lookupTableAddress] ||= {\n readableIndices: [],\n writableIndices: [],\n });\n if (account.role === AccountRole.WRITABLE) {\n entry.writableIndices.push(account.addressIndex);\n } else {\n entry.readableIndices.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 { isSignerRole, isWritableRole } from '@solana/instructions';\n\nimport { OrderedAccounts } from '../compile/accounts';\n\ntype MessageHeader = Readonly<{\n numReadonlyNonSignerAccounts: number;\n numReadonlySignerAccounts: number;\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 { IInstruction } from '@solana/instructions';\n\nimport { OrderedAccounts } from './accounts';\n\ntype CompiledInstruction = Readonly<{\n accountIndices?: number[];\n data?: Uint8Array;\n programAddressIndex: number;\n}>;\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 IInstruction[],\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';\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 { CompilableTransactionMessage } from '../compilable-transaction-message';\nimport { getAddressMapFromInstructions, getOrderedAccountsFromAddressMap } from './accounts';\nimport { getCompiledAddressTableLookups } from './address-table-lookups';\nimport { getCompiledMessageHeader } from './header';\nimport { getCompiledInstructions } from './instructions';\nimport { getCompiledLifetimeToken } from './lifetime-token';\nimport { getCompiledStaticAccounts } from './static-accounts';\n\ntype BaseCompiledTransactionMessage = Readonly<{\n header: ReturnType<typeof getCompiledMessageHeader>;\n instructions: ReturnType<typeof getCompiledInstructions>;\n lifetimeToken: ReturnType<typeof getCompiledLifetimeToken>;\n staticAccounts: ReturnType<typeof getCompiledStaticAccounts>;\n}>;\n\nexport type CompiledTransactionMessage = LegacyCompiledTransactionMessage | VersionedCompiledTransactionMessage;\n\ntype LegacyCompiledTransactionMessage = BaseCompiledTransactionMessage &\n Readonly<{\n version: 'legacy';\n }>;\n\ntype VersionedCompiledTransactionMessage = BaseCompiledTransactionMessage &\n Readonly<{\n addressTableLookups?: ReturnType<typeof getCompiledAddressTableLookups>;\n version: number;\n }>;\n\nexport function compileTransactionMessage(\n transaction: CompilableTransactionMessage & Readonly<{ version: 'legacy' }>,\n): LegacyCompiledTransactionMessage;\nexport function compileTransactionMessage(\n transaction: CompilableTransactionMessage,\n): VersionedCompiledTransactionMessage;\nexport function compileTransactionMessage(transaction: CompilableTransactionMessage): CompiledTransactionMessage {\n const addressMap = getAddressMapFromInstructions(transaction.feePayer.address, transaction.instructions);\n const orderedAccounts = getOrderedAccountsFromAddressMap(addressMap);\n return {\n ...(transaction.version !== 'legacy'\n ? { addressTableLookups: getCompiledAddressTableLookups(orderedAccounts) }\n : null),\n header: getCompiledMessageHeader(orderedAccounts),\n instructions: getCompiledInstructions(transaction.instructions, orderedAccounts),\n lifetimeToken: getCompiledLifetimeToken(transaction.lifetimeConstraint),\n staticAccounts: getCompiledStaticAccounts(orderedAccounts),\n version: transaction.version,\n };\n}\n","import { Address } from '@solana/addresses';\nimport { AccountRole, IAccountLookupMeta, IAccountMeta, IInstruction, isSignerRole } from '@solana/instructions';\n\nimport { AddressesByLookupTableAddress } from './addresses-by-lookup-table-address';\nimport { BaseTransactionMessage, 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): IAccountLookupMeta | 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 IAccountLookupMeta | IAccountMeta\ntype WidenInstructionAccounts<TInstruction extends IInstruction> =\n TInstruction extends IInstruction<infer TProgramAddress, infer TAccounts>\n ? IInstruction<\n TProgramAddress,\n {\n [K in keyof TAccounts]: TAccounts[K] extends IAccountMeta<infer TAddress>\n ? IAccountLookupMeta<TAddress> | IAccountMeta<TAddress>\n : TAccounts[K];\n }\n >\n : TInstruction;\n\ntype ExtractAdditionalProps<T, U> = Omit<T, keyof U>;\n\ntype WidenTransactionMessageInstructions<TTransactionMessage extends TransactionMessage> =\n TTransactionMessage extends BaseTransactionMessage<infer TVersion, infer TInstruction>\n ? BaseTransactionMessage<TVersion, WidenInstructionAccounts<TInstruction>> &\n ExtractAdditionalProps<\n TTransactionMessage,\n BaseTransactionMessage<TVersion, WidenInstructionAccounts<TInstruction>>\n >\n : TTransactionMessage;\n\nexport function compressTransactionMessageUsingAddressLookupTables<\n TTransactionMessage extends TransactionMessageNotLegacy = TransactionMessageNotLegacy,\n>(\n transactionMessage: TTransactionMessage,\n addressesByLookupTableAddress: AddressesByLookupTableAddress,\n): TTransactionMessage | WidenTransactionMessageInstructions<TTransactionMessage> {\n const lookupTableAddresses = new Set(Object.values(addressesByLookupTableAddress).flatMap(a => a));\n\n const newInstructions: IInstruction[] = [];\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<IInstruction['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 !lookupTableAddresses.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 { TransactionMessage, TransactionVersion } from './transaction-message';\n\ntype TransactionConfig<TVersion extends TransactionVersion> = Readonly<{\n version: TVersion;\n}>;\n\nexport function createTransactionMessage<TVersion extends TransactionVersion>(\n config: TransactionConfig<TVersion>,\n): Extract<TransactionMessage, { version: TVersion }>;\nexport function createTransactionMessage<TVersion extends TransactionVersion>({\n version,\n}: TransactionConfig<TVersion>): TransactionMessage {\n return Object.freeze({\n instructions: Object.freeze([]),\n version,\n }) as TransactionMessage;\n}\n","import { Address } from '@solana/addresses';\nimport { SOLANA_ERROR__TRANSACTION__EXPECTED_NONCE_LIFETIME, SolanaError } from '@solana/errors';\nimport {\n AccountRole,\n IInstruction,\n IInstructionWithAccounts,\n IInstructionWithData,\n isSignerRole,\n ReadonlyAccount,\n ReadonlySignerAccount,\n WritableAccount,\n WritableSignerAccount,\n} from '@solana/instructions';\n\nimport { BaseTransactionMessage } from './transaction-message';\n\ntype AdvanceNonceAccountInstruction<\n TNonceAccountAddress extends string = string,\n TNonceAuthorityAddress extends string = string,\n> = IInstruction<'11111111111111111111111111111111'> &\n IInstructionWithAccounts<\n readonly [\n WritableAccount<TNonceAccountAddress>,\n ReadonlyAccount<'SysvarRecentB1ockHashes11111111111111111111'>,\n ReadonlySignerAccount<TNonceAuthorityAddress> | WritableSignerAccount<TNonceAuthorityAddress>,\n ]\n > &\n IInstructionWithData<AdvanceNonceAccountInstructionData>;\ntype AdvanceNonceAccountInstructionData = Uint8Array & {\n readonly __brand: unique symbol;\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}>;\nexport type Nonce<TNonceValue extends string = string> = TNonceValue & { readonly __brand: unique symbol };\ntype NonceLifetimeConstraint<TNonceValue extends string = string> = Readonly<{\n nonce: Nonce<TNonceValue>;\n}>;\n\nconst RECENT_BLOCKHASHES_SYSVAR_ADDRESS =\n 'SysvarRecentB1ockHashes11111111111111111111' as Address<'SysvarRecentB1ockHashes11111111111111111111'>;\nconst SYSTEM_PROGRAM_ADDRESS = '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;\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 ...IInstruction[],\n ];\n readonly lifetimeConstraint: NonceLifetimeConstraint<TNonceValue>;\n}\n\nexport function assertIsDurableNonceTransactionMessage(\n transaction: BaseTransactionMessage | (BaseTransactionMessage & TransactionMessageWithDurableNonceLifetime),\n): asserts transaction is BaseTransactionMessage & TransactionMessageWithDurableNonceLifetime {\n if (!isDurableNonceTransaction(transaction)) {\n throw new SolanaError(SOLANA_ERROR__TRANSACTION__EXPECTED_NONCE_LIFETIME);\n }\n}\n\nfunction 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\nexport function isAdvanceNonceAccountInstruction(\n instruction: IInstruction,\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: Uint8Array): 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\nexport function isDurableNonceTransaction(\n transaction: BaseTransactionMessage | (BaseTransactionMessage & TransactionMessageWithDurableNonceLifetime),\n): transaction is BaseTransactionMessage & TransactionMessageWithDurableNonceLifetime {\n return (\n 'lifetimeConstraint' in transaction &&\n typeof transaction.lifetimeConstraint.nonce === 'string' &&\n transaction.instructions[0] != null &&\n isAdvanceNonceAccountInstruction(transaction.instructions[0])\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\nexport function setTransactionMessageLifetimeUsingDurableNonce<\n TTransaction extends BaseTransactionMessage,\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 transaction: TTransaction | (TransactionMessageWithDurableNonceLifetime & TTransaction),\n): TransactionMessageWithDurableNonceLifetime<TNonceAccountAddress, TNonceAuthorityAddress, TNonceValue> &\n TTransaction {\n let newInstructions: [\n AdvanceNonceAccountInstruction<TNonceAccountAddress, TNonceAuthorityAddress>,\n ...IInstruction[],\n ];\n\n const firstInstruction = transaction.instructions[0];\n if (firstInstruction && isAdvanceNonceAccountInstruction(firstInstruction)) {\n if (isAdvanceNonceAccountInstructionForNonce(firstInstruction, nonceAccountAddress, nonceAuthorityAddress)) {\n if (isDurableNonceTransaction(transaction) && transaction.lifetimeConstraint.nonce === nonce) {\n return transaction as TransactionMessageWithDurableNonceLifetime<\n TNonceAccountAddress,\n TNonceAuthorityAddress,\n TNonceValue\n > &\n TTransaction;\n } else {\n // we already have the right first instruction, leave it as-is\n newInstructions = [firstInstruction, ...transaction.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 ...transaction.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 ...transaction.instructions,\n ];\n }\n\n return Object.freeze({\n ...transaction,\n instructions: Object.freeze(newInstructions),\n lifetimeConstraint: Object.freeze({\n nonce,\n }),\n }) as TransactionMessageWithDurableNonceLifetime<TNonceAccountAddress, TNonceAuthorityAddress, TNonceValue> &\n TTransaction;\n}\n","import { Address } from '@solana/addresses';\n\nimport { BaseTransactionMessage } from './transaction-message';\n\nexport interface ITransactionMessageWithFeePayer<TAddress extends string = string> {\n readonly feePayer: Readonly<{ address: Address<TAddress> }>;\n}\n\nexport function setTransactionMessageFeePayer<\n TFeePayerAddress extends string,\n TTransactionMessage extends BaseTransactionMessage & Partial<ITransactionMessageWithFeePayer>,\n>(\n feePayer: Address<TFeePayerAddress>,\n transactionMessage: TTransactionMessage,\n): ITransactionMessageWithFeePayer<TFeePayerAddress> & Omit<TTransactionMessage, 'feePayer'> {\n if (\n 'feePayer' in transactionMessage &&\n feePayer === transactionMessage.feePayer?.address &&\n isAddressOnlyFeePayer(transactionMessage.feePayer)\n ) {\n return transactionMessage as unknown as ITransactionMessageWithFeePayer<TFeePayerAddress> &\n Omit<TTransactionMessage, 'feePayer'>;\n }\n const out = {\n ...transactionMessage,\n feePayer: Object.freeze({ address: feePayer }),\n };\n Object.freeze(out);\n return out;\n}\n\nfunction isAddressOnlyFeePayer(\n feePayer: Partial<ITransactionMessageWithFeePayer>['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 { BaseTransactionMessage } from './transaction-message';\n\nexport function appendTransactionMessageInstruction<TTransaction extends BaseTransactionMessage>(\n instruction: TTransaction['instructions'][number],\n transaction: TTransaction,\n): TTransaction {\n return appendTransactionMessageInstructions([instruction], transaction);\n}\n\nexport function appendTransactionMessageInstructions<TTransaction extends BaseTransactionMessage>(\n instructions: ReadonlyArray<TTransaction['instructions'][number]>,\n transaction: TTransaction,\n): TTransaction {\n return Object.freeze({\n ...transaction,\n instructions: Object.freeze([...transaction.instructions, ...instructions]),\n });\n}\n\nexport function prependTransactionMessageInstruction<TTransaction extends BaseTransactionMessage>(\n instruction: TTransaction['instructions'][number],\n transaction: TTransaction,\n): TTransaction {\n return prependTransactionMessageInstructions([instruction], transaction);\n}\n\nexport function prependTransactionMessageInstructions<TTransaction extends BaseTransactionMessage>(\n instructions: ReadonlyArray<TTransaction['instructions'][number]>,\n transaction: TTransaction,\n): TTransaction {\n return Object.freeze({\n ...transaction,\n instructions: Object.freeze([...instructions, ...transaction.instructions]),\n });\n}\n","import { Address, assertIsAddress } from '@solana/addresses';\nimport {\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 SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_FEE_PAYER_MISSING,\n SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_INSTRUCTION_PROGRAM_ADDRESS_NOT_FOUND,\n SolanaError,\n} from '@solana/errors';\nimport { pipe } from '@solana/functional';\nimport { AccountRole, IAccountLookupMeta, IAccountMeta, IInstruction } from '@solana/instructions';\nimport type { Blockhash } from '@solana/rpc-types';\n\nimport { AddressesByLookupTableAddress } from './addresses-by-lookup-table-address';\nimport { setTransactionMessageLifetimeUsingBlockhash } from './blockhash';\nimport { CompilableTransactionMessage } from './compilable-transaction-message';\nimport { CompiledTransactionMessage } from './compile';\nimport type { getCompiledAddressTableLookups } from './compile/address-table-lookups';\nimport { createTransactionMessage } from './create-transaction-message';\nimport {\n isAdvanceNonceAccountInstruction,\n Nonce,\n setTransactionMessageLifetimeUsingDurableNonce,\n} from './durable-nonce';\nimport { setTransactionMessageFeePayer } from './fee-payer';\nimport { appendTransactionMessageInstruction } from './instructions';\nimport { TransactionVersion } from './transaction-message';\n\nfunction getAccountMetas(message: CompiledTransactionMessage): IAccountMeta[] {\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: IAccountMeta[] = [];\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\nfunction getAddressLookupMetas(\n compiledAddressTableLookups: ReturnType<typeof getCompiledAddressTableLookups>,\n addressesByLookupTableAddress: AddressesByLookupTableAddress,\n): IAccountLookupMeta[] {\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: IAccountLookupMeta[] = [];\n const writableMetas: IAccountLookupMeta[] = [];\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\n const highestIndex = Math.max(...lookup.readableIndices, ...lookup.writableIndices);\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: IAccountLookupMeta[] = lookup.readableIndices.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: IAccountLookupMeta[] = lookup.writableIndices.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\nfunction convertInstruction(\n instruction: CompiledTransactionMessage['instructions'][0],\n accountMetas: IAccountMeta[],\n): IInstruction {\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\ntype LifetimeConstraint =\n | {\n blockhash: Blockhash;\n lastValidBlockHeight: bigint;\n }\n | {\n nonce: Nonce;\n nonceAccountAddress: Address;\n nonceAuthorityAddress: Address;\n };\n\nfunction getLifetimeConstraint(\n messageLifetimeToken: string,\n firstInstruction?: IInstruction,\n lastValidBlockHeight?: bigint,\n): LifetimeConstraint {\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\nexport type DecompileTransactionMessageConfig = {\n addressesByLookupTableAddress?: AddressesByLookupTableAddress;\n lastValidBlockHeight?: bigint;\n};\n\nexport function decompileTransactionMessage(\n compiledTransactionMessage: CompiledTransactionMessage,\n config?: DecompileTransactionMessageConfig,\n): CompilableTransactionMessage {\n const feePayer = compiledTransactionMessage.staticAccounts[0];\n if (!feePayer) {\n throw new SolanaError(SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_FEE_PAYER_MISSING);\n }\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\n const instructions: IInstruction[] = compiledTransactionMessage.instructions.map(compiledInstruction =>\n convertInstruction(compiledInstruction, transactionMetas),\n );\n\n const firstInstruction = instructions[0];\n const lifetimeConstraint = getLifetimeConstraint(\n compiledTransactionMessage.lifetimeToken,\n firstInstruction,\n config?.lastValidBlockHeight,\n );\n\n return pipe(\n createTransactionMessage({ version: compiledTransactionMessage.version as TransactionVersion }),\n tx => setTransactionMessageFeePayer(feePayer, tx),\n tx =>\n instructions.reduce((acc, instruction) => {\n return appendTransactionMessageInstruction(instruction, acc);\n }, tx),\n tx =>\n 'blockhash' in lifetimeConstraint\n ? setTransactionMessageLifetimeUsingBlockhash(lifetimeConstraint, tx)\n : setTransactionMessageLifetimeUsingDurableNonce(lifetimeConstraint, tx),\n );\n}\n"]}
@@ -585,7 +585,7 @@ function getCompiledStaticAccounts(orderedAccounts) {
585
585
 
586
586
  // src/compile/message.ts
587
587
  function compileTransactionMessage(transaction) {
588
- const addressMap = getAddressMapFromInstructions(transaction.feePayer, transaction.instructions);
588
+ const addressMap = getAddressMapFromInstructions(transaction.feePayer.address, transaction.instructions);
589
589
  const orderedAccounts = getOrderedAccountsFromAddressMap(addressMap);
590
590
  return {
591
591
  ...transaction.version !== "legacy" ? { addressTableLookups: getCompiledAddressTableLookups(orderedAccounts) } : null,
@@ -727,17 +727,20 @@ function setTransactionMessageLifetimeUsingDurableNonce({
727
727
  }
728
728
 
729
729
  // src/fee-payer.ts
730
- function setTransactionMessageFeePayer(feePayer, transaction) {
731
- if ("feePayer" in transaction && feePayer === transaction.feePayer) {
732
- return transaction;
730
+ function setTransactionMessageFeePayer(feePayer, transactionMessage) {
731
+ if ("feePayer" in transactionMessage && feePayer === transactionMessage.feePayer?.address && isAddressOnlyFeePayer(transactionMessage.feePayer)) {
732
+ return transactionMessage;
733
733
  }
734
734
  const out = {
735
- ...transaction,
736
- feePayer
735
+ ...transactionMessage,
736
+ feePayer: Object.freeze({ address: feePayer })
737
737
  };
738
738
  Object.freeze(out);
739
739
  return out;
740
740
  }
741
+ function isAddressOnlyFeePayer(feePayer) {
742
+ return !!feePayer && "address" in feePayer && typeof feePayer.address === "string" && Object.keys(feePayer).length === 1;
743
+ }
741
744
 
742
745
  // src/instructions.ts
743
746
  function appendTransactionMessageInstruction(instruction, transaction) {