Raspberry Pi 4 + Umbrel で Bitcoin フルノードを立ち上げ、Lightning Network (Diamond Hands プロジェクト) に参加してみる

日本発の Lightning Network プロジェクト 「Diamond Hands (ダイヤモンドハンズ)」 への参加を目標に、Raspberry Pi 4 + Umbrel で Bitcoin (ビットコイン) フルノード / Lightning (ライトニング) ノードを立ち上げてみたというお話。

ブロックチェーンとか Bitcoin のような仮想通貨 (今は暗号資産って言うんでしたっけ?) に関しては、個人的に普段のお仕事とはあまり関係しないのでそこまで深い知識を持っているわけではないのですが、昔からブロックチェーン関連の書籍は何冊か読んだり、技術的には興味あるんですよね。

今はもうやめちゃいましたが、数年前までイーサリアム (ETH) のマイニングをやってた時期もあったり、投資対象としての仮想通貨というより、技術的な面への関心や、遊び道具として面白そうなら手を出してみようって感じ。

で、その流れで今年に入ってからですが Lightning Network (ライトニングネットワーク) に興味を持って関連情報を集めてるときに、たまたま 「Diamond Hands (ダイヤモンドハンズ)」 という日本発の Lightning Network 関連プロジェクトの存在を知り、ちょうど Bitcoin フルノード / Lightning ノードの立ち上げを自分でも一回やってみたかったというのもあって、いい機会なのでこの Diamond Hands プロジェクトに参加してみるという目的で、Raspberry Pi 4 と Umbrel を利用したノードの立ち上げをやってみようと。

早速必要な機材を集めて自宅 Bitcoin フルノード / Lightning ノードの運用をスタートさせたので、その手順などを簡単にまとめておこうと思います。

Bitcoin フルノード / Lightning ノードを運用する方法はいくつかあると思いますが、今回は Raspberry Pi 4 を使用して、専用のサーバを自宅に立てるっていうやり方を選択しました。

Raspberry Pi 4 使うのが面白そうだったのと、後述しますが、非常に便利な Umbrel のおかげで一番簡単そうだったというのも理由です。

ということで、まずは必要な機材から紹介しておきましょう。初期投資は概ね 2~3 万くらいじゃないですかね。普段から PC 自作したりする人だと家に SSD が余ってるとか、再利用できるパーツがあればもっと安価に構築できると思います。

必要な機材

  • Raspberry Pi 4 (8GB 版を使用)
  • Raspberry Pi 4 に対応した電源 (出力 5.1V / 3.0A / USB Type-C)
  • Raspberry Pi 4 に対応したケース (お好みで)
  • 1TB 以上の容量がある SSD (M.2-2280 / SATA 3.0 を使用)
  • SSD をケースに繋ぐための何か (今回はケースに内蔵したので使っていません)
  • 16GB 以上の容量がある microSD カード
  • LAN ケーブル

上記に加えて当たり前ですが、インターネット回線が必要です。

Raspberry Pi 4 に関しては Amazon などでも購入できますがマーケットプレイス出品者からの購入の場合は価格に注意してください。公式サイトと、日本における正規代理店のひとつであるスイッチサイエンスさんの Web サイトは下記です。

Raspberry Pi 4 以外で今回使用した材料に関しては、下記のリンク先 (Amazon) にまとめてあります。面倒ならリンク先を参考にしてみてください。

ちなみに、私の場合は自宅に LAN ケーブルと microSD カードは余っていたのでそれを使用しています。もし microSD カードを購入する場合は、microSD カードに OS を書き込む際、PC に接続するためのアダプタなども必要ですので注意してください。

あと、今回使用したケース 「Argon One」(下記画像) は、見た目で選んだんですけども、このケースは M.2 の SATA 接続 SSD をケース内に内蔵できるタイプだったのでそれに合わせた SSD を購入していますが、USB で接続する外付けタイプの SSD などでも問題ありません。その辺はお好みで。

「Argon One」 - Raspberry Pi 4 用ケースを Amazon でみる

実際に機材を組み立てている際の写真が下記です。

「Argon One」ケースに Raspberry Pi 4 や SSD、microSD カードをセットした状態

