taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit 582b6ae5f4139cd1be8096dd59371430455bbeef
parent dd9e4555baf3b98478e9ad2b0edf81ea81add5e2
Author: Florian Dold <florian@dold.me>
Date:   Thu, 23 Feb 2023 16:07:14 +0100

wallet-core: report correct amountEffective in peer-pull-credit even before withdrawal is active

Diffstat:
Mpackages/taler-wallet-core/src/crypto/workers/nodeThreadWorker.ts | 2+-
Mpackages/taler-wallet-core/src/db.ts | 14++++++++++++++
Mpackages/taler-wallet-core/src/operations/exchanges.ts | 1+
Mpackages/taler-wallet-core/src/operations/pay-peer.ts | 8++++++++
Mpackages/taler-wallet-core/src/operations/transactions.ts | 2+-
5 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/packages/taler-wallet-core/src/crypto/workers/nodeThreadWorker.ts b/packages/taler-wallet-core/src/crypto/workers/nodeThreadWorker.ts @@ -151,7 +151,7 @@ class NodeThreadCryptoWorker implements CryptoWorker { this.onmessage(v); } }); - this.nodeWorker.unref(); + //this.nodeWorker.unref(); } /** diff --git a/packages/taler-wallet-core/src/db.ts b/packages/taler-wallet-core/src/db.ts @@ -1795,6 +1795,8 @@ export interface PeerPullPaymentInitiationRecord { */ amount: AmountString; + estimatedAmountEffective: AmountString; + /** * Purse public key. Used as the primary key to look * up this record. @@ -2607,6 +2609,18 @@ export const walletDbFixups: FixupDescription[] = [ }, }, { + name: "PeerPullPaymentInitiationRecord_estimatedAmountEffective_add", + async fn(tx): Promise<void> { + await tx.peerPullPaymentInitiations.iter().forEachAsync(async (pi) => { + if (pi.estimatedAmountEffective) { + return; + } + pi.estimatedAmountEffective = pi.amount; + await tx.peerPullPaymentInitiations.put(pi); + }); + }, + }, + { name: "PeerPushPaymentInitiationRecord_ALL_removeLegacyTx", async fn(tx): Promise<void> { await tx.peerPushPaymentInitiations.iter().forEachAsync(async (pi) => { diff --git a/packages/taler-wallet-core/src/operations/exchanges.ts b/packages/taler-wallet-core/src/operations/exchanges.ts @@ -260,6 +260,7 @@ async function validateWireInfo( throw Error("exchange acct signature invalid"); } } + logger.trace("account validation done"); const feesForType: WireFeeMap = {}; for (const wireMethod of Object.keys(wireInfo.fees)) { const feeList: WireFee[] = []; diff --git a/packages/taler-wallet-core/src/operations/pay-peer.ts b/packages/taler-wallet-core/src/operations/pay-peer.ts @@ -1655,6 +1655,13 @@ export async function initiatePeerPullPayment( const mergeReserveRowId = mergeReserveInfo.rowId; checkDbInvariant(!!mergeReserveRowId); + const wi = await getExchangeWithdrawalInfo( + ws, + exchangeBaseUrl, + Amounts.parseOrThrow(req.partialContractTerms.amount), + undefined, + ); + await ws.db .mktx((x) => [x.peerPullPaymentInitiations, x.contractTerms]) .runReadWrite(async (tx) => { @@ -1673,6 +1680,7 @@ export async function initiatePeerPullPayment( contractPriv: contractKeyPair.priv, contractPub: contractKeyPair.pub, withdrawalGroupId, + estimatedAmountEffective: wi.withdrawalAmountEffective, }); await tx.contractTerms.put({ contractTermsRaw: contractTerms, diff --git a/packages/taler-wallet-core/src/operations/transactions.ts b/packages/taler-wallet-core/src/operations/transactions.ts @@ -542,7 +542,7 @@ function buildTransactionForPeerPullCredit( return { type: TransactionType.PeerPullCredit, - amountEffective: Amounts.stringify(peerContractTerms.amount), + amountEffective: Amounts.stringify(pullCredit.amount), amountRaw: Amounts.stringify(peerContractTerms.amount), exchangeBaseUrl: pullCredit.exchangeBaseUrl, extendedStatus: ExtendedStatus.Pending,