From 1909455972f3f27df68160e59a1830d1daf727d2 Mon Sep 17 00:00:00 2001 From: Jean Ribeiro Date: Thu, 23 Feb 2023 20:53:15 -0300 Subject: [PATCH 1/7] feat: adds surplus to base activity type --- .../lib/core/wallet/types/activities/base-activity.type.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/shared/lib/core/wallet/types/activities/base-activity.type.ts b/packages/shared/lib/core/wallet/types/activities/base-activity.type.ts index 2f91e36724f..16e53c916f3 100644 --- a/packages/shared/lib/core/wallet/types/activities/base-activity.type.ts +++ b/packages/shared/lib/core/wallet/types/activities/base-activity.type.ts @@ -16,6 +16,7 @@ export type BaseActivity = { isInternal: boolean storageDeposit: number giftedStorageDeposit: number + surplus?: number subject: Subject metadata?: string tag?: string From c17750cbc284605dbf0239cd49a9d1bb0d59229a Mon Sep 17 00:00:00 2001 From: Jean Ribeiro Date: Thu, 23 Feb 2023 20:54:35 -0300 Subject: [PATCH 2/7] feat: adds surplus to GenericActivityInformation --- .../molecules/activity-info/GenericActivityInformation.svelte | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/shared/components/molecules/activity-info/GenericActivityInformation.svelte b/packages/shared/components/molecules/activity-info/GenericActivityInformation.svelte index d32996781b7..675134eaa58 100644 --- a/packages/shared/components/molecules/activity-info/GenericActivityInformation.svelte +++ b/packages/shared/components/molecules/activity-info/GenericActivityInformation.svelte @@ -24,6 +24,7 @@ $: baseToken = BASE_TOKEN[$activeProfile?.networkProtocol] $: formattedStorageDeposit = formatTokenAmountPrecise(activity.storageDeposit ?? 0, baseToken) $: formattedGiftedStorageDeposit = formatTokenAmountPrecise(activity.giftedStorageDeposit ?? 0, baseToken) + $: formattedSurplus = formatTokenAmountPrecise(activity.surplus ?? 0, baseToken) $: formattedGasBudget = formatTokenAmountPrecise(Number(gasBudget ?? 0), baseToken) let transactionDetailsList: IKeyValueBoxList @@ -43,6 +44,9 @@ ...(hasStorageDeposit && { storageDeposit: { data: formattedStorageDeposit, isTooltipVisible: true }, }), + ...(activity?.surplus && { + surplus: { data: formattedSurplus }, + }), ...(activity?.giftedStorageDeposit && { giftedStorageDeposit: { data: formattedGiftedStorageDeposit, isTooltipVisible: true }, }), From a776ee12b3c7e598c26175c743f0445027d25797 Mon Sep 17 00:00:00 2001 From: Jean Ribeiro Date: Thu, 23 Feb 2023 20:55:10 -0300 Subject: [PATCH 3/7] fix: adds visible surplus --- .../components/popups/send/SendConfirmationPopup.svelte | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/desktop/components/popups/send/SendConfirmationPopup.svelte b/packages/desktop/components/popups/send/SendConfirmationPopup.svelte index 3da13824c62..fca0f6b9a00 100644 --- a/packages/desktop/components/popups/send/SendConfirmationPopup.svelte +++ b/packages/desktop/components/popups/send/SendConfirmationPopup.svelte @@ -63,6 +63,7 @@ } = get(newTransactionDetails) let storageDeposit = 0 + let visibleSurplus = 0 let preparedOutput: Output let outputOptions: OutputOptions let expirationTimePicker: ExpirationTimePicker @@ -86,6 +87,7 @@ subject: recipient, isInternal, giftedStorageDeposit: 0, + surplus: visibleSurplus, type: ActivityType.Basic, direction: ActivityDirection.Outgoing, inclusionState: InclusionState.Pending, @@ -148,6 +150,10 @@ const { storageDeposit: _storageDeposit, giftedStorageDeposit: _giftedStorageDeposit } = getStorageDepositFromOutput(preparedOutput) + if (surplus > _storageDeposit) { + visibleSurplus = Number(surplus) + } + if (giftStorageDeposit) { // Only giftedStorageDeposit needs adjusting, since that is derived // from the amount property instead of the unlock condition From 9c7eb317a75988c2f9285900836725df708db6fb Mon Sep 17 00:00:00 2001 From: Jean Ribeiro Date: Wed, 8 Mar 2023 12:07:42 -0300 Subject: [PATCH 4/7] fix: adds surplus not supported in base asset error --- .../shared/lib/auxiliary/deep-link/errors/index.ts | 1 + .../errors/surplus-not-supported.error.ts | 14 ++++++++++++++ .../handleDeepLinkSendConfirmationOperation.ts | 5 ++++- packages/shared/locales/en.json | 1 + 4 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 packages/shared/lib/auxiliary/deep-link/errors/surplus-not-supported.error.ts diff --git a/packages/shared/lib/auxiliary/deep-link/errors/index.ts b/packages/shared/lib/auxiliary/deep-link/errors/index.ts index f0ba065a1fb..066181b1df4 100644 --- a/packages/shared/lib/auxiliary/deep-link/errors/index.ts +++ b/packages/shared/lib/auxiliary/deep-link/errors/index.ts @@ -5,4 +5,5 @@ export * from './metadata-length.error' export * from './no-address-specified.error' export * from './tag-length.error' export * from './surplus-not-a-number.error' +export * from './surplus-not-supported.error' export * from './unknown-asset.error' diff --git a/packages/shared/lib/auxiliary/deep-link/errors/surplus-not-supported.error.ts b/packages/shared/lib/auxiliary/deep-link/errors/surplus-not-supported.error.ts new file mode 100644 index 00000000000..2fdb81510c4 --- /dev/null +++ b/packages/shared/lib/auxiliary/deep-link/errors/surplus-not-supported.error.ts @@ -0,0 +1,14 @@ +import { BaseError } from '@core/error' +import { localize } from '@core/i18n' + +export class SurplusNotSupportedError extends BaseError { + constructor() { + const message = localize('notifications.deepLinkingRequest.surplusNotSupported') + super({ + message, + showNotification: true, + saveToErrorLog: true, + logToConsole: true, + }) + } +} diff --git a/packages/shared/lib/auxiliary/deep-link/handlers/wallet/operations/handleDeepLinkSendConfirmationOperation.ts b/packages/shared/lib/auxiliary/deep-link/handlers/wallet/operations/handleDeepLinkSendConfirmationOperation.ts index 41696a18c09..c38d5029dd7 100644 --- a/packages/shared/lib/auxiliary/deep-link/handlers/wallet/operations/handleDeepLinkSendConfirmationOperation.ts +++ b/packages/shared/lib/auxiliary/deep-link/handlers/wallet/operations/handleDeepLinkSendConfirmationOperation.ts @@ -14,10 +14,11 @@ import { openPopup, PopupId } from '@auxiliary/popup' import { SendOperationParameter } from '../../../enums' import { - SurplusNotANumberError, InvalidAddressError, MetadataLengthError, NoAddressSpecifiedError, + SurplusNotANumberError, + SurplusNotSupportedError, TagLengthError, UnknownAssetError, } from '../../../errors' @@ -72,6 +73,8 @@ function parseSendConfirmationOperation(searchParams: URLSearchParams): NewTrans const surplus = searchParams.get(SendOperationParameter.Surplus) if (surplus && parseInt(surplus).toString() !== surplus) { throw new SurplusNotANumberError(surplus) + } else if (surplus && asset.id === baseAsset.id) { + throw new SurplusNotSupportedError() } const metadata = searchParams.get(SendOperationParameter.Metadata) diff --git a/packages/shared/locales/en.json b/packages/shared/locales/en.json index 80b12c24439..df366eccb7b 100644 --- a/packages/shared/locales/en.json +++ b/packages/shared/locales/en.json @@ -1717,6 +1717,7 @@ "invalidFormat": "The deep link you followed is invalid", "invalidAmount": "The amount in deep link is not an integer number {amount}", "invalidSurplus": "The surplus in deep link is not a number {surplus}", + "surplusNotSupported": "The surplus is only supported for native tokens", "governance": { "unrecognizedOperation": "Unrecognized Governance operation: {operation}" }, From b0ba1a1b8254e8e5af04b42122f37005482e80c5 Mon Sep 17 00:00:00 2001 From: Jean Ribeiro Date: Wed, 8 Mar 2023 15:06:17 -0300 Subject: [PATCH 5/7] fix: hide gift toggle if it is disabled and not active --- .../components/popups/send/SendConfirmationPopup.svelte | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/desktop/components/popups/send/SendConfirmationPopup.svelte b/packages/desktop/components/popups/send/SendConfirmationPopup.svelte index fca0f6b9a00..72c3efa5ba0 100644 --- a/packages/desktop/components/popups/send/SendConfirmationPopup.svelte +++ b/packages/desktop/components/popups/send/SendConfirmationPopup.svelte @@ -76,8 +76,9 @@ $: isInternal = recipient.type === 'account' $: expirationTimePicker?.setNull(giftStorageDeposit) $: hideGiftToggle = - transactionDetails.type === NewTransactionType.TokenTransfer && - transactionDetails.assetId === $selectedAccountAssets?.baseCoin?.id + (transactionDetails.type === NewTransactionType.TokenTransfer && + transactionDetails.assetId === $selectedAccountAssets?.baseCoin?.id) || + (disableToggleGift && !giftStorageDeposit) $: expirationDate, giftStorageDeposit, refreshSendConfirmationState() $: isTransferring = $selectedAccount.isTransferring From 75290f7fdd4797c1b8a6367113af5e57859ec8c5 Mon Sep 17 00:00:00 2001 From: Jean Ribeiro Date: Wed, 8 Mar 2023 15:32:35 -0300 Subject: [PATCH 6/7] fix: adds gifted storage deposit calculation if sending base token --- .../components/popups/send/SendConfirmationPopup.svelte | 5 ++++- .../generateActivity/helper/getStorageDepositFromOutput.ts | 7 ++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/desktop/components/popups/send/SendConfirmationPopup.svelte b/packages/desktop/components/popups/send/SendConfirmationPopup.svelte index 72c3efa5ba0..71ea092d237 100644 --- a/packages/desktop/components/popups/send/SendConfirmationPopup.svelte +++ b/packages/desktop/components/popups/send/SendConfirmationPopup.svelte @@ -148,8 +148,11 @@ } function setStorageDeposit(preparedOutput: Output, surplus?: number): void { + const rawAmount = + transactionDetails.type === NewTransactionType.TokenTransfer ? transactionDetails.rawAmount : '0' + const { storageDeposit: _storageDeposit, giftedStorageDeposit: _giftedStorageDeposit } = - getStorageDepositFromOutput(preparedOutput) + getStorageDepositFromOutput(preparedOutput, rawAmount) if (surplus > _storageDeposit) { visibleSurplus = Number(surplus) diff --git a/packages/shared/lib/core/wallet/utils/generateActivity/helper/getStorageDepositFromOutput.ts b/packages/shared/lib/core/wallet/utils/generateActivity/helper/getStorageDepositFromOutput.ts index fde043fcc0a..5246858d079 100644 --- a/packages/shared/lib/core/wallet/utils/generateActivity/helper/getStorageDepositFromOutput.ts +++ b/packages/shared/lib/core/wallet/utils/generateActivity/helper/getStorageDepositFromOutput.ts @@ -2,7 +2,10 @@ import { Output } from '@core/wallet/types' import { IStorageDepositReturnUnlockCondition } from '@iota/types' import { OUTPUT_TYPE_NFT, UNLOCK_CONDITION_STORAGE_DEPOSIT_RETURN } from '../../../constants' -export function getStorageDepositFromOutput(output: Output): { +export function getStorageDepositFromOutput( + output: Output, + rawAmount?: string +): { storageDeposit: number giftedStorageDeposit: number } { @@ -15,6 +18,8 @@ export function getStorageDepositFromOutput(output: Output): { return { storageDeposit: Number(storageDepositReturnUnlockCondition.amount), giftedStorageDeposit: 0 } } else if (output.type === OUTPUT_TYPE_NFT || (output?.nativeTokens?.length > 0 && Number(output?.amount) > 0)) { return { storageDeposit: 0, giftedStorageDeposit: Number(output?.amount) } + } else if (rawAmount && Number(rawAmount) > 0) { + return { storageDeposit: 0, giftedStorageDeposit: Number(output?.amount) - Number(rawAmount) } } else { return { storageDeposit: 0, giftedStorageDeposit: 0 } } From d1daf030e87465342115a9fb811be0118dcde9f1 Mon Sep 17 00:00:00 2001 From: Jean Ribeiro Date: Wed, 8 Mar 2023 15:40:08 -0300 Subject: [PATCH 7/7] fix --- .../generateActivity/helper/getStorageDepositFromOutput.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/shared/lib/core/wallet/utils/generateActivity/helper/getStorageDepositFromOutput.ts b/packages/shared/lib/core/wallet/utils/generateActivity/helper/getStorageDepositFromOutput.ts index 5246858d079..0b433bb671e 100644 --- a/packages/shared/lib/core/wallet/utils/generateActivity/helper/getStorageDepositFromOutput.ts +++ b/packages/shared/lib/core/wallet/utils/generateActivity/helper/getStorageDepositFromOutput.ts @@ -18,7 +18,7 @@ export function getStorageDepositFromOutput( return { storageDeposit: Number(storageDepositReturnUnlockCondition.amount), giftedStorageDeposit: 0 } } else if (output.type === OUTPUT_TYPE_NFT || (output?.nativeTokens?.length > 0 && Number(output?.amount) > 0)) { return { storageDeposit: 0, giftedStorageDeposit: Number(output?.amount) } - } else if (rawAmount && Number(rawAmount) > 0) { + } else if (rawAmount && Number(rawAmount) > 0 && Number(output?.amount) > Number(rawAmount)) { return { storageDeposit: 0, giftedStorageDeposit: Number(output?.amount) - Number(rawAmount) } } else { return { storageDeposit: 0, giftedStorageDeposit: 0 }