大量の Bitcoin を失った

Stone Man 2010年8月10日 23:15 UTC 原文 ·

詳細は以下の通り。

  1. 取引所で時間をかけて 9,000 BTC を購入した。
  2. Debian のライブ版 Linux ディストリビューション上で動作しているクライアントに送金した。
  3. ウォレットファイルを USB メモリーにバックアップした。
  4. 自分自身に 1 BTC を送金した。
  5. 確認が完了する前にクライアントを閉じた。
  6. システムをシャットダウンした(メモリーにロードされていたシステムディスクが消去され、./bitcoin フォルダーも消えた)
  7. システムを再起動した。
  8. 古い wallet.dat ファイルを./bitcoin フォルダーにコピーした。
  9. いくつかの確認の後、残高は 1 BTC となり、見覚えのないアドレスに 8,900 BTC を送金したというトランザクションが表示されていた。
  10. フォーラムのスレッドで同様の問題を経験した人がいると読んだが、それは別のアドレスにコインを送ってから古いウォレットファイルをリロードして二重支払いを試みた場合にのみ発生しているようだった。

何かできることはあるだろうか?

8,900 が送金されたとされるアドレスは持っているが、古いウォレットファイルは完全に失われている。

よろしく、 Stone Man

FAQ に各トランザクション後にバックアップを取るという警告を追加した。ちなみにバックアップを取る前にクライアントを停止する必要があるのか?それは少し不便だ。自動バックアップは確かに便利だろう。

QuantumMechanic 2010年8月11日 08:10 UTC 原文 ·

サトシが以下の投稿でこれに対する保護策を提案していたと思う:

サトシ・ナカモトの投稿(2010年7月17日 16:27 UTC)

新しいアドレスが必要な時に使用するために、事前に作成したアドレスのストックをウォレットにキューしておくべきだ。それほど大きくないので、たくさん持っておいても問題ない。これにより、誰かがバックアップを取った後に新しいアドレスを要求し、それで大きな支払いを受け取るケースもより一般的にカバーできる。あるタイプのアドレス需要が他のタイプのために枯渇しないように、別々のキューを設けるべきかもしれない。

アドレスは通常の場所に作成・保存されるが、「作成済み・未使用」アドレスの別のリストにも記載される。アドレスが要求されると、未使用キューの先頭のアドレスが渡され、新しいアドレスが作成されて末尾に追加される。

ブロック読み込みコードには、wallet.datをコピーした人のケースを修復するために作られた何らかの再スキャンがある。ウォレットが復元されたために忘れられた、既に受信済みのブロック内の受信支払いを再発見するケースを再スキャンが処理できるか確認する必要がある。

Ground Loop 2010年8月11日 17:31 UTC 原文 ·

すべてのコインがリスクにさらされるとは初耳だ。トランザクションに関与するコインの塊(以前受け取ったトランザクション)だけだと思っていた。合計残高ではなく。おっと。

対策として、ウォレットを手動で 5 つの新しいウォレットに分散して分割した。これで常にリスクにさらされるのは 1 つだけだ。

lachesis 2010年8月11日 17:57 UTC 原文 ·
Ground Loopの投稿(2010年8月11日 08:31 UTC)

すべてのコインがリスクにさらされるとは初耳だ。トランザクションに関与するコインの塊(以前受け取ったトランザクション)だけだと思っていた。合計残高ではなく。おっと。

前の理解が正しかった。彼のすべてのコインが失われた理由は、最初に 9000 すべてを自分自身に送金し、単一の TxIn に統合したからだ。そのステップを省略して直接自分に 1 を送っていれば、1 を超える以前受け取った最小の支払いだけを失っていただろう。

クライアントは TxIn と TxOut をユーザーにもっとうまく伝える必要があると思う。混乱させずにそれをどうやるかはわからないが、クライアントがどのコインを送金するかの選択には、プライバシー、安全性、セキュリティに関する現実的な影響がある。

gridecon 2010年8月11日 20:46 UTC 原文 ·
lachesisの投稿(2010年8月11日 08:57 UTC)
Ground Loopの投稿(2010年8月11日 08:31 UTC)

