很多基于區塊鏈,P2P協議的項目都對其中的性能和吞吐量有所擔憂。這些項目在研發階段做了很多創新,但是很多人沒有考慮到這些協議其中的真正挑戰。
網絡技術
很容易就想象到運行網絡的大多數人是處于延遲的可信區間以及計算能力之間,但是很容易忘記大多數用戶需要和區塊鏈上的節點進行交互,其實是有障礙的。不幸地是,運行全節點是非常昂貴和緩慢的,所以大多數用戶都依賴于“輕”節點,它們可以擁有全節點的安全性,而且不需要過多的資源需求。
以太坊的輕節點模型可以讓設備作為輕量化的RaspberryPi來加入網絡,下載區塊頭部作為顯示,同時只需要根據用戶需求,驗證某些部分的狀態。特別是在以太坊網絡中,很容易就可以和這些擁有全節點的客戶端進行滲透,從而通過RaspberryPi會比默克爾樹有更快的速度。
數字經濟激勵并不足以來運行全節點,因為資源消耗能力造成了平衡分布網絡的瓶頸。很難去準確預測,網絡中全節點和輕節點之間的平衡。現在已經有很多關于如何平衡這些激勵的討論,并且讓用戶更容易來驗證運行全節點。
引進輕節點:以太坊的關鍵參與者
輕節點背后的主要觀點,就是它能夠根據需求來獲得部分狀態,因為它直接考慮用戶。假設一個誠實的模型中,礦工正確地符合以太坊的規則,而且至少系統中的全節點是完全誠實的。
他們基本的功能是下載區塊頭部作為網絡中的存在,然后根據被客戶端使用的某些狀態的默克爾證明來進行發布。以太坊上的輕節點不會使用本地存儲,而是使用分布式哈希表格來跟蹤Trie節點。
假設以太坊狀態是通過大型默克爾樹來代表的,很容易使用默克爾根部,還有書上分支路徑的節點,來作為輕量化證明這部分信息的完整性。這就完全依賴于默克爾根部提供的信息是正確的。
輕量化客戶端的信息包含其中的,但是不限于檢查賬戶余額,驗證轉賬確認,從網絡中部署的部分合約中的事件簿等等。所有這些都可以通過默克爾證明驗證來減少為次線性的復雜程度。當區塊鏈上的數據已經不可用了,或者證明在驗證狀態轉賬因子的時候,證明不能夠合格。客戶端被允許給P2P網絡中的其他用戶提供報警。
底層共識機制
目前的輕客戶端協議使用的是工作量證明共識算法,通過全節點在主鏈運行。在工作量證明中,通過數學公式就可以驗證區塊頭部是否有效。這個算法就很難計算,但是很容易去驗證。
輕量化客戶端一旦啟動,就會尋找最長區塊頭部的鏈,攻擊者通過產生錯誤頭部進行欺詐的成本幾乎是不可能實現的。
底層算法會通過消耗電力的方式,來進行工作量證明,從而保證網絡的安全,雖然驗證區塊頭部是很高效的。
輕量化客戶端被用在工作量證明,因為區塊頭部是一直進行驗證的,但是我們并不會在權益證明中獲得同樣的保證。權益證明的輕客戶端:工作量證明真的需要嗎?
在權益證明中,輕客戶端的簡單化問題是區塊頭部并沒有和一定數量的“真實”區塊生產者聯系。那也就是說,這個共識協議的清楚是在于對成員的懲罰震懾,而不是通過消耗電力來給他們獎勵。在權益證明中,如果想運行錯誤的主鏈,會受到懲罰,但是在工作量證明中,如果挖錯誤的鏈,就會產生分叉,而且沒辦法獲得主鏈的獎勵。
權益證明提供協議內置的機制,從而可以確切地確定區塊頭部。一旦這些頭部被信任了,他們所包含的數據就會呈現很復雜的對數,也就是說,要從默克爾樹獲取節點。盡管如此,區塊頭部并沒有包含我們可以用來驗證工作量證明解決方案的數值,使得驗證至少是對數,而不是恒定的時間效率。
但是,我們至少可以在輕客戶端的同步效率更高。Vitalik曾經說過,友好的輕客戶端權益證明可以通過checkpoints 系統來完成。
Checkpoint的定義是一定數量的區塊,其中2/3的參與者必須要通過加密簽名達成同意,并且這類Checkpoint必須要包含前個Checkpoint的哈希值。在這個新型輕客戶端的同步中,只有Checkpoint可以下載,客戶端然后會驗證參與者的簽名。這會降低必須下載單個區塊頭部的成本,就好像在工作量證明的輕客戶端模式中那樣。
但是,這個方法不會解決驗證區塊頭部的問題,所以對于權益證明協議會有個潛在方法,來包含一小部分的工作量證明,為了在輕客戶端中創建區塊頭部。
工作量證明/權益證明的混合系統會幫助輕客戶端嗎?
當然,也可以在生成區塊頭部的時候使用算力,然后再驗證的時候使用權益證明,那么驗證這些區塊頭部所需要的能量就會很小。
評論
查看更多