Lab · Demo 02 · 1,232 bytes
Solana transaction size demo
Address lookup tables shrink a Solana transaction. Glacis Airlift used them in 2025 to get its larger bridge transfers under the v0 size limit.
A Solana transaction has to fit in one network packet. For legacy and v0 transactions that’s 1,232 bytes, signatures included. Every account a transaction touches costs 32 bytes in its account list, and a cross-chain transfer touches a lot of them: token accounts, the bridge’s own state, the messaging endpoint and its libraries, verifiers, fee configuration.
On Glacis Airlift, via Lazer, the larger LayerZero transfers blew past that limit and failed. Splitting them wasn’t an option, because Airlift takes its fee and routes the transfer in one atomic transaction. So I packed the program accounts every transfer needs into shared Address Lookup Tables. A v0 transaction names a table once, then refers to each account in it by a one-byte index.
- Wire format
- Solana v0 message, byte for byte
- Transfer
- Synthetic, with a bridge send’s account-list shape
- Case study
- Read the case study →
Fitting a bridge transfer into Solana’s v0 transaction limit
Move account keys into the lookup table and watch the size fall.
1,316 B
84 B over the v0 limit: this transaction fails
33 keys in the transaction · 0 in the lookup table
- Signature 65 B
- Header 4 B
- Account keys 1,057 B
- Blockhash 32 B
- Instructions 157 B
- Lookup table 1 B
In the transaction32 B per key · 33
- Sender (fee payer)Signer32 B: Signers must stay in the transaction
- Compute budget programProgram32 B: Invoked programs must stay in the transaction
- Bridge programProgram32 B: Invoked programs must stay in the transaction
- Sender token accountUnique32 B: Unique to this transfer, so no shared table holds it
- Outbound message accountUnique32 B: Unique to this transfer, so no shared table holds it
Address lookup table1 B per index · 0
Empty. The first key you move costs more than it saves: the transaction also has to name the table.
Before: 1,316 B with every key in the transaction. After: 482 B with all 28 shared program accounts in one lookup table. The quote matched what the transfer actually cost, to the lamport.
Legacy and v0 transactions are still capped at 1,232 bytes. The v1 format, on mainnet since Sept 15, 2026, raised the cap to 4,096 and doesn’t use lookup tables. Airlift shipped on v0, with Address Lookup Tables, in 2025.
Source: solana.com: larger transaction sizes · checked 2026-09-29
Illustrative, computed from the Solana wire format.
Example result
With every key in the transaction’s own list, this illustrative transfer is 1,316 bytes, 84 over the v0 limit, so it would fail. Moving its 28 shared program accounts into one lookup table brings it to 482 bytes, with 750 to spare.
The first key you move makes the transaction bigger, because the table’s own 32-byte address has to be named before any one-byte index pays off. Signers, the programs the transaction calls, and the accounts unique to one transfer have to stay in the list.
The v1 format
Legacy and v0 transactions are still capped at 1,232 bytes. The v1 format, on mainnet since Sept 15, 2026, raises the cap to 4,096 and doesn’t use lookup tables.
Airlift shipped on v0 with Address Lookup Tables in 2025. On the mainnet transfers we checked, its quoted fee matched what the transaction paid, to the lamport.
Source: solana.com: larger transaction sizes, checked 2026-09-29.