すべてのコインがリスクにさらされるとは初耳だ。トランザクションに関与するコインの塊(以前受け取ったトランザクション)だけだと思っていた。合計残高ではなく。おっと。

前の理解が正しかった。彼のすべてのコインが失われた理由は、最初に9000すべてを自分自身に送金し、単一のTxInに統合したからだ。そのステップを省略して直接自分に1を送っていれば、1を超える以前受け取った最小の支払いだけを失っていただろう。

クライアントはTxInとTxOutをユーザーにもっとうまく伝える必要があると思う。混乱させずにそれをどうやるかはわからないが、クライアントがどのコインを送金するかの選択には、プライバシー、安全性、セキュリティに関する現実的な影響がある。

待ってくれ、また混乱してきた。この驚きの本質は、Bitcoin が各トランザクションで「ウォレットを空にする」ようにプログラムされているということだと思っていた。私が読んだ説明によると、ウォレットのアドレス A から外部のアドレス B にコインを送る場合、実際にはアドレス A から全てのコインが送出され、アドレス B に向かわない分は自分のアドレス C に送られる。つまり、9000枚の中から 1枚だけ支払う場合でも、1枚を相手に送り、8999枚を新しいアドレスの自分自身に送ることになる。

言い換えれば(私が混乱していなければ)、トランザクションを行うたびに、バックアップ済みの古いウォレットアドレスは空にされることになる。

FreeMoney 2010年8月11日 20:56 UTC 原文 ·
grideconの投稿(2010年8月11日 11:46 UTC)
lachesisの投稿(2010年8月11日 08:57 UTC)
Ground Loopの投稿(2010年8月11日 17:31 UTC)

すべてのコインがリスクにさらされるとは初耳だ。トランザクションに関与するコインの塊(以前受け取ったトランザクション)だけだと思っていた。合計残高ではなく。おっと。

前の理解が正しかった。彼のすべてのコインが失われた理由は、最初に9000すべてを自分自身に送金し、単一のTxInに統合したからだ。そのステップを省略して直接自分に1を送っていれば、1を超える以前受け取った最小の支払いだけを失っていただろう。

クライアントはTxInとTxOutをユーザーにもっとうまく伝える必要があると思う。混乱させずにそれをどうやるかはわからないが、クライアントがどのコインを送金するかの選択には、プライバシー、安全性、セキュリティに関する現実的な影響がある。

待ってくれ、また混乱してきた。この驚きの本質は、Bitcoinが各トランザクションで「ウォレットを空にする」ようにプログラムされているということだと思っていた。私が読んだ説明によると、ウォレットのアドレスAから外部のアドレスBにコインを送る場合、実際にはアドレスAから全てのコインが送出され、アドレスBに向かわない分は自分のアドレスCに送られる。つまり、9000枚の中から1枚だけ支払う場合でも、1枚を相手に送り、8999枚を新しいアドレスの自分自身に送ることになる。

言い換えれば(私が混乱していなければ)、トランザクションを行うたびに、バックアップ済みの古いウォレットアドレスは空にされることになる。

私の理解では、送りたい枚数以上のコインを持つアドレスを見つけ(または複数のアドレスを組み合わせ)、おつりを新しいアドレスに送る。

つまり、もし彼が 1000、2000、2500、3500 のアドレスを持っていたとすると、そのうちの一つ(最小のもの?)を選び、1枚を送り、残りを新しい自分のアドレスに送り返す。この場合、全てを失うことはなく、その一つのアドレスにあった残りだけを失う。

どうやら彼はコインが入ったアドレスを 1 つしか持っていなかったようだ。おそらく取引所から一度にまとめて取得したからだろう。そうでなければ、なぜ全てを失うのか分からない。

gridecon 2010年8月11日 21:08 UTC 原文 ·

よし、注意深く読み直し、参照されたスレッドを確認して、ようやく詳細を理解した。Bitcoin が各トランザクションで「ウォレットを空にする」のではなく、コインの送信に使用されたアドレスを完全に空にするのだ。この特定のケースでは、ユーザーが以前に 9000枚のコインをまとめて自分自身に送っており、結果としてすべてのコインが単一のアドレスに保持されていた。

