bitcoin core の wallet.dat を「新規作成」し、そこにバックアップしたデータ(利用していたアドレスや残高・取引履歴)をリストアする手順を紹介したページ。

上記のようなコトを行いたい場合、「dumpwallet と importwallet を使い、新しい wallet.dat に以前の取引データをリストアすれば良い」というコトを知ったので、試してみた・・・・というページ。

まえおき長め。(手順のみ読みたい場合はここからジャンプ)

HD鍵生成に未対応な古い Wallet の例

HD鍵生成に未対応な古い Walletデータ は、どんだけ最新のbitcoin core にアップデートしても
hd key generation is disabled
▲クリックで拡大
こんなカンジでHD鍵生成は無効なまま。
通常の手順ではHD鍵生成は有効にならない。

という事で、このような古いWallet のアドレスや履歴を残したまま、HD鍵生成に対応させてみよう、というのがこのページの趣旨。

余談だが、二つの Wallet を1つにまとめたい時も、似たような手順でイケるらしい。
bitcoin-cliでウォレットのインポート時、所持コインは上書きでなく加算だった - Qiita

スポンサー リンク

補足&注意事項

  • bitcoin core 系の Wallet であれば、どの暗号通貨の Wallet でもこの手順が利用できる。
  • 待ち時間が長いので、時間に余裕がある時に行うこと
  • ミスしたりエキスポートデータを流出させたりすると、最悪の場合コインをすべて失うコトになるので慎重に、かつ自己責任で行うこと。

おことわり

いきなり bitcoin-qt で実行するのは怖かったコトや、送金テストをサクっと実行したかった、という理由で、以下のスクリーンショットは dogecoin-qt でテストした時のものを利用しています。(便宜上bitcoin-qt.exeと表記。bitcoin-qt でも手順は同じ。)

手順ここから

バックアップ→初期化→リストア手順

  1. バックアップ
    Wallet (bitcoin-qt.exe) を起動させる
    デバックウインドウ起動
    • walletpassphrase 自身が設定したパスワード 60
       ※ パスワード設定している場合は上記のロック解除コマンドが必要
       ※ 末尾の「60」は解除される時間の指定(単位:秒)
    • dumpwallet hoge.dump
       ※ この場合「hoge.dump」というバックアップファイルが生成される
       ※ hoge.dump は bitcoin-qt.exe と同じ階層に保存される
    • 実行時の画像 (Dogecoin-qtの場合)
      コマンド実行時、null が帰ってくる
      ▲クリックで拡大
      コマンド実行時、null が帰ってくるが、キチンと実行されている。
    • 実行時の画像 (BCH のbitcoin-qtの場合)
      walletpassphrase Error parsing JSON:
      ▲クリックで拡大
      出力ファイルの保存先がちゃんと表示された。コイン毎に挙動が違うのか…。
  2. 初期化
    Wallet (bitcoin-qt.exe) を終了し、wallet.dat を削除する
  3. リストア
    Wallet (bitcoin-qt.exe) を起動させる (新しい wallet.dat が作成される)
    デバックウインドウ起動し以下を実行
    • importwallet hoge.dump
       ※ 1時間くらいかかる
    • 実行時の画像
      importwallet
      ▲クリックで拡大
    • インポートが正常に終わったことを確認した後、インポートに利用したダンプファイルは必ず削除しておく。流出し悪用されるとコインを失うことになる。

以上でバックアップから初期化、リストア終了。

リストア実行後のWallet

実行後のWallet
▲クリックで拡大

  • 以前の残高や取引履歴を残したまま。パスフレーズは削除され、HD鍵生成に対応した。
  • 入金用アドレスのラベルは残ったが、送金元アドレスに付けたラベルは消えてしまった。(残高ゼロのアドレスのラベルが消えたのかも?)
  • 既に使わなくなったアドレスも、しっかりインポートできていた。
    実行後のWallet
    ▲クリックで拡大
    「4年前に残高ゼロとなり、その後 一切使っていなかったアドレス」に入金してみたが、リストア先のWalletでも無事入金を確認できた (つまり古いアドレスもちゃんとインポートできていた)。※残高ゼロのアドレスでもラベルは残っていた。

エラーが出る場合のメモ

  • 「Please enter the wallet passphrase with walletpassphrase first.」とエラーメッセージが出る場合
    • Wallet が暗号化 (つまりパスワード設定がされている) 場合にこのエラーが出る。
    •  dumpwallet コマンドの前に「walletpassphrase 自身が設定したパスワード 60」が必要。
  • エラー「walletpassphrase Error parsing JSON:」が出る
    • エラー時の画像
      walletpassphrase Error parsing JSON:
      ▲クリックで拡大
      このエラーは、パスワードに半角スペースや特殊記号が多く含まれていると発生しやすい。
    • このエラーの回避はかなり面倒くさいので、パスワードの再設定を行った方が早い。
      • パスワードの再設定手順
        パスワードの再設定手順
        ▲クリックで拡大
        ※この入力ボックスからであれば、半角スペースや特殊記号が多く含まれている場合でも大抵の場合は正しくパスワードを受け取ってくれる。

手順紹介は以上。
以下、このページを書くに至った経緯など。

このページを書くに至った経緯

非常に今更な話なのだけれど、
古くから暗号通貨を利用していて、かつ bitcoin core 系の Wallet を以前のまま利用しているユーザーの場合、「hd keyの生成」は無効化されている。

この場合、X印の付いたHDマークにマウスをホバーさせると・・・・
hd key generation is disabled
▲クリックで拡大
こんな感じで「hd key generation is disabled」もしくは「HD鍵生成は無効化されています」というツールチップメッセージが表示される。

hd keyの生成は後から追加された機能のため、それより古い wallet.dat を使っている場合は無効化されるらしいのだ。 (ちなみに HDウォレットが 正式に標準化されたのは、2018年2月リリースのバージョン 0.16から)

しかし、どうやら wallet.dat の初期化を行い、古い wallet.dat の中身をインポートしてやれば古い取引履歴やアドレスを残したまま Wallet のHD化が出来るらしい、と聞いたのでチャレンジしてみた次第。

このページは以上。

今回参考にしたURL