これらのことは、ある時点以降はlistreceivedbyaddressであっても避けられず安全でないという重要なポイントだと思う。そこで、現在のメインラインBitcoinでのウェブサイトの動作とlisttransactionsを比較することが有益だと思う。これを承認ポイントと呼ぼう。あなたの質問に答えると……
サトシ・ナカモトの投稿(2010年12月8日22:36 UTC)
- 過去のトランザクションが無効になり消えたことをどうやって知るのか?
bitcoinmarketやmtgoxなどのサイトは、6承認を「承認ポイント」、つまりトランザクションが「安全」と見なせる瞬間としている。過去のトランザクションが無効になり消えた場合、ウェブサイトは潜在的な損失を避けられない。ユーザーはすでにPayPal-USDやLR-USDやPecunix GAUを受け取って消えているからだ。
ウェブストアや実店舗でも同じだ。顧客が商品を受け取る承認ポイントがある。その後にTXが無効になった場合、店舗は避けられない損失を被る。顧客はすでに購入した商品を持って去っているからだ。
サトシ・ナカモト
- ブロックチェーンの再編成が起きた場合、再承認されたときにトランザクションを二重にカウントしやすい。
txid 0x1234の承認数が、大量のブロック再編成のために0から10に、また0にと激しく変動していると仮定しよう。
listreceivedbyaddressであれlisttransactionsであれ、トランザクションが「店舗承認済み」の信頼レベルを超える瞬間という二値の承認ポイントがある。その承認ポイントで顧客は購入した商品を持って去り、それ以降のブロックチェーンやTXの動作に関係なく店舗は損失を被る。
プログラマーがミスをして、承認数が常に増加すると仮定する可能性があることは同意する。しかし、そのヒューマンエラーもlistreceivedbyaddressで使用した場合に危険をもたらす。
サトシ・ナカモト
- トランザクションが異なるtxidの二重支払いに置き換えられることがある。両方の支出をカウントしてしまう。
この点については、txidが変わるため、listtransactionsがここで追加的な危険をもたらすことに同意する。ただし、新しい二重支払いがJSON-RPCユーザーが探している宛先Bitcoinアドレスと一致する場合に限る。
それでもこの場合も、ユーザーのセキュリティは完全に信頼レベルに依存する:TXが6承認前に置き換えられた場合、ソフトウェアはおそらく何も気づかない。TXが6承認後に置き換えられた場合、顧客はすでに購入した商品を持って去っており、Bitcoinユーザーは損失を被る。
これは単にBitcoin自体に固有のものだ。ブロックチェーンの再編成は50ブロック後に起こるかもしれない。しかし、ウェブサイトはユーザーに商品を受け取る前に50ブロック待たせたくない。これはよく知られた自動販売機問題だ。listtransactionsはlistreceivedbyaddressですでに脆弱なもの以上にこの問題に何も追加しない。
取引は二値の「承認ポイント」の後でも置き換えられるし、実際に置き換えられる。Bitcoinのすべてのユーザーは、クレジットカードのチャージバックリスクや万引きリスクと同様に、これをビジネスプランに織り込む必要がある。