From ff8f22dc4e8f0b70d4b51f2eb85b909fc0d985bd Mon Sep 17 00:00:00 2001 From: vetalcore Date: Mon, 24 Jun 2024 23:47:01 +0300 Subject: [PATCH] fix(extension): [lw-10782] fix fiat amount for pending tx, differentiate between conway and non --- .../src/hooks/useWalletActivities.ts | 1 + .../src/utils/tx-inspection.ts | 18 ++++++++++++------ .../activity/helpers/common-tx-transformer.ts | 16 ++++++++++------ 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/apps/browser-extension-wallet/src/hooks/useWalletActivities.ts b/apps/browser-extension-wallet/src/hooks/useWalletActivities.ts index 20d50ef016..23f164a889 100644 --- a/apps/browser-extension-wallet/src/hooks/useWalletActivities.ts +++ b/apps/browser-extension-wallet/src/hooks/useWalletActivities.ts @@ -22,6 +22,7 @@ export const useWalletActivities = ({ const fetchWalletActivities = useCallback(async () => { fiatCurrency && + cardanoFiatPrice && getWalletActivities({ fiatCurrency, cardanoFiatPrice, diff --git a/apps/browser-extension-wallet/src/utils/tx-inspection.ts b/apps/browser-extension-wallet/src/utils/tx-inspection.ts index 47d0391a0b..9d638ebdd3 100644 --- a/apps/browser-extension-wallet/src/utils/tx-inspection.ts +++ b/apps/browser-extension-wallet/src/utils/tx-inspection.ts @@ -9,6 +9,7 @@ import { sentInspector, totalAddressOutputsValueInspector } from '@cardano-sdk/core'; +import { certificateInspectorFactory } from '@src/features/dapp/components/confirm-transaction/utils'; import { Wallet } from '@lace/cardano'; import { ActivityType, @@ -54,10 +55,6 @@ const governanceCertificateInspection = ( // Assumes single certificate only, should update switch (true) { - case signedCertificateTypenames.includes(CertificateType.Registration): - return ConwayEraCertificatesTypes.Registration; - case signedCertificateTypenames.includes(CertificateType.Unregistration): - return ConwayEraCertificatesTypes.Unregistration; case signedCertificateTypenames.includes(CertificateType.RegisterDelegateRepresentative): return ConwayEraCertificatesTypes.RegisterDelegateRepresentative; case signedCertificateTypenames.includes(CertificateType.UnregisterDelegateRepresentative): @@ -112,7 +109,7 @@ const getWalletAccounts = (walletAddresses: Wallet.KeyManagement.GroupedAddress[ { paymentAddresses: [], rewardAccounts: [] } ); -const txIncludesConwayCertificates = (certificates?: Wallet.Cardano.Certificate[]) => +export const txIncludesConwayCertificates = (certificates?: Wallet.Cardano.Certificate[]): boolean => certificates?.length > 0 ? certificates.some((certificate) => Object.values(ConwayEraCertificatesTypes).includes( @@ -162,11 +159,16 @@ export const inspectTxType = async ({ delegation: delegationInspector, stakeKeyRegistration: stakeKeyRegistrationInspector, stakeKeyDeregistration: stakeKeyDeregistrationInspector, + conwayEraStakeKeyRegistration: certificateInspectorFactory(CertificateType.Registration), + conwayEraStakeKeyDeregistration: certificateInspectorFactory(CertificateType.Unregistration), selfTransaction: selfTxInspector(paymentAddresses) })(tx); if (txIncludesConwayCertificates(tx.body.certificates)) { - return governanceCertificateInspection(tx.body.certificates); + const inspection = governanceCertificateInspection(tx.body.certificates); + if (inspection) { + return inspection; + } } const withRewardsWithdrawal = isTxWithRewardsWithdrawal( @@ -183,6 +185,10 @@ export const inspectTxType = async ({ return DelegationActivityType.delegationRegistration; case inspectionProperties.stakeKeyDeregistration.length > 0: return DelegationActivityType.delegationDeregistration; + case !!inspectionProperties.conwayEraStakeKeyRegistration: + return ConwayEraCertificatesTypes.Registration; + case !!inspectionProperties.conwayEraStakeKeyDeregistration: + return ConwayEraCertificatesTypes.Unregistration; // Voting procedures take priority over proposals // TODO: use proper inspector when available on sdk side (LW-9569) case tx.body.votingProcedures?.length > 0: diff --git a/apps/browser-extension-wallet/src/views/browser-view/features/activity/helpers/common-tx-transformer.ts b/apps/browser-extension-wallet/src/views/browser-view/features/activity/helpers/common-tx-transformer.ts index e1903bfea8..bf2517fa9a 100644 --- a/apps/browser-extension-wallet/src/views/browser-view/features/activity/helpers/common-tx-transformer.ts +++ b/apps/browser-extension-wallet/src/views/browser-view/features/activity/helpers/common-tx-transformer.ts @@ -4,11 +4,11 @@ import BigNumber from 'bignumber.js'; import { Wallet } from '@lace/cardano'; import { CurrencyInfo, TxDirections } from '@types'; -import { inspectTxValues, inspectTxType } from '@src/utils/tx-inspection'; +import { inspectTxValues, inspectTxType, txIncludesConwayCertificates } from '@src/utils/tx-inspection'; import { formatDate, formatTime } from '@src/utils/format-date'; import { getTransactionTotalAmount } from '@src/utils/get-transaction-total-amount'; import type { TransformedActivity, TransformedTransactionActivity } from './types'; -import { ActivityStatus, DelegationActivityType } from '@lace/core'; +import { ActivityStatus, ConwayEraCertificatesTypes, DelegationActivityType } from '@lace/core'; import capitalize from 'lodash/capitalize'; import dayjs from 'dayjs'; import { hasPhase2ValidationFailed } from '@src/utils/phase2-validation'; @@ -43,7 +43,7 @@ export const getFormattedFiatAmount = ({ return fiatAmount ? `${fiatAmount} ${fiatCurrency.code}` : '-'; }; -const splitDelegationTx = (tx: TransformedActivity): TransformedTransactionActivity[] => { +const splitDelegationTx = (tx: TransformedActivity, hasConwayEraCerts: boolean): TransformedTransactionActivity[] => { if (tx.deposit) { return [ { @@ -54,7 +54,9 @@ const splitDelegationTx = (tx: TransformedActivity): TransformedTransactionActiv }, { ...tx, - type: DelegationActivityType.delegationRegistration, + type: hasConwayEraCerts + ? ConwayEraCertificatesTypes.Registration + : DelegationActivityType.delegationRegistration, // Let registration show just the deposit, // and the other transaction show fee to avoid duplicity fee: '0' @@ -70,7 +72,9 @@ const splitDelegationTx = (tx: TransformedActivity): TransformedTransactionActiv }, { ...tx, - type: DelegationActivityType.delegationDeregistration, + type: hasConwayEraCerts + ? ConwayEraCertificatesTypes.Unregistration + : DelegationActivityType.delegationDeregistration, // Let de-registration show just the returned deposit, // and the other transaction show fee to avoid duplicity fee: '0' @@ -239,7 +243,7 @@ export const txTransformer = async ({ }); if (type === DelegationActivityType.delegation) { - return splitDelegationTx(baseTransformedActivity); + return splitDelegationTx(baseTransformedActivity, txIncludesConwayCertificates(tx.body.certificates)); } return [