閃電網路節點上的 Time Lock Delta 值是多少?
查看 1ml.com 上某些節點的設置,我注意到
Time Lock Delta
變數可能會有很大差異。它如何影響一個節點,什麼被認為是一個體面的價值?
TimeLockDelta 如何影響節點?
TimeLockDelta(或
cltv_expiry_delta
)是節點需要添加到 HTLC 到期的最小塊數。換言之,該值表示傳入和傳出 HTLC 到該節點的時間鎖之間所需的間隙。一旦 HTLC 超時,它可以被履行或超時,這意味著節點必須小心處理這個轉換並履行提供和接收的 HTLC。如果節點沒有在適當的時間內完成此操作,則對等方將能夠通過花費超時交易來取回其資金。舉個例子來說明這一點,假設您將 HTLC 轉發到的對等方(傳出 HTLC)向您發送了某個時間回來添加的 HTLC 的原像。您向您的同行支付了成功提供原像的費用。現在由您從您收到 HTLC(傳入 HTLC)的對等方贖回這筆付款。如果您等待的時間足夠長以至於到期超時,那麼您就有損失資金的風險,因為向您發送 HTLC 的對等方將使用超時交易來獲取其資金。因此,您處於支付了流出的 HTLC,但您無法從收到的 HTLC 中索取資金的情況。
所以 TimeLockDelta 的值應該選擇這樣的方式,它不會太大,以至於其他節點不會通過你發送付款,但也不能太小,因為你沒有足夠的時間來支付你可能會失去資金的風險。滿足傳入的HTLC。下面的計算顯示了在實現 HTLC 時可能出現的各種情況以及需要為其選擇的最佳值。
什麼被認為是一個體面的價值?
下面是來自BOLT #2
cltv_expiry_delta
的文本,其中包含確定節點應該為自己設置什麼所需的計算和各種情況。給出一些假設,可以推導出傳出和傳入 HTLC 解析度之間的最壞情況下的塊數:
- 最壞情況重組深度
R
塊- HTLC 超時後的寬限期
G
塊,然後放棄無響應的對等方並掉入鏈中S
交易廣播和交易被包含在一個塊中之間的塊數最壞的情況是轉發節點 (B) 花費盡可能長的時間來發現傳出的 HTLC 履行,並且也花費盡可能長的時間在鏈上贖回它:
- B->C HTLC 在 block 超時
N
,B 等待G
塊,直到它放棄等待 C。B 或 C 送出到區塊鏈,B 花費 HTLC,這需要S
包含塊。- 壞情況:C 贏得比賽(剛剛)並完成了 HTLC,B 只有在看到 block 時才看到該交易
N+G+S+1
。- 最壞的情況:
R
C 贏得併實現的深度重組。B 僅在 處看到交易N+G+S+R
。- B 現在需要完成傳入的 A->B HTLC,但 A 沒有響應:B
G
在放棄等待 A 之前等待更多塊。A 或 B 送出到區塊鏈。- 壞情況:B 在區塊中看到 A 的承諾交易,
N+G+S+R+G+1
必須花費 HTLC 輸出,這需要S
區塊被探勘。- 最壞的情況:A 使用另一個
R
深度重組來花費承諾交易,所以 B 看到 A 的承諾交易在塊中N+G+S+R+G+R
,並且必須花費 HTLC 輸出,這需要S
塊被探勘。- B 的 HTLC 支出在超時之前至少需要
R
很深,否則另一次重組可能允許 A 超時交易。因此,最壞的情況是
3R+2G+2S
,假設R
至少為 1。請注意,在R
2 或更多的情況下,其他節點贏得所有重組的三個重組的機會很低。由於使用了高額費用(HTLC 支出幾乎可以使用任意費用),S
因此應該很小;但是,鑑於區塊時間不規則並且仍然會出現空塊,S=2
應將其視為最低限度。同樣,寬限期G
可以很短(1 或 2),因為節點需要盡快超時或完成;但如果G
太低,則會增加由於網路延遲而導致不必要的通道關閉的風險。需要導出四個值:
- 對於
cltv_expiry_delta
通道,3R+2G+2S
:如果有疑問,cltv_expiry_delta
12 的 a 是合理的(R=2,G=1,S=2)。- 提供的 HTLC 的截止日期:通道必須在鏈上失敗和超時的截止日期。這是
G
HTLC 之後的塊cltv_expiry
:1 塊是合理的。- 此節點已完成接收到的 HTLC 的截止日期:通道必須失敗且 HTLC 在其
cltv_expiry
. 請參閱上面的步驟 4-7,這意味著之前的2R+G+S
塊的截止日期cltv_expiry
:7 個塊是合理的。- 終端支付接受的最低限度
cltv_expiry
:終端節點 C 的最壞情況是2R+G+S
塊(同樣,上面的步驟 1-3 不適用)。BOLT #11
cltv_expiry_delta
中的預設值為9,這比上述計算建議的 7 稍微保守一些。