**EDIT**: The error you're getting is being thrown by [this check](https://github.com/solana-labs/solana/blob/58170cf9bf9e1fc4434c51f04728dba8707bf73b/programs/address-lookup-table/src/processor.rs#L97). The instruction to create a lookup table requires the client to pass in a recent slot as an argument, and checks that that slot is valid(contained in the slot-hashes cache). The definition of "valid" here is a slot during which a block was actually produced. Hence you should get your recentSlot parameter [with](https://solana.stackexchange.com/a/4047/1202): ```javascript const currentSlot = await connection.getSlot(); console.log('currentSlot:', currentSlot); const slots = await connection.getBlocks(currentSlot - 200); if (slots.length < 100) { throw new Error(`Could find only ${slots.length} ${slots} on the main fork`); } const recentSlot = slots[0]; ``` OR just specify a `finalized` commitment for your `getSlot()` rpc call. ```javascript const recentSlot = await provider.connection.getSlot("finalized"); // note the commitment ``` **INITIAL**: Address Lookup Tables usually need a `cooldown period` after being created, before which they are considered unactivated and cannot be used. You can either try waiting an arbitrary amount of time, for example: ```javascript const sleep = async (ms = 0): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms)); await sleep(10000); const lutAccount = await provider.connection .getAddressLookupTable(lookupTable) .then((res) => res.value); if (lutAccount === null) { throw new Error( "Something went wrong. We don't expect our lookup table to be un-initialized, but it is." ); } ``` or to be precise, wait for a new block, which is the criteria for a lookup table's activation: ```javascript const waitForNewBlock = async(connection: web3.Connection, targetHeight: number) => { console.log(`Waiting for ${targetHeight} new blocks`); return new Promise(async (resolve: any) => { // Get the last valid block height const { lastValidBlockHeight } = await connection.getLatestBlockhash(); // Check if at least targetHeight amount of new blocks are generated every 1 second const intervalId = setInterval(async () => { const { lastValidBlockHeight: newValidBlockHeight } = await connection.getLatestBlockhash(); if (newValidBlockHeight > lastValidBlockHeight + targetHeight) { clearInterval(intervalId); resolve(); } }, 1000); }); } // Lifted from https://medium.com/@brknarsy/guide-to-optimizing-transactions-with-address-lookup-tables-alts-on-solana-85e654aa6789 ```