LNのリバランス等をCLIで行う方法
最近はDiamond HandsをきっかけにLightning Networkのルーティング試行錯誤に時間を溶かす今日この頃です。
といいますのも、
- Diamond Handsの記事を読み、面白そうだと一念発起
- Raspberry Piを買ってUmbrelなノードを立てる
- Ride The Lightning, ThunderHubを使ってリバランスする日々
といったかんじでステップを踏んできたわけです。
そして、手数料を安めにセットしてリバランスしようと試行錯誤してたわけなのですが、ひたすら不安定な挙動に悩まされました。
とにかく反応が返ってくるまでが遅い。
そして反応が返ってきたとしても、エラーだったりタイムアウトだったりすると。
ルートを探しているんだと思うのですが、それにしてもこの待ち時間は辛いなあ、と。
さて、こんなときはスクリプト化ですね。
スクリプト化の前段階として、コマンドラインでの指示出しができないとどうしようもありません。
ということで、今回はBalance of Satoshisというコマンドラインツールの導入法を解説したいと思います。
Balance of Satoshis
URL: https://github.com/alexbosworth/balanceofsatoshis
これは、UmbrelのようにLightning NetworkのコアエンジンとしてLNDを採用している環境に導入できるコマンドラインツールです。
Invoiceによる支払い、リバランス、ステータス確認、自動実行支援、通知支援など、とてもアドバンスドな機能が豊富で、LND使いならば入れておいて損はないツールかと思います。
Balance of Satoshisを使うと、例えば、以下のような感じでリバランスが行えます。
これの何が良いか、というと
- 今どのルートを検証しているかが分かる
- どのPeer経由で高めな手数料を取られそうになっているかが分かる
- そのルート試行がダメだった理由が分かる
といった点かと思います。
さらに凄いのが、これらの情報をもとに特定のPeerやチャネルを経由させたくないな、と思ったら、それを指示できちゃう点です。せっかくなので、この話は有料コンテンツエリアにて書かせて頂きます。
それにしても、こういった使いやすいツールがあるのがLNDエコシステムの凄いところだあなと感心しきりです。
Balance of Satoshis (BOS)のUmbrelへの導入方法
まず、コマンドラインツール利用の前提としてSSHログインができる必要があります。この辺は大変優秀な記事が既にありますので割愛させて頂きます。
UmbrelにSSHログインしましたら、BOSをインストールします。
以下の3ステップを行います。
- BOS本体をインストールする
- Umbrel用のBOS設定ファイルをつくる
- 便利エイリアスをセットする
1. BOS本体をインストールする
UmbrelにはDockerが既にインストールされているため、Dockerによる導入が簡単です。
SSHログインしましたら、以下を打ち込みます。
docker pull alexbosworth/balanceofsatoshis
これだけ、です。さすがDocker。
2. Umbrel用のBOS設定ファイルをつくる
ここが最難関です。といいますのも、BOSのドキュメントがちょっと分かりにくかったり間違っていたりするんですね。Issuesには上がってますのでそのうち直るとは思いますが。
まず、BOS設定ファイルを置くディレクトリをつくり、その中にcredentials.jsonを作成します。
# ホームに移動
cd
# .bos/umbrelディレクトリを作成
mkdir -p .bos/umbrel
# ~/.bos/umbrel/credentials.jsonを作成
nano ~/.bos/umbrel/credentials.json
nanoエディタでは、下記を入力し、Ctrl+x Ctrl+sで保存して終了します。
{
"cert_path": "/home/node/.lnd/tls.cert",
"macaroon_path": "/home/node/.lnd/data/chain/bitcoin/mainnet/admin.macaroon",
"socket": "umbrel.local:10009"
}
さて、問題無く設置できたか動作確認です。例えば、以下のように打ち込み、支払った手数料チャートを見てみましょう。
※ 2022年6月11日更新 umbrelのバージョンにより若干場所指定が違ってくると教えて頂きましたので、追記しました。
umbrel v0.4まで
docker run -it --rm --network="host" --add-host=umbrel.local:127.0.0.1 -v $HOME/.bos:/home/node/.bos -v $HOME/umbrel/lnd:/home/node/.lnd:ro alexbosworth/balanceofsatoshis chart-fees-paid
umbrel v0.5以降
docker run -it --rm --network="host" --add-host=umbrel.local:127.0.0.1 -v $HOME/.bos:/home/node/.bos -v $HOME/umbrel/app-data/lightning/data/lnd:/home/node/.lnd:ro alexbosworth/balanceofsatoshis chart-fees-paid
上手くいけばこんなグラフが表示されます。
すでに3,000円くらい手数料で溶かしているようです...
3. 便利エイリアスをセットする
上述のようなdockerコマンドを毎回打ち込むのは苦行ですね。そこで、独自コマンド"bos"を.bash_profileにてエイリアスとして作成しておくと便利です。
nano ~/.bash_profile
とやって、以下の行を付け足し、保存して終了します。
v0.4まで
alias bos="docker run -it --rm --network="host" --add-host=umbrel.local:127.0.0.1 -v $HOME/.bos:/home/node/.bos -v $HOME/umbrel/lnd:/home/node/.lnd:ro alexbosworth/balanceofsatoshis"
v0.5以降
alias bos="docker run -it --rm --network="host" --add-host=umbrel.local:127.0.0.1 -v $HOME/.bos:/home/node/.bos -v $HOME/umbrel/app-data/lightning/data/lnd:/home/node/.lnd:ro alexbosworth/balanceofsatoshis"
エイリアスを有効化するにあたり、
source ~/.bash_profile
とやるか、Umbrel自体を再起動してください。
エイリアスが有効になりましたら、
bos chart-fees-paid
とやることで、先ほどのdockerコマンドと同じ事が実現できます。
以上で導入完了です!
BOSを利用したリバランス
リバランスですが、次のようなコマンドにて行います。
bos rebalance --out {インバウンドキャパシティを増やしたいチャネル接続先Peerの公開鍵} --in {アウトバウンドキャパシティを増やしたいチャネル接続先Peerの公開鍵} --max-fee-rate {許容手数料レート(ppm単位)} --amount {目標額}
公開鍵ではない方法でPeerを指定したり、もっとカスタムした数量指定法などもありますがそのへんは
bos rebalance --help
とすると利用法がでてきますので深堀りしてみてください。
さて例えば、BreezからBitfinex (bfx-lnd1)へのリバランスをしたい場合、まずこれらのノードの公開鍵情報を探してきます。RTL、ThunderHub、Ambossなどでさがしましょう。以下が得られると思います。
Breez: 031015a7839468a3c266d662d5bb21ea4cea24226936e2864a7ca4f2c3939836e0
bfx-lnd1: 03cde60a6323f7122d5178255766e38114b4722ede08f7c9e0c5df9b912cc201d6
IN: bfx-lnd1、OUT: Breez、希望リバランス量 : 1M sats、限界手数料レート: 10ppmにてリバランスを実施したい場合、以下のコマンドとなります。
bos rebalance --out 031015a7839468a3c266d662d5bb21ea4cea24226936e2864a7ca4f2c3939836e0 --in 03cde60a6323f7122d5178255766e38114b4722ede08f7c9e0c5df9b912cc201d6 --max-fee-rate 10 --amount 1000000
こんな感じで探索が始まれば成功です。
TemporaryChannelFailureとありますが、これはそのチャネルのキャパシティが枯渇しているということを表します。せっかくの手数料の安いルートなのですが、そのPeer管理者がキャパシティ調整を怠っているんですね、残念。時間をおくと調整されて使えるようになっている可能はあります。
さて、しばらく眺めていると、
こんなかんじでBOSが終了してしまうことがあります。この場合、手数料レートを1,236ppmにしないと現状ルートがねーぞ、というエラーメッセージとなります。手数料に納得がいくのであれば、--max-fee-rate 1300
とかと指定して再度トライしてみましょう。
また、途中でこんなかんじで結構高めな手数料を課すPeerを見つけることがあります。
できたらこうしたルートは最初から除外したいですね。さて、以下有料エリアではこうした経由したくないPeerを指定してリバランスする方法、ルート探索タイムアウト時間をセットする方法などを解説しています。ご興味ありましたら是非ご購入ください。
umbrel v0.5以降の追加記事ありがとうございました!bos telegram復活できました^^