View Issue Details

IDProjectCategoryView StatusLast Update
0010939Talerwallet-corepublic2026-02-04 19:02
ReporterFlorian Dold Assigned ToFlorian Dold Resolution deadline
ImplementerReviewer 
Release signed byDeployed by 
VerifierCommunicator 
Data protection authority notification requiredNo  
CSIRT notification requiredNo  
Estimated effort (hours)Actual effort (hours)0 
Fast-trackNo
Work packagenone
PriorityurgentSeveritymajorReproducibilityhave not tried
Status closedResolutionfixed 
Target Version1.4Fixed in 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.

Required notifications

Address or linkRemarkAdded byNotifiedActions

Relationships

related to 0010933 closedvecirex 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 22: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 00: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 00: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 ModifiedUsernameFieldChange
2026-01-28 22:44Florian DoldNew Issue
2026-01-28 22:44Florian DoldStatusnew => assigned
2026-01-28 22:44Florian DoldAssigned To => Florian Dold
2026-01-28 22:50Florian DoldNote Added: 0027441
2026-01-29 00:06vecirexRelationship addedrelated to 0010933
2026-01-30 00:28Florian DoldStatusassigned => informing
2026-01-30 00:28Florian DoldResolutionopen => fixed
2026-01-30 00:28Florian DoldNote Added: 0027470
2026-01-30 00:42Florian DoldNote Added: 0027472
2026-02-04 19:02Christian GrothoffFixed in Version => 1.4
2026-02-04 19:02Christian GrothoffStatusinforming => closed