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鍵で暗号化されて保存されてるからデバイスを入手してもシードは読めない。トレードオフとしてオラクルサーバーが必要になると↓