Develop with pleasure!

福岡でCloudとかBlockchainとか。

Blockstream JadeをDIYしてみた

Blockstream JadeはBlockstreamが提供しているハードウェアウォレット。Githubのリポジトリを見てみると、DIY用のガイドがあったので、M5Stack Basicにセットアップしてみた。

環境構築

README.mdに書かれてる内容に従って、ESP32の開発環境であるesp-idfをセットアップする(実行環境はUbuntu 24.04 LTS)↓

$ mkdir ~/esp
$ cd ~/esp
$ git clone -b v5.4 --recursive https://github.com/espressif/esp-idf.git
$ cd ~/esp/esp-idf
$ git checkout 67c1de1eebe095d554d281952fde63c16ee2dca0 
$ ./install.sh --enable-gdbgui esp32 esp32s3
$ python ~/esp/esp-idf/tools/idf_tools.py install qemu-xtensa

そして、環境変数の設定する↓

$ . $HOME/esp/esp-idf/export.sh

ファームウェアのビルドにCMakeとninjaが必要みたいなので、入ってなければいれておく↓

$ sudo apt install cmake ninja-build

また、シリアルポートを使ってファームウェアをロードする権限が必要で、その権限のグループに属しているか確認する。M5Stackをつないで↓を確認すると、

$ ls -l /dev/ttyACM0 
crw-rw---- 1 root dialout 166, 0  3月 21 17:55 /dev/ttyACM0

dialoutグループに入ってれば良さそうなので、groupsコマンドで自分がメンバーが確認する。入ってなければグループに追加(要再ログイン)↓

$ sudo usermod -aG dialout $USER

ファームウェアのビルド

続いて、Jadeのコードをチェックアウトしてファームウェアをビルドする。

$ git clone --recursive https://github.com/Blockstream/Jade.git $HOME/jade
$ cd $HOME/jade
$ git submodule update --init --recursive

リポジトリをcloneしたら、configsディレクトリがあるので、そこから手持ちのデバイスに適合する設定をコピーする。自分の場合は、M5Stack Basicだったので、sdkconfig_display_m5blackgray.defaultsを選択↓

$ cp configs/sdkconfig_display_m5blackgray.defaults sdkconfig.defaults

準備ができたのでファームウェアをビルドしてデバイスにフラッシュする↓

$ idf.py flash

完了するとセットアップができるようになる↓

受信用のアドレスを作ったりトランザクションをブロードキャストするためには連携するアプリが必要でJadeが対応してるのは↓

https://help.blockstream.com/hc/en-us/articles/9601453403801-Download-a-companion-app-for-Jade

セットアップの最後で、USB or Bluetoothでアプリとの連携を求められるので、Blockstream Greenと連携してみた(ちゃんとLinuxのデスクトップ版があるのが良い)↓

といった感じで簡単にDIYできるようになってる。

※ M5Stack Basicにはセキュアエレメントとかは搭載されてないので、あくまでホビー用途で。

と思ってたら、Jade自体はセキュアエレメントを搭載せず、PINオラクルを使ったセキュリティモデルを採用してるみたい。シードはブラインドオラクルとJadeデバイスが連携して生成したAES鍵で暗号化されて保存されてるからデバイスを入手してもシードは読めない。トレードオフとしてオラクルサーバーが必要になると↓

help.blockstream.com