View Issue Details

IDProjectCategoryView StatusLast Update
0010066Talerwallet-corepublic2026-03-18 22:23
Reporteravalos Assigned ToFlorian Dold  
PrioritynormalSeverityminorReproducibilityhave not tried
Status assignedResolutionopen 
Product Versiongit (master) 
Target 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

Relationships

child of 0009334 assignedFlorian 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 21: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 22: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.

Issue History

Date Modified Username Field Change
2025-06-03 21:44 avalos New Issue
2025-06-03 21:44 avalos Status new => assigned
2025-06-03 21:44 avalos Assigned To => Florian Dold
2025-06-03 22:15 Christian Grothoff Product Version => git (master)
2025-06-03 22:15 Christian Grothoff Target Version => 1.1
2025-06-03 22:15 Christian Grothoff Tag Attached: ux
2025-06-05 13:46 Florian Dold Summary expired peer-pull-credit transaction not transitioning to final state => expired peer-pull-credit transaction not transitioning to final state [2h]
2025-08-31 19:34 Christian Grothoff Target Version 1.1 => 1.6
2025-08-31 19:35 Christian Grothoff Relationship added child of 0009334
2025-09-04 20:43 Christian Grothoff Target Version 1.6 => 1.5
2026-03-18 21:48 Florian Dold Assigned To Florian Dold => Christian Grothoff
2026-03-18 21:48 Florian Dold Status assigned => feedback
2026-03-18 21:48 Florian Dold Note Added: 0028179
2026-03-18 22:23 Christian Grothoff Note Added: 0028180
2026-03-18 22:23 Christian Grothoff Assigned To Christian Grothoff => Florian Dold
2026-03-18 22:23 Christian Grothoff Status feedback => assigned