diff --git a/packages/transaction-messages/README.md b/packages/transaction-messages/README.md index 5f94037b147..066894b0e7f 100644 --- a/packages/transaction-messages/README.md +++ b/packages/transaction-messages/README.md @@ -221,3 +221,35 @@ Given an instruction, this method will return a new transaction message with tha If you'd like to prepend multiple instructions to a transaction message at once, you may use the `prependTransactionMessageInstructions` function instead which accepts an array of instructions. See [`appendTransactionMessageInstruction()`](#appendtransactioninstruction) for an example of how to use this function. + +## Compress transaction message using lookup tables + +### Types + +#### `AddressesByLookupTableAddress` + +This type represents a mapping of lookup table addresses to the addresses of the accounts that are stored in them. + +### Functions + +#### `compressTransactionMessageUsingAddressLookupTables` + +Given a transaction message and a mapping of lookup tables to the addresses stored in them, this function will return a new transaction message with the same instructions but with all non-signer accounts that are found in the given lookup tables represented by an `IAccountLookupMeta` instead of an `IAccountMeta`. + +This means that these accounts will take up less space in the compiled transaction message. This size reduction is most significant when the transaction includes many accounts from the same lookup table. + +```ts +import { address } from '@solana/addresses'; +import { compressTransactionMessageUsingAddressLookupTables } from '@solana/transaction-messages'; + +const lookupTableAddress = address('4QwSwNriKPrz8DLW4ju5uxC2TN5cksJx6tPUPj7DGLAW'); +const accountAddress = address('5n2ADjHPsqB4EVUNEX48xRqtnmuLu5XSHDwkJRR98qpM'); +const lookupTableAddresses: AddressesByLookupTableAddress = { + [lookupTableAddress]: [accountAddress], +}; + +const compressedTransactionMessage = compressTransactionMessageUsingAddressLookupTables( + transactionMessage, + lookupTableAddresses, +); +```