Address Lookup Table
Stores an array of pubkeys that v0 transactions reference by 1-byte index. 56-byte header + tightly-packed 32-byte addresses, up to 256 entries.
Sample: Jupiter v6 LUT
(cached; refreshes hourly · mainnet only)
Sample temporarily unavailable
We couldn’t fetch the cached sample from mainnet right now. The full hex view will try again live.
Try the visualizerWhat it is
An Address Lookup Table (ALT) lets v0 transactions reference accounts by 1-byte index instead of inlining each 32-byte pubkey, lifting the ~35-account ceiling of legacy transactions.
Why it exists
Legacy Solana transactions inline every account address as 32 raw bytes. With a hard 1,232-byte transaction size limit, that capped composability — multi-hop swaps and complex DeFi routes hit the wall. ALTs are stored on-chain; a v0 transaction names one or more lookup tables in its header and then references accounts in those tables by 1-byte index. The transaction stays small, but the runtime sees the full pubkey set.
Byte layout
A 56-byte fixed header followed by tightly-packed 32-byte pubkeys.
| Offset | Length | Field | Type | Notes |
|---|---|---|---|---|
| 0 | 4 | discriminator |
u32 enum |
1 = LookupTable. |
| 4 | 8 | deactivation_slot |
u64 LE |
u64::MAX if still active. |
| 12 | 8 | last_extended_slot |
u64 LE |
Last slot at which an Extend ran. |
| 20 | 1 | last_extension_start_index |
u8 |
Index where the last Extend began appending. |
| 21 | 1 | authority tag |
u8 Option |
0 None (frozen forever), 1 Some. |
| 22 | 32 | authority |
Pubkey |
Zeroed when the Option tag is None. |
| 54 | 2 | padding | — | Zero-fill to align addresses to offset 56. |
| 56 | 32 × N | addresses[] |
Pubkey[] |
Up to 256 entries. Total size: 56 + 32 × addresses.len(). |
Maximum total: 8,248 bytes (56 header + 256 × 32).
Where you see it
Every modern Jupiter swap, Drift trade, Kamino position update, and Squads multisig action walks through one or more ALTs. You encounter ALTs whenever you simulate or decode a v0 transaction, or compose one from scratch via @solana/web3.js ≥ 1.95 or anchor-cli.
Common gotchas
- ALTs are mutable until frozen. Anyone with
authoritycan call ExtendLookupTable to append new addresses; setting the authority Option to None makes the table immutable forever. - Deactivation is two-phase. DeactivateLookupTable sets
deactivation_slot; the table is unusable after that slot lands but can’t beCloseLookupTable‘d until ~513 slots later (the “cooldown”) to prevent in-flight transactions from breaking. - The 1-byte index limits a single ALT to 256 entries, but a v0 transaction can reference multiple ALTs to compose larger account sets.
sizeis dynamic. Unlike Mint (82) or Token Account (165), an ALT’s size depends on how many addresses have been Extended in.
Last verified: 2026-05-19