View Issue Details

IDProjectCategoryView StatusLast Update
0011450Talerwallet-corepublic2026-07-05 22:36
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
PriorityhighSeverityminorReproducibilityhave not tried
Status informingResolutionwon't fix 
Target Version1.6Fixed in Version1.6 
Summary0011450: wallet-core handles expiration of proposed v1 contracts with choices badly
DescriptionSteps:
* Scan payment QR code on https://shop.test.taler.net/
* Wait until payment deadline expires
* Scan again
* => wallet throws exception about choiceIndex instead of reporting expired transaction

The problem seems to be that we treat expired payments as already confirmed and try to repurchase.

```
    case PurchaseStatus.Expired:
      return handleConfirmed();
```
Additional Information�"id":18 preparePayForUri{"talerPayUri":"taler:\/\/pay\/backend.test.taler.net\/instances\/blog\/2026.148-00WEGX4D3NTBM\/177eb8b5-fcc3-42b5-87d6-672ab7be658f?c=2ATDFK89BCGBPW3KK203H1MWJ4"}
pay-merchant.ts Found old proposal (status=Expired) for order 2026.148-00WEGX4D3NTBM at https://backend.test.taler.net/instances/blog/
pay-merchant.ts waiting for txn:payment:J8KE1PE3VK2KAF39CAR91H9MKP6HMK0V8P92NWP1ZQA13R9HN8B0 to be downloaded
codec.ts Extra property valid_at for TalerMerchantApi.ContractOutputToken at (TalerMerchantApi.ContractOutputToken)
codec.ts Extra property valid_at for TalerMerchantApi.ContractOutputToken at (TalerMerchantApi.ContractOutputToken)
Possibly unhandled promise rejection: Error: choice index not specified for contract v1
    at handleConfirmed (<compiled_js>:56347)
    at checkPaymentByProposalId (<compiled_js>:56408)

wallet.ts finished wallet core request preparePayForUri with error: {
  "code": 7001,
  "when": {
    "t_ms": 1780000801244
  },
  "hint": "unexpected exception (message: choice index not specified for contract v1)",
  "stack": " at handleConfirmed (<compiled_js>:56347)\n at checkPaymentByProposalId (<compiled_js>:56408)\n"
}
[8] 22:40:01.244 � WalletCore.swift:428 WalletCore#1 handleMessage(message:) "id":18 {"type":"error","operation":"preparePayForUri","id":18,"error":{"code":7001,"when":{"t_ms":1780000801244},"hint":"unexpected exception (message: choice index not specified for contract v1)","stack":" at handleConfirmed (<compiled_js>:56347)\n at checkPaymentByProposalId (<compiled_js>:56408)\n"}}
TagsNo tags attached.

Required notifications

Address or linkRemarkAdded byNotifiedActions

Relationships

child of 0009057 implementingavalos support subscription and discount tokens [meta] 

Activities

Florian Dold

2026-06-03 17:36

manager   ~0028765

This happens due to a quirk in the (now deprecated!) preparePayForUri.

The new and radically simplified preparePayForUriV2 works fine with expired payment transactions.

Issue History

Date ModifiedUsernameFieldChange
2026-05-29 13:15Florian DoldNew Issue
2026-05-29 19:02Christian GrothoffAssigned To => Florian Dold
2026-05-29 19:02Christian GrothoffPrioritynormal => high
2026-05-29 19:02Christian GrothoffStatusnew => implementing
2026-05-29 19:26Christian GrothoffRelationship addedchild of 0009057
2026-06-03 17:36Florian DoldStatusimplementing => informing
2026-06-03 17:36Florian DoldResolutionopen => won't fix
2026-06-03 17:36Florian DoldNote Added: 0028765
2026-07-05 22:36Christian GrothoffFixed in Version => 1.6