Lightning Networkのルーティング履歴をAIに解析させてみた
あけましておめでとうございます。かずみょんです。DiamondHands💎🙌ノード撤退してしまいちょっと寂しい。自分はもう少し頑張っていこうかなと思っています。さて今回はLightning Networkのルーティング履歴をAIに解析させてみたいと思います。もともとの目的はLND(LightningNetworkのノード)をAIに認識させAIにいろいろ何かやらせたかったのですが、とりあえずプログラミングとかの勉強もかねて、まずはAIがLNDからルーティング履歴を取得したという前提でその履歴を解析するということから初めてみました。
動作環境:windows10
Programing言語: Python
AIモデル: gpt-4o(openAI)
LNDからルーティング履歴を下記コマンドにて1週間分のルーティング履歴を取得
lncli fwdinghistory --start_time "-1w" --max_events 2000 >> forwarding_history.json
AIに解析させるコードの概要
結構簡単です。model名を指定してmessagesの中に質問とデータを記述するだけです。普通にweb上で質問するのと同じですね。
# LNDで取得したルーティング履歴を文字列に変換
sample =
# OpenAI APIを利用して、fowarding履歴の解析を行う
client = OpenAI()
response = client.beta.chat.completions.parse(
model="gpt-4o-2024-08-06",
messages=[
{
"role": "user",
"content": f"""
以上を前提として以下のjson形式の入力をもとに解析してください。\n\n{sample}
""",
}
],
temperature=0,
#response_format=ChannelList,
)
channel_reasoning = response.choices[0].message.content # gpt4の回答を表示
print(channel_reasoning) # デバッグ: channel_reasoning を表示
ちなみにopenAIのapiを使用するにはsecret keyが必要で下記サイトにサインアップし課金が必要です。
解析させるのには入力量や出力量に応じて課金されます。今回は”gpt-4o-2024-08-06”というモデルを使っており
$2.50/1M 入力トークン
$10.00/1M 出力トークン
となります。だいたい入力トークン30000くらいだったので0.075ドルくらいです。こういう支払いにもLightning Network使えるかもしれませんね。
ちなみのトークン数は下記で入力データを張り付ければ確認できます。
とりあえずはデータ丸なげで質問したのですが、データをうまく解析できていないのと、期待した応えが返ってきませんでした。使うmodelによっても解析の精度とかどこまで解釈してくれかが違ってくるみたいです。いいmodelを使うのがいいのでしょうが価格も上がるので考えものです。より期待した回答が返ってくるように下記を改善してみました。
- 1.modelの変更: gpt-3.5-turbo → gpt-4o-mini → gpt-4o
- 2.ルーティングデータを加工した。
ルーティングしてるチャンネルごとに入力ノードと出力ノード、そのノードの流入量と流出量、ルーティングFeeが分かるようなデータ形式に再構築する。下記イメージ図。AIでうまく加工する指示がだせなかったので自分でやりました💦
node名, 総容量, ローカルバランス比率, 総入力量, 総出力量
input/output, node名, ave fee, 総入力量/総出力量
....
-----------------------------------------------------------------
Iridescent Zephyr 2650000 1.89 2163636.0 0
input_peer: 🦁BayerLB🦁 0 457247.0
input_peer: goblin-no.de 0 1706389.0
Megalith 2000000 98.68 1111109.0 1111791.0
input_peer: TennisNbtc 0 555554.0
input_peer: Rust-eze (now BoltTrustiC) 0 555555.0
output_peer: NthLNode 1.0 2822.0
output_peer: cyberdyne.sh 2.857142857142857 516349.0
output_peer: nicehash-ln1 1.0 62504.0
output_peer: Redin 🎌 1.0 14112.0
output_peer: HitHow.com 2.0 74194.0
output_peer: Satway 2.0 320901.0
output_peer: goblin-no.de 7.0 98810.0
output_peer: The Continental 1.0 10673.0
output_peer: TangoBolt 1.0 11426.0
yangnamer 2500000 90.75 114947.0 947524.0
input_peer: Moon (paywithmoon.com) 0 20544.0
input_peer: Imamura 0 94403.0
output_peer: yalls.org clearnet-yalls 40.0 947524.0
Authenticity 15000000 59.8 227700.0 1446238.0
input_peer: CoinPayments 0 227700.0
output_peer: fixedfloat.com 177.66666666666666 410568.0
output_peer: NthLNode 2.0 180289.0
output_peer: Satway 9.5 220139.0
output_peer: Tiger 🐯 | BR⚡️LN 1.0 144316.0
output_peer: Redin 🎌 1.0 10001.0
output_peer: yalls.org clearnet-yalls 31.0 368342.0
output_peer: Friendspool | BR⚡LN 2.0 112583.0
- 3.上記データの意味を学習させて明確な指示を与える。(下記をmeesagesに含める。)
"channel_peer"は"channel_detail"のListです。\
"channel_detail"にはnode名"peer_alias"とnodeに対する入力node名一覧"input_peer"出力node名一覧"output_peer"があります。 \
入力node一覧にはそれぞれのnodeの総流入量"amt_sat"が示してあります。 \
出力node一覧にはそれぞれのnodeの総流出量"amt_sat"が示してあります。\
入力node一覧にはそれぞれのnodeの総流入量時の平均手数料"fee_ave"が示してあります。\
出力node一覧にはそれぞれのnodeの総流出量時の平均手数料"fee_ave"が示してあります。 \
"channel_detail"にはすべての入力nodeからの総流入量"input_amt_sat"が示してあります。\
"channel_detail"にはすべての出力nodeからの総流出量"output_amt_sat"が示してあります。\
"channel_detail"にはnode名"peer_alias"の現在の総容量に対するLocal balanceの割合が"local_balance_ratio"として示してあります。\
以上を前提として以下のjson形式の入力をもとに次の考察をしてください。\n\n{-->加工したデータが入ります<--} \
日本語に翻訳してください。
1.各チャンネルの出力nodeの平均手数料が高く総流出量が多いチャンネルはありますか?
(このようなチャンネル群はより多くの手数料を稼ぎます。)
2.各チャンネルの総流出量や総流入量が偏って多くLocal balanceの割合が偏ってしまうチャンネルはありますか?
(このようなチャンネルは片方に資金が貯まりやすく双方向に動きにくいnodeです。)
3.各チャンネルのLocal balanceの割合が30%-70%に近く総流出量と総流入量が多いnodeはありますか?
(このようなチャンネルは双方向に流れることにより多くの資金を動かしており、より多くの手数料を稼げるため良いnodeといえます。)
最後に各チャンネルの特性に基づいて、手数料の稼ぎやすさや資金の流れの偏りを分析してください。
結果
以下は、与えられたデータに基づく分析結果です。
1. **各チャンネルの出力nodeの平均手数料が高く総流出量が多いチャンネル:**
- `yalls.org clearnet-yalls`は、いくつかのチャンネルで高い平均手数料を持ち、総流出量も多いです。特に、`⚡⚡CHARGED⚡⚡`や`RedBear2nd`からの流出が顕著です。
- `cyberdyne.sh`も高い平均手数料を持ち、`goblin-no.de`や`TangoBolt`からの流出が多いです。
2. **総流出量や総流入量が偏って多くLocal balanceの割合が偏ってしまうチャンネル:**
- `Fedi us-east-1 [fedi.xyz]`は、総流出量が非常に多く、Local balanceの割合が低いです(35.92%)。
- `yalls.org clearnet-yalls`は、総流入量が非常に多く、Local balanceの割合が38.93%と偏っています。
3. **Local balanceの割合が30%-70%に近く総流出量と総流入量が多いnode:**
- `The Continental`は、Local balanceの割合が38.87%で、総流入量と総流出量が多いです。
- `Sunshine Canyon`は、Local balanceの割合が57.16%で、総流入量と総流出量が多いです。
**分析:**
- 手数料の稼ぎやすさに関しては、`yalls.org clearnet-yalls`や`cyberdyne.sh`のように高い手数料を設定し、流出量が多いチャンネルが有利です。これらのチャンネルは、手数料収入を最大化するために効果的です。
- 資金の流れの偏りに関しては、`Fedi us-east-1 [fedi.xyz]`や`yalls.org clearnet-yalls`のように、片方に資金が偏っているチャンネルは、資金の流動性を改善するために調整が必要です。
- 双方向に資金が流れるチャンネルは、`The Continental`や`Sunshine Canyon`のように、Local balanceの割合が適度で、総流入量と総流出量が多いチャンネルです。これらのチャンネルは、手数料収入を増やすために理想的です。
この分析に基づき、手数料の設定や資金の流れの管理を最適化することで、より効率的なチャンネル運営が可能となります。
こんな感じの出力が得られればいろんなチャンネルの特徴によってルーティングを制御するようなAIエージェントができるような気がしてきました。AIエージェント自体はLNDの関数やpeerswapを関数としてAIにツールとして登録してやりAIに判断させて使わせることになるなので、何を判断させてその結果何を実行するということを学ばせていく必要があるのかなと思いました。
本当は何かUIとか作れればいいんだけど、まだその知識がなさすぎるので。。
下記githubのリポジトリー載せときます。実行したい方はどうぞ。w
こうしてみるとAIが身近になってくるね
この面白い時代にどう生きるか