From 926da5a26507f296b10335ecea1931e07239acd6 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Thu, 28 Mar 2024 11:27:32 +0100 Subject: wallet-core: fix query in exchange update, logging --- packages/taler-wallet-core/src/coinSelection.ts | 42 +++++++++++++++++++++++-- packages/taler-wallet-core/src/exchanges.ts | 5 ++- 2 files changed, 44 insertions(+), 3 deletions(-) (limited to 'packages') diff --git a/packages/taler-wallet-core/src/coinSelection.ts b/packages/taler-wallet-core/src/coinSelection.ts index cf323e586..6e3ef5917 100644 --- a/packages/taler-wallet-core/src/coinSelection.ts +++ b/packages/taler-wallet-core/src/coinSelection.ts @@ -199,7 +199,13 @@ export async function selectPayCoins( }, ); - logger.trace(`wire fees per exchange: ${j2s(wireFeesPerExchange)}`); + if (logger.shouldLogTrace()) { + logger.trace( + `instructed amount: ${Amounts.stringify(req.contractTermsAmount)}`, + ); + logger.trace(`wire fees per exchange: ${j2s(wireFeesPerExchange)}`); + logger.trace(`candidates: ${j2s(candidateDenoms)}`); + } const coinRes: SelectedCoin[] = []; const currency = contractTermsAmount.currency; @@ -750,6 +756,8 @@ async function selectPayCandidates( ): Promise<[AvailableDenom[], Record]> { // FIXME: Use the existing helper (from balance.ts) to // get acceptable exchanges. + logger.shouldLogTrace() && + logger.trace(`selecting available coin candidates for ${j2s(req)}`); const denoms: AvailableDenom[] = []; const exchanges = await tx.exchanges.iter().toArray(); const wfPerExchange: Record = {}; @@ -760,6 +768,8 @@ async function selectPayCandidates( ); // 1. exchange has same currency if (exchangeDetails?.currency !== req.instructedAmount.currency) { + logger.shouldLogTrace() && + logger.trace(`skipping ${exchange.baseUrl} due to currency mismatch`); continue; } @@ -771,6 +781,11 @@ async function selectPayCandidates( exchangeDetails, ); if (!wire) { + if (logger.shouldLogTrace()) { + logger.trace( + `skipping ${exchange.baseUrl} due to missing wire info mismatch`, + ); + } continue; } wfPerExchange[exchange.baseUrl] = wire.wireFee; @@ -782,6 +797,9 @@ async function selectPayCandidates( req.restrictExchanges, ); if (!accepted) { + if (logger.shouldLogTrace()) { + logger.trace(`skipping ${exchange.baseUrl} due to unacceptability`); + } continue; } @@ -800,6 +818,14 @@ async function selectPayCandidates( ), ); + if (logger.shouldLogTrace()) { + logger.trace( + `exchange ${exchange.baseUrl} has ${myExchangeCoins.length} candidate records`, + ); + } + + let numUsable = 0; + // 5. save denoms with how many coins are available // FIXME: Check that the individual denomination is audited! // FIXME: Should we exclude denominations that are @@ -810,15 +836,27 @@ async function selectPayCandidates( coinAvail.denomPubHash, ]); checkDbInvariant(!!denom); - if (denom.isRevoked || !denom.isOffered) { + if (denom.isRevoked) { + logger.trace("denom is revoked"); + continue; + } + if (!denom.isOffered) { + logger.trace("denom is unoffered"); continue; } + numUsable++; denoms.push({ ...DenominationRecord.toDenomInfo(denom), numAvailable: coinAvail.freshCoinCount ?? 0, maxAge: coinAvail.maxAge, }); } + + if (logger.shouldLogTrace()) { + logger.trace( + `exchange ${exchange.baseUrl} has ${numUsable} candidate records with usable denominations`, + ); + } } // Sort by available amount (descending), deposit fee (ascending) and // denomPub (ascending) if deposit fee is the same diff --git a/packages/taler-wallet-core/src/exchanges.ts b/packages/taler-wallet-core/src/exchanges.ts index e3426b0ae..fa8de7fff 100644 --- a/packages/taler-wallet-core/src/exchanges.ts +++ b/packages/taler-wallet-core/src/exchanges.ts @@ -1393,6 +1393,7 @@ export async function updateExchangeFromUrlHandler( let recoupGroupId: string | undefined; logger.trace("updating exchange info in database"); + logger.trace(j2s(keysInfo)); let detailsPointerChanged = false; @@ -1496,7 +1497,9 @@ export async function updateExchangeFromUrlHandler( // In the future: Filter out old denominations by index const allOldDenoms = - await tx.denominations.indexes.byExchangeBaseUrl.getAll(); + await tx.denominations.indexes.byExchangeBaseUrl.getAll( + exchangeBaseUrl, + ); const oldDenomByDph = new Map(); for (const denom of allOldDenoms) { oldDenomByDph.set(denom.denomPubHash, denom); -- cgit v1.2.3