View Issue Details

IDProjectCategoryView StatusLast Update
0007852Talerexchangepublic2023-09-23 13:09
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
PrioritynormalSeverityminorReproducibilityhave not tried
Status closedResolutionfixed 
Target Version0.9.3Fixed in Version0.9.3 
Summary0007852: deposit endpoint idempotency regression
DescriptionThe deposit endpoint used to be idempotent, and we have a test for that in taler-harness. However, in the current git master it is not idempotent anymore:

$ taler-harness run-integrationtests exchange-deposit
[... fails at doing exactly the same deposit POST request twice ...]
TagsNo tags attached.

Required notifications

Address or linkRemarkAdded byNotifiedActions

Activities

Christian Grothoff

2023-06-03 11:09

manager   ~0020252

I ran the latest test with wireshark against the latest exchange, and (1) the test passed and (2) the wireshark result suggests everything is fine. Relevant TCP stream attached.
test (6,725 bytes)   
POST /reserves/M7HM8DF7KXPBGYSD0FAYEKRJV51X1JVCB73AF3BZ95616JWV7R9G/withdraw HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: localhost:8081
Connection: keep-alive
Transfer-Encoding: chunked

1f6
{"denom_pub_hash":"TTCWFSY56C0QJXHVD6BYE4ZJTX651TQWWREEZ9P6R3ZW2EYAFYHKM30C5V2RGB72MH4P7A7T6T7AV3K7MXW3GMMAZW7NYF0RSR356TG","reserve_sig":"T4A4AS5K3BFMWNAQPBM4Z7X639SY9PHD3MDJFWAWFQB42MB773KPQ7JG8MJB1VRQDKAWQVC41M6Z97Q32KR5D34WT530E4KPFFGNT3R","coin_ev":{"cipher":"RSA","rsa_blinded_planchet":"B3PFN1DJS2H7KZSAN397MSNR8NQPNZH1ERN5WEXA5DN5D2STMA7N4FREDRZW98CNGYWAJ9G6QF57NPCJ0ST33RHKD4HEQNHZD6D6WCEXZDECVB2V6V1VKNKHCMG7S0PDYB2ETZ6D5W5X0BK21C64KYVJRRNJQDQQ7CXM7F53NS5CBDBZ3M59ATZV5D6BXTWEF022E8W4Q5A38"}}
0

HTTP/1.1 200 OK
Date: Sat, 03 Jun 2023 11:03:36 GMT
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: *
Content-Type: application/json
Content-Length: 279

{
  "ev_sig": {
    "cipher": "RSA",
    "blinded_rsa_signature": "2WG4NWD388J6JHTGNXR1YZPF1KZ3KQ39KPKY4819TZ9DCTND318JTRECTDJVNZX6WCD6EZ7TY87XA3Q45YHEE8BXP9JE9MHTXJD4VDK5YF7ZK5FB8B9Y24KS7Z8JZF08DXMJB4P0RM3W77YAY67BH0SB87DXDQPAJ2WRQEN9GW9M8E1SYW732QGMRX0VF03HXAT27W5TAA7NM"
  }
}POST /coins/DH2931Q33790EAH2YG8QAH8E047BCJ5663F2JZNX2GXDW10MX55G/deposit HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: localhost:8081
Connection: keep-alive
Transfer-Encoding: chunked

39e
{"contribution":"TESTKUDOS:4","merchant_payto_uri":"payto://x-taler-bank/localhost/foo","wire_salt":"HTTYCGBKD96VH84BJR10S9G1ZR","h_contract_terms":"V6048T4S0862E8722NRKABDRNDZBWBW57YSKGQ6XWEEG3R1CYCN6F459VXKSA86E7KKQN16SQ3R545E7ZFGHNYT061VKF5FQQTX8ER0","ub_sig":{"cipher":"RSA","rsa_signature":"9C0FS2FNE0Z7T908KWF5301QCNBVCSXWJXFSXFE7DXJAV8M1YXPV33YKQMMADNPCPPA47CJQEYX30BYTJMF1DZJN0YBEN7P5D29FJ8JY52W07TTYSP3W74G2YHWXR0PWEKY1YSTGPA5DDAT8PNY9MHTX1J9YHC8ZSVSDMNV4S19P3GC7HJ2Z3TCT2716K340ENVTSDNXSE2C6"},"timestamp":{"t_s":1685790216},"wire_transfer_deadline":{"t_s":1685790216},"refund_deadline":{"t_s":1685790216},"coin_sig":"J6TTRB3F748BFDCFGRH72AAM180SJA0ENYZXSWG94G7SWT0N9SH9YSJZGBQXS6RKMQ3E68SS8NCB97EN3KB8M1M9M3FVXZ0VET28R0G","denom_pub_hash":"TTCWFSY56C0QJXHVD6BYE4ZJTX651TQWWREEZ9P6R3ZW2EYAFYHKM30C5V2RGB72MH4P7A7T6T7AV3K7MXW3GMMAZW7NYF0RSR356TG","merchant_pub":"C6HWTKVXKXWN5PAJTYW04FQT38JNZA76PAPPQAR58XBB8BDZ0D20"}
0