私が見る限り、GUI クライアントからは、残高のどのコインがどのアドレスに保持されているかの情報を取得する方法がないようだ。アドレスが「本当に重要」なものであることを考えると、その情報は価値があるかもしれない。

Insti 2010年8月11日 21:25 UTC 原文 ·

「ウォレット」は自分専用の銀行のようなものだ。 多くの異なる口座が含まれている。(Bitcoin ではこれをアドレスと呼ぶ)

各アドレスにはそれに関連付けられた残高、つまりどれだけのお金が入っているかがある。 ウォレットの残高は、ウォレット内のすべてのアドレスの残高の合計だ。

トランザクションを実行すると、必要な出力額を構成するのに十分なアドレスが空にされるが、各アドレスを完全に空にする必要があるため、余りが出ることが多く、その場合「おつり」が新しいアドレスに戻される。

このケースでは、Stone Man が 700 以上のアドレスからすべてのお金を 1 つのアドレスに送るトランザクションを行ったため、お金が入ったアドレスが 1 つだけのウォレットになった。

そのアドレス/口座は 1BTC のトランザクションの一部として空にされ、8999 のおつりは秘密鍵を紛失した新しいアドレスに返された。

もし全てのコインを 1 つのアドレスにまとめていなければ、失うコインはずっと少なかっただろう。

この話の教訓は「すべての卵を一つのカゴに入れるな」かもしれない。

grideconの投稿(2010年8月11日 12:08 UTC)

私が見る限り、GUI クライアントからは、残高のどのコインがどのアドレスに保持されているかの情報を取得する方法がないようだ。アドレスが「本当に重要」なものであることを考えると、その情報は価値があるかもしれない。

そうだ、現在の GUI ではどのアドレスにどの残高があるかを確認することはできない。

「非常に重要な」情報だと思う。 また、トランザクションの送信元となるアドレスを選択できることも重要だと思う。

これはウォレットの比喩がまずい例だ。

マルッティ・マルミの投稿(2010年8月10日 17:01 UTC)

FAQ に各トランザクション後にバックアップを取るという警告を追加した。ちなみにバックアップを取る前にクライアントを停止する必要があるのか?それは少し不便だ。自動バックアップは確かに便利だろう。

バックアップの数秒前(5秒程度)以内に何もしなかったり、支払いを受けたりしなければ、クライアントを停止せずにバックアップを取ることができる。

grideconの投稿(2010年8月11日 11:46 UTC)

待ってくれ、また混乱した。驚きの本質は、Bitcoinが各トランザクションで「ウォレットを空にする」ようプログラムされていることだと思っていた。

いいえ、通常は各トランザクションでウォレットを空にするわけではない。金額に近くなるように合計できる最小のコインセットを使う。この場合、残念ながら彼のウォレットには 9000 BTC の単一の「紙幣」が入っており、1 BTC と 8999 BTC のお釣りを得るために崩す必要があった。

vess 2010年8月12日 16:54 UTC 原文 ·

クライアントに、各アカウントに保管されているアドレスと金額を表示する「アカウント」タブを設けるべきだと強く推奨している人々に、自分の声も加えたい。

そこは、バックアップ機能や注意書き、警告を追加するのに自然な場所になる。

joechip 2010年8月17日 20:58 UTC 原文 ·
vessの投稿(2010年8月12日 16:54 UTC)

クライアントに、各アカウントに保管されているアドレスと金額を表示する「アカウント」タブを設けるべきだと強く推奨している人々に、自分の声も加えたい。

そこは、バックアップ機能や注意書き、警告を追加するのに自然な場所になる。

この提案に 2番目(3番目、4番目……何番目でも)として賛同する。これは経理的にも非常に助かる。

それから、stone man さん、お悔やみを申し上げる。

ではまた。

Ground Loop 2010年8月18日 04:27 UTC 原文 ·

アカウントだけでなく、自分のウォレットにどの「紙幣」が入っているか、入出金の個別のトランザクション、すべての詳細を見られる総合的な台帳ビューを完全に可視化したい。今の UI は少し簡略化されすぎているように感じる。初期採用者の大半は、合計残高だけでなく、その仕組み自体に興味を持っている。

ほんの BTC 0.02 だけの意見だが。