View Issue Details

IDProjectCategoryView StatusLast Update
0010939Talerwallet-corepublic2026-01-30 01:42
ReporterFlorian Dold Assigned ToFlorian Dold  
PriorityurgentSeveritymajorReproducibilityhave not tried
Status resolvedResolutionfixed 
Target Version1.4 
Summary0010939: wallet does excessive number of reads in denomination object store for simple requests
DescriptionVery likely caused by the computation of refresh costs in the fee computation for various operations.
TagsNo tags attached.

Relationships

related to 0010933 assignedvecirex TOPS/CHF: When sending a higher (real-world, non-micro-)payment, QR code generation takes long [+also true for order payments] 

Activities

Florian Dold

2026-01-28 23:50

manager   ~0027441

$ # ... withdraw CHF:15 from rusty
$ taler-wallet-cli p2p check-push-debit CHF:7
[...]

database stats:
{
  "primitiveStatements": 0,
  "readTransactions": 9,
  "writeTransactions": 15,
  "readsPerStore": {
    "metaConfig": 1,
    "fixups": 3,
    "config": 2,
    "exchanges": 20,
    "denominations": 79,
    "exchangeBaseUrlFixups": 1,
    "operationRetries": 3
  },
  "readsPerIndex": {
    "exchangeDetails.byDetailsPointer": 5,
    "coinAvailability.byExchangeAgeAvailability": 1,
    "coins.byExchangeDenomPubHashAndAgeAndStatus": 1,
    "withdrawalGroups.byStatus": 1,
    "depositGroups.byStatus": 1,
    "refreshGroups.byStatus": 1,
    "purchases.byStatus": 1,
    "peerPushDebit.byStatus": 1,
    "peerPushCredit.byStatus": 1,
    "peerPullDebit.byStatus": 1,
    "peerPullCredit.byStatus": 1,
    "recoupGroups.byStatus": 1,
    "denominations.byVerificationStatus": 1,
    "globalCurrencyExchanges.byCurrencyAndUrlAndPub": 1,
    "globalCurrencyAuditors.byCurrencyAndUrlAndPub": 1,
    "denominations.byExchangeBaseUrl": 2
  },
  "readItemsPerIndex": {
    "exchangeDetails.byDetailsPointer": 5,
    "coinAvailability.byExchangeAgeAvailability": 7,
    "coins.byExchangeDenomPubHashAndAgeAndStatus": 1,
    "withdrawalGroups.byStatus": 0,
    "depositGroups.byStatus": 0,
    "refreshGroups.byStatus": 0,
    "purchases.byStatus": 0,
    "peerPushDebit.byStatus": 0,
    "peerPushCredit.byStatus": 0,
    "peerPullDebit.byStatus": 0,
    "peerPullCredit.byStatus": 0,
    "recoupGroups.byStatus": 0,
    "denominations.byVerificationStatus": 70,
    "globalCurrencyExchanges.byCurrencyAndUrlAndPub": 0,
    "globalCurrencyAuditors.byCurrencyAndUrlAndPub": 0,
    "denominations.byExchangeBaseUrl": 4712
  },
  "readItemsPerStore": {
    "metaConfig": 1,
    "fixups": 3,
    "config": 2,
    "exchanges": 19,
    "denominations": 79,
    "exchangeBaseUrlFixups": 0,
    "operationRetries": 3
  },
  "writesPerStore": {
    "config": 1,
    "operationRetries": 2,
    "denominations": 70
  }
}

Florian Dold

2026-01-30 01:28

manager   ~0027470

commit 810b6d4a34b7f758c3181d6525aff77591262f0c (HEAD -> master, origin/master, origin/HEAD)
Author: Florian Dold <florian@dold.me>
Date: Fri Jan 30 01:26:46 2026 +0100

    wallet-core: use denom families for denom selection

Florian Dold

2026-01-30 01:42

manager   ~0027472

Database stats for the same request after the optimization:

database stats:
{
  "primitiveStatements": 0,
  "readTransactions": 9,
  "writeTransactions": 13,
  "readsPerStore": {
    "metaConfig": 1,
    "fixups": 4,
    "config": 2,
    "exchanges": 20,
    "denominations": 9,
    "exchangeBaseUrlFixups": 1,
    "operationRetries": 3
  },
  "readsPerIndex": {
    "exchangeDetails.byDetailsPointer": 5,
    "coinAvailability.byExchangeAgeAvailability": 1,
    "coins.byExchangeDenomPubHashAndAgeAndStatus": 1,
    "withdrawalGroups.byStatus": 1,
    "depositGroups.byStatus": 1,
    "refreshGroups.byStatus": 1,
    "purchases.byStatus": 1,
    "peerPushDebit.byStatus": 1,
    "peerPushCredit.byStatus": 1,
    "peerPullDebit.byStatus": 1,
    "peerPullCredit.byStatus": 1,
    "recoupGroups.byStatus": 1,
    "denominations.byVerificationStatus": 1,
    "globalCurrencyExchanges.byCurrencyAndUrlAndPub": 1,
    "globalCurrencyAuditors.byCurrencyAndUrlAndPub": 1,
    "denominationFamilies.byExchangeBaseUrl": 2,
    "denominations.byDenominationFamilySerialAndStampExpireWithdraw": 76
  },
  "readItemsPerIndex": {
    "exchangeDetails.byDetailsPointer": 5,
    "coinAvailability.byExchangeAgeAvailability": 7,
    "coins.byExchangeDenomPubHashAndAgeAndStatus": 1,
    "withdrawalGroups.byStatus": 0,
    "depositGroups.byStatus": 0,
    "refreshGroups.byStatus": 0,
    "purchases.byStatus": 0,
    "peerPushDebit.byStatus": 0,
    "peerPushCredit.byStatus": 0,
    "peerPullDebit.byStatus": 0,
    "peerPullCredit.byStatus": 0,
    "recoupGroups.byStatus": 0,
    "denominations.byVerificationStatus": 70,
    "globalCurrencyExchanges.byCurrencyAndUrlAndPub": 0,
    "globalCurrencyAuditors.byCurrencyAndUrlAndPub": 0,
    "denominationFamilies.byExchangeBaseUrl": 38,
    "denominations.byDenominationFamilySerialAndStampExpireWithdraw": 76
  },
  "readItemsPerStore": {
    "metaConfig": 1,
    "fixups": 4,
    "config": 2,
    "exchanges": 19,
    "denominations": 9,
    "exchangeBaseUrlFixups": 0,
    "operationRetries": 3
  },
  "writesPerStore": {
    "config": 1,
    "operationRetries": 2
  }
}

Issue History

Date Modified Username Field Change
2026-01-28 23:44 Florian Dold New Issue
2026-01-28 23:44 Florian Dold Status new => assigned
2026-01-28 23:44 Florian Dold Assigned To => Florian Dold
2026-01-28 23:50 Florian Dold Note Added: 0027441
2026-01-29 01:06 vecirex Relationship added related to 0010933
2026-01-30 01:28 Florian Dold Status assigned => resolved
2026-01-30 01:28 Florian Dold Resolution open => fixed
2026-01-30 01:28 Florian Dold Note Added: 0027470
2026-01-30 01:42 Florian Dold Note Added: 0027472