HTTP/1.1 200 OK
Date: Sat, 03 Jun 2023 11:03:36 GMT
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: *
Content-Type: application/json
Content-Length: 254

{
  "exchange_timestamp": {
    "t_s": 1685790216
  },
  "exchange_sig": "1J3V8FXGFAEBS5TN9JDPACDFKHE4FF9XYZ80KY6VHN80VJV3M99MRB8Q9ZTV9JA31D0YEYPPGFJAP9E4FFVHSCEBYYN90HW41T7MJ00",
  "exchange_pub": "X5FBRNTM7RJ40G0KJJC0BPPN0XDG7JD9DATP9P7Y330C3W449QM0"
}POST /coins/DH2931Q33790EAH2YG8QAH8E047BCJ5663F2JZNX2GXDW10MX55G/deposit HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: localhost:8081
Connection: keep-alive
Transfer-Encoding: chunked

39e
{"contribution":"TESTKUDOS:4","merchant_payto_uri":"payto://x-taler-bank/localhost/foo","wire_salt":"HTTYCGBKD96VH84BJR10S9G1ZR","h_contract_terms":"V6048T4S0862E8722NRKABDRNDZBWBW57YSKGQ6XWEEG3R1CYCN6F459VXKSA86E7KKQN16SQ3R545E7ZFGHNYT061VKF5FQQTX8ER0","ub_sig":{"cipher":"RSA","rsa_signature":"9C0FS2FNE0Z7T908KWF5301QCNBVCSXWJXFSXFE7DXJAV8M1YXPV33YKQMMADNPCPPA47CJQEYX30BYTJMF1DZJN0YBEN7P5D29FJ8JY52W07TTYSP3W74G2YHWXR0PWEKY1YSTGPA5DDAT8PNY9MHTX1J9YHC8ZSVSDMNV4S19P3GC7HJ2Z3TCT2716K340ENVTSDNXSE2C6"},"timestamp":{"t_s":1685790216},"wire_transfer_deadline":{"t_s":1685790216},"refund_deadline":{"t_s":1685790216},"coin_sig":"J6TTRB3F748BFDCFGRH72AAM180SJA0ENYZXSWG94G7SWT0N9SH9YSJZGBQXS6RKMQ3E68SS8NCB97EN3KB8M1M9M3FVXZ0VET28R0G","denom_pub_hash":"TTCWFSY56C0QJXHVD6BYE4ZJTX651TQWWREEZ9P6R3ZW2EYAFYHKM30C5V2RGB72MH4P7A7T6T7AV3K7MXW3GMMAZW7NYF0RSR356TG","merchant_pub":"C6HWTKVXKXWN5PAJTYW04FQT38JNZA76PAPPQAR58XBB8BDZ0D20"}
0

HTTP/1.1 200 OK
Date: Sat, 03 Jun 2023 11:03:36 GMT
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: *
Content-Type: application/json
Content-Length: 254

{
  "exchange_timestamp": {
    "t_s": 1685790216
  },
  "exchange_sig": "1J3V8FXGFAEBS5TN9JDPACDFKHE4FF9XYZ80KY6VHN80VJV3M99MRB8Q9ZTV9JA31D0YEYPPGFJAP9E4FFVHSCEBYYN90HW41T7MJ00",
  "exchange_pub": "X5FBRNTM7RJ40G0KJJC0BPPN0XDG7JD9DATP9P7Y330C3W449QM0"
}POST /coins/DH2931Q33790EAH2YG8QAH8E047BCJ5663F2JZNX2GXDW10MX55G/deposit HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: localhost:8081
Connection: keep-alive
Transfer-Encoding: chunked

