ES

Token-2022 Mint/Account + Extensions

Token-2022 Mints and TokenAccounts share SPL Token's base layouts and append features as post-base TLV extension blocks — a 1-byte discriminator at offset 165 distinguishes Mint from TokenAccount.

Token-2022 Program 165 bytes

Sample: PYUSD (Token-2022)

(cached; refreshes hourly · mainnet only)

Mint Owner Amount Delegate Option Delegate (empty) State Is Native Native (reserved) Delegated Amount Close Authority Option Close Authority (empty) Account Type (Token-2022) MintCloseAuthority (header) Close Authority PermanentDelegate (header) Delegate TransferFeeConfig (header) Transfer Fee Config Authority Withdraw Withheld Authority Fee Config Data ConfidentialTransferMint (header) ConfidentialTransferMint ConfidentialTransferFee (header) ConfidentialTransferFee TransferHook (header) Hook Authority Hook Program ID MetadataPointer (header) Pointer Authority Metadata Address TokenMetadata (header) Update Authority Mint Name Symbol URI Data
0 1 2 3 4 5 6 7 8 9 A B C D E F
0000 01 00 00 00 6c 91 aa 49 65 90 12 f8 ab e9 61 ec
0010 24 b6 10 74 92 65 47 53 2f f0 94 ed 5b 69 39 82
0020 db 98 73 13 12 cd 38 46 01 a4 02 00 06 01 01 00
0030 00 00 17 85 32 61 ef 6a b8 53 2a 67 f0 53 86 5a
0040 ad 31 29 3f cf 07 cf 12 0a b5 b9 a1 57 06 54 8d
0050 c0 2b 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00a0 00 00 00 00 00 01 03 00 20 00 17 85 32 61 ef 6a
00b0 b8 53 2a 67 f0 53 86 5a ad 31 29 3f cf 07 cf 12
00c0 0a b5 b9 a1 57 06 54 8d c0 2b 0c 00 20 00 17 85
00d0 32 61 ef 6a b8 53 2a 67 f0 53 86 5a ad 31 29 3f
00e0 cf 07 cf 12 0a b5 b9 a1 57 06 54 8d c0 2b 01 00
00f0 6c 00 17 85 32 61 ef 6a b8 53 2a 67 f0 53 86 5a
0100 ad 31 29 3f cf 07 cf 12 0a b5 b9 a1 57 06 54 8d
0110 c0 2b 17 85 32 61 ef 6a b8 53 2a 67 f0 53 86 5a
0120 ad 31 29 3f cf 07 cf 12 0a b5 b9 a1 57 06 54 8d
0130 c0 2b 00 00 00 00 00 00 00 00 5d 02 00 00 00 00
0140 00 00 00 00 00 00 00 00 00 00 00 00 5d 02 00 00
0150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00
0160 41 00 17 85 32 61 ef 6a b8 53 2a 67 f0 53 86 5a
0170 ad 31 29 3f cf 07 cf 12 0a b5 b9 a1 57 06 54 8d
0180 c0 2b 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
01a0 00 00 00 10 00 81 00 17 85 32 61 ef 6a b8 53 2a
01b0 67 f0 53 86 5a ad 31 29 3f cf 07 cf 12 0a b5 b9
01c0 a1 57 06 54 8d c0 2b 1c 37 e6 43 3b 73 04 dd 82
01d0 73 7a e4 0d 9b 8b f3 c4 9f 5b 0e 6c 49 a8 d5 33
01e0 28 b3 e5 06 90 1c 57 01 00 00 00 00 00 00 00 00
01f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0220 00 00 00 00 00 00 00 00 0e 00 40 00 17 85 32 61
0230 ef 6a b8 53 2a 67 f0 53 86 5a ad 31 29 3f cf 07
0240 cf 12 0a b5 b9 a1 57 06 54 8d c0 2b 00 00 00 00
0250 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0260 00 00 00 00 00 00 00 00 00 00 00 00 12 00 40 00
0270 17 85 32 61 ef 6a b8 53 2a 67 f0 53 86 5a ad 31
0280 29 3f cf 07 cf 12 0a b5 b9 a1 57 06 54 8d c0 2b
0290 17 92 48 3b 6c 8a 2a 87 b7 47 1d 81 4f 95 91 f9
02a0 39 5c 84 0a 9c e3 d9 f4 d5 ba 7d 3a 4b 8a 74 9e
02b0 13 00 ae 00 17 85 32 61 ef 6a b8 53 2a 67 f0 53
02c0 86 5a ad 31 29 3f cf 07 cf 12 0a b5 b9 a1 57 06
02d0 54 8d c0 2b 17 92 48 3b 6c 8a 2a 87 b7 47 1d 81
02e0 4f 95 91 f9 39 5c 84 0a 9c e3 d9 f4 d5 ba 7d 3a
02f0 4b 8a 74 9e 0a 00 00 00 50 61 79 50 61 6c 20 55
0300 53 44 05 00 00 00 50 59 55 53 44 4f 00 00 00 68
0310 74 74 70 73 3a 2f 2f 74 6f 6b 65 6e 2d 6d 65 74
0320 61 64 61 74 61 2e 70 61 78 6f 73 2e 63 6f 6d 2f
0330 70 79 75 73 64 5f 6d 65 74 61 64 61 74 61 2f 70
0340 72 6f 64 2f 73 6f 6c 61 6e 61 2f 70 79 75 73 64
0350 5f 6d 65 74 61 64 61 74 61 2e 6a 73 6f 6e 00 00
0360 00 00