組み立て途中、「Argon One」 ケースに Raspberry Pi 4 や SSD 、Umbrel OS を書き込み済み (手順は次のセクション参照) の microSD カードをセットした状態。「Argon One」はケース内に SSD が組み込めるのでスッキリします。

組み立てが終わった状態(正面から)

組み立てが終わった状態(背面から)

電源用の AC アダプタ

電源アダプタは、Raspberry Pi 公式の AC アダプタと同出力のものとして、スイッチサイエンスブランドを選択しました。電源は安定しないと稼働中に Raspberry Pi 4 が落ちたりすることもあるのであまり適当なやつにはしないようがよいと思います。

Umbrel の入手と初回セットアップ

Raspberry Pi 4 の組み立てを完了して電源を入れる前に、microSD カードに起動用の OS を書き込んで Raspberry Pi 4 にセットしておかなければなりません。ここで登場するのが Umbrel です。

Umbrel は Bitcoin フルノード / Lightning ノードを構築するためのソフトウェアですが、Raspberry Pi を使用しての環境構築を前提とした Umbrel OS が用意されていて、これが非常に便利です。前述したハードウェアさえきちんとそろえれば、あとは簡単に自宅で Bitcoin フルノード / Lightning ノードを立ち上げることができます。

手順に関しては Umbrel の公式サイトにある 「or Build your own (自分で作ってみる)」 セクションにある 「Install Umbrel on a Raspberry Pi 4」 → 「How to install」 の部分を参照すれば、Raspberry Pi 4 を使用した構築手順が親切に全部解説されています。

そこを見てもらえれば簡単に終わるんですが、下記に一応ひと通りの手順を紹介しておきます。

  1. Umbrel OS をダウンロードします。
    手順書の中からもダウンロードできますし、GitHub から最新リリースを落としてもよいでしょう。
  2. ダウンロード後に解凍した Umbrel OS を microSD カードに書き込むため、balenaEtcher をダウンロードします。
  3. microSD カードを PC に接続した上で balenaEtcher を起動し、「Select Image」 で Umbrel OS のイメージファイルを、「Select Drive」 で microSD カードを選択したら書き込み (Flash) を実行します。完了するまで待ちましょう。
  4. balenaEtcher での書き込みが完了したら microSD カードを Raspberry Pi 4 に差し込み、SSD や LAN ケーブルが接続されていることを確認後、電源を投入します。
  5. 電源投入後、しばらく (5分弱ぐらいですかね) 待ったらブラウザで http://umbrel.local にアクセスすると Umbrel OS のセットアップ画面が表示されるはずです。

Umbrel に初回アクセスした状態が下記。

Umbrel に初回アクセスした状態

準備ができていれば 「Start」 ボタンが表示されていると思います。もしまだ表示されていない場合は少し待ってみましょう。

「Start」 ボタンを押すと、セットアップ画面に進みます。アカウント名やパスワードを設定し、画面の指示に従っていけば問題ありません。途中で mnemonic (ニーモニック / ウォレットの復元などに必要な 24 単語) が表示されますのでメモをとってバックアップするのも忘れずに (mnemonic はいつでもダッシュボードから確認できますからバックアップはあとでやってもいいと思いますが、くれぐれもバックアップすること自体を忘れないように)。

すべての設定が完了すると下記のように完了画面が表示され、ダッシュボードに移動することができるようになります。

Umbrel の初期設定が完了した状態

Umbrel が無事立ち上がると、システムは自動的に Bitcoin Core (Bitcoin 全ブロックチェーン) を同期しはじめます (画面中央 「Bitcoin Core」 の部分)。Bitcoin の全ブロックチェーンは、現時点で 400GB 以上あるらしいので (これが SSD に最低 1TB 以上の容量が必要な理由です)、Raspberry Pi 4 の処理能力だと相当時間がかかります。

ここは気長に同期が終わるのを待ちましょう。最低でも数日はかかると思うので、その間、電源が引っこ抜けたりして Raspberry Pi 4 が落ちたりしないように気をつけてください (参考までに私の環境で初回の同期完了まで約 2.5 日、同期完了時点での SSD 使用量が 479.6 GB でした)。

Umbrel のダッシュボード表示例(Bitcoin Core の同期中)

