Casper的共識協議採用的是blockdag的資料結構,如下圖:
在上圖中,訊息被放置到相關的“泳道”上,也可以看到每個“泳道”上訊息的建立者。由於創世區塊是區塊鏈初始化產生的,它位於“泳道”之外。每個普通區塊都指向其主要父塊,上圖用紅色箭頭表示。這些區塊形成了樹結構,稱為主樹。任何普通區塊都可以指向任意數量的區塊作為次級父塊,如上圖中藍色箭頭所表示的。區塊+紅色箭頭+藍色箭頭一起形成有向無環圖,也就是Casper協議中的p-dag。所有的箭頭和所有的頂點一起形成有向無環圖,這就是Casper中所謂的j-dag。
Summit(峰頂)是指j-dag中某個共識值已經確定最終性的情況。為什麼會有這個概念?因為它有很多層,不同層代表不同的共識程度,最後的Summit意味著在某個範圍內所有節點都達成共識,也就是最高點,形成了峰頂。在這個最高的層面上,具有最大程度的共識。反過來理解,這也說明Highway是具有安全閥值的。每個輪次都有領導者,首先由領導者傳送訊息給每個人。其他驗證者在收到領導者訊息後立即傳送訊息給其他人。在經過一些輪次後,每個驗證者都會再次向所有人傳送訊息。這樣,第一條訊息確認的投票成為level-0的訊息,第二條確認足夠數量的第一條訊息,形成level-1訊息,由此類推形成summit(峰頂)。一旦驗證者在其本地協議狀態達到峰頂水平,他們知道最終每個誠實驗證者將會看到所有狀態。
下圖是最終性的示意圖,可以幫助我們理解summit(峰頂)。
上圖左側的矩形代表驗證者,圓點代表訊息。它展示了驗證者0的本地j-dag,對應於j-daglevel的排列(訊息的X座標對應於j-daglevel)。“泳道”上顯示訊息的Y座標與建立者相同。圓點顏色則代表此訊息正在投票支援的共識值。在誠實驗證者的“泳道”內,0-level訊息是從上一次該驗證者投票贊成的共識值改變以來的所有訊息。訊息的第一層投票支援同一個區塊,其他層會引用第一層的訊息及其雜湊,參與“峰頂”的驗證者越多,層次越多,這些訊息投票的區塊就越安全。
2.有彈性的輪次時長
跟大多數的PoS機制一樣,Casper也會將時間劃分為輪次。每個輪次,首先有一個偽隨機選擇的領導者生成訊息,其他人等待領頭人的訊息,收到該訊息之後,才生成自己的訊息。在這一輪次快結束時,每個人都會再傳送一條訊息。也就是說,驗證者為該區塊傳送了兩次驗證訊息。每個輪次的時長並不固定,不是所有驗證者都採用相同的輪次時長。
為實現活性,Highway協議採用非固定輪次時長的機制。它用“高速公路”作為比喻,這也是協議名稱Highway的來源。Highway類似於“數字高速公路”,它有很多車道,每條車道的汽車速度恆定。不同車道的汽車相互之間會傳送訊息。訊息在不同車輛間傳遞的速度不同,協議達成共識的程度也不同。
在任何給定的車道n中,車在1米距離進行2n頻次的跳躍,資訊在不同車道的汽車間的傳遞是動態進行的。由於跳躍頻次不同,訊息傳遞頻次也不同。例如,如果訊息傳到左側的車道,頻次將加倍,傳到右側車道則頻次將減半。這樣,每次跳躍時,都可以遇到左側車道的汽車,而右側則需要兩次跳躍才會遇到。透過這樣的方式,可以保證一定的安全性,同時也可以提高達成共識的速度。
要理解Highway的有彈性的輪次時長,需要理解時間“滴答”、生成區塊的領導者以及輪次的概念。在Highway共識協議中,時間劃分為“滴答”,每個“滴答”相當於一毫秒。領導者從當前驗證者中選出,基於領導者的系統,需要有輪次,這也是基於安全的考慮,生成區塊的領導者是無法固定的。因此,不同輪次會有不同的領導者。
在這種情況下,多數PoS鏈採用的是固定輪次時長的方法。而Highway協議與眾不同的是其可調整的輪次時長。每個驗證者選擇輪次指數值。隨著時間的推移,將會自動調整輪次指數值(round exponent),以實現最優效能。
舉個例子,假設輪次指數值為n,驗證者用於操作的輪次時長為2^n“滴答”。具有相同輪次指數n的所有驗證者都有相同的輪次時間表。不過,如果輪次指數n不同,驗證者在輪次時長上也不同。
假設A使用的輪次指數為n,B使用的輪次指數為m,其中n為5,m為7。這意味著,A的輪次時長是32個時間“滴答”(2^5),而B的輪次時長為128個時間“滴答”(2^7)。這意味著,A的輪次時長只持續32毫秒,而B的輪次時長持續128毫秒。也就是說,A的速度要快於B,因此,A可以參與B瞭解的所有輪次,而B只能瞭解A知道的部分輪次。透過調整輪次指數可以增加或減少輪次時長,以實現最佳效能。
此外,Highway協議還提出一個“era”(時代)的概念,era時長也用區塊鏈的時間“滴答”來表示,例如一週(604800000個滴答),其主要目的是在更長的一段時間內(如一週)保持驗證者權重的相對恆定,由此實現所有驗證者都可以同意的偽隨機領導者序列,同時防止攻擊者對領導者選擇進行攻擊。
Highway協議跟傳統的BFT協議不同,一般來說,拜占庭容錯協議主要在交易順序上達成共識,而Highway協議僅就區塊的有效性和區塊的權重達成共識,對區塊投票的驗證者越多權重越大。在這種情況下,系統可以處理同時發生的事件,因為交易順序不重要。Highway也支援區塊合併,在合併過程中也可以檢測是否有衝突的交易。
之所以可以實現這些,Highway協議有兩個核心的設計選擇:
*沒有隻發給特定節點的目標訊息,所有訊息最終會傳送給所有人,且可以驗證較早的訊息。所有節點看到的都是相同的,這算是不斷增長的訊息圖,有點類似於雜湊圖。
*決策方式簡單:投票。透過在訊息圖中執行防止僵持狀態的特定結構,可確保網路的活性。
在這裡,訊息被視為是對共識值的投票,且驗證者遵循多個明確的驗證者最新投票。
總結來說,Highway協議的如下特性值得關注:
· 無須許可性,任何人都可以安裝所要求的軟體並作為新驗證者加入網路(在平臺執行繫結交易以後,並在繫結拍賣中贏得其中的slot)。
· 有彈性:可自動調整輪次時長,以使網路的整體效能達到最佳。
· 部分同步:區塊領導者無需收到已產生的所有訊息即可生成區塊,未收到的區塊交易記錄可在下游進行協調。
· 廣播訊息:協議假定能將任何訊息廣播到區塊鏈網路中的所有其他驗證者,可以處理訊息的延遲,而無需直接的點對點通訊。
· 可證明的最終性:協議提供“最終性檢測器”的形式化計算,它可以發現由總權益大比重支援的交易。當驗證者使用其“最終性檢測器”,發現一些交易具有最終性,那麼其他的驗證者也會將其視為具有最終性的交易。
· 可證明的活性:由於惡意驗證者的總權益不超過1/3,網路將持續產生具有最終性的區塊,且共識的收斂不會停止下來。
總言之,Highway的特色是安全和活性兼備。它區塊的建立是圍繞偽隨機生成的領導者序列進行的,領導者負責區塊的產生。同時,它還採用可變的輪次時長機制,這讓Casper具備彈性,可自我調整網路,以獲得最佳效能。
Casper的開發者友好的整體策略
對任何智慧合約平臺來說,最終的價值來源於使用它的使用者數量和頻次。而要吸引使用者進來,首先需要有dApp開發者構建出符合使用者需求的產品和服務。
這對於Casper來說也一樣,除了其技術路線的選擇之外,Casper最核心的策略之一就是其對開發者友好的整體策略。策略講究聚焦和取捨。這一點從Casper的Slogan也可以看出,它的Slogan是“築夢者的區塊鏈”。換句話說,Casper試圖成為開發者構建各種美好產品和服務的堅實平臺。從其目前的技術基礎和運營方面看,Casper的開發者友好的整體策略值得關注。
1.業務開銷可預測
在區塊鏈上進行交易需要成本,使用者的操作會產生費用。在Casper上,被選中的驗證者需要從交易池中收集交易,並按照一定的次序執行,最後釋出到新區塊上。而使用者提交的費用會按比例分配給所有驗證者。
在Casper上,為了讓dApp的體驗更好,它試圖要達成業務開銷可預測。不受監管的費用市場會導致交易費用的高度波動。在2017年加密貓時代,以太坊的轉賬費用曾經高得嚇人。Casper協議內建的gas價格下限設定足夠高,可以減輕這種波動性。可以防止gas跌至某個特定價格下,讓價格在某個值上自由浮動。
Casper的代幣CLX代幣可用來支付gas費用,而CLX代幣價值是波動的,由此Casper設定了價格下限,雖然消耗的是CLX,但設定的值是法幣值,其基準是單個CLX賬戶之間的轉賬費用花費0.05美元。為了實現這一點,Casper使用去中心化預言機來提供價格資料。
實現業務開銷的可預測,有利於dApp開發者構建自己的商業模式,例如由dApp開發者負擔使用者的交易費用,而dApp透過其他方式向使用者收取費用。由於交易費用的相對可預測,這樣對於構建可持續的商業模式,並實現更好的使用者體驗都有直接幫助。
2.絕大多數開發者無須培訓即可編寫Casper區塊鏈應用
對於智慧合約平臺來說,降低開發者進入的門檻非常重要。這也是Casper的重要競爭策略。首先它支援Rust作為Casper智慧合約的主要程式語言,用於智慧合約的Rust開發套件包括了測試環境、合約執行環境等。
此外,Casper對wasm有很好的支援。平臺也支援其他程式語言進行智慧合約的開發。這樣對於開發者來說,無需太多的學習成本,用自己熟悉的語言即可開發dApp。
3.開發者所需的各種功能
除了開發門檻的降低,還有一些功能也可以幫助開發者更好的構建。例如它的GraphQL介面、賬戶結構、無限多重簽名、可定製支付方式、可讀性好的賬戶名等。
· Casper內建GraphQL介面,可用於狀態查詢,方便開發者隨時瞭解合約的內部狀態,降低開發和運營dApp的門檻。
· Casper的賬戶結構比較靈活,有多級賬戶結構,可以從子賬戶中收回丟失資金。它支援開發者所需的各類授權,其中包括針對丟失金鑰恢復的賬戶許可權模型,在賬戶和合約之間安全共享狀態的許可權模式等。
· 加權的金鑰功能和閥值,可以實現無限多重簽名功能。
· Casper支援開發者制定交易的支付方式。普通區塊鏈通常採用“傳送人付費”模式,而Casper的開發者可設定支援接收人付費的模式。
· Casper使用者名稱是可讀性好的賬戶名,方便構建應用,也有更好的使用者體驗。
· Casper節點內建了遙測和監視功能,可以方便節點運營者和驗證者測試系統效能。
4.可升級的基礎設施
Casper區塊鏈支援將合約儲存在不可變的地址中,支援合約版本控制和升級。這對於開發者來說是很有用,因為合約更新幾乎是必不可免的。同時,Casper還在設計協議和虛擬機器,以實現對併發執行、側鏈、分片的支援。
結語
從Casper的整體來看,跟其他專案相比,以上的兩點有其獨特之處。雖然Casper很關心可擴充套件性,但它同樣重視安全性和去中心化,這是它實現可擴充套件性的前提。Casper的Highway協議是實現這一目標的關鍵,透過“summit”和blockdag結構、偽隨機領導者序列(pseudorandom leader sequence)、彈性的輪次時長等多種設計,實現了安全性和活性。
為了構建生態,Casper的開發者友好的整體策略也讓人印象深刻。它在降低開發者門檻,豐富開發者工具方面、設施可升級等方面都下了不少功夫。
那麼,在眾多的智慧合約平臺中,Casper有沒有機會脫穎而出?現在還無法下定論,但由於它在共識機制設計上的特色和對開發者友好的策略,它的探索值得持續關注。