From ad3a79bc5104a7a22748613b11895f8db9dc8e11 Mon Sep 17 00:00:00 2001 From: Callum Date: Mon, 9 Dec 2024 17:50:06 +0000 Subject: [PATCH] Add compressTransactionMessageUsingAddressLookupTables to transation-messages readme --- packages/transaction-messages/README.md | 32 +++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/packages/transaction-messages/README.md b/packages/transaction-messages/README.md index 5f94037b1477..066894b0e7f1 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, +); +```