事前知識
Bitcoin 環境構築とは
自宅に Bitcoin のフルノードを扱うための小さいサーバを作ることです。
Bitcoin が the Internet of Money であるならば、「自宅に固定回線を引くこと」に相当します。すごく雑な言い方ですが。
Bitcoin の金言の一つに、 "Not your keys, not your coins" という言葉があります。
その言葉のとおり、BTC を保有する上で、一番最初に考えなければならないのが、安全に秘密鍵を生成・管理することです。これは専門家に限らず全ての Bitcoin 保有者に共通する話です。
問題は秘密鍵の管理・生成だけでは、保有はできても日常的に Bitcoin の送受金をするには不十分である点です。
安全な受け取りのためには、他人が自分に BTC を送ったトランザクションを見るだけでは不十分で、それが確かにブロックチェーンに取り込まれていることを確認する必要があります。
全てのブロックチェーンを同期するのは大変なので、 Satoshi Nakamoto の提案した SPV クライアントや、新しい Block filter がありますが、前者は匿名性や計算量の観点から難があり、後者は厳密なトラストレス性や DoS 耐性に問題があり、利用時にはかなり注意しなければなりません。
結局一番安定して使えるのはブロックチェーン全体を自分で同期することになってしまうのですが、ブロックチェーン及び関連ソフトウェアを自分で管理するのは大変なので、多くのユーザーは自分の資産を取引所に預けています。これは秘密鍵管理をしなくて済むという点でも、大多数のユーザーにとっては最適解なのですが、本来の Bitcoin の使い方とは違うものであり過渡期の現象であることは間違いありません。
そこで、「じゃあ誰でもブロックチェーンをダウンロードして簡単に扱えるようにしよう」というモチベーションで作られているのが、Bitcoin 環境構築ソリューションです。 (この言い方が適切であるかはわかりません。もっと良い用語が今後定着するかもですが、ここではとりあえずそう呼びます)
Bitcoin・ブロックチェーンの管理だけならば、クラウドサービスで仮想マシンを使うことでも可能ですが、以下の理由から自宅にサーバーを建てるケースが多いです。
- 秘密鍵をクラウドサービスの仮想マシンにそのまま預けるのは危ない
- クラウドサービス事業者は資産を盗むことができ、かつユーザーは盗まれたことを立証できない。
- 「Amazon が盗んだりするわけないでしょ〜」と思うかもしれないが、ここで本当に怖いのは「盗まれること」よりも、「いきなり資産が消失しても原因が特定できないこと」である。自分の過失かもしれないし、全くの第三者が仮想マシンのバグをついて盗んだのかもしれない。
- ブロックチェーン及び関連ソフトウェアを仮想マシンで走らせ、秘密鍵だけを別の場所で管理するような方法もありえなくはないが、難易度が高い。
- クラウドサービス事業者は資産を盗むことができ、かつユーザーは盗まれたことを立証できない。
- 全てのビットコインノードが同じ Availability Zone に集中すると、そこで障害が起きた時にビットコインネットワーク全体にダメージが有る
- ネットワーク全体の健全性にとっては分散していたほうが都合が良い
- いうほど安くない
- 自分は AWS と Azure しか試していないが、ブロックチェーン全体をブロックストレージ(Amazon EBS など)に保存すると結局高くつく(頑張っても月 4000 円くらい?)
- 自宅で構築すると、大体 20000~30000 円の初期投資で済む
- そもそも専門家でないユーザーが安全・簡単に使えるクラウドサービスが少ない
- クラウドサービス自体のアクセス権限の管理とかもほんとに大変かつ重要
Umbrel とは
Umbrel はそのような Bitcoin 環境構築ソリューションの一つであり、クラウド上ではなく、 自宅で Raspberry Pi を使って構築することを前提に作られています。
他の手法との比較の結果、これが一番安定していて使いやすいことがわかったので、この記事では構築の過程で学んだことを書いていきます。
以下の順で解説します。
- 他の手法との比較調査 (なぜ Umbrel に落ち着いたのか)
- 実際の構築手順
- 利用方法
- 所感
他の手法との比較
以下に、調査及び検証対象とした手法を挙げていきます。
Raspiblitz
- 他のソリューションと比較してだいぶ昔からあるビットコイン環境構築ソリューション
- 最大の特徴は小型の LCD display をくっつけた状態で使うことを想定している点
- 自分の環境では最新のリリースで boot 途中でフリーズする問題が発生した。どうやら他の環境以外でも同様の問題が発生しているらしい。たとえば以下を参照
- 上記の問題はどちらかといえば Raspberry Pi 4 自体の画像出力周りの問題らしいので、古い note PC が余っている人は試してみても良いかも。自分は断念した
Casa Node
-
これも比較的古い
-
- 所有者が死んだあとの BTC の相続を確実に行うことは昔からある問題ではあるが、現状誰でも使えるような仕組みは存在しないので、興味深い試みである。
- ただ、普通は Timelock を使った方がよりトラストレスな仕組みになりうるが、現状そうなっておらず、 Escrow プロトコルと同様に信頼できる第三者が仲介する必要がある。この第三者次第で安全性(と、相続税の扱い) が大きく変わるので、安心して使えるような段階からは程遠い
-
予め構築されたハードウェアを購入することを前提としているが、自分で構築する手法も公開している。
-
拡張性に若干難がありそう。 3rd party アプリケーションは、たとえば BTCPayServer の利用は公式でサポートしているが、その他のアプリケーションを導入させたいとなった時に、気軽にできるような感じではない。
-
また、内容の多くを OSS にしているが、OS imageを自分でコンパイルするのは、(可能かもしれないが)難しい。今回は自分でソースからビルドしたいので見送った。
Start 9 Labs: Embassy
- めちゃめちゃ新しい (2021~)
- 名前が良い(既存国家から独立したい人の大使館的なアトモスフィアを感じる)
- Bitcoin 関連に限らず、パスワードマネージャ、 P2P 匿名メッセージングソフトなど、自宅サーバで管理したいようなソフトウェアが多い。
- コンパイル済み OS image は有料だった (20000 円くらい。 BTC 支払いのみ)
- 自分でコンパイルを試したが、時間がかかりそうだったので断念した (あえて難しくしているのでは?という疑惑がある)
BTCPayServer
- 基本は単なるペイメントプロセッサー(匿名で送受金を行うためのサーバー)だが、付属ソフトウェアをアプリとして管理することができるという点でここに挙げている他のソフトウェアと競合する
- 他のソリューションのように、自宅に端末を構築するのではなく、基本的には何らかのクラウドコンピューティングサービスで仮想マシンを立てて、そこで実行することを想定している。一応自前のハードウェアを構築してそこで実行することもできるが、どれくらい簡単にできるのかなどは試していないのでわからない。
- 他の手法の多くは、 BTCPayServer を内部で利用することをサポートしているため、直接利用する必要はないかもしれない。
BitBoxBase
- BitBox02 というハードウェアウォレットを作っている会社によるもの。
- Raspberry Pi 4 をサポートしておらず、RockPRO64 という類似の SBC での実行を想定している。後述の Raspberry Pi4 の安定性の問題と関連すると思われる。
- BitBox を作っている人物は著名なビットコイン開発者で、ハードウェアウォレットとの接続部分の開発で実績のある人物である。
MyNode
- 「Lightning Node を走らせるためのもの」という側面が強い。
- Raspberry Pi 4, Rock64 および RockPRO64 (後述) での実行をサポートしている。
- UI が簡素
Lightning In a Box
- あまり情報がない。他のソリューションとは違い、予め構築したハードウェアを売ってくれるサービス?
- 名前のググラビリティが低い
- 一般に他人の構築したノードを使うのは資産を失う大きな危険が伴なうのでできる限り避けるか慎重になったほうが良い。今回は自分で構築する際の比較が主な目的なので検討から外した。
Nodl
- Samourai Wallet という CoinJoin 用の Wallet との連携に力を入れている。
- 公式のハードウェアを買ってほしいためか、自分でビルドするための情報が少ない。
- Samourai Wallet 自体、微妙に評判が悪いので(匿名性に注力しているはずが、サーバーに対する匿名性に難があることを以前指摘されているなど)、今回は見送った
Fully Noded
- 比較的新しい
- PSBT を利用しているハードウェアウォレットと連携することができる。
- MacOS のみで動作するので、古い Mac が残っている人は試してみ良いかも。
- 「自宅にビットコイン環境を構築するもの」というよりは、 Bitcoin-QT の機能を拡張して、他のソフトウェアと連携しやすくするものと考えたほうが良い。
- 後で気づいたが、 Umbrel における Wallet 連携機能の対象だった。なおさら単体で構築する必要がない。
検証の結果
上記のうち、実際に私が構築を試みたのは以下です。
- Raspiblitz
- Embassy
- MyNode
- Umbrel
Raspiblitz と Embassy は導入途中で断念しました。
MyNode と Umbrel は今の所大差ない印象ですが、 Umbrel の方が若干構築が簡単だったのと、 UI の綺麗さで Umbrel に軍配が上がりました。
実際の構築の流れ
1. ハードウェア購入
Raspbetty pi 4, Memory 4GB を使います。
基本的に、種々のビットコイン関連アプリケーションを docker-compose で立ち上げるだけなので、docker さえ動けば任意の環境で動きます。が、細かい問題が発生しがちなので、umbrel-os を使うことをお勧めします。
自分の場合は以下の問題が発生しました。
- docker-compose のバージョン違い
- docker も compose も最新でないといけない。
- OS の bit 違い
- Raspi OSはdefaultで32 bit OS ですが、 64 bit 版を使う必要があります。
umbrel-os は 64 bit 版の Raspi OS lite を軽く改造したものなので、Raspberry Pi 4 で動かすことを前提としています。
SSD を Raspberry Pi 4 本体と同梱できるケースにしたかったため、 Argon ONE M.2 というケースにしました
今回は以下を購入しました。
- 32GB の microSD
- OS を焼くのに使う
- Raspberry Pi 4 Model B 4GB
- 本体。冷却装置などは以下のケースに内蔵されているので必要ない。
- Raspberry Pi 4 のケース
- Argon ONE M.2 にした。拡張 SSD を組み込めるケースがこれしかなかったため。ブロックチェーンの保存のために SSD は必須なので今回の用途にはドンピシャだった。
1TB の SSD - Argone ONE M.2 の場合、 M.2 SATA で、サイズは 2280 固定なので、こちらのものを購入した。
- Argon ONE M.2 にした。拡張 SSD を組み込めるケースがこれしかなかったため。ブロックチェーンの保存のために SSD は必須なので今回の用途にはドンピシャだった。
- Nintendo Switch AC アダプター
- デフォルトの電源が安定しなかったため購入した。安定性は環境に依存すると思うので、もっと安いのを使っても良いかも
- USB to microSD のアダプター
- OS を焼くのに必要
あとはセットアップ時にディスプレイやキーボードなどももちろん必要になりますが、どこのご家庭にもあると思うので省略します。
完成したらこんな感じです
2. OS の準備
umbrel-os をダウンロードしてコンパイルする。
git clone https://github.com/getumbrel/umbrel-os
sudo ./build.sh
現状ビルドスクリプトが不親切で、環境によって止まったりします。
頑張ってビルドするか、面倒な人は release ページからダウンロードしましょう。 (ただ、自分でソースコードを確認してコンパイルしない限り 100% のセキュリティは保証されないことは忘れないようにしましょう)
出来上がった img ファイルを、 microSD に焼いて起動可能な状態にします。 BalenaEtcher が定番です。
その microSD を Raspberry Pi 4 に指した状態で起動します。
ネットワークや ssd の設定をします。
"Raspberry Pi 4 初期設定" とかでググって出てきた内容をなぞれば大体 OK ですが、初期ユーザー名とパスワード、 hostnameなどに若干の違いがあります。
- 初期ユーザー名 ...
umbrel
- 元は
pi
- 元は
- 初期パスワード ...
moneyprintergobrrr
- 元は
raspberry
- 元は
- hostname ...
umbrel
- 元は
raspberrypi
- 元は
パスワードの変更や、 パスワードでの ssh の禁止などを特に忘れないようにしましょう。
あとは、 /home/umbrel/umbrel
で、 sudo ./scripts/start
を実行するだけで OK です。 scripts
以下には他にも管理のためのスクリプトがあります。電源を切る時は、できる限り sudo ./scripts/stop
して、docker コンテナなが安全に停止してから切るようにしましょう。
3. IBD
bitcoind の起動時には、 ブロックチェーンの同期プロセス(Initial Blockchain Download, IBD)が必ず入ります。
これは、自身のネットワーク環境によるのですが、かなり時間がかかります。
早くても 2~3日、長ければ4週間かかります。
自分の場合、自宅のネット環境が貧弱なため3週間以上かかるペースだったので、別の場所で同期したブロックチェーンを rsync
でコピーするという裏技を使いましたが、これはこれで色々と面倒なので基本的には待つつもりで構築したほうが良いと思います。
ブロックチェーンのサイズはインデックスなども入れて現状400GB ほどです。
4. 初期設定
はじめにログインした際は、パスワードと Mnemonic (Wallet の master 秘密鍵の元になる24単語) を聞かれます。
いずれも絶対に流出したり忘れたりしない方法で安全に管理しましょう
利用方法
同じ LAN にいれば、 http://umbrel.local にアクセスすることで、管理画面を見ることができます。自分は最初に以下を行いました。
1. Tor を介した外部からのログインが可能であることの確認
Umbrel は、管理画面を Tor Hidden service として公開します。
その URL を取得し、 Tor ブラウザが別のネットワーク経由で管理画面にアクセスできることを確認します。
"Settings" から、以下の画面の赤い部分(onion URL)をコピーし、ネットワークを別のものに変更してから Tor ブラウザ経由でアクセスしましょう
重要: この onion URL は他人に教えてはいけません。パスワードの総当りをされ、資産を盗まれる危険性があります。
2. 必要な追加アプリのインストール
App Store のタブから入れます
とりあえず BTC RPC Explorer と Ride The Lightning を入れるくらいで良いのではないでしょうか
現状個々の App を Tor Hidden Service として公開することはできないようです。
3. オンチェーン資産の振り込み
Bitcoin のタブから、 "deposit" を選択し、自分の既存の Wallet から振り込みます。
Umbrel はまだ beta なので予期せぬバグなどがある可能性があります。全財産を入れたりしないようにしましょう。
現時点での Umbrel のセキュリティについてはこちらを参照
4. LN チャンネル開通
LN チャンネルを開く際にまず考慮すべきなのは、自分は Hub になりたいのか?それとも単に LN を安定して使いたいのか?という点です。
Umbrel を使っているあなたは間違いなく後者ですが、その場合、チャンネルをいくつも開くのはバッドプラクティスです。大きい Hub に対して一つ開けば十分でしょう。
Lightning Explorer から適当に大きな Hub を選び、接続文字列をコピーします。これは、"公開鍵@host:port" の形式で、以下の画像で選択されている部分です。
(以下では例として Bitrefill のノードをとっています。)
"Lightning" のタブから "+ Open Channel" を選び、コピーした接続文字列をペーストします。
あとは、チャンネルの金額とオンチェーン手数料を適当に選び、しばらく待てばチャンネルが開通します。
チャンネルを開いてすぐは資産を受け取ることはできず、支払うことしかできません。これは LN の仕様上の問題であり、すぐには解決できないので注意です。まずは別の場所に支払ってから受け取りましょう。
より高度なことをしたい場合 (例: Private channel を開きたい。開通後すぐに資産を受け取りたい。など) RTL という app をインストールしてそちらで、チャンネルオプションを設定したり、 submarine swap を行ったりします。
5. 自分が利用している別の Wallet との接続
Zap など、 LN wallet アプリケーションの多くは、内部に Wallet としての機能を持たず、 自分が別の場所に管理する Wallet 本体への単なるインターフェイスとして働きます。そういったアプリケーションを Umbrel の管理する node と接続することで、どこからでも安全に LN Wallet を使うことができます。
"Connect Wallet" のタブから、自分が使っている Wallet を選び、 Wallet に onion URL を教えてあげましょう。
所感
外部からのアクセスが容易
Umbrel は、外部からのアクセスが Tor 経由であることを前提としているので、自分が普段持ち歩く端末に Tor Browser をインストールをする必要があります。
Tor を介したアクセスの場合、接続初期の安定性や通信の遅さといったデメリットがあるものの、iptables をいじって port に穴を開けたり固定 IP を準備したりする必要がない点がありがたいです。
これは、 Tor の接続が厳密には全て外向き (outbound) であることによる副作用です。
通常 P2P アプリケーションを NAT の後ろで立ち上げる場合、外からの(inbound) 接続を受け付ける必要がありますが、tor の場合ははじめに適当な少数のルーティングノードを選んで introduction points としてこちらから設定します。
外部からのあらゆる通信がこれらの introduction points を起点にして行われるので、新たにトランスポートレベルでの外部からの接続を受け付ける必要がなくなり、結果として外からアクセスする際の面倒が省かれているというわけです。
ネットワークが貧弱だと辛い
自分は自宅に固定インターネット回線がないため、常に Umbrel がネットワークに接続された状態を保つためにこちらの IoT 向けの格安 SIM を購入したのですが、この回線では Tor 経由の通信がほぼ完全に機能しませんでした。
Tor の安定性のためには一定の速度 (1Mbps くらい) と、その速度が大幅に変化しないことが必要なようです。
Raspberry pi 4 自体の不安定性
ここで紹介した Bitcoin 環境構築ソリューションと直接の関連はありませんが、 Raspberry Pi 4 自体の欠点が目に入りました。たとえば
- LCD Display を利用した場合、 Raspiblitz の boot プロセスが不安定になる点
- 電源が不安定な点。特に wifi と display を同時に利用した場合に顕著になる
- Raspberry Pi 公式の規格に準拠したものを2つ試したが、いずれも
/var/log/kern.log
に "Under-voltage detected!" というエラーを出力する。 - ふと思い立って Nintendo Switch の充電器を使ってみたところ安定し、ダウンロード速度も目に見えて向上した。任天堂製品は冗長性のある設計になっているため?もっててよかった Nintendo Switch
- それでも、タコ足配線経由で使うと電圧が足りなくて起動しなくなったり途中で落ちたりする。
- Raspberry Pi 公式の規格に準拠したものを2つ試したが、いずれも
最初に紹介したソリューションの一部が Raspberry Pi 4 以外の SBC をサポートしているのはそういった理由からだと思われます。Rock Pi 4 というのが特に評判が良いらしく、こちらに良いまとめがあります。
Umbrel はまだ Raspberry Pi 4 以外サポートしていません。ハードウェアを購入する前にそれがサポートされているか否かはよく確認しましょう。
まとめ
最初に、フルノードを準備することは「自宅に固定回線を引くこと」に相当すると言いましたが、同期を待つことの面倒くささはダイヤルアップ接続時代のような手探り感があるなあと思いました。(自分は世代じゃないけど)
あとはキラーアプリがあれば一気に普及すると思います。初期のユーザーは IPFS ノードを自分で管理したい NFTer とか DEX 使いたいトレーダーとかですかね?
Umbrel は難しいことをしてないところが良いですね。シンプルイズザベスト。