summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2024-03-26 12:13:06 +0100
committerFlorian Dold <florian@dold.me>2024-03-26 12:13:06 +0100
commit738f3f495785770c7eed3c2f9e0fbddcdb26ea7c (patch)
treee5819dbf108fb224c59aaf9829ae40d420b8293c /packages
parent4433a4d49cdce0b0b0491e834c6f598c5e923928 (diff)
downloadwallet-core-738f3f495785770c7eed3c2f9e0fbddcdb26ea7c.tar.gz
wallet-core-738f3f495785770c7eed3c2f9e0fbddcdb26ea7c.tar.bz2
wallet-core-738f3f495785770c7eed3c2f9e0fbddcdb26ea7c.zip
-minor db optimiations, logging
Diffstat (limited to 'packages')
-rw-r--r--packages/taler-wallet-core/src/db.ts6
-rw-r--r--packages/taler-wallet-core/src/exchanges.ts61
-rw-r--r--packages/taler-wallet-core/src/refresh.ts6
-rw-r--r--packages/taler-wallet-core/src/wallet.ts12
-rw-r--r--packages/taler-wallet-core/src/withdraw.test.ts6
-rw-r--r--packages/taler-wallet-core/src/withdraw.ts16
6 files changed, 46 insertions, 61 deletions
diff --git a/packages/taler-wallet-core/src/db.ts b/packages/taler-wallet-core/src/db.ts
index 8b7aede57..997d9c90a 100644
--- a/packages/taler-wallet-core/src/db.ts
+++ b/packages/taler-wallet-core/src/db.ts
@@ -502,12 +502,6 @@ export interface DenominationRecord {
* on the denomination.
*/
exchangeMasterPub: string;
-
- /**
- * Latest list issue date of the "/keys" response
- * that includes this denomination.
- */
- listIssueDate: DbProtocolTimestamp;
}
export namespace DenominationRecord {
diff --git a/packages/taler-wallet-core/src/exchanges.ts b/packages/taler-wallet-core/src/exchanges.ts
index 43ab8ac4e..d501789a8 100644
--- a/packages/taler-wallet-core/src/exchanges.ts
+++ b/packages/taler-wallet-core/src/exchanges.ts
@@ -791,9 +791,6 @@ async function downloadExchangeKeysInfo(
stampStart: timestampProtocolToDb(denomIn.stamp_start),
verificationStatus: DenominationVerificationStatus.Unverified,
masterSig: denomIn.master_sig,
- listIssueDate: timestampProtocolToDb(
- exchangeKeysJsonUnchecked.list_issue_date,
- ),
fees: {
feeDeposit: Amounts.stringify(denomGroup.fee_deposit),
feeRefresh: Amounts.stringify(denomGroup.fee_refresh),
@@ -906,6 +903,8 @@ async function startUpdateExchangeEntry(
},
);
+ logger.trace("created exchange record");
+
if (notification) {
wex.ws.notify(notification);
}
@@ -1142,6 +1141,7 @@ async function waitReadyExchange(
expectedMasterPub?: string;
} = {},
): Promise<ReadyExchangeSummary> {
+ logger.trace(`waiting for exchange ${canonUrl} to become ready`);
// FIXME: We should use Symbol.dispose magic here for cleanup!
const exchangeNotifFlag = new AsyncFlag();
@@ -1263,6 +1263,7 @@ export async function updateExchangeFromUrlHandler(
}
if (!(updateNecessary || refreshCheckNecessary)) {
+ logger.trace("update not necessary, running again later");
return TaskRunResult.runAgainAt(
AbsoluteTime.min(nextUpdateStamp, nextRefreshCheckStamp),
);
@@ -1429,15 +1430,20 @@ export async function updateExchangeFromUrlHandler(
});
}
+ // In the future: Filter out old denominations by index
+ const allOldDenoms =
+ await tx.denominations.indexes.byExchangeBaseUrl.getAll();
+ const oldDenomByDph = new Map<string, DenominationRecord>();
+ for (const denom of allOldDenoms) {
+ oldDenomByDph.set(denom.denomPubHash, denom);
+ }
+
logger.trace("updating denominations in database");
const currentDenomSet = new Set<string>(
keysInfo.currentDenominations.map((x) => x.denomPubHash),
);
for (const currentDenom of keysInfo.currentDenominations) {
- const oldDenom = await tx.denominations.get([
- exchangeBaseUrl,
- currentDenom.denomPubHash,
- ]);
+ const oldDenom = oldDenomByDph.get(currentDenom.denomPubHash);
if (oldDenom) {
// FIXME: Do consistency check, report to auditor if necessary.
// See https://bugs.taler.net/n/8594
@@ -1457,29 +1463,26 @@ export async function updateExchangeFromUrlHandler(
// Update list issue date for all denominations,
// and mark non-offered denominations as such.
- await tx.denominations.indexes.byExchangeBaseUrl
- .iter(r.baseUrl)
- .forEachAsync(async (x) => {
- if (!currentDenomSet.has(x.denomPubHash)) {
- // FIXME: Here, an auditor report should be created, unless
- // the denomination is really legally expired.
- if (x.isOffered) {
- x.isOffered = false;
- logger.info(
- `setting denomination ${x.denomPubHash} to offered=false`,
- );
- }
- } else {
- x.listIssueDate = timestampProtocolToDb(keysInfo.listIssueDate);
- if (!x.isOffered) {
- x.isOffered = true;
- logger.info(
- `setting denomination ${x.denomPubHash} to offered=true`,
- );
- }
+ for (const x of allOldDenoms) {
+ if (!currentDenomSet.has(x.denomPubHash)) {
+ // FIXME: Here, an auditor report should be created, unless
+ // the denomination is really legally expired.
+ if (x.isOffered) {
+ x.isOffered = false;
+ logger.info(
+ `setting denomination ${x.denomPubHash} to offered=false`,
+ );
}
- await tx.denominations.put(x);
- });
+ } else {
+ if (!x.isOffered) {
+ x.isOffered = true;
+ logger.info(
+ `setting denomination ${x.denomPubHash} to offered=true`,
+ );
+ }
+ }
+ await tx.denominations.put(x);
+ }
logger.trace("done updating denominations in database");
diff --git a/packages/taler-wallet-core/src/refresh.ts b/packages/taler-wallet-core/src/refresh.ts
index a92b3baf1..7c9ec84bd 100644
--- a/packages/taler-wallet-core/src/refresh.ts
+++ b/packages/taler-wallet-core/src/refresh.ts
@@ -400,9 +400,9 @@ async function provideRefreshSession(
// FIXME: Use denom groups instead of querying all denominations!
const availableDenoms: DenominationRecord[] =
- await tx.denominations.indexes.byExchangeBaseUrl
- .iter(exch.exchangeBaseUrl)
- .toArray();
+ await tx.denominations.indexes.byExchangeBaseUrl.getAll(
+ exch.exchangeBaseUrl,
+ );
const availableAmount = Amounts.sub(
refreshGroup.inputPerCoin[coinIndex],
diff --git a/packages/taler-wallet-core/src/wallet.ts b/packages/taler-wallet-core/src/wallet.ts
index 1602eb158..e973f11e4 100644
--- a/packages/taler-wallet-core/src/wallet.ts
+++ b/packages/taler-wallet-core/src/wallet.ts
@@ -46,6 +46,7 @@ import {
NotificationType,
ObservabilityContext,
ObservabilityEventType,
+ ObservableHttpClientLibrary,
OpenedPromise,
PartialWalletRunConfig,
PrepareWithdrawExchangeRequest,
@@ -144,7 +145,6 @@ import {
parseTalerUri,
sampleWalletCoreTransactions,
setDangerousTimetravel,
- ObservableHttpClientLibrary,
validateIban,
} from "@gnu-taler/taler-util";
import type { HttpRequestLibrary } from "@gnu-taler/taler-util/http";
@@ -521,9 +521,9 @@ async function dumpCoins(wex: WalletExecutionContext): Promise<CoinDumpJson> {
ageCommitmentProof: c.ageCommitmentProof,
spend_allocation: c.spendAllocation
? {
- amount: c.spendAllocation.amount,
- id: c.spendAllocation.id,
- }
+ amount: c.spendAllocation.amount,
+ id: c.spendAllocation.id,
+ }
: undefined,
});
}
@@ -691,7 +691,7 @@ async function dispatchRequestInternal<Op extends WalletApiOperation>(
case WalletApiOperation.InitWallet: {
const req = codecForInitRequest().decode(payload);
- logger.info(`init request: ${req}`);
+ logger.info(`init request: ${j2s(req)}`);
if (wex.ws.initCalled) {
logger.warn(
@@ -1526,7 +1526,7 @@ async function handleCoreApiRequest(
wex = getObservedWalletExecutionContext(ws, CancellationToken.CONTINUE, oc);
} else {
oc = {
- observe(evt) { },
+ observe(evt) {},
};
wex = getNormalWalletExecutionContext(ws, CancellationToken.CONTINUE, oc);
}
diff --git a/packages/taler-wallet-core/src/withdraw.test.ts b/packages/taler-wallet-core/src/withdraw.test.ts
index d8757d0cf..2a081b481 100644
--- a/packages/taler-wallet-core/src/withdraw.test.ts
+++ b/packages/taler-wallet-core/src/withdraw.test.ts
@@ -83,7 +83,6 @@ test("withdrawal selection bug repro", (t) => {
verificationStatus: DenominationVerificationStatus.Unverified,
currency: "KUDOS",
value: "KUDOS:1000" as AmountString,
- listIssueDate: timestampProtocolToDb({ t_s: 0 }),
},
{
denomPub: {
@@ -138,7 +137,6 @@ test("withdrawal selection bug repro", (t) => {
verificationStatus: DenominationVerificationStatus.Unverified,
value: "KUDOS:10" as AmountString,
currency: "KUDOS",
- listIssueDate: timestampProtocolToDb({ t_s: 0 }),
},
{
denomPub: {
@@ -192,7 +190,6 @@ test("withdrawal selection bug repro", (t) => {
verificationStatus: DenominationVerificationStatus.Unverified,
value: "KUDOS:5" as AmountString,
currency: "KUDOS",
- listIssueDate: timestampProtocolToDb({ t_s: 0 }),
},
{
denomPub: {
@@ -247,7 +244,6 @@ test("withdrawal selection bug repro", (t) => {
verificationStatus: DenominationVerificationStatus.Unverified,
value: "KUDOS:1" as AmountString,
currency: "KUDOS",
- listIssueDate: timestampProtocolToDb({ t_s: 0 }),
},
{
denomPub: {
@@ -305,7 +301,6 @@ test("withdrawal selection bug repro", (t) => {
value: 0,
}),
currency: "KUDOS",
- listIssueDate: timestampProtocolToDb({ t_s: 0 }),
},
{
denomPub: {
@@ -359,7 +354,6 @@ test("withdrawal selection bug repro", (t) => {
verificationStatus: DenominationVerificationStatus.Unverified,
value: "KUDOS:2" as AmountString,
currency: "KUDOS",
- listIssueDate: timestampProtocolToDb({ t_s: 0 }),
},
];
diff --git a/packages/taler-wallet-core/src/withdraw.ts b/packages/taler-wallet-core/src/withdraw.ts
index 9d9d2bea6..6a9d27fe8 100644
--- a/packages/taler-wallet-core/src/withdraw.ts
+++ b/packages/taler-wallet-core/src/withdraw.ts
@@ -463,36 +463,31 @@ export function computeWithdrawalTransactionStatus(
major: TransactionMajorState.Suspended,
minor: TransactionMinorState.BankConfirmTransfer,
};
- case WithdrawalGroupStatus.SuspendedReady: {
+ case WithdrawalGroupStatus.SuspendedReady:
return {
major: TransactionMajorState.Suspended,
minor: TransactionMinorState.WithdrawCoins,
};
- }
- case WithdrawalGroupStatus.PendingAml: {
+ case WithdrawalGroupStatus.PendingAml:
return {
major: TransactionMajorState.Pending,
minor: TransactionMinorState.AmlRequired,
};
- }
- case WithdrawalGroupStatus.PendingKyc: {
+ case WithdrawalGroupStatus.PendingKyc:
return {
major: TransactionMajorState.Pending,
minor: TransactionMinorState.KycRequired,
};
- }
- case WithdrawalGroupStatus.SuspendedAml: {
+ case WithdrawalGroupStatus.SuspendedAml:
return {
major: TransactionMajorState.Suspended,
minor: TransactionMinorState.AmlRequired,
};
- }
- case WithdrawalGroupStatus.SuspendedKyc: {
+ case WithdrawalGroupStatus.SuspendedKyc:
return {
major: TransactionMajorState.Suspended,
minor: TransactionMinorState.KycRequired,
};
- }
case WithdrawalGroupStatus.FailedAbortingBank:
return {
major: TransactionMajorState.Failed,
@@ -503,7 +498,6 @@ export function computeWithdrawalTransactionStatus(
major: TransactionMajorState.Aborted,
minor: TransactionMinorState.Exchange,
};
-
case WithdrawalGroupStatus.AbortedBank:
return {
major: TransactionMajorState.Aborted,