Lightning-Network

閃電通道中所需的最低資金?

  • November 9, 2018

我注意到,我無法將我頻道中的資金耗盡到 lnd 的一側。我理解這是有道理的,以便在欺詐的情況下受到一些懲罰,但我找不到 lnd(或 BOLT)中特定值的原因。

這些是我遵循的步驟(重現):

$>lncli-alice listchannels
{
"channels": [
   {
       "active": true,
       "remote_pubkey": <bob_pubkey>,
       "channel_point": <channel_point>,
       "chan_id": <chan_id>,
       "capacity": "16777215",
       "local_balance": "370557",
       "remote_balance": "16406475",
       "commit_fee": "183",
       "commit_weight": "724",
       "fee_per_kw": "253",
       "unsettled_balance": "0",
       "total_satoshis_sent": "16506475",
       "total_satoshis_received": "100000",
       "num_updates": "300",
       "pending_htlcs": [
       ],
       "csv_delay": 2016,
       "private": false
   }
]
}

在從 中添加發票lncli-bob並呼叫以使用 amt 值 202742 和 202743queryroutes創建到 bob 的路由後:lncli-alice

$>cat route_channel_alice_to_bob_amt_202742.txt | lncli-alice sendtoroute --pay_hash=pay)hash -
{
"payment_error": "unable to route payment to destination: TemporaryChannelFailure[...]",
"payment_preimage": "",
"payment_route": null
}

$>cat route_channel_alice_to_bob_amt_202743.txt | lncli-alice sendtoroute --pay_hash=<pay_hash> -
{
"payment_error": "",
"payment_preimage": <payment_preimage>,
"payment_route": {
[...]
}
}

鑑於我有 370557,我不明白為什麼支付 202743 會導致資金不足,而 202742 不會。我想更多地了解這個最小值的性質和精確計算。

對此進行進一步測試,我找到了答案:在 lnd 的目前設置下,**無法轉移一個數量,使得其中一側的通道容量不足 1%。**這最有可能阻止一方嘗試進入舊狀態,因為懲罰會很低。

比如上面的例子,如果通道capacity是16777215,通道local_balance是370557,那麼最大可能轉賬的金額是202742,因為370557-202742≃0.01*16777215(不完全是1%,可能是因為需要手續費予以說明)。

capacity我使用7310000的通道對此進行了雙重測試,通道為4294965 local_balance,我的最大可能轉移值再次為 73143 ≃ 0.01*7310000(同樣,由於未考慮費用,不完全是 1% --amt)。

至於額外的價值,人們會認為它是fee_per_weight*172 + feerate*amt(每百萬分之一的費用)在最後一跳的情況下,而它們在前一跳中相加。但這意味著比上面範例中計算的 143 mSat 或 42 mSat 的差異更大。我不完全確定這種不完全是 1% 的差異是如何產生的。

它與溢出頻寬(目前用於其他未完成路由的通道的頻寬)有關。但這仍然與數字不完全匹配。但是,僅僅一百聰的差異,也不過是一分錢的零頭,所以價值並不是很大。儘管如此,我無法準確計算…

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