charge-lnd で fee や max_htlc を自動設定[umbrel 0.5.0以降対応]
Umbrel に charge-lnd をインストールして、ノードの手数料や max_htlc を定期的に自動設定しよう。
(DHメソッドで必要となるcharge-lndの設定は、1~7までを行ってください)
ノードの運営における以下の課題を解決します。
- 各チャネルの手数料をキャパシティの状態によって変化させたい。
- Failed HTLCsの原因の一つ、Temporary Channel Failure Insufficient Balance を防止するために、チャネル毎にアウトバウンドのキャパシティに応じた max_htlc_msat を設定したい。
Umbrel に charge-lnd をインストール
インストールの仕方は以下が詳しいです。(私もこれを見てインストールしました。)
ほぼ焼き直しになりますが、インストールの仕方を書いていきます。一部足りない部分を足したり、不要な部分を削除したりしています。私のだけで分からない場合は上記も参考にしてください、たくさん付いているコメントも参考になります。
1.Umbrelにsshでログイン
まずは、Umbrelにログインします。Windowsの場合、個人的にはWindows ターミナルがオススメです。
windows に最初から入っている、コマンドプロンプトやPowerShellなどを使っても勿論構いません。ただし、絵文字が化けて表示されます。我慢しましょう。
ssh -t umbrel@Umbrel.local
Umbrelのパスワードを入力してログインしてください。
2.設定ファイル用のディレクトリを作成
以下のコマンドを入力し、設定ファイルの置き場所を作成します。場所は、UmbrelのアップデートやSDカードの交換時に無くならないよう、SSD(HDD)に作成します。
sudo mkdir -p /mnt/data/upgrades/charge-lnd
パスワードを要求されるので、入力してください。
3.設定ファイルの作成
エディタで設定ファイルを新規作成します。
先ほど移動したディレクトリに移動し、
cd /mnt/data/upgrades/charge-lnd
コンフィグファイルを作成
sudo nano charge.config
又は、コンフィグファイルをフルパスで指定して作成でもよいです。
sudo nano /mnt/data/upgrades/charge-lnd/charge.config
パスワードを要求されるので、入力してください。
4.設定ファイルにルールを入力
設定ファイルは後から変更することになるので、ここでは仮の設定を行います。以下を入力してください。(公式のサンプルです。)
# all channels fees according to ratio to auto-balance
# fees are updated when fee delta >= 10
[default]
strategy = proportional
base_fee_ppm = 1000
min_fee_ppm = 100
max_fee_ppm = 300
min_fee_ppm_delta = 10
手っ取り早くDHメソッドを設定したい人は、以下のリンク先の設定を貼り付けてください。
nanoで編集していた場合、Ctrl+x を押してエディタ終了。保存するか聞かれるのでyを押してください。
5.LND_IPの確認
以下のコマンドを入力します。
cat ~/umbrel/.env | grep LND_IP
LND_IP=192.168.1.100などのIPアドレスが表示されるので、どこかにメモっておきます。(この例でいえば「192.168.1.100」)
6.dockerでcharge-lndを実行
以下のコマンドを実行しますが、「LND.IP.ADDRESS.GOES.HERE」の部分は、5で調べたIPアドレスに置き換えてください。
注:umbrel 0.4 以前と 0.5以降ではLNDの場所が変更になったため、以下のコマンドも別になります。
umbrel 0.4 以前用:
docker run --rm -it --network=umbrel_main_network \
-e GRPC_LOCATION=LND.IP.ADDRESS.GOES.HERE:10009 \
-e LND_DIR=/data/.lnd \
-e CONFIG_LOCATION=/app/charge.config \
-v /home/umbrel/umbrel/lnd:/data/.lnd \
-v /mnt/data/upgrades/charge-lnd/charge.config:/app/charge.config \
accumulator/charge-lnd:latest
umbrel 0.5 以降用:
docker run --rm -it --network=umbrel_main_network \
-e GRPC_LOCATION=LND.IP.ADDRESS.GOES.HERE:10009 \
-e LND_DIR=/data/.lnd \
-e CONFIG_LOCATION=/app/charge.config \
-v /home/umbrel/umbrel/app-data/lightning/data/lnd:/data/.lnd \
-v /mnt/data/upgrades/charge-lnd/charge.config:/app/charge.config \
accumulator/charge-lnd:latest
作業は、上記をいったんコピーして、テキストエディタに張り付けた後、「LND.IP.ADDRESS.GOES.HERE」部分を書き換え、改めてターミナルに張り付けてください。
コマンド実行後、やや時間がかかりますが、うまく動作すると手数料変更の結果が表示されます。
動作しない場合は、以下を試してみてください。
- 「LND.IP.ADDRESS.GOES.HERE」の書き換えが正しくできているかを再確認。(ここを間違う人が非常に多いので。)
- コマンドの最後の部分、
charge-lnd:latest
をcharge-lnd:v0.2.8
に書き換え。(v0.2.9にバージョンが上がった際に上記のように最新指定のままでは動かなくなった事例があります。v0.2.11になり私の環境では問題は解消していますので、今はこの方法は不要のはずです。)
7.cronで自動実行設定
ここまで来たら、6の作業が定期的に実行されるよう、cronを設定します。
まずは以下を入力
crontab -e
初めてcronを設定する場合、エディタを何にするか聞かれます。無難にnanoあたりを選択してください。
エディタの選択画面です。そのままエンターを押してください。
エディタが開いたら、以下を入力します。今度は一行で入力します。6でやったように「LND.IP.ADDRESS.GOES.HERE」はIPアドレスに書き換えてください。
umbrel 0.4 以前用:
0 */3 * * * docker run --rm --network=umbrel_main_network -e GRPC_LOCATION=LND.IP.ADDRESS.GOES.HERE:10009 -e LND_DIR=/data/.lnd -e CONFIG_LOCATION=/app/charge.config -v /home/umbrel/umbrel/lnd:/data/.lnd -v /mnt/data/upgrades/charge-lnd/charge.config:/app/charge.config accumulator/charge-lnd:latest
umbrel 0.5 以降用:
0 */3 * * * docker run --rm --network=umbrel_main_network -e GRPC_LOCATION=LND.IP.ADDRESS.GOES.HERE:10009 -e LND_DIR=/data/.lnd -e CONFIG_LOCATION=/app/charge.config -v /home/umbrel/umbrel/app-data/lightning/data/lnd:/data/.lnd -v /mnt/data/upgrades/charge-lnd/charge.config:/app/charge.config accumulator/charge-lnd:latest
6で手動で入力したコマンドと微妙に違うので注意。横着せず上記をコピーしてIPアドレスを改めて変更してください。ここもよくハマるところです。
これで3時間に1回設定が更新されます。頻繁な更新は問題を発生させることがあるため、極端に短い間隔で更新しないようにしましょう。
この設定、最初の数字が0なので、3時間ごとに0分の時にコマンドを実行します。みんなが同じ時間にコマンドを実行すると、最悪ネットワークに悪影響を及ぼすため、分を0の代わりに1~59で適当な数字を設定することを推奨します。(よく分からない人はそのままでもOK)
※当初12時間に1度の設定を公開していましたが、3時間に一度に変更しました。(最新のDHメソッド)
DHメソッドの設定はここまで。ここからはさらに設定を変更したい方向けです。
コンフィグファイルの設定あれこれ
ここからは本格的に設定ファイルを変更していきます。
まずはREADMEで紹介されている基本のサンプル
一番簡単なチャネルバランスを50/50に誘導するための設定は、charge-lndのREADME.mdで詳細されている以下の方法で、
[discourage-routing-out-of-balance]
chan.max_ratio = 0.1
chan.min_capacity = 250000
strategy = static
base_fee_msat = 10000
fee_ppm = 500
[encourage-routing-to-balance]
chan.min_ratio = 0.9
chan.min_capacity = 250000
strategy = static
base_fee_msat = 1
fee_ppm = 2
ローカルバランスが10%を切ると手数料を500ppmに上げ、逆に90%を超えると2ppmに下げることで、片側に偏ったままにならないようにする設定です。
その他の公式サンプル
https://github.com/accumulator/charge-lnd/blob/master/examples/complex-ruleset.configとか、なかなか読んでて楽しい。
DHメソッド
DHメソッドを構成する要素にcharge-lndを利用した手数料設定があります。
私の知る限り、今のところ公開されている設定方法ではこれが一番の方法です。(DHメソッドは進化を続けているので、この先さらに設定が変更になる可能性があります。)
zero fee routing 氏の設定。(LNDでノードを運用していた頃のもの)
ローカルバランスに応じて、ローカルバランスより小さい max_htlc_msat を設定することで、Temporary Channel Failure Insufficient Balance を防止します。
zero fee routing の名前の通り、全てbase_fee_msat = 0、fee_ppm = 0と設定し、手数料はゼロです。
手数料を固定にしたい場合
[zero fee routing | CLN setting]
node.id = 038fe1bd966b5cb0545963490c631eaa1924e2c4c0ea4e7dcb5d4582a1e7f2f1a5
strategy = static
base_fee_msat = 1000
fee_ppm = 0
[Lightning.Watch setting]
node.id = 03e691f81f08c56fa876cc4ef5c9e8b727bd682cf35605be25d48607a802526053
strategy = static
base_fee_msat = 1000
fee_ppm = 9999
[bfx-lnd0 setting]
node.id = 033d8656219478701227199cbd6f670335c8d408a92ae88b962c49d4dc0e83e025
strategy = static
base_fee_msat = 1000
fee_ppm = 750
など、node.id毎にも設定することができます。
Non-final policies
通常、各ノードに対して条件にマッチしたポリシーが見つかると、書かれている条件で設定が確定しますが、個々の設定の中に「strategy」の行を書かない場合、ノードが条件にマッチしてもそれだけでは設定が確定しないため、複数の条件を組み合わせることができます。
[mydefaults]
chan.max_capacity = 5_000_000
min_fee_ppm_delta = 10
base_fee_msat = 2000
[someotherpolicy]
chan.min_capacity = 500_000
strategy = static
fee_ppm = 50
この例では、[mydefaults]と[someotherpolicy]の両方の条件が採用されます。
で、私の設定は?
手数料設定はDHメソッド、max_htlc_msat の設定は zero fee routing、LNBIGやbfx-lnd0などのノードは手数料固定にしています。
これ、やり始めるとめちゃめちゃ面白いので、ハマりすぎに注意です。
また、よい設定を知っている、または思いついた人はぜひ教えてください!
(2023/10/7追記)
Raspberry Piではなく、ubuntu PC にインストールした ubmrel で使用する場合の差分についてのメモ
- docker コマンドの先頭に sudo の追加が必要。
- docker 実行時、umbrelがインストールされているディレクトリが変わってしまっているので適切に設定
docker run --rm -it --network=umbrel_main_network \
-e GRPC_LOCATION=LND.IP.ADDRESS.GOES.HERE:10009 \
-e LND_DIR=/data/.lnd \
-e CONFIG_LOCATION=/app/charge.config \
-v /home/umbrel/umbrel/app-data/lightning/data/lnd:/data/.lnd \
-v /mnt/data/upgrades/charge-lnd/charge.config:/app/charge.config \
accumulator/charge-lnd:latest
のうち、/home/umbrel/umbrel/..... となっている部分、ubuntuのユーザ名に合わせて変更例えばhogeなら、/home/hoge/umbrel/..... な感じで。
- cron で回そうとすると sudo のパスワードを要求されてうまくいかない。パスワードを聞かれないようにするためには、 sudo visudo で設定
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
の下に、
hoge ALL=(ALL:ALL) NOPASSWD:ALL
を追記。hogeはもちろんあなたのユーザ名で。
これでubmrel PC でも同じように動いています。
独自のタイミングでcron実行するなら以下サイトで確かめてみると良いです。nextをクリックすると5回分の実行時刻を表示してくれるので自分の意図したとおりになっているかチェック出来ます。
https://crontab.guru/#0_*/12_*_*_*