From 2ba6692c6ad97285e852fb0b74a650e067817003 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Mon, 28 Mar 2022 16:11:58 +0200 Subject: fix fee discrepancy The withdrawal call-to-action and withdrawal transaction details dialog showed different fees, as the "overhead" for unwithdrawable amounts in a reserve was not included in the withdrawal CTA. The withdrawal CTA now shows the same fees as the transaction details. --- .../taler-wallet-core/src/operations/withdraw.ts | 31 ++++++++++++---------- 1 file changed, 17 insertions(+), 14 deletions(-) (limited to 'packages/taler-wallet-core') diff --git a/packages/taler-wallet-core/src/operations/withdraw.ts b/packages/taler-wallet-core/src/operations/withdraw.ts index 7685ede73..7997ab5be 100644 --- a/packages/taler-wallet-core/src/operations/withdraw.ts +++ b/packages/taler-wallet-core/src/operations/withdraw.ts @@ -43,6 +43,7 @@ import { Duration, TalerProtocolTimestamp, TransactionType, + AmountString, } from "@gnu-taler/taler-util"; import { CoinRecord, @@ -103,6 +104,8 @@ interface DenominationSelectionInfo { export interface ExchangeWithdrawDetails { /** * Exchange that the reserve will be created at. + * + * FIXME: Should be its own record. */ exchangeInfo: ExchangeRecord; @@ -118,16 +121,6 @@ export interface ExchangeWithdrawDetails { */ selectedDenoms: DenominationSelectionInfo; - /** - * Fees for withdraw. - */ - withdrawFee: AmountJson; - - /** - * Remaining balance that is too small to be withdrawn. - */ - overhead: AmountJson; - /** * Does the wallet know about an auditor for * the exchange that the reserve. @@ -177,6 +170,13 @@ export interface ExchangeWithdrawDetails { * Libtool-style version string for the wallet. */ walletVersion: string; + + withdrawalAmountRaw: AmountString; + + /** + * Amount that will actually be added to the wallet's balance. + */ + withdrawalAmountEffective: AmountString; } /** @@ -976,13 +976,16 @@ async function processWithdrawGroupImpl( export async function getExchangeWithdrawalInfo( ws: InternalWalletState, exchangeBaseUrl: string, - amount: AmountJson, + instructedAmount: AmountJson, ): Promise { const { exchange, exchangeDetails } = await ws.exchangeOps.updateExchangeFromUrl(ws, exchangeBaseUrl); await updateWithdrawalDenoms(ws, exchangeBaseUrl); const denoms = await getCandidateWithdrawalDenoms(ws, exchangeBaseUrl); - const selectedDenoms = selectWithdrawalDenominations(amount, denoms); + const selectedDenoms = selectWithdrawalDenominations( + instructedAmount, + denoms, + ); const exchangeWireAccounts: string[] = []; for (const account of exchangeDetails.wireInfo.accounts) { exchangeWireAccounts.push(account.payto_uri); @@ -1061,14 +1064,14 @@ export async function getExchangeWithdrawalInfo( isAudited, isTrusted, numOfferedDenoms: possibleDenoms.length, - overhead: Amounts.sub(amount, selectedDenoms.totalWithdrawCost).amount, selectedDenoms, // FIXME: delete this field / replace by something we can display to the user trustedAuditorPubs: [], versionMatch, walletVersion: WALLET_EXCHANGE_PROTOCOL_VERSION, - withdrawFee, termsOfServiceAccepted: tosAccepted, + withdrawalAmountEffective: Amounts.stringify(selectedDenoms.totalCoinValue), + withdrawalAmountRaw: Amounts.stringify(instructedAmount), }; return ret; } -- cgit v1.2.3