Lightning-Network
閃電網路:飛行中允許的最大 HTLC 是如何計算的?
BOLTS將可接受的最大
max_accepted_htlcs
(並發轉發的 HTLC 的最大數量)指定為。483
這個值是如何選擇的?
BOLT #3給出了基本原理:
commitment_signed
要低於BOLT #8 允許的最大消息大小(~65kb),並且懲罰交易能夠在一個交易中掃描所有 HTLC。這是對第二部分更適合初學者的解釋。
4000000 重量單位限制是最大比特幣塊大小限制(連結到 BIP)。
400000 重量單位限制是標準交易的限制(因此中繼)。
懲罰性交易對閃電網路通道的安全至關重要,因此您需要一個可以中繼的交易,因此是一個標準大小的交易。
但是每個新的 HTLC 都是承諾交易的兩個額外輸出。因此,懲罰交易的兩個新輸入(花費它)。它是罰款交易的一個附加大小(以重量單位計算)。
因此,您必須限制接受的飛行中 HTLC 的數量(即同時添加到您的承諾交易中),以確保在出現問題時可以廣播您的懲罰交易。
現在這裡是計算的解釋:
max_num_htlcs = (400000 - 324 - 272 - (4 * 53) - 2) / 413 = 966
400000
: 最大交易規模,參見上文324
: 對應於向您發送資金的承諾交易輸出的輸入大小。272
:對應於承諾交易輸出的輸入大小,向您的同行發送資金。53
: 承諾交易的非見證數據的大小,這是它被計時4
以獲取權重單位的原因。2
:見證標頭的大小。400000 - 324 - 272 - (4 * 53) - 2
:用於添加 HTLC 輸入的剩餘空間413
:花費接受的 HTLC 的大小(用於花費超過提供的 HTLC 的大小,因為它更大)。(400000 - 324 - 272 - (4 * 53) - 2) / 413
:您可以接受的 HTLC 的最大數量,以便它們可以通過可以由比特幣網路中繼的懲罰交易來使用。因為每個 HTLC 創建兩個輸出,所以您將此結果除以二:
因此,483 個雙向 HTLC(包含 to_local 和 to_remote 輸出)可以在單個懲罰事務中解決。注意:即使to_remote輸出沒有掃過,得到的max_num_htlcs也是967;這產生了 483 個 HTLC 的相同單向限制。