コイン送信時のBitcoinクラッシュ

3 件のメッセージ サトシ・ナカモト 2010年1月27日 — 2010年2月3日

ウォレットファイルをコピーして回るとそうなる。ウォレットファイルを2台目のコンピュータにコピーすると、両方ともウォレット内のお金は自分のものだと思い込む。一方がそのお金を使うと、もう一方はそれらのコインが既に使われていることを知らず、再度使おうとし、そのエラーに遭遇することになる。

これが重要なエラーメッセージであることが明らかになったので、「このお金は既に使われているようだ… ウォレットファイルのコピーを別のコンピュータで使用した場合にこれが発生する可能性がある。」のようなものにすべきだろう。

ウォレットファイルを移動またはバックアップすることはできるが、「系統」は1つだけにして、一度に1つの場所でのみ使用する必要がある。ウォレットからお金を送金した場合、以前のコピーは使用してはいけない。

これは良い指摘だ。コインを使った後のバックアップを復元する場合に備えて、どのコインが既に使われたかを再発見するための再同期機能を追加する必要がある。これは実装が難しくなく、まだ実装されていないだけだ。リストに追加しておく。これにより、そのエラーメッセージを表示する代わりに、ほぼ状況を修復できるようになるだろう。

再同期のアイデアは、ウォレットを調べてブロックインデックスと照合し、現在のコンピュータが既に使われたことを認識していないトランザクションを見つけるものだ。これは、ウォレットファイルのコピーを使って別のコンピュータで使われた場合や、使用前のバックアップにウォレットを復元した場合に発生する可能性がある。現在、ソフトウェアは使用時にwallet.datに使用済みマークを付けるため、自分のトランザクションが使用済みかどうかを常に把握していると仮定している。

ウォレットマージツールは実装可能だが、再同期がほとんどの問題を解決すれば、需要はかなり少なくなる。再同期があれば、一方のウォレットからもう一方にすべてのお金を送ることで、ほぼ同じことができる。受信側が再同期して、重複しているコインがすべて使われたことを発見し、新しいトランザクションでそれらを受け取る。

この修正をSVNにアップロードした。使用済みコインを監視し、読み込み時およびブロックが入ってくるたびに継続的にウォレットを更新する。より良いエラーメッセージも入れたが、使用済みコインを事前に常に見つけるため、2台のコンピュータで同時に同じお金を使わない限り、このエラーに遭遇することはないはずだ。

試してみたい方は、PMまたはメールで送信先のメールアドレスとOS(Windows、Linux 32ビット、Linux 64ビット)を知らせてほしい。