media Image
ArrowLeftIcon Image
ArrowLeftIcon Image
深入探討 Solana - Turbine
Back Icon Image

引言

Turbine就是一個強化版的八卦網路,當領導者把他認為對的事做完後就會昭告天下,使用 Turbine 網路一傳十、十傳百的讓所有驗證節點知道,並讓他們投票表決是否同意這些事情是正確的。

讀完本篇,您將會了解 Solana 網路中區塊是如何在驗證者之間傳遞,傳遞過程中可能會遇到什麼問題,又有何解決方法?

提醒讀者:如果您尚未閱讀過或想先了解 Solana 的基本運作流程,建議先參考「由 Transaction 的生命週期看 Solana 的底層架構 」,這將有助於您更好地理解本篇深入探討的技術細節。


在領導者更新完 bank 狀態後,會把 entry 分成許多的 shreds(此動作稱為 shredding), 每個 shred 儲存著 transaction 的部分資訊(最大1280 bytes),並透過 UDP 協議傳送給底下的 root,再由 root 往下以「Turbine Tree」的樹狀結構傳給其他的驗證者。由於 UDP 協議會有嚴重的掉包問題,所以在 shreds 傳輸過程前後需要使用一些資料復原的方法,如此一來就算在傳輸過程中遺失了一部分的 shreds,還是可以透過資料復原技術還原回當初被分解的 entry。

在 Solana 中使用的資料復原技術是 Reed-Solomon Erasure coding,簡單來說他就傳了多一倍的備份資料,這樣即使在傳輸過程中掉了一半的包,還是可以用另一半來復原完整的資料。所以驗證者在收 shreds 時,會將 64 個 shreds 組成一個 forward error collection (FEC) batch。這一包 FEC 由 32 個 data shreds 加 32 個 recovery shreds 組成,從名字就可以看出如果掉了一半的 shreds 還是可以透過密碼學的方式解回原本的 entry。

目前 Turbine Tree 的 fanout = 200,通常會有二至三層 (hop) 因此一棵樹約由 40000 個以上的節點組成。且這些節點在收集完一個 FEC batch 後會輪替一下位置,讓整個傳輸過程更加隨機去中心化,以增進資安上的安全,並減少單點的負荷和風險。

原文連結:深入探討 Solana - Turbine