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