From bf59b12084bfc7195e5021755c94fdef41ba177b Mon Sep 17 00:00:00 2001 From: Ignacio Date: Mon, 15 Apr 2024 11:59:58 +0800 Subject: [PATCH] fix: remove memo and handle connection popup --- .../staking_section/staking_modal.tsx | 2 + .../staking_sdk/wallet_operations/solana.ts | 39 ++++++++++++------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/screens/staking/components/staking_section/staking_modal.tsx b/src/screens/staking/components/staking_section/staking_modal.tsx index 60cba56f..94925c56 100644 --- a/src/screens/staking/components/staking_section/staking_modal.tsx +++ b/src/screens/staking/components/staking_section/staking_modal.tsx @@ -31,6 +31,7 @@ import { getAccountNormalisedBalance } from "@src/screens/staking/lib/staking_sd import { getEmptyCoin, getIsCoin, + normaliseCoin, } from "@src/screens/staking/lib/staking_sdk/utils/coins"; import { getUnbondingTimeForNetwork } from "@src/screens/staking/lib/staking_sdk/utils/networks"; import { @@ -119,6 +120,7 @@ const StakingModal = () => { } const minimumStakeAmount = minimumStakeAmountMap[selectedAccount.networkId]; + const normalised = normaliseCoin(minimumStakeAmount); if (minimumStakeAmount && amountNum.lt(minimumStakeAmount.amount)) { return t("stakingModal.amountError.notEnough", { diff --git a/src/screens/staking/lib/staking_sdk/wallet_operations/solana.ts b/src/screens/staking/lib/staking_sdk/wallet_operations/solana.ts index c56e55ab..e68ee036 100644 --- a/src/screens/staking/lib/staking_sdk/wallet_operations/solana.ts +++ b/src/screens/staking/lib/staking_sdk/wallet_operations/solana.ts @@ -7,6 +7,7 @@ import { Transaction, } from "@solana/web3.js"; import Solflare from "@solflare-wallet/sdk"; +import BigNumber from "bignumber.js"; import { toastError } from "@src/components/notification"; @@ -141,7 +142,14 @@ export const tryToConnectSolflare = async ( await Promise.all([ hasMainnetWallet ? mainnetWallet.connect() : Promise.resolve(), hasDevnetWallet ? devnetWallet.connect() : Promise.resolve(), - ]); + ]).catch((err) => { + if (!err) { + // This means that the user closed the popup or rejected the connection + resolve(false); + } + + reject(err); + }); }); }; @@ -161,7 +169,11 @@ export const tryToConnectPhantom = async ( const resp = await provider.connect(); publicKey = resp.publicKey.toString(); - } catch (error) { + } catch (error: any) { + if (error?.message?.includes("User rejected the request")) { + return false; + } + toastError({ title: walletErrorMap.phantomCreateWallet, }); @@ -214,12 +226,12 @@ export const tryToConnectPhantom = async ( // In mainnet less than 0.01 SOL it gives an error from the wallet estimation. export const minimumSolanaStakeAmount: { [key in StakingNetworkId]?: Coin } = { [StakingNetworkId.Solana]: { - amount: (LAMPORTS_PER_SOL * 0.01).toString(), - denom: "lamports", + amount: "0.01", + denom: "SOL", }, [StakingNetworkId.SolanaDevnet]: { - amount: (LAMPORTS_PER_SOL * 0.001).toString(), - denom: "lamports", + amount: "0.001", + denom: "SOL", }, }; @@ -263,24 +275,23 @@ export const stakeAmountSolana = async ({ const stakeKeyPair = Keypair.generate(); - const amountToStake = Number(amount) * LAMPORTS_PER_SOL; - const minimumAmount = minimumSolanaStakeAmount[account.networkId] || { amount: "0", - denom: "lamports", + denom: "SOL", }; - if (amountToStake < Number(minimumAmount)) { + const amountBN = new BigNumber(amount); + + if (amountBN.lt(normaliseCoin(minimumAmount).amount)) { return { - coin: normaliseCoin({ - amount: minimumAmount.toString(), - denom: "LAMPORTS", - }), + coin: minimumAmount, error: StakeError.MinimumAmount, success: false, }; } + const amountToStake = amountBN.times(LAMPORTS_PER_SOL).toNumber(); + const newTx = StakeProgram.createAccount({ authorized: new Authorized(accountKey, accountKey), fromPubkey: accountKey,