ビットコイン⚡ライトニングネットワーク障害復旧
致命的な障害時に、自身の資金を復旧する方法を学ぼう本記事は Lightning Labs「Builder's Guide:Disaster Recovery」を @katakotoが翻訳したものです。
ノードにアクセスできなくなった場合や、致命的なエラーによりLNDが起動できなくなった場合の最終手段として、このガイドをご利用ください。このガイドを利用する前に、ログを注意深く調べ、LNDを最新バージョンにアップグレードし、問題の徹底的な分析を行ってください。
このガイドに従うと、あなたの全チャネルがクローズされます。そして、あなたの資金は、速度は場合によって異なりますが、オンチェーン上で利用できるようになります。
1. 可能な限りのデータを回復しよう
自分のノードからのデータが多ければ多いほど、リカバリーが成功しやすく、またオンチェーンでの資金回収が早くなります。
- シード・フレーズ (aezeed)
秘密鍵は、資金を回収するために絶対に必要なものです。ほとんどの場合、この鍵はシード・フレーズ (aezeed)から抽出されますが、 wallet.db
ファイル内のマスター秘密鍵とそれを暗号化したパスワードからも復元可能です。シード・フレーズは、ウォレットのパスワードとは異なるパスフレーズでさらに暗号化されている可能性もあります。
- スタティック・チャネル・バックアップ (SCB)
スタティック・チャネル・バックアップは、ピアが致命的な障害にさらされた場合に、チャネルを閉じるためのプロトコルです。.lnd/data/chain/bitcoin/mainnet
にあるchannel.backupファイルは、(あなたのノードが接続している)各ピアの情報、ピアへのアクセス方法、そしてあなたのチャネル情報が含まれています。SCBは、各チャネルの個別テキスト文字列としてもまた存在しています。
一旦呼び出されると、あなたのノードは、各ピアに最新のコミットメント・トランザクションを送信し、あなたのチャネルを強制クローズするように求めます。そうすれば、自分の秘密鍵を使って、資金を回収することができます。
- 最新チャネル・データベース
channel.db
は .lnd/data/graph/mainnet
にあり、あなたのチャネルに関する、最新のコミットメント・トランザクションを含むあらゆる情報を含んでいます。channel.dbが最新の状態でない場合、復旧プロセスの一環としてこのファイルを読み込むと、危険な場合があります。このファイルは、クラッシュしたノードからの直接復旧が可能だった場合にのみ使用してください。
- あなたのチャネルに関する サードパーティーからの情報
いくつかの稀なケース、特に両方のピアに障害が生じている古いチャネルにおいては、上記のツールではチャネルがクローズでできない場合があります。 Lightning Network explorersなどのサードパーティー製ツールを利用して、全てのチャネルを正常にクローズできたことを確認するのが有効な場合があります。
まだノードにアクセスできるのであれば、.lnd
ディレクトリ全体のバックアップを取るのも良いでしょう。
2. 新しいノードのセットアップ
復旧プロセスの準備のためには、LNDノードが必要です。致命的な障害の状況に応じて、同じノードを使うかもしくは、新しいマシン上に新たなノードをセットアップする必要があるかもしれません。
同じノードを使う場合は、古い.lnd
フォルダをどこか別の場所に移し、復旧プロセスを空のディレクトリから開始するのを忘れないようにしてください。
その他の場合においては、復旧の全プロセスの間、古いノードは電源オフにしておく必要があります。
さらに読む:LNDを始めよう
3. 復旧プロセスの開始
A) 新しいノードの初期化
では、新しいノードを初期化する所から、復旧プロセスを開始します。lncli create
コマンドを入力すると、最初にパスワードを求められます。このパスワードは少なくとも8文字以上なければなりませんが、その他は自由に選べます。
次に、ニーモニック・シードの入力が必要になります。古いノードから入手したシードフレーズ(aezeed)を入力してください。もしシードフレーズが以前に暗号化されていた場合は、パスフレーズも入力する必要があります。
その後、ノードは即座に回復が可能なオンチェーンの最終的な資金のために、ビットコイン・ブロックチェーンをスキャンし始めます。これには、しばらく時間がかかるかもしれません。
いったん完了すると、lncli walletbalance
コマンドでオンチェーンのウォレット残高を確認できるようになります。そうすれば、lncli sendcoins --sweepall <あなたのビットコインアドレス>
コマンドで、ビットコインを動かせるようになるでしょう。
B) スタティック・チャネル・バックアップ
->自分のノードのSCBファイルを持っていない場合は、次にスキップしてください。
このステップでは、channel.backup
を呼び出します。続ける前に、あなたのノードが最新のチェーンとグラフに同期しているのを確認してください。最新の状況は lncli getinfo
コマンドで確認できます。ファイルを別のディレクトに置いて lncli restorechanbackup --multi_file /path/to/file/channel.backup
コマンドで呼び出します。
別の方法として、lncli --single_backup <hex形式にエンコードされたチャネル・バックアップ>
というコマンドにより、各チャネルのSCBを手動で開始することもできます。
このコマンドにより、あなたのノードが以前のチャネル・ピアに連絡し、チャネルの強制クローズを依頼することができます。資金はすぐにウォレットに届き、即座に使えるようになるはずです。
全てのチャネル・ピアが即座に反応するわけではなかったり、回復時にオンラインではなかったりするので、このステップで少し立ち止まり、1~2日ほど待ってみる価値があるかもしれません。
もし一定期間が経っても、オンラインにもかかわらず、いくつかのチャネルがクローズしない場合は、最新のIPアドレスまたはオニオン・アドレスを入手して手動での接続を試みます。
C) 全チャネルを強制クローズする
->自分のチャネルのデータベースを持っていない場合は、次のステップへスキップしてください。
自分の接続してるピアがSCBをサポートしていない場合や、永久に利用できない場合、または壊滅的な障害に見舞われた場合は、強制クローズ・トランザクションを開始する必要があります。
Chantools などの外部ツールを利用して、自身のチャネル・データベースから、コミットメント・トランザクションを自分自身で発行できます。これは channels.db
ファイルが、故障したノードから直接回復できた場合にのみ可能です。このファイルが最新でない場合、コミットメント・トランザクションが接続しているチャネルピアから無効化され、これらのチャネルの資金を全て失ってしまう深刻なリスクがあります。
Chantoolsに関するドキュメントはこちらにあります。Chantoolsには、自分のノードがオフライン中に強制的に閉じられたチャネルから資金を回復することができる、その他の便利なツールも含まれています。
D) 手動による介入
場合によっては、チャネル・パートナーに直接連絡を取って強制クローズを依頼するのがうまくいく時があります。パートナーがLightning Network explorerや、チャットボット、個人のウェブサイトなどに連絡先の詳細を残している場合があります。これらのグループを見つける方法についてはコミュニティ・リソースを参照してください。
E) 自分の資金を安全に守ろう
いったん、オンチェーンの資金を回復したら、下記のコマンドで自分のコントロール可能な別のウォレットに移動するのを忘れないようにしましょう。 lncli sendcoins --sweepall <あなたのビットコインアドレス>
追加のツール
またノード復旧の一環として、下記のツールやリソースも参照してください。
Guggero’s Chantools
Telegram Cheeserobot
Zombie Channel Recovery Matcher