閃電通道中所需的最低資金?
我注意到,我無法將我頻道中的資金耗盡到 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的通道對此進行了雙重測試,通道為4294965local_balance
,我的最大可能轉移值再次為 73143 ≃ 0.01*7310000(同樣,由於未考慮費用,不完全是 1%--amt
)。至於額外的價值,人們會認為它是
fee_per_weight*172 + feerate*amt
(每百萬分之一的費用)在最後一跳的情況下,而它們在前一跳中相加。但這意味著比上面範例中計算的 143 mSat 或 42 mSat 的差異更大。我不完全確定這種不完全是 1% 的差異是如何產生的。它與溢出頻寬(目前用於其他未完成路由的通道的頻寬)有關。但這仍然與數字不完全匹配。但是,僅僅一百聰的差異,也不過是一分錢的零頭,所以價值並不是很大。儘管如此,我無法準確計算…