
Peerswap v5 アップデートとその用途
こんにちは、かずみょんです。 Peerswapを バージョン5 にアップデートしました!!Peerswapは、Lightning Network 上でチャネルのオンチェーンバランス(BTCまたはLBTC)とオフチェーンバランス(Lightning)を非カストディアルで交換できるプロトコルです。
バージョン5の変更点:手数料設定が可能に!
従来のPeerswapでは、スワップ時に手数料(Fee)の設定ができませんでした。 しかし、今回の バージョン5 からは、スワップイン / スワップアウトそれぞれに手数料を設定可能になりました。
LBTCが蓄積してしまう問題
私のノード上のPeerswapでは、Liquid Network上のLBTCのみをスワップ可能に設定しており、**相手ピアからのスワップイン(=相手がLBTCを送り、相手は私のチャンネル上のBTCを受け取る)**が多くなる傾向がありました。
このままだと、無限にLBTCが蓄積されてしまうという問題が発生します。 LBTC → BTC への変換には大体 0.1%程度のコストがかかるため、これが重なると結構なコストになります。以前はBitfinexでLBTC<->BTCが手数料なしで交換できたのですが。。。
対策:スワップインの手数料を高く設定!
そこで、今回peerswap v5で導入された手数料設定を用い、スワップインの手数料(swap_in fee)を高く設定し、スワップインを抑制することでこの問題に対応することにしました。
相手ピアがスワップイン/スワップアウトを使う理由
以下、相手ピアがスワップ機能を使う動機について、自分なりに考察してみました。
■ 相手ピアがスワップアウトする理由
-
相手ピアが「支払いを多く受け取る側(シンクノード)」のチャンネル(LOOPとか)を持っていて、そこに流し込むためのインバウンドキャパシティが必要。
-
自分のノード側のキャパシティは増加し、代わりにLBTCが減る。
-
シンクノードの手数料は高めに設定されていることが多く、相手ピアはそこからの手数料収益を狙っている可能性あり。
-
自分のノードの手数料を低く設定しすぎると、Peerswapで頻繁にスワップアウトされ、ただの踏み台として使われてしまう。
-
→ 自ノードのインバウンドキャパが消費されてしまうので、こうしたノードとのチャネルには適正なチャンネルFeeの設定が重要。
-
-
ただし、LBTCを使ってくれるのは基本的に歓迎。
■ 相手ピアがスワップインする理由
-
自分のノードがシンクノードとして機能しているが、流出先が多様で、特定のノードに依存していない。
-
相手ピアの流入元ノードが分散している or 集中しているかは不明。
-
2つのノードが、リバランスやルーティングのハブ的な役割を果たしている可能性も。
-
自分のチャンネルにインバウンド容量が不足している場合には有利になるが、過剰にスワップインされると、LBTCをひたすら蓄積する結果になる。
スワップFeeの制御方法(バージョン5以降)
Peerswap v5では、スワップイン/スワップアウト時のFeeレートを設定可能になりました。 これにより、LBTCの蓄積を抑えることが可能になりました。
具体的な方針
-
定期的にLBTCの残高を監視
-
残高に応じて
swap_in
/swap_out
のFeeを動的に調整
実際のコマンド例(LNDの場合)
// swap_inのfee rate設定(LBTC,100ppmの場合)
pscli updateglobalpremiumrate --asset lbtc --operation swap_in 100
// swap_outのfee rate設定(LBTC,100ppmの場合)
pscli updateglobalpremiumrate --asset lbtc --operation swap_out 100
注意点
Peerswap導入直後のデフォルト設定は以下の通り:
-
swap_in = 0 ppm
-
swap_out = 1000 ppm
このため、自分のノードにLBTCがあるにも関わらず、普段swap_outしてくれていたノードがしてくれなくなったという現象がありました。 原因はデフォルト値 swap_out = 1000ppm
だったからで、これを下げたら正常にスワップしてくれるようになりました。まあLighttning networkは合理的に動いてるなと思ったり。。
現在のFee状態の確認
pscli getglobalpremiumrate --asset [btc|lbtc] --operation [swap_in|swap_out]
公式ドキュメント
詳しい情報は以下のドキュメントを参照してください:https://github.com/ElementsProject/peerswap/blob/master/docs/usage.md
スクリプトについて
最後に、LBTC残高をスケジューラーで定期監視(1時間に1回実行させてます。)させ、Feeレートを自動調整するNode.jsのコードを作成しました(というかAIに作らせました)。 こちらは有料コンテンツに掲載しておきます。
書いてて思ったけど、Elements coreに残高通知させる方がよかったです。。
ではまた。