ビットコインのフルノードをRaspberry Piで立ててみた

## はじめに
TeslaやMicroStrategyなど、米国のIT企業が投資を始めたことでビットコインが盛り上がっています。[環境にやさしくない](https://jp.techcrunch.com/2021/02/09/2021-02-08-teslas-bitcoin-investment-could-be-bad-for-the-companys-climate-reputation-and-its-bottom-line/)とか、[決済手段としては軌道に乗らない](https://jp.wsj.com/articles/SB11260852109866014048004587274643263601610)とか、様々な議論がありますが、まずは**投資目線の思惑は横において、最新技術を把握しておきたい**ところです。

まずはその第一歩としてBitcoin Coreをダウンロードして**フルノードを立ててみる**のがいいでしょう。

https://bitcoin.org/ja/download

フルノードはマイナーと違って、高価な専用ハードウェアでマイニング報酬を得るのではなく、ブロックチェーンやトランザクションを検証し、有効なもののみを他のノードやマイナーに伝達する役割を担います。

http://www.jpbitcoinblog.info/entry/20170213/1486912581

ただ、GUI版をインストールすること自体は簡単なものの、**全てのブロックチェーンの容量は400GB近くあり**、毎日増えていきます。ビットコインやブロックチェーン技術の知識がないなかで、手元のMacやWindowsマシンを随時設定して、最新のバージョンにして、常時接続するにもなかなかハードルは高いですよね。

## Umbrel登場

そこで、2020年夏にUmbrelがリリースされました。

Raspberry Pi OS（旧Raspbian）をカスタムした[UmbrelOS](https://github.com/getumbrel/umbrel-os)上に、Bitcoin Core（bitcoind）や少額決済を実現するセカンドレイヤーノードのライトニング（lnd）、ピア接続に用いるTorなどを実装し、専用のダッシュボードを用意したものです。

https://twitter.com/getumbrel/status/1279097216578117632

これは簡単そうですね。で、更に凄いのは、2020年の年末にUmbrel App Storeが発表されたこと。

[Umbrel App Framework](https://github.com/getumbrel/umbrel/blob/master/apps/README.md)が用意され、Dockerコンテナとして、**様々なサードパーティアプリをデプロイすることもできる**ようになりました。これは楽しそう。今年に入ってから、Twitter上でも試す人が現れるようになってきました。

https://medium.com/getumbrel/introducing-the-umbrel-app-store-7a2068c64a10

## 用意するもの

では、実際にUmbrelを導入してみましょう。用意するものは下記の通りです。

- [Raspberry Pi 4 Model B](https://www.switch-science.com/catalog/5680/) （今回は4GBを用意しました）
- [ACアダプタ](https://www.switch-science.com/catalog/5683/)（5.1V/3.0A USB Type-C）
- ケース（今回は[放熱アルミケース](https://www.switch-science.com/catalog/6000/)。または[純正ケース](https://www.switch-science.com/catalog/5959/)＋[ヒートシンク](https://www.switch-science.com/catalog/5986/)）
- イーサネットケーブル
- 1TB以上のSSD（今回は[Buffaro SSD-PG1.0U3-B/NL](https://amzn.to/3ccGGL9)）
- microSD(16GB+)

なお、Umbrel公式サイトではAmazonへのリンクがはられており、2.5インチSSDドライブやSATA-USB変換アダプタを紹介していますが、**中華系変換アダプタには速度に問題があるハズレ品もある**ため気をつけましょう。また、ラズパイは安心の公式リセーラーからお買い求めください（宣伝風味）。
https://www.raspberrypi.org/products/raspberry-pi-4-model-b/?variant=raspberry-pi-4-model-b-4gb

## インストール
1. まずは、[Umbrelの公式サイト https://getumbrel.com/ ](https://getumbrel.com/)から、Get Startedを選び、Umbrel OSをダウンロードしましょう。
![スクリーンショット 2021-03-07 17.56.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263174/7097df23-f7d5-0221-4da5-9f5df7244228.png)
2. 次に、SDカードにUmbrel OSのディスクイメージを書き込むため、 Balena Etcherをダウンロードします。
![スクリーンショット 2021-03-07 17.58.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263174/8fae950f-47be-0c25-ea58-072ed9315e3a.png)
3. PCにmicroSDカードをマウントした状態でBalena Etcherを起動し、ダウンロードしたUmbrel OSのディスクイメージを指定して書き込みます。
![スクリーンショット 2021-03-07 18.00.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263174/8d4e8c1a-7791-083b-2803-3707b935d284.png)
4. 書き込んだmicroSDカードをラズパイに挿入し、SSDとイーサネットケーブルを接続します。
5. ラズパイにACアダプターを接続し、しばらく待ちます。
6. （オプション）ディスプレイやキーボードを接続しなくても起動しますが、HDMIケーブルでディスプレイに接続すると起動する過程が見れます。また、ダッシュボードの起動が完了すると、ロゴとQRコードが表示されるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263174/0c6c79af-4c04-8255-4a55-ad9a992fcad4.png)

## セットアップ
1. 同じローカルネットワークから http://umbrel.local 、または http://（IPアドレス） に接続します。
2. 最初に、Umbrelログインに用いるユーザ名とパスワードを設定します。
3. 次に、24個のパスフレーズが表示されます。**これを必ず書き留めておいて、安全な場所に保管してください。**
これはBitcoin walletで使う秘密鍵を復活させるときに必要になります。

>It's recommended that you note down your 24 secret words (seed phrase) with a pen and paper, and secure it safely. If you forget your dashboard's password, or in case something goes wrong with your Umbrel, you will need these 24 words to recover your funds in the Bitcoin wallet of your Umbrel.

## トラブルシューティング
公式のトラブルシューティングガイドはこちら。
https://umbrelinfo.gitlab.io/troubleshooting.html

- 通常のラズパイと同様に、シャットダウン操作を完了しないで電源を落とす（ぶつ切りする）と、高確率でSDカードが壊れます。
    - ダッシュボードの Settings＞System＞**Shutdownを押し、終了してから**電源を落としましょう。
- ラズパイ４用の電源アダプターを使用しないと、電圧が不安定となり正常に動作しない可能性があります。
- また熱対策ができていないと、CPUのスロットリング（クロック低下）が起きる可能性があります。
    - [SSHでラズパイに直接ログイン](https://umbrelinfo.gitlab.io/troubleshooting.html#can-i-login-using-ssh)して、`vcgencmd get_throttled`コマンドを使うと実際にスロットリングの状況が判別できます。 
   
https://qiita.com/tinoue@github/items/868b848999c3571ccf9f

## 同期するまで時間がかかります
接続されたノードから、12年前の**[ジェネシスブロック](https://en.bitcoin.it/wiki/Genesis_block)**から最新のブロックまでを受け取り、数日かけて同期します。回線の状況やSSDの転送速度、メモリ容量やCPU速度によるかもしれません。まったりと同期が完了するのを待ちましょう。

（数時間後） 
![スクリーンショット 2021-03-04 22.03.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263174/e41fc2e2-a284-aeea-7069-b340539a8fe6.png)
（3日後の状況）
![スクリーンショット 2021-03-07 19.07.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263174/0a29cba6-e959-d6b7-0a5a-62f392cdfb2c.png)
**私はこの記事を書いている時点で、まだ完了していません。**
終わったら、手元にあるわずかばかりのビットコインを移動して、ライトニングノードを試したいと思います。

（3/9 21:37追記）同期完了。ほぼ５日かかりました。
syslogを見る限り結構ピアノードとの通信が高頻度でおちることもあったので、私の環境ではTorでの通信がやや不安定だったのかもしれません。
![スクリーンショット 2021-03-09 20.41.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263174/2771a429-ffcb-58a6-ea9f-971d5a32cfc3.png)

では、また。