From 698091b2b181859d00e1dab5e73db9f50c3b4ad8 Mon Sep 17 00:00:00 2001 From: David Paryente Date: Fri, 10 Sep 2021 12:03:42 +0000 Subject: [PATCH] Revert "solana/token_bridge: calculate diff from original mint" Revert submission 1325 Reason for revert: not supporting external mints Reverted Changes: I2bf59ecd3:solana/token_bridge: calculate diff from original ... I598373740:solana/token_bridge: check balance and truncation I67c7a1c7a:solana/token_bridge: test wrapped asset transfers Change-Id: I655694508774e40a489b810d7b4f9c17824ab5a3 --- .../program/src/api/complete_transfer.rs | 14 +++++--------- .../token_bridge/program/src/api/transfer.rs | 14 +++++--------- 2 files changed, 10 insertions(+), 18 deletions(-) diff --git a/solana/modules/token_bridge/program/src/api/complete_transfer.rs b/solana/modules/token_bridge/program/src/api/complete_transfer.rs index 4083ba21..86e0ab6d 100644 --- a/solana/modules/token_bridge/program/src/api/complete_transfer.rs +++ b/solana/modules/token_bridge/program/src/api/complete_transfer.rs @@ -244,23 +244,19 @@ pub fn complete_wrapped( let (_, is_external) = derive_mint_for_token(ctx.program_id, accs.vaa.token_address, accs.vaa.token_chain); - - // When dealing with external adopted mints, we check if the asset in question is larger than - // the mint in question. If it is, we truncate to the mints size. For example, sollet assets - // are truncated to 6 decimals, however Wormhole uses 8 and assumes wire-truncation to 8 - // decimals. - let (amount, fee) = if is_external && accs.wrapped_meta.original_decimals > accs.mint.decimals { - let difference = 8u32.checked_sub(accs.mint.decimals.into()).unwrap(); + let (amount, fee) = if is_external && accs.wrapped_meta.original_decimals > 6 { + // Sollet assets are truncated to 6 decimals, however Wormhole uses 8 and assumes + // wire-truncation to 8 decimals. ( accs.vaa .amount .as_u64() - .checked_div(10u64.pow(difference.min(accs.wrapped_meta.original_decimals as u32 - 6))) + .checked_div(10u64.pow(2.min(accs.wrapped_meta.original_decimals as u32 - 6))) .unwrap(), accs.vaa .fee .as_u64() - .checked_div(10u64.pow(difference.min(accs.wrapped_meta.original_decimals as u32 - 6))) + .checked_div(10u64.pow(2.min(accs.wrapped_meta.original_decimals as u32 - 6))) .unwrap(), ) } else { diff --git a/solana/modules/token_bridge/program/src/api/transfer.rs b/solana/modules/token_bridge/program/src/api/transfer.rs index 538e01e9..419788c8 100644 --- a/solana/modules/token_bridge/program/src/api/transfer.rs +++ b/solana/modules/token_bridge/program/src/api/transfer.rs @@ -336,19 +336,15 @@ pub fn transfer_wrapped( accs.wrapped_meta.token_address, accs.wrapped_meta.chain, ); - - // When dealing with external adopted mints, we check if the asset in question is larger than - // the mint in question. If it is, we truncate to the mints size. For example, sollet assets - // are truncated to 6 decimals, however Wormhole uses 8 and assumes wire-truncation to 8 - // decimals. Larger mints are unsupported. - let (amount, fee) = if is_external && accs.wrapped_meta.original_decimals > accs.mint.decimals { - let difference = 8u32.checked_sub(accs.mint.decimals.into()).unwrap(); + let (amount, fee) = if is_external && accs.wrapped_meta.original_decimals > 6 { + // Sollet assets are truncated to 6 decimals, however Wormhole uses 8 and assumes + // wire-truncation to 8 decimals. ( data.amount - .checked_mul(10u64.pow(difference.min(accs.wrapped_meta.original_decimals as u32 - 6))) + .checked_mul(10u64.pow(2.min(accs.wrapped_meta.original_decimals as u32 - 6))) .unwrap(), data.fee - .checked_mul(10u64.pow(difference.min(accs.wrapped_meta.original_decimals as u32 - 6))) + .checked_mul(10u64.pow(2.min(accs.wrapped_meta.original_decimals as u32 - 6))) .unwrap(), ) } else {