Lightning-Network

Lightning LND 中的“queryroutes”功能如何計算路由費用?

  • November 13, 2019

我正在測試我自己的路由實現,由於某些奇怪的原因,一些渠道拒絕了我的付款聲明InsufficientFee

該場景是A -c1-> B -c2-> CNode向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. 路由費用總是從收件人向發件人收取,因為後來包裹的費率會影響早期的路由決策。
  2. 節點獲得路由費以在傳出通道上轉發包。

第一條評論對您的情況並不重要,因為路徑僅包含 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來轉發付款。這就是我在第一句話中的意思,即金額是從接收方到發送方的計算。

引用自:https://bitcoin.stackexchange.com/questions/91646