From 2dd589bba6c0106dc665a7fa3f6ba904910c06ac Mon Sep 17 00:00:00 2001 From: ananas-block Date: Thu, 5 Feb 2026 01:54:46 +0100 Subject: [PATCH] chore: increase mint cache robustness --- programs/compressed-token/anchor/src/lib.rs | 2 ++ .../compressed_token/transfer2/compression/mod.rs | 12 +++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/programs/compressed-token/anchor/src/lib.rs b/programs/compressed-token/anchor/src/lib.rs index 89c7c1e4ab..b910543ed4 100644 --- a/programs/compressed-token/anchor/src/lib.rs +++ b/programs/compressed-token/anchor/src/lib.rs @@ -578,6 +578,8 @@ pub enum ErrorCode { IdempotentEarlyExit, // 6170 #[msg("Mint signer mismatch between account and instruction data")] MintActionInvalidMintSigner, // 6171 + #[msg("Mint not found in cache - this indicates an internal error")] + MintNotInCache, // 6172 } /// Anchor error code offset - error codes start at 6000 diff --git a/programs/compressed-token/program/src/compressed_token/transfer2/compression/mod.rs b/programs/compressed-token/program/src/compressed_token/transfer2/compression/mod.rs index 07763b345a..cc25afc11e 100644 --- a/programs/compressed-token/program/src/compressed_token/transfer2/compression/mod.rs +++ b/programs/compressed-token/program/src/compressed_token/transfer2/compression/mod.rs @@ -79,7 +79,11 @@ pub fn process_token_compression<'a>( )?; // Lookup cached mint extension checks (cache was built with skip logic already applied) - let mint_checks = mint_cache.get_by_key(&compression.mint).cloned(); + // This should never fail since build_mint_extension_cache adds all compression mints. + let mint_checks = mint_cache + .get_by_key(&compression.mint) + .cloned() + .ok_or(ErrorCode::MintNotInCache)?; match source_or_recipient.owner() { ID => { @@ -96,7 +100,7 @@ pub fn process_token_compression<'a>( compression, source_or_recipient, packed_accounts, - mint_checks, + Some(mint_checks), &mut transfer_map[account_index], &mut lamports_budget, decompress_with_compress_only_inputs, @@ -128,9 +132,7 @@ pub fn process_token_compression<'a>( } // Propagate whether mint is restricted to enable correct derivation of the spl interface pda. - let is_restricted = mint_checks - .map(|checks| checks.has_restricted_extensions) - .unwrap_or(false); + let is_restricted = mint_checks.has_restricted_extensions; spl::process_spl_compressions( compression, &SPL_TOKEN_2022_ID.to_pubkey_bytes(),