What it is

Token-2022 is a parallel SPL token program that keeps the base Mint and TokenAccount layouts byte-identical to SPL Token and adds features through extensions. A Token-2022 Mint is owned by TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb rather than TokenkegQ…; everything else about the first 82 bytes (Mint) or 165 bytes (TokenAccount) is the same code path.

Why it exists

SPL Token launched in 2020 with fixed account layouts. Adding fields would have invalidated every existing token on Solana, so new features — transfer fees, interest accrual, confidential transfers, metadata, transfer hooks, scaled UI amounts — landed in Token-2022 as post-base TLV extensions instead. The trade-off is intentional: SPL Token tokens stay forever stable, and new features live in a new program that explorers and wallets opt into.

Byte layout

Offset Length Field Type Notes
0 82 or 165 base SPL Token base Byte-identical to Mint (82) or TokenAccount (165).
82 83 padding (Mints only) zero bytes Mints are zero-padded out to 165 so the discriminator sits at a fixed offset regardless of base kind.
165 1 account_type u8 enum 1 = Mint, 2 = TokenAccount. Only reliable on-chain way to tell them apart since both occupy 165 bytes before extensions start.
166 varies extensions TLV[] One entry per active extension. See the TLV layout primer for the 4-byte header format and walker algorithm.

A bare Token-2022 Mint with no extensions is exactly 166 bytes (82 base + 83 padding + 1 discriminator). Anything larger has extensions attached.

Where you see it

Token-2022 is the layer behind a growing slice of regulated and feature-rich tokens: PYUSD (PayPal’s stablecoin), the BlackRock BUIDL token, USD Yield-style real-world-asset tokens, and most new payment-rail launches that need transfer fees or compliance controls. SPL Token still anchors the long tail of memecoins and pre-2024 issuances, so wallets and indexers must handle both programs.

Common gotchas

  • Program owner is the only reliable type signal. A 200-byte account could be a Token-2022 Mint with extensions, a custom account from an unrelated program, or anything else. Read accountInfo.owner first — if it’s Tokenz…, the bytes follow this layout. Length alone tells you nothing.
  • A Token-2022 Mint and a TokenAccount can have the same size. Both share offsets 0–164 after Mint padding; the account_type byte at offset 165 is the discriminator. Decoders that infer kind from length get this wrong for any Mint with even one small extension.
  • Base layout uses SPL’s COption (4-byte tag). Extensions don’t — most use OptionalNonZeroPubkey (32 bytes, all-zeros = None) or Borsh Option<T> (1-byte tag). Three optional encodings coexist in a single Token-2022 account; pick the wrong one and your decoder slides three or four bytes off.
  • Extensions are append-only at the program level, but appear in a fixed order on-chain. The Token-2022 program serializes them in a stable order determined by extension type number, not initialization order. If you write a decoder that depends on extension ordering, it will keep working — but don’t assume a per-account ordering reflects the user’s chronology.

Last verified: 2026-05-19