listtransactionsに消極的だったことで批判されてきたのは知っている。その消極的な理由を説明させてほしい。
トランザクションは動的だ。過去のトランザクションが未承認になったり、消えて戻ってきたり、無効になって消滅したり、異なる二重支払いに置き換えられたりする。日付が変わることも、順序が変わることもある。
プログラマーは自然とlisttransactionsを次のように使いたがる:前回聞いた以降の新しいトランザクションを教えてくれ、自分で集計や静的な記録を保持するから。これは通常の使用ではうまくいくように見えるが、金額を何かに使う場合は非常に悪用しやすい:
- 過去のトランザクションが無効になり消えたことをどうやって知るのか?
- ブロックチェーンの再編成が起きた場合、再承認されたときにトランザクションを二重にカウントしやすい。
- トランザクションが異なるtxidの二重支払いに置き換えられることがある。両方の支出をカウントしてしまう。
ある時点で、取引を受け入れるウェブサイトや人は、このリスクを受け入れなければならない。listreceivedbyaddress を使おうと listtransactions を使おうと、これは避けられない。これが listtransactions への消極的姿勢がとても奇妙に見える理由だ。
Bitcoin を受け入れるほぼすべての取引所やウェブサイトは、取引が承認され商品が発送されるか金銭が交換される二値の決定点に達する。その二値の決定点以降、ブロックチェーンが再編成されたり取引が消えたりしても、ウェブサイトにできることは損失を受け入れることだけだ。
ウェブサイトの観点からは、「listtransactions 6」と「listreceivedbyaddress 6」の間に実効的な違いはゼロだ。ウェブサイト運営者にとっての最終結果は同じだからだ:商品は発送済み/注文は承認済み/金銭は交換済み。