Multi Path Payment(MPP)で送金する
単発でumbrelから多額(数百万〜sats)の送金したい。しかし、エラーになる or 手数料ぼられる、かといって小分けにインボイスを発行するのも手間がかかる、という場面でCLIツールのlncliから一つのインボイスをMPPで送金するやり方の忘備録です。
MPPの説明はこちら。受金者は一つのインボイスで、送金者(umbrel)は複数のパスが可能になるので、例えば100万を10万×10本に分割して送金が通りやすくかつ手数料が安いルートにヒットしやすくなります。
https://lightning.engineering/posts/2020-05-07-mpp/
やり方
umbrelにログインした後に以下のコマンドを発行します。
docker exec -it lightning_lnd_1 lncli sendpayment \
--pay_req [invoice] \
--max_parts 100 \
--fee_limit 2500 \
--max_shard_size_sat 100000 \
--outgoing_chan_id 816130156246007800
コマンドの解説
- 4つ目はdockerのコンテナ nameです。v0.5からlndもオプションになったからか以前の
lnd
からlightning_lnd_1
に変わってました。1と付いていて怪しいのでコマンドが見つからなくなったらdocker psでnameをチェックするのがよさそうです。 pay_req
オプションにセットする値はインボイスの発行識別子です。lnbcとかで始まるアレ。max_parts
オプションでMPPを有効にします。値には分割する最大数をセットします。fee_limit
オプションは最大料金のsats指定です。これ逃すと手数料が悲しいことになるのでppmから計算して必ずセットしましょう。(1000ppmで0.1%)max_shard_size_sat
オプションは1本あたりの金額です。ここを指定しないと半分にしただけで送られがちです。outgoing_chan_id
オプションは送金に使いたいChannel IDを指定します。LNDgやRTLで確認できます。
余談
fee_limitとmax_shard_size_satのオプションが重要。これ忘れて初めはガッツリ手数料いっちゃいました。。
outgoing_chan_idオプションを設定しないと売り物のアウトバウンドが使われて悲しい気持ちになりました。。apiだと複数指定が可能ですがlncliにもくるとさらに融通が効きやすくなりますね。
fee_limitだけでなくfee_limit_percentageもあるが、最低1%からになっていて何に使うのかよくわかりませんでした。
他にもオプションはあるので上記以外の調整可能です。lncliはドキュメントもテストコードも無かったので実際の値が何になるか調べるのに苦労しました。オプション種類についてはコマンドラインヘルプdocker exec -it lightning_lnd_1 lncli sendpayment -h
、値についてはgoのソースコードhttps://github.com/lightningnetwork/lnd/blob/master/cmd/lncli/cmd_payments.goから解読しました。いい参照先があったら教えてください。