【Umbrel】LNDで発生したルーティングをNode-REDで検知する方法
結論
node-red-contrib-custom-websocketをインストールし、custom-websocket-inノードでLND REST APIの/v2/router/htlceventsを叩け。
node-red-contrib-custom-websocketモジュールのインストール方法
- UmbrelアプリストアでNode-RED(Bitcoin)をインストール
- SSHでログインして「docker exec -it node-red_web_1 bash」 を実行してNode-REDコンテナに入る
- 入ったら「cd /data && npm i node-red-contrib-custom-websocket」を実行してnode-red-contrib-custom-websocketモジュールをインストール。その後「exit」を実行してコンテナから抜ける。
- 「cd ~/umbrel/scripts/ && ./app restart node-red」を実行してNode-REDをリスタートする
custom-websocket-inノードの設定
Type
Client Type
Name
REST /v2/router/htlcevents
※ここは自分に分かりやすい内容に自由に書き換えて良い。
Urlについては鉛筆をクリックして設定
Url
wss://10.21.21.9:8080/v2/router/htlcevents
※10.21.21.9はUmbrelアプリ用Dockerネットワーク内のLNDに割り当てられたIPアドレス。書き換える必要なし。
Headers
{"Grpc-Metadata-macaroon":"HEREYOURMACAROON"}
※HEREYOURMACAROONの箇所でマカロンのダンプ値で置き換えること。Umbrelログイン後のLightning Nodeを選び、右上・・・からconnect walletを選択する。表示されたMacaroonをコピペすればよい。
Urlについては鉛筆をクリックして設定
CA証明書
/lnd/tls.cert
※Node-RED(Bitcoin)において/lnd は /home/umbrel/umbrel/app-data/lightning/data/lnd と同じ。Node-REDの(Bitcoin)の無い方はこの場所を参照できないので注意。
このノードを設定してデプロイすればHTLCイベント(ルーティング)がLNDから止めどもなく通知が来る。
(来なかったらそれはあなたのノードがルーティングに使われてないから)
以下サンプル
HTLCイベントのKeyValueについてはここ参照
websocket-clientノードから来るmsg.payloadはStringなのでjsonノードでJSONオブジェクトに変換している。
msg.payload.result.event_typeの値を見てFORWARDならルーティングだと分かる。
msg.payload.result.settle_eventの値を見てプリイメジが入っているなら、すなわち空っぽでないなら転送成功だと分かる。
それぞれ”転送”、”ルーティング成功”で独自のリアクションを起こすノードにつなげれば面白いことができそう。(例:音を出す、Lチカ)
フローは以下からダウンロードできる。
Umbrel_node-red_flows.jsonはUmbrelアプリで入れたNode-RED(Bitcoin)向け。
rpi_node-red_flow.jsonはOSに直にいれたNode-RED向け。
違いはtls.cartへのパスが違うだけ。
【Tips】
- UmbrelアプリのNode-RED(Bitcoin)ではラズパイのGPIOポートにアクセスできないと思われる。
- デフォルトにあるwebsocketノードだとヘッダーにマカロンを付けられないので、上記カスタムノードを入れる必要があった。http requestノードでは上手く動かなかった。
- マカロンについて。上記方法だとなんでもできるadmin権限のマカロンを使うことになる。動作確認するとrouter.macaroonでもHTLCイベントを拾ってこれるので気になる方はこちらをお勧めする。
SSHでログインして「xxd -ps -u -c 1000 /home/umbrel/umbrel/app-data/lightning/data/lnd/data/chain/bitcoin/mainnet/router.macaroon」を実行してマカロンをダンプ。これをコピペする。
spotlihgt史上で最少文字数の記事じゃないですか👍