diff --git a/solana/bridge/program/src/wasm.rs b/solana/bridge/program/src/wasm.rs index 9367f418..4e49e71a 100644 --- a/solana/bridge/program/src/wasm.rs +++ b/solana/bridge/program/src/wasm.rs @@ -46,6 +46,8 @@ use crate::{ GovernancePayloadTransferFees, GovernancePayloadUpgrade, }, + Claim, + ClaimDerivationData, PostVAAData, VerifySignaturesData, }; @@ -343,6 +345,22 @@ pub fn fee_collector_address(bridge: String) -> Vec { bridge_key.to_bytes().to_vec() } +#[wasm_bindgen] +pub fn claim_address(program_id: String, vaa: Vec) -> Vec { + let program_id = Pubkey::from_str(program_id.as_str()).unwrap(); + + let vaa = VAA::deserialize(vaa.as_slice()).unwrap(); + let claim_key = Claim::<'_, { AccountState::Initialized }>::key( + &ClaimDerivationData { + emitter_address: vaa.emitter_address, + emitter_chain: vaa.emitter_chain, + sequence: vaa.sequence, + }, + &program_id, + ); + claim_key.to_bytes().to_vec() +} + #[wasm_bindgen] pub fn parse_posted_message(data: Vec) -> JsValue { JsValue::from_serde(&PostedVAAData::try_from_slice(data.as_slice()).unwrap().0).unwrap() diff --git a/solana/modules/nft_bridge/program/src/wasm.rs b/solana/modules/nft_bridge/program/src/wasm.rs index efc01ff5..f0fd9034 100644 --- a/solana/modules/nft_bridge/program/src/wasm.rs +++ b/solana/modules/nft_bridge/program/src/wasm.rs @@ -2,6 +2,8 @@ use crate::{ accounts::{ AuthoritySigner, EmitterAccount, + SplTokenMeta, + SplTokenMetaDerivationData, WrappedDerivationData, WrappedMetaDerivationData, WrappedMint, @@ -404,6 +406,18 @@ pub fn wrapped_meta_address(program_id: String, mint_address: Vec) -> Vec) -> Vec { + let mint_key = Pubkey::new(mint_address.as_slice()); + + let spl_metadata = SplTokenMeta::key( + &SplTokenMetaDerivationData { mint: mint_key }, + &spl_token_metadata::id(), + ); + + spl_metadata.to_bytes().to_vec() +} + #[wasm_bindgen] pub fn parse_wrapped_meta(data: Vec) -> JsValue { JsValue::from_serde(&WrappedMeta::try_from_slice(data.as_slice()).unwrap()).unwrap()