bitcoin-sv / merchantapi-reference

Merchant API reference implementation
Other
23 stars 17 forks source link

Make `POST /mapi/tx` idempotent (and return the SPV proof if tx is already known/confirmed) #12

Open ghost opened 3 years ago

ghost commented 3 years ago

App developers have problems with re-broadcasting and have to attach extra logic to handle the case of a new transaction versus the same (but already confirmed) transaction.

A way to fix this problem is to provide a unified idempotent endpoint that does the following in 1 api call:

  1. If it's a new transaction (unconfirmed), then accept and return the same data as now; and
  2. If it's a transaction that was settled (confirmed) from before, then still return a returnResult: success and instead also include the SPV proof and transaction details.

This is basically combining the POST /mapi/tx and GET /mapi/tx/:txid endpoints into one. This will lead to a more reliable experience for developers and reduce integration difficulty.

ghost commented 3 years ago

Another option:

Simply return txid and currentHighestBlockHash and currentHighestBlockHeight also from GET /mapi/tx/:txid and then both the broadcast and status response is mostly identical.