View Issue Details

IDProjectCategoryView StatusLast Update
0010066Talerwallet-corepublic2026-03-20 23:55
Reporteravalos 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
PrioritynormalSeverityminorReproducibilityhave not tried
Status closedResolutionfixed 
Product Versiongit (master) 
Target Version1.5Fixed in Version1.5 
Summary0010066: expired peer-pull-credit transaction not transitioning to final state [2h]
Description{
  "type": "peer-pull-credit",
  "transactionId": "txn:peer-pull-credit:XXX",
  "timestamp": {
    "t_s": 1747765622
  },
  "txState": {
    "major": "pending",
    "minor": "create-purse"
  },
  "txActions": [
    "retry",
    "abort",
    "suspend"
  ],
  "kycUrl": "https://exchange.taler-ops.ch/kyc-spa/XXX",
  "exchangeBaseUrl": "https://exchange.taler-ops.ch/",
  "error": {
    "code": 7005,
    "hint": "Unexpected HTTP status 400 in response",
    "message": null,
    "when": {
      "t_ms": 1748979698492
    },
    "requestUrl": "https://exchange.taler-ops.ch/reserves/XXX/purse",
    "requestMethod": "POST",
    "httpStatusCode": 400,
    "errorResponse": {
      "code": 1775,
      "hint": "The purse expiration time is in the past at the time of its creation."
    }
  },
  "amountRaw": "CHF:1",
  "amountEffective": "CHF:1",
  "scopes": [
    {
      "type": "global",
      "currency": "CHF"
    }
  ],
  "info": {
    "expiration": {
      "t_s": 1747852021
    },
    "summary": "test test"
  },
  "talerUri": "taler://pay-pull/exchange.taler-ops.ch/XXX"
}

It stays on pending(create-purse) and keeps long polling in the background and receiving the following error:

{
  "code": 7005,
  "hint": "Unexpected HTTP status 400 in response",
  "message": null,
  "when": {
    "t_ms": 1748978894085
  },
  "requestUrl": "https://exchange.taler-ops.ch/reserves/X3AM8Y1P4WTN7J7YACGA8VF9K44M0A4VPXJBG6YP1WYJ66TPR3AG/purse",
  "requestMethod": "POST",
  "httpStatusCode": 400,
  "errorResponse": {
    "code": 1775,
    "hint": "The purse expiration time is in the past at the time of its creation."
  }
}
Tagsux

Required notifications

Address or linkRemarkAdded byNotifiedActions

Relationships

child of 0009334 closedFlorian Dold wallet does not automatically handle expired pay-merchant transactions, payment-expired test also only handles manual case [6h] 

Activities

Florian Dold

2026-03-18 20:48

manager   ~0028179

The error case isn't documented by the exchange, so the wallet keeps the transaction as pending with retries.

=> We need to agree on the HTTP status (shouldn't it be Gone and not 400?!) and EC for this case, then wallet-core can handle it appropriately.

Christian Grothoff

2026-03-18 21:23

manager   ~0028180

Well, we do have an open bug to expand the documentation to make all ECs more explicit, but that's a very large task for the entire API, but do feel free to add this specific one. If the timing conflict is not inherent in the request and the purse expiration is compared to the current time of the exchange, then I'm good with 410. If the request is internally inconsistent and has two conflicting times within it, then 400 is appropriate.

Florian Dold

2026-03-19 22:07

manager   ~0028189

I've explicitly added the new error code to the docs and also added handling for it in wallet-core.

Issue History

Date ModifiedUsernameFieldChange
2025-06-03 19:44avalosNew Issue
2025-06-03 19:44avalosStatusnew => assigned
2025-06-03 19:44avalosAssigned To => Florian Dold
2025-06-03 20:15Christian GrothoffProduct Version => git (master)
2025-06-03 20:15Christian GrothoffTarget Version => 1.1
2025-06-03 20:15Christian GrothoffTag Attached: ux
2025-06-05 11:46Florian DoldSummaryexpired peer-pull-credit transaction not transitioning to final state => expired peer-pull-credit transaction not transitioning to final state [2h]
2025-08-31 17:34Christian GrothoffTarget Version1.1 => 1.6
2025-08-31 17:35Christian GrothoffRelationship addedchild of 0009334
2025-09-04 18:43Christian GrothoffTarget Version1.6 => 1.5
2026-03-18 20:48Florian DoldAssigned ToFlorian Dold => Christian Grothoff
2026-03-18 20:48Florian DoldStatusassigned => feedback
2026-03-18 20:48Florian DoldNote Added: 0028179
2026-03-18 21:23Christian GrothoffNote Added: 0028180
2026-03-18 21:23Christian GrothoffAssigned ToChristian Grothoff => Florian Dold
2026-03-18 21:23Christian GrothoffStatusfeedback => assigned
2026-03-19 22:07Florian DoldStatusassigned => informing
2026-03-19 22:07Florian DoldResolutionopen => fixed
2026-03-19 22:07Florian DoldNote Added: 0028189
2026-03-20 23:47Christian GrothoffFixed in Version => 1.5
2026-03-20 23:55Christian GrothoffStatusinforming => closed