ちなみに、同期中はずーっと Raspberry Pi 4 が働きっぱなしになると思いますが、私の環境だと 50 度前後で安定してくれていました。この辺は選択するケースやヒートシンク、あるいは冷却ファンの性能などにもよると思いますので、想定外に高温になってパフォーマンスが落ちるような場合はケースなどの選択を見直した方がよいかもしれません。

Raspberry Pi 4 稼働中の CPU 温度

なお、今回使用したケース 「Argon One」 はケース全体がヒートシンク的な役割をして熱を逃がす作りになっているため、ケース自体が結構熱くなりますから、風通しのよいところに設置した方がいいと思いますよ。

Umbrel のウォレットに BTC をデポジットする

ここから先の手順は、ごっつ氏が公開されている YouTube 動画を見ていただければ早いと思います。私もこの動画を参考にさせて頂きつつ進めました。

Umbrel の初回の同期が完了したら、次に Umbrel の BTC ウォレットに BTC 現物をデポジットします。今回は 0.015 BTC を送金しましたが、昨今の BTC 価格高騰でこんなちょっとの BTC でも日本円にするとそれなりの金額なので取扱いは慎重に。

自分のノードに対して BTC を送金するので (送金などの手数料は別として) 資産が減るってわけではないですけども、Umbrel はまだベータ版扱いのため、デポジットした BTC が GOX するみたいな最悪の事態も考えられます。Diamond Hands プロジェクトの最小チャネルサイズは 100 万 satoshi (0.01 BTC) に設定されているとのことですので、手数料など考えて少しゆとりを持つと、最低でも今回私がやったように 0.01x BTC はデポジットしないといけませんが、最初はなるべく最低限の BTC で試してみる方がよいと思います。

Umbrel コントロールパネルのサイドメニューから 「Bitcoin」 を選択すると、Bitcoin ウォレットが表示されますので、「Deposit」 ボタンを押してウォレットアドレスを表示します。

Umbrel のウォレットに BTC をデポジット(手順 1: Bitcoin ウォレットのアドレスを取得するため 「Deposit」 ボタンを押す)

表示したウォレットのアドレスをコピーして、このアドレス宛に手持ちの BTC を送金しましょう。

Umbrel のウォレットに BTC をデポジット(手順 2: Bitcoin ウォレットのアドレスを取得)

しばらくするとウォレットに送金した BTC が反映されると思いますので確認しましょう。

画面上では単位を 「satoshi」 にしているので 「1,500,000」 みたいな大きな数字になっていますが、BTC に換算すると 「0.015 BTC」 になります。

Umbrel のウォレットに BTC をデポジット(手順 3: Bitcoin ウォレットに BTC が反映されたことを確認)

Ride The Lightning App のインストール

これはあとでもいいんですが、とりあえず先にやっておきます。

Umbrel は便利なことに、App Store が用意されていて、拡張機能をワンクリックで簡単にインストールすることが可能になっています。そこで、ライトニングノードの運用管理を支援してくれるアプリケーションとして、「Ride The Lightning (RTL)」 をインストールしておきます (ちなみに完全なる余談ですがこのアプリケーション名、メタル好きな人だと 「おっ」 ってなるんじゃないですかね)。

まず、Umbrel のサイドメニューから 「App Store」 を選択し、「Ride The Lightning」 アプリを探しましょう。

Umbrel のサイドメニューから 「App Store」 を選択し、「Ride The Lightning」 アプリを探します。

詳細ページに行くとインストール (Install) ボタンがありますので、それをクリックすればインストールが始まります。インストールを待っている間に、その下に表示されている 「Default app passwords」 をコピーしておきましょう。初期設定時に使用します。

「Ride The Lightning」 アプリの詳細ページでインストール (Install) ボタンを押します。

インストールが完了したら 「Ride The Lightning」 アプリを立ち上げましょう。いきなりログインしろと言われると思いますが、そこは先ほどコピーした初期パスワードを入力してログインします。

インストール完了後に 「Ride The Lightning」 アプリを立ち上げると初期パスワードでのログイン画面が表示されます。

すると、パスワードの変更画面になりますので、「Current Password (現在のパスワード)」 部分に先ほどの初期パスワードを、「New Password」「Confirm New Password」 に自分で決めた新しいパスワードを入力し、「Change Password」 ボタンを押しましょう。