3a0
{"contribution":"TESTKUDOS:3.5","merchant_payto_uri":"payto://x-taler-bank/localhost/foo","wire_salt":"HTTYCGBKD96VH84BJR10S9G1ZR","h_contract_terms":"V6048T4S0862E8722NRKABDRNDZBWBW57YSKGQ6XWEEG3R1CYCN6F459VXKSA86E7KKQN16SQ3R545E7ZFGHNYT061VKF5FQQTX8ER0","ub_sig":{"cipher":"RSA","rsa_signature":"9C0FS2FNE0Z7T908KWF5301QCNBVCSXWJXFSXFE7DXJAV8M1YXPV33YKQMMADNPCPPA47CJQEYX30BYTJMF1DZJN0YBEN7P5D29FJ8JY52W07TTYSP3W74G2YHWXR0PWEKY1YSTGPA5DDAT8PNY9MHTX1J9YHC8ZSVSDMNV4S19P3GC7HJ2Z3TCT2716K340ENVTSDNXSE2C6"},"timestamp":{"t_s":1685790216},"wire_transfer_deadline":{"t_s":1685790216},"refund_deadline":{"t_s":1685790216},"coin_sig":"HB47DQWZ0RCEB4JJCQ5WAAXQETRRJ0SDJBQ2QZZ1J90PW0YHA4KBGSBF3563CQB5928X6P3MNFJ5S2WMRTY40ENGNT4F5V974N22M1R","denom_pub_hash":"TTCWFSY56C0QJXHVD6BYE4ZJTX651TQWWREEZ9P6R3ZW2EYAFYHKM30C5V2RGB72MH4P7A7T6T7AV3K7MXW3GMMAZW7NYF0RSR356TG","merchant_pub":"C6HWTKVXKXWN5PAJTYW04FQT38JNZA76PAPPQAR58XBB8BDZ0D20"}
0

HTTP/1.1 409 Conflict
Date: Sat, 03 Jun 2023 11:03:37 GMT
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: *
Content-Type: application/json
Content-Length: 1101

{
  "hint": "The same coin was already deposited for the same merchant and contract with other details.",
  "code": 1206,
  "coin_pub": "DH2931Q33790EAH2YG8QAH8E047BCJ5663F2JZNX2GXDW10MX55G",
  "h_denom_pub": "TTCWFSY56C0QJXHVD6BYE4ZJTX651TQWWREEZ9P6R3ZW2EYAFYHKM30C5V2RGB72MH4P7A7T6T7AV3K7MXW3GMMAZW7NYF0RSR356TG",
  "history": [
    {
      "type": "DEPOSIT",
      "amount": "TESTKUDOS:4",
      "deposit_fee": "TESTKUDOS:0.16",
      "timestamp": {
        "t_s": 1685790216
      },
      "refund_deadline": {
        "t_s": 1685790216
      },
      "merchant_pub": "C6HWTKVXKXWN5PAJTYW04FQT38JNZA76PAPPQAR58XBB8BDZ0D20",
      "h_contract_terms": "V6048T4S0862E8722NRKABDRNDZBWBW57YSKGQ6XWEEG3R1CYCN6F459VXKSA86E7KKQN16SQ3R545E7ZFGHNYT061VKF5FQQTX8ER0",
      "h_wire": "5E28NWVT4PTKGPZPAQCKZ3M40KR6Y7CC0DEKERY6Y895XRVHFJX8W5YNW6HVCGYG4AC1GQ5DP5ZC8HDXS9XM1B0Q64ZBGPKFGXDY3K8",
      "h_age_commitment": "0000000000000000000000000000000000000000000000000000",
      "coin_sig": "J6TTRB3F748BFDCFGRH72AAM180SJA0ENYZXSWG94G7SWT0N9SH9YSJZGBQXS6RKMQ3E68SS8NCB97EN3KB8M1M9M3FVXZ0VET28R0G"
    }
  ]
}
test (6,725 bytes)   

Florian Dold

2023-06-05 09:13

manager   ~0020255

It does indeed pass again with the latest exchange. Maybe I was on some commit where it didn't work?

Issue History

Date ModifiedUsernameFieldChange
2023-06-02 10:46Florian DoldNew Issue
2023-06-02 10:46Florian DoldStatusnew => assigned
2023-06-02 10:46Florian DoldAssigned To => Christian Grothoff
2023-06-03 11:09Christian GrothoffNote Added: 0020252
2023-06-03 11:09Christian GrothoffFile Added: test
2023-06-03 11:09Christian GrothoffAssigned ToChristian Grothoff => Florian Dold
2023-06-03 11:09Christian GrothoffStatusassigned => feedback
2023-06-05 09:13Florian DoldNote Added: 0020255
2023-06-05 09:13Florian DoldStatusfeedback => informing
2023-06-05 09:13Florian DoldResolutionopen => fixed
2023-09-23 13:07Christian GrothoffFixed in Version => 0.9.3
2023-09-23 13:09Christian GrothoffStatusinforming => closed