diff --git a/packages/taler-wallet-core/src/db.ts b/packages/taler-wallet-core/src/db.ts index d2d01e100..72e9aff04 100644 --- a/packages/taler-wallet-core/src/db.ts +++ b/packages/taler-wallet-core/src/db.ts @@ -1864,6 +1864,12 @@ export interface PeerPullPaymentIncomingRecord { * Status of the peer push payment incoming initiation. */ status: PeerPullPaymentIncomingStatus; + + /** + * Total cost based on the coin selection. + * Non undefined after status === "Accepted" + */ + totalCost: AmountString | undefined; } /** diff --git a/packages/taler-wallet-core/src/operations/pay-peer.ts b/packages/taler-wallet-core/src/operations/pay-peer.ts index 48434e452..7dc7b67fe 100644 --- a/packages/taler-wallet-core/src/operations/pay-peer.ts +++ b/packages/taler-wallet-core/src/operations/pay-peer.ts @@ -882,6 +882,11 @@ export async function acceptPeerPullPayment( const sel = coinSelRes.result; + const totalAmount = await getTotalPeerPaymentCost( + ws, + coinSelRes.result.coins, + ); + await ws.db .mktx((x) => [ x.exchanges, @@ -908,6 +913,7 @@ export async function acceptPeerPullPayment( throw Error(); } pi.status = PeerPullPaymentIncomingStatus.Accepted; + pi.totalCost = Amounts.stringify(totalAmount); await tx.peerPullPaymentIncoming.put(pi); }); @@ -995,6 +1001,7 @@ export async function checkPeerPullPayment( timestampCreated: TalerProtocolTimestamp.now(), contractTerms: dec.contractTerms, status: PeerPullPaymentIncomingStatus.Proposed, + totalCost: undefined, }); }); diff --git a/packages/taler-wallet-core/src/operations/transactions.ts b/packages/taler-wallet-core/src/operations/transactions.ts index 58def0f34..b94617851 100644 --- a/packages/taler-wallet-core/src/operations/transactions.ts +++ b/packages/taler-wallet-core/src/operations/transactions.ts @@ -380,7 +380,9 @@ function buildTransactionForPullPaymentDebit( ): Transaction { return { type: TransactionType.PeerPullDebit, - amountEffective: Amounts.stringify(pi.contractTerms.amount), + amountEffective: pi.totalCost + ? pi.totalCost + : Amounts.stringify(pi.contractTerms.amount), amountRaw: Amounts.stringify(pi.contractTerms.amount), exchangeBaseUrl: pi.exchangeBaseUrl, frozen: false,