パスワードの変更画面で新しいパスワードを設定します。

「Ride The Lightning」 アプリのダッシュボードが表示されればとりあえずは完了です。実際にライトニングノードの運用が開始されたら、このアプリで色々と情報を取得したりすることができるようになります。

umbral-rtl-inst-05.png?auto=format&lossless=true&border=2,95dddddd

Diamond Hands に対してチャネルを開く

いよいよ、Diamond Hands ノードに対してチャネルを作成します。

まず、接続先となる Diamond Hands ノードの情報が必要ですので控えておきましょう。Diamond Hands プロジェクトの公式ページの下部に 「ダイヤモンドハンズノード情報」 というセクションがあると思いますが、ここの 「Connect:」 に続いて書かれているのが接続時に使用するノードのアドレスになります。

下記、Amboss Space (ライトニングノードやチャネルの検索サイト) に掲載されている Diamond Hands ノード情報の 「Tor Address」 でもよいので、間違いがないようにコピーしておきましょう。

次に、Umbrel のサイドメニューから 「Lightning」 を選択し、Lightning Network の画面を開きましょう。「Payment Channels」 のパネルの上部に、「+ Open Channel」 というボタンがあるのでクリックします。

Umbrel のサイドメニューから 「Lightning」 を選択し、Lightning Network の画面を開きます。

Open Channel ダイアログが表示されますので、「Lightning address」 に先ほどコピーした、Diamond Hands ノードのアドレスをペーストしましょう。

次に、「Amount」 にこのチャネルにデポジットする BTC の額を入力します。前述したとおり、Diamond Hands プロジェクトの最小チャネルサイズは 100 万 satoshi (0.01 BTC) に設定されているとのことですので、それよりも大きい額をデポジットする必要があります。

「Transaction Fee」 の設定は任意ですが、個人的にはちょっとまだ勉強が足りなくてここを詳しく理解していないので、とりあえず下記キャプチャのように設定して進みました。最後に 「Open Channel」 ボタンを押します。

Open Channel ダイアログでチャネルの設定を行います。

チャネル作成の設定が終わると、下記のように接続先ノードに対してチャネル作成中の表示になります (「Opening」 の表示)。しばらくすると 「Online」 という風に接続が完了してオンラインになっていますという表示に変わると思いますので、少し待って確認してみてください。

チャネル作成の設定が完了し、作成中の表示になっている状態

調べた限り、Tor の問題で、チャネルを作成したのにずーっと Diamond Hands ノードが 「Offline」 の状態になってしまう (実際に Diamond Hands ノードが落ちてるとかではなく誤検知) 現象が発生する場合があるようです。そういう場合はしばらく放置してみるとか、何時間も解消しない場合は Umbrel を再起動してみるとよいかもしれません。ただ、あまり焦って色々やらずにゆとりを持って少し待ってみる方がいいんじゃないかなと思います。

Inbound Capacity (インバウンドキャパシティ) を生成する

ひとつ前までの手順で、チャネルを作成しましたが、この状態だと自分から相手に対して送金可能な許容範囲である 「Outbound capacity (アウトバウンドキャパシティ)」 しかない状態 (Local Balance が 100 に対して Remote Balance が 0 の状態) で、この状態だと誰からも支払いを受けることができません (要するに送受信機能のうち「送信」しかできない状態なので、「Lightning Network で送金を中継する」 という目的が果たせないってことです)。

支払いを受けるためには 「Inbound capacity (インバウンドキャパシティ)」 を作る必要がありますが、これには 「先に自分から作成したチャネルを通じて支払いをしておく」 か 「相手側からチャネルを開いてもらう」 かのどちらかが必要です。

手数料を払うと自分のノードに対してチャネルを開いてくれる 「LNBIG」 のようなサービスを利用する方法もありますが、最低限の Inbound capacity を生成する最も簡単な方法は前者の方。要するに自分の Lightning ウォレットに少額を送金すればいいってことですね。

使用するウォレットは Lightning に対応したものであればなんでもよいと思いますが、今回は 「BlueWallet」(単なる個人的な好み) を使用する前提で進めてみます。

