UmbrelのダッシュボードでBTCの入金アドレスが表示されない現象への対処方法メモ
稼働開始から約一週間、早速Umbrelの不具合(?)らしきものに遭遇したのでその対処法をメモしておきます。
Umbrelのバージョン
Version 0.3.14を使っています。
ハードウェアは、Raspberry Pi Model 4 B + 1TB SSD です。
遭遇した現象
まず、ダッシュボードのBitcoin Coreメニューでビットコインの残高が表示されている状態で、もう一度入金するために「Deposit」ボタンをクリックして入金用アドレスを表示しようとしたところ、アドレス欄が空白かつQRコードも無効なものが表示されていることに気付きました。
1回目の入金のときは特に問題なかったのに、不思議です。
試しにブラウザの開発者ツールを開いてNetworkタブを確認すると、下の画像の通りいくつかのAPI呼出しに失敗して「Must unlock wallet」というエラーメッセージが返って来ていることが分かりました。
ここでおもむろにTwitterで上の画像付きでつぶやいてみたところ、開発メンバーの一人から親切にも「DMして」と返事をもらいました。そこで何度かメッセージをやり取りして、ラズパイの再起動、SDカードの再フラッシュやssh接続でのウォレットのアンロックなどを試したりしましたが、残念ながら解決には至りませんでした。
何度もメッセージのやり取りに付き合ってくれた彼にはホントに感謝の念しかありません。
解決方法(多分)
結論から言うと、裏で動いているlndというLightning NetworkのサービスがTor経由でのネットワーク接続に失敗しており永遠に停止と再起動を繰り返していたのが原因のようです。
もし同じ現象に遭われた人がおられたら下記を試してみることをおすすめします。
ls -alt ~/umbrel/lnd
~/umbrel/lndというディレクトリにv3_onion_private_keyというファイルがあると思います。もしこのファイルのサイズが上の画像のように "0" となっている場合は、このファイルを削除して見てください。
sudo rm ~/umbrel/lnd/v3_onion_private_key
削除後、1〜2分待つとlndサービスが正常起動して v3_onion_private_key ファイルが自動的に再作成されるはずです。再作成後のファイルサイズが0でなければおそらく問題が解決していると思います。
私のケースでは、これでBTCの入金アドレスが表示されるようになり、無事2回目の入金が出来ました。API呼出しでのエラーも全て解消しています。
Twitterでやり取りしてくれた開発者氏にこのことを報告したところ、「う〜ん、それで直ったのかどうかは分からない。(後で詳しく確認するよ。)」と言われたので、もしかすると間違っているかも知れません。
解決方法にたどり着くまでのメモ
sshログイン後、下のコマンドでlndを実行しているDockerコンテナのシェルに入ることが出来ます。
cd umbrel/
docker-compose --env-file .env exec lnd /bin/sh
が、とくに収穫は無し。
次に ~/umbrel/lnd 以下のディレクトリのファイルを見ていると、~/umbrel/lnd/logs/bitcoin/mainnet/lnd.log にlndのログがあることを発見。
tailコマンドでリアルタイムに追加されて行くログの内容をぼーっと眺める。
tail -f ~/umbrel/lnd/logs/bitcoin/mainnet/lnd.log
数分間見ているうちにさすがに「何かがおかしい」と気付きました。
「なんでこんなに何度も再起動と初期化のメッセージが流れてくるんだ?」
時系列にすると、
1. lndサービス起動 & LNウォレットのアンロック処理
(約57秒)
2. 「LNウォレットがアンロックされました」とのメッセージ
(約3秒)
3. lndサービスがシャットダウン
(1へ戻る)
という流れを延々と繰り返しているのが分かりました。
つまり60秒のうち3秒間程度はウォレットがアンロックされた状態で「正常に動作」していたことになります。ということは、「Deposit」ボタンをクリックした時に約20分の1の確率でたまたまそのスポットに当たれば正しいアドレスが表示されていたわけです。
私の1回目の入金が出来ていたのは、おそらくたまたまこの確率で正しい表示が出来ていたからなのではないかと想像しています。
さて、ここまでの情報から、なぜ「v3_onion_private_keyファイルを削除する」ということを思いついたかというと、それはもう私の「天才的な直感力」としか言いようがありません。^^
というのはもちろん嘘で、今回の解決策を探していろいろとひたすらGoogle検索をしていた中で、どこかでちらっと「v3_onion_private_keyファイルを削除したらTor接続の問題が直ったよ」という文章を見た記憶があったからです。
見たときには「これは関係ないな」と思ってすぐに閉じてしまったのですが、何が解決策につながるか分からないものですね。
追記:
Twitterでヘルプしてくれた開発メンバーのLounès さんに上の解決方法を連絡したときに "Mmmh not sure this is what solved it" と言われていたのが気になったので、もう一度同じ現象を再現して検証して見ました。
1. v3_onion_private_key(現状99バイト)のファイル名を「v3_onion_private_key.bak」に変更。
2. 新たにv3_onion_private_keyをサイズ0バイトで作り直す。
3. ラズパイを再起動。
→ やはり問題の現象が再現。lndサービスが再起動ループに入る。
4. サイズ0のv3_onion_private_keyを削除。
→ しばらくしてlndサービスが正常に起動。問題が解消。
という結果になったので、やはり問題が起きた原因はサイズ0のv3_onion_private_keyファイルにあり、これを削除することで問題が解消したということに間違いはないと思います。
ただし、そもそもなぜこのファイルがサイズ0で出来てしまっていたのかについては、まったくもって分かりません。😅