Lightning-Network
Lightning LND 中的“queryroutes”功能如何計算路由費用?
我正在測試我自己的路由實現,由於某些奇怪的原因,一些渠道拒絕了我的付款聲明
InsufficientFee
。該場景是
A -c1-> B -c2-> C
Node向viaA
發送付款,使用的渠道被表示為和。C``B``c1``c2
對於
c1
節點費用政策是"node1_policy": { "time_lock_delta": 40, "min_htlc": "1", "fee_base_msat": "1000", "fee_rate_milli_msat": "1", "max_htlc_msat": "16777215000", }, "node2_policy": { "time_lock_delta": 144, "min_htlc": "1000", "fee_base_msat": "1000", "fee_rate_milli_msat": "100", "max_htlc_msat": "16777215000", },
對於
c2
節點費用政策是"node1_policy": null, "node2_policy": { "time_lock_delta": 144, "min_htlc": "1000", "fee_base_msat": "10000", "fee_rate_milli_msat": "100", "max_htlc_msat": "10000000000", }
對於 4999000 mSat,
queryroutes
使用此路線並將費用計算為{'amt_to_forward': '4999', 'amt_to_forward_msat': '4999000', 'chan_capacity': '16777215', 'chan_id': 'c1', 'fee': '10', 'fee_msat': '10499',}, {'amt_to_forward': '4999', 'amt_to_forward_msat': '4999000', 'chan_capacity': '10000000', 'chan_id': 'c2', 'fee': '0', 'fee_msat': '0',} 'total_amt': '5009', 'total_amt_msat': '5009499', 'total_fees': '10', 'total_fees_msat': '10499',}
有人可以分步詳細解釋
lnd
客戶如何獲得這個價值嗎?
要回答您的問題,必須知道兩件事:
- 路由費用總是從收件人向發件人收取,因為後來包裹的費率會影響早期的路由決策。
- 節點獲得路由費以在傳出通道上轉發包。
第一條評論對您的情況並不重要,因為路徑僅包含 1 個路由節點。第二個註釋意味著只有頻道的收費策略
c2
是相關的。節點A
不會在要轉發到的通道上向自己收取路由費用c1
,並且如果要將付款人轉發到節點B
,節點B
只會在通道上收取費用c1``A
那麼讓我們看一下支付金額和渠道
c2
政策,政策上說:"fee_base_msat": "10000", "fee_rate_milli_msat": "100",
這意味著您必須向 B 發送一個具有以下 msat 數量的
payment_amount
洋蔥4999
payment_amount * 1000 + fee_base_msat + payment_amount * fee_rate_milli_msat / 1'000
插入您的號碼,這意味著:
4999000 + 10000 + 4999 * 100 / 1000 = 5009000 + int(499.9) = 5009000 + 499 = 5009499
這正是您的節點在完成洋蔥的過程中發送的數量。另請注意,如果您的節點將已從另一個節點轉發該付款,
E
則另一個節點將必須使用該結果作為payment_amount
上述公式和您的通道警察c1
來轉發付款。這就是我在第一句話中的意思,即金額是從接收方到發送方的計算。