手順としては、BlueWallet 上で少額のインボイス (請求書) を作成し、先のセクションまでの手順通り、Diamond Hands のノードにチャネルを接続した状態で、そのインボイスに対して支払いを行います。

ちなみに、一般的な取引所などの BTC ウォレットに対して送金する場合、送る側が送金先のウォレットアドレスを指定して、という方法に慣れていると思いますが、Lightning の場合はその仕組み上、受け取る側が先にインボイスを作る必要があります。Lightning での送金が初めてだと少し戸惑うかもしれませんがそういうものだと思って進めましょう。

ということで、BlueWallet をインストール (今回は iOS 版を使用) したら、新規ウォレットの作成に進みます。

BlueWallet 上で新しいウォレットを作成

この時、必ず Lightning ウォレットを選択します。

BlueWallet の新規ウォレット作成で「Lightning」を選択

ウォレットの作成が終わったら、次にインボイスを作成します。ウォレットの下部にある 「Receive (受け取り)」 を選択しましょう。インボイス作成画面が表示されます。

Lightning ウォレット上でインボイスの作成(下部にある「Receive」をタップ)

インボイス作成画面が表示されたら金額を指定します。今回はごく少額、100,000 satoshi (BTC に換算すると 0.001 BTC ですね) を指定します。金額に間違いがないことを確認したら 「Create Invoice」 を押して、生成されたコードをコピーしておきましょう。

金額を入力してインボイスを発行

BlueWallet 側でインボイスの作成が終わったら、Umbrel にログインし、ダッシュボードに表示されている 「Lightning Wallet」 パネルの 「Send (送る)」 を選択します。

Umbrel ダッシュボードに表示されている 「Lightning Wallet」 パネルの 「Send (送る)」 を選択します。

次の画面で先ほどコピーしたインボイスのコードを 「Paste Invoice」 部分に貼り付けると、送金する金額が表示されると思いますので、金額が間違いないことを確認したら 「Send」 を実行します。

「Paste Invoice」 部分にインボイスのコードをペーストして支払いを行います。

送金が完了すると、支払い完了画面が表示されますが、ほぼ同時に手元の BlueWallet にも入金を知らせる通知がくると思います。ここで Lightning の速さを実感できるんじゃないでしょうか。

支払いが完了した状態

Umbrel のサイドメニューから 「Lightning」 を選択し、Lightning Network の画面を開きます。「Payment Channels」 のパネルに表示されているチャネル開設情報の部分で、「Max Receive」 の部分に先ほど送信した金額が反映されていれば、とりあえず Inbound capacity の生成には成功しています。

Lightning Network の画面で Inbound capacity が生成されていることを確認

今後の課題

とりあえず、最低限の状態で自宅 Bitcoin フルノードを立ち上げ、Diamond Hands プロジェクトにチャネルを開設して Lightning ノード運用をスタートすることはできました。

Bitcoin フルノードは、自分の机の上で稼働しているちっこい Raspberry Pi 4 の SSD に、Bitcoin ブロックチェーンの全部が入ってると思うとなんかロマンがあります。

Lightning ノードの方に関しては、単にノードを立ち上げただけで、多分微妙な赤字を垂れ流しながらの運用って感じになると思いますけどまぁ遊びなのでそれもよし。まだ色々と知識が足りない点が多いので、しばらく運用してみながら Lightning Network 自体に関する知識や、Lightning ノード運用に関する情報を集めたりしつつ、ルーティングとかリバランスみたいな運用効率的な部分についてもお勉強していこうかなと思っています。

ということで何かあればまた続報を書くかもしれませんが、一旦これでこの記事は終わります。

ノード情報

参考までに今回立ち上げた Lightning ノードの情報は下記の通り。

Alias

BurnworksLightning

PublicKey

03fd3fae30d8b58b8225d3d66ab76dd90e1405f8664ddfcdffb5f4120bbcf50615

Tor Address

03fd3fae30d8b58b8225d3d66ab76dd90e1405f8664ddfcdffb5f4120bbcf50615@zrqkzoz7wciw7vnfujz4b7lmp7xy45ddwnjqsdz7tfagvf6unvergbid.onion:9735

関連エントリー

記事をここまで御覧頂きありがとうございます。
この記事が気に入ったらサポートしてみませんか?
サーバ代の足しにさせて頂きます。
Social Share