摘要:每個區塊鍊網絡,都有網絡層、共識層、應用層的區分。每個區塊鍊網絡的特性不同,也有事因為在不同的分層裡的設計思路不一樣。本文中,我們將整理Solana網絡的運行邏輯,可以通過這些資料了解到為什麼Solana會在以太坊2.0還沒上線的時候,會比以太坊好用。以太坊的總帳本在1.0鏈上,是由礦工維護的,在…
每個區塊鍊網絡,都有網絡層、共識層、應用層的區分。每個區塊鍊網絡的特性不同,也有事因為在不同的分層裡的設計思路不一樣。本文中,我們將整理Solana網絡的運行邏輯,可以通過這些資料了解到為什麼Solana會在以太坊2.0還沒上線的時候,會比以太坊好用。
以太坊的總帳本在1.0鏈上,是由礦工維護的,在2.0裡,礦工變成驗證者,驗證者用計算設備建立驗證器代替了原來的礦機。 Solana也是通過驗證者保護總帳本的,不過驗證者的在形成共識的算法不太一樣。通過下面的順序,可以了解到共識形成的過程。
Solana集群
Solana集群是一組驗證人,共同保持賬本的完整性,存在多個集群。
創建集群
在啟動任何驗證節點之前,首先需要創建一個創世配置。創世配置會配置一個具備引導驗證能力的節點,第二個驗證節點可聯繫引導驗證節點來註冊為一個驗證節點。然後,其他驗證節點將在集群的任何已註冊成員中繼續註冊。
驗證節點會收到領導者的所有條目,並提交投票以確認這些條目的有效性。投票後,驗證節點需要存儲這些條目。不過一旦驗證節點發現存在足夠多的副本,它將刪除自身的副本。
加入集群
驗證節點通過發送到控制台(control plane)的註冊消息進入集群。控制台使用八卦(gossip)協議實現,這意味著節點可以向任何現有節點註冊,並期望其註冊傳播到集群中的所有節點。一個節點可以確保它最終擁有與每個其他節點相同的信息,但任何一個節點都無法審查該信息。所有節點同步所需的時間與參與群集節點數的平方成正比。
將交易發送到集群
客戶端將交易發送到任何驗證節點的交易處理單元(TPU)端口。如果該節點處於驗證節點角色,則它將交易轉發給指定的領導者。如果處於領導者角色,則該節點將傳入的事務捆綁在一起,對其打上時間戳,來創建一個條目(entry),然後將其推送到集群的數據中心(dataplane)。進入數據中心後,交易將由驗證節點進行驗證,從而將交易有效地添加到賬本中。
確認交易
Solana集群能夠在亞秒級的時間內確認(confirmation)最多150個節點,並要計劃擴展到成千上萬個節點。一旦完全實施,確認時間預計只會隨著驗證節點數量的對數而增加,而對數的基數又很高。網絡增長到一定規模後,就會變得太慢而無法實現亞秒級確認。將消息發送到所有節點所花費的時間與節點數的平方成正比。如果區塊鏈想要獲得低確認率並嘗試使用網絡來做到這一點,它將被迫集中到少數幾個節點上。
所以可以使用以下技術組合來實現可擴展的確認:
使用VDF樣本對交易打上時間戳並簽名。將交易分為幾批,將每筆交易發送到單獨的節點,同時每個節點都與對等節點共享其批次。遞歸地重複上一步,直到所有節點都具有所有批次。
Solana以固定的時間間隔(稱為插槽)輪換領導者。每個領導者只能在其分配的時段內產生條目。領導者因此對交易加上時間戳記,以便驗證節點可以查找指定領導者的公鑰。然後,領導者對時間戳進行簽名,以便驗證節點驗證簽名,證明簽名者是指定領導者公鑰的所有者。
接下來,將交易分成批處理,以便節點可以將交易發送給多方,而無需進行多份複製。例如,如果領導者需要將60筆交易發送到6個節點,則它將把60筆交易的集合分成10筆交易的批次,並向每個節點發送一個交易。這能夠讓領導者將60筆交易放在網絡上,而不是每個節點60筆交易。接著,每個節點都與對等節點共享其批次。一旦節點收集了全部6個批次,它將重建60個交易的原始集合。
這種技術可以被稱為(渦輪區塊傳播)Turbine Block Propogation。
同步
快速、可靠的同步是Solana實現超高吞吐量的最大原因。 Solana採取了歷史證明PoH算法。通過帶有加密證明“時間戳”的領導節點證明自上次確認以來,確實已經過了一段時間。以證明所有哈希到證明中的數據肯定都是在證明之前發生的。然後該節點將新區塊分享給驗證節點,它們能夠驗證這些證據。
區塊可以按照任何順序甚至延遲好幾年才傳到驗證節點那裡。通過這種可靠的同步保證,Solana能夠將區塊分解成更小的批量交易,稱為條目(entries)。在達成任何共識之前,條目都會實時傳輸給驗證節點。
在技術的角度,Solana從來都沒有發送區塊,但是會使用這個詞語來描述驗證節點對條目進行投票,最終取得確認。這樣,Solana的確認時間就可以達到800毫秒。在這個模式下,如果對某個事件無法達成共識,節點只需要簡單地回滾其狀態。
領導者輪換
每個驗證節點使用同一種算法來選擇預期的領導者。當驗證節點收到一個新的簽名賬本條目時,可以肯定某條目是來自預期的領導者。分配給每位領導者的插槽順序稱為leader schedule(領導者安排表)。
一個驗證節點會拒絕未經過插槽領導者簽名的區塊。所有插槽領導者的身份列表稱為領導者安排表。領導者安排表是通過本地定期重新計算產生的。它指派插槽領導者持續一段稱為epoch(紀元)的時間。安排表必須早於它分配的時間段,這樣它保證了計算計劃的賬本狀態最後能夠確定。該持續時間稱為領導者安排表偏移時間。 Solana將偏移時間設置為直到下一個epoch的插槽持續時間。也就是說,一個epoch的領導者計劃通過上一個epoch開始時的賬本狀態來計算得到。一個紀元的偏移量是比較隨意的,並且假定時間足夠長,使所有驗證節點都將在生成下一個計劃之前確定其賬本狀態。集群可以選擇縮短偏移時間,來縮短質押變化與領導者計劃更新之間的時間。
在沒有分區的情況下運行時間比一個epoch長的時候,只有在根分叉的epoch邊界才能生成安排表。由於安排表用於下一個紀元,因此在下一個紀元之前,任何質押給根分叉的新質押都不會被激活。用於生成領導者計劃的區塊是跨過紀元邊界的第一個區塊。
如果分區比一個epoch時間短,集群將按以下方式運作:
驗證節點在投票時不斷更新自己的根分叉。
每次在紀元邊緣的插槽高度的時候,驗證節點將更新其領導者安排表。
寫在最後
正是因為對共識的改動,Solana出世的時候就以一個高性能公鏈的角色面對市場,其使用的類權益證明修改版PoH是在權益證明性能之上再次修訂的,目標就是性能更高,這樣做的目的也是即使以太坊2.0出現之後,網絡仍舊有競爭力。
不過這種共識體現的競爭力是在應用上,而不是在本身技術攻堅上。在某些信仰純粹的技術人員眼中,Solana可能有些過於中心化,只是在龐大的市場裡,區塊鍊網絡面對不同受眾,會體現出不同的優劣,也能得到不同的發展。