Block-Propagation-Time
IBLT_diff 如何揭示需要檢索的交易?
我了解 IBLT(Invertible Bloom Lookup Tables),據我所知,它用於通過僅將事務發送到其失去的完整節點而不是發送所有事務來提高傳播速度。在 Gavin 的規範中提到我們這樣做:
IBLT_diff = IBLT_new - IBLT_us
我從中了解到的是,全節點會檢查並在將其 IBLT 與礦工的 IBLT 進行比較後,全節點會找出哪些交易失去了。
然後全節點請求礦工失去的交易。它是否正確?
在規範的中間,它說他們沒有使用完整的事務雜湊,然後它說為了防止暴力破解它添加了鹽。我可以知道他們為什麼這樣做,如果是這樣,那麼完整節點如何知道要請求的事務雜湊是否被截斷。
然後全節點請求礦工失去的交易。它是否正確?
不會。所有交易(包括失去的交易)都已編碼到 IBLT(礦工發送的)中。
這有點像數獨遊戲。礦工向您發送一個只填寫總數的空數獨。您輸入您已經知道的交易。然後你可以自己解決所有剩餘的空白點。
主要的好處就是避免向礦工詢問任何事情,因為這會增加網際網路的往返次數,從而增加延遲。
不使用完整的交易雜湊
可能是因為散列很大,而且散列衝突的可能性不是很高,如果每年發生一次(這是我剛剛編造的一個數字),也不是什麼大問題。因此,為了節省一些空間和/或加快計算速度。
然後它說為了防止暴力破解,它會向其中添加鹽。
這樣一來,攻擊者就無法故意生成 2 筆導致此類(修剪過的)雜湊衝突的交易。如果攻擊者可以這樣做,您將無法解決數獨問題,您將被迫以不同的方式獲取交易或阻止(增加往返行程和延遲)。
請注意,還有其他情況會導致您陷入未解決的數獨問題。例如,如果您剛剛重新啟動節點,那麼您的記憶體池將幾乎是空的,因此您沒有任何交易可以開始。
請注意,Rusty Russel 還在IBLT 上發表了一些部落格文章,這些文章比 Gavin 的更新,可能會給您另一個視角。