From 6d4cfee312ec87cf224d8b0d52e8a2897324b87e Mon Sep 17 00:00:00 2001 From: Ivan Frolov Date: Fri, 24 Jan 2025 22:21:01 -0500 Subject: [PATCH] fix: take hash of token_id if it is longer than 32 --- .../src/instructions/user/deploy_token.rs | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/solana/bridge_token_factory/programs/bridge_token_factory/src/instructions/user/deploy_token.rs b/solana/bridge_token_factory/programs/bridge_token_factory/src/instructions/user/deploy_token.rs index f6fba087..48bcbdc3 100644 --- a/solana/bridge_token_factory/programs/bridge_token_factory/src/instructions/user/deploy_token.rs +++ b/solana/bridge_token_factory/programs/bridge_token_factory/src/instructions/user/deploy_token.rs @@ -6,12 +6,31 @@ use crate::state::message::{ Payload, }; use anchor_lang::prelude::*; +use anchor_lang::solana_program::hash::hash; use anchor_spl::metadata::mpl_token_metadata::types::DataV2; use anchor_spl::metadata::{ create_metadata_accounts_v3, CreateMetadataAccountsV3, Metadata as Metaplex, ID as MetaplexID, }; use anchor_spl::token::{Mint, Token}; +pub trait StringExt { + fn to_hashed_bytes(&self) -> [u8; 32]; +} + +impl StringExt for String { + fn to_hashed_bytes(&self) -> [u8; 32] { + let bytes = self.as_bytes(); + if bytes.len() > 32 { + let hash = hash(bytes); + hash.to_bytes() + } else { + let mut padded_bytes = [0u8; 32]; + padded_bytes[..bytes.len()].copy_from_slice(bytes); + padded_bytes + } + } +} + #[derive(Accounts)] #[instruction(data: SignedPayload)] pub struct DeployToken<'info> { @@ -23,7 +42,7 @@ pub struct DeployToken<'info> { #[account( init, payer = common.payer, - seeds = [WRAPPED_MINT_SEED, data.payload.token.as_bytes().as_ref()], + seeds = [WRAPPED_MINT_SEED, data.payload.token.to_hashed_bytes().as_ref()], bump, mint::decimals = std::cmp::min(MAX_ALLOWED_DECIMALS, data.payload.decimals), mint::authority = authority,