Encode mint in token ID on Solana
Change-Id: Ice9c2b64992e60bb8a0eb5d0a109043eda2d44ac
This commit is contained in:
parent
371c9b3dcc
commit
64b17d851a
|
@ -101,7 +101,13 @@ pub fn complete_native(
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verify VAA
|
// Verify VAA
|
||||||
if accs.vaa.token_address != accs.mint.info().key.to_bytes() {
|
// Please refer to transfer.rs for why the token id is used to store the mint
|
||||||
|
if accs.vaa.token_address != [1u8; 32] {
|
||||||
|
return Err(InvalidMint.into());
|
||||||
|
}
|
||||||
|
let mut token_id_bytes = [0u8; 32];
|
||||||
|
accs.vaa.token_id.to_big_endian(&mut token_id_bytes);
|
||||||
|
if token_id_bytes != accs.mint.info().key.to_bytes() {
|
||||||
return Err(InvalidMint.into());
|
return Err(InvalidMint.into());
|
||||||
}
|
}
|
||||||
if accs.vaa.token_chain != CHAIN_ID_SOLANA {
|
if accs.vaa.token_chain != CHAIN_ID_SOLANA {
|
||||||
|
|
|
@ -187,15 +187,18 @@ pub fn transfer_native(
|
||||||
Metadata::from_account_info(accs.spl_metadata.info()).ok_or(InvalidMetadata)?;
|
Metadata::from_account_info(accs.spl_metadata.info()).ok_or(InvalidMetadata)?;
|
||||||
|
|
||||||
// Post message
|
// Post message
|
||||||
|
// Given there is no tokenID equivalent on Solana and each distinct token address is translated
|
||||||
|
// into a new contract on EVM based chains (which is costly), we use a static token_address
|
||||||
|
// and encode the mint in the token_id.
|
||||||
let payload = PayloadTransfer {
|
let payload = PayloadTransfer {
|
||||||
token_address: accs.mint.info().key.to_bytes(),
|
token_address: [1u8; 32],
|
||||||
token_chain: 1,
|
token_chain: 1,
|
||||||
to: data.target_address,
|
to: data.target_address,
|
||||||
to_chain: data.target_chain,
|
to_chain: data.target_chain,
|
||||||
symbol: metadata.data.symbol,
|
symbol: metadata.data.symbol,
|
||||||
name: metadata.data.name,
|
name: metadata.data.name,
|
||||||
uri: metadata.data.uri,
|
uri: metadata.data.uri,
|
||||||
token_id: U256::from(0), // TODO
|
token_id: U256::from_big_endian(&accs.mint.info().key.to_bytes()),
|
||||||
};
|
};
|
||||||
let params = (
|
let params = (
|
||||||
bridge::instruction::Instruction::PostMessage,
|
bridge::instruction::Instruction::PostMessage,
|
||||||
|
|
|
@ -168,6 +168,8 @@ pub fn complete_transfer_native_ix(
|
||||||
payload: vaa.payload,
|
payload: vaa.payload,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let mut mint_bytes = [0u8; 32];
|
||||||
|
payload.token_id.to_big_endian(&mut mint_bytes);
|
||||||
let ix = complete_native(
|
let ix = complete_native(
|
||||||
program_id,
|
program_id,
|
||||||
bridge_id,
|
bridge_id,
|
||||||
|
@ -175,7 +177,7 @@ pub fn complete_transfer_native_ix(
|
||||||
message_key,
|
message_key,
|
||||||
post_vaa_data,
|
post_vaa_data,
|
||||||
to_authority,
|
to_authority,
|
||||||
Pubkey::new(&payload.token_address),
|
Pubkey::new(&mint_bytes),
|
||||||
CompleteNativeData {},
|
CompleteNativeData {},
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
Loading…
Reference in New Issue