什么是Beacon鏈,為什么我們需要一個(gè)Beacon鏈
以太坊2.0并不是一個(gè)新主意,早在2014年,Vitalik就提到了以太坊2.0的概念,他說:“我們要么解決可擴(kuò)展性和共識(shí)問題,要么就死于嘗試,” 好吧,我們還活得不錯(cuò),而他幾周前發(fā)布的最新觀點(diǎn)是:“對(duì)于以太坊2.0來說,理論上已沒有明顯未解決的問題?!?/p>
現(xiàn)在正是實(shí)現(xiàn)這些理論的時(shí)候了,而Beacon鏈正是以太坊2.0交付計(jì)劃的第一個(gè)組成部分。在這篇文章當(dāng)中,我們將討論它的作用、它為什么是這樣做的,以及開發(fā)者們是如何開發(fā)它的。
關(guān)于Beacon鏈的介紹
在之前的一篇文章當(dāng)中,作者介紹了以太坊2.0的概念,在這里我們通過Hsiao-Wei Wang提供的以太坊2.0系統(tǒng) 架構(gòu)圖進(jìn)行展示:
此圖還可作為開發(fā)和交付以太坊2.0的分步路線圖,順序?yàn)閺纳系较拢?/p>
· PoW 主鏈?zhǔn)墙裉煲蕴淮嬖诘牟糠郑杭串?dāng)前的以太坊主網(wǎng)。在以太坊2.0系統(tǒng)當(dāng)中,它會(huì)繼續(xù)像今天那樣運(yùn)行。而下面的所有東西都是新的。
· Beacon鏈目前正在開發(fā)當(dāng)中,它也將成為第一個(gè)被交付的組件;
· 分片鏈會(huì)是下一個(gè)交付組件,它也是可擴(kuò)展性的來源。最初,分片鏈將簡(jiǎn)單地聚合交易,并就其排序達(dá)成共識(shí),而不會(huì)執(zhí)行它們。這將是對(duì)系統(tǒng)基礎(chǔ)設(shè)施以及安全性的一個(gè)良好測(cè)試;
· VM層是以太坊2.0系統(tǒng)的最后一個(gè)重要組成部分,它將提供合約以及交易的執(zhí)行;
為什么我們需要一個(gè)“Beacon”鏈?
Beacon鏈?zhǔn)且粋€(gè)全新的PoS區(qū)塊鏈。它是支撐整個(gè)新以太坊2.0系統(tǒng)的脊柱。它的存在,使得整個(gè)系統(tǒng)能夠保持活力,其負(fù)責(zé)指揮以太坊2.0系統(tǒng)所有的組成部分。
(Beacon鏈指揮整個(gè)以太坊2.0系統(tǒng))
Beacon鏈的關(guān)鍵功能是管理PoS協(xié)議(Casper)以及所有的分片鏈。它有很多方面的工作要做:管理驗(yàn)證者以及他們的權(quán)益(stakes);在每一步為每個(gè)分片指定所選的區(qū)塊提議者;組織驗(yàn)證者進(jìn)入委員會(huì),對(duì)擬議的區(qū)塊進(jìn)行投票;應(yīng)用共識(shí)規(guī)則;對(duì)驗(yàn)證者實(shí)施獎(jiǎng)勵(lì)和處罰;并且,作為一個(gè)錨點(diǎn),其中分片會(huì)注冊(cè)它們的狀態(tài),以促進(jìn)跨分片交易;
在我們更深入地研究這些功能之前,請(qǐng)先了解一下術(shù)語。Beacon鏈的名字起源于“隨機(jī)beacon”的概念,它為系統(tǒng)的其他部分提供隨機(jī)性來源,而Dfinity項(xiàng)目在其區(qū)塊鏈環(huán)境中也采用了隨機(jī)beacon的概念。每個(gè)參與節(jié)點(diǎn)都會(huì)維護(hù)自己的本地Beacon鏈,努力與其它節(jié)點(diǎn)保持同步。也許上面帶有指揮的圖像是有誤導(dǎo)性的,雖然Beacon鏈確實(shí)指揮了系統(tǒng)的其余部分,但其指揮者是去中心化的,這就像每個(gè)音樂家都有自己的節(jié)奏感一樣。
關(guān)于Beacon鏈的一些功能
讓我們來看看Beacon鏈的一些功能。
管理驗(yàn)證者
Beacon鏈的主要工作之一就是維護(hù)驗(yàn)證者集合,這些驗(yàn)證者節(jié)點(diǎn)需通過抵押以太幣申請(qǐng)加入,他們會(huì)負(fù)責(zé)運(yùn)行以太坊2.0系統(tǒng)。驗(yàn)證者可以具有多種狀態(tài),但只有那些被標(biāo)記為“active”的節(jié)點(diǎn)才可以參與運(yùn)行以太坊2.0協(xié)議。
而想要加入驗(yàn)證者集的參與者,可通過當(dāng)前的以太坊PoW主鏈,向一個(gè)Beacon鏈合約發(fā)送32 以太幣,在經(jīng)歷一些有效性檢查之后,這些幣會(huì)被鎖定,而合約則會(huì)發(fā)出日志條目(Solidity中的“事件”),它們可被Beacon鏈客戶端所接收。然后被選中的節(jié)點(diǎn)就可以導(dǎo)入到Beacon鏈的驗(yàn)證者集當(dāng)中。
一旦激活之后,驗(yàn)證者就可以提出區(qū)塊并參與以太坊2.0協(xié)議,當(dāng)這些區(qū)塊被選中之后,它們就會(huì)同時(shí)出現(xiàn)在Beacon鏈以及分片鏈上(一旦它們被實(shí)現(xiàn)的情況下)。如下所述,這些驗(yàn)證者還會(huì)加入對(duì)區(qū)塊進(jìn)行投票的委員會(huì)。
驗(yàn)證者也可以發(fā)出信號(hào),表明他們希望退出系統(tǒng),并停止參與協(xié)議的運(yùn)行。經(jīng)過一段時(shí)間(目前為97天,但可能會(huì)更靈活),他們的押金(32以太幣)加上獎(jiǎng)勵(lì)再減去罰款,將被退回到一個(gè)分片鏈當(dāng)中。解鎖PoW主網(wǎng)上的初始權(quán)益,是不太可能的,除非整個(gè)系統(tǒng)失敗,并且社區(qū)同意給退出者退款。
以上的所有工作,都是由Beacon鏈在負(fù)責(zé)管理的。
提供隨機(jī)性
在區(qū)塊鏈系統(tǒng)中很難產(chǎn)生良好的隨機(jī)性,而一個(gè)權(quán)益證明( proof-of-stake)協(xié)議的關(guān)鍵要求,就是隨機(jī)性的來源,它必須是分布式的、可驗(yàn)證的、不可預(yù)測(cè)的,并且是不可剝奪的。而Beacon鏈就是負(fù)責(zé)向系統(tǒng)的其余部分提供這種隨機(jī)性:下面所描述的幾個(gè)協(xié)議功能就取決于這種隨機(jī)性。
當(dāng)前的隨機(jī)數(shù)生成是通過RANDAO結(jié)構(gòu)完成的,驗(yàn)證者會(huì)提供一個(gè)“哈希洋蔥”。 而RANDAO結(jié)構(gòu)只是將很多參與者提供的貢獻(xiàn)(單個(gè)隨機(jī)數(shù))組合成單個(gè)輸出數(shù)字的一種方式。為了防止任何一個(gè)參與者顯著地操縱隨機(jī)性,開發(fā)者使用了一種提交泄露(commit–reveal)方案。當(dāng)驗(yàn)證者注冊(cè)時(shí),它會(huì)提供一個(gè)承諾值,該值是其選擇的原始數(shù)字經(jīng)多次哈希后產(chǎn)生的。每次選擇驗(yàn)證者作為提議者時(shí),它通過提供最后一個(gè)揭示數(shù)字的原像來剝離“洋蔥”的一層或多層。其它人都可以檢查這是否是正確完成的,因此提出者不能通過改變其貢獻(xiàn)來欺騙系統(tǒng)。
雖然這種方案并不是不可替代的,如果提出者不喜歡這個(gè)隨機(jī)數(shù),他可以選擇跳過它,但對(duì)于當(dāng)前的協(xié)議設(shè)計(jì)來說,這已經(jīng)是足夠健壯的。
區(qū)塊提出者
Beacon鏈會(huì)管理它的PoS協(xié)議,以及每個(gè)分片鏈。在工作量證明系統(tǒng)當(dāng)中,礦工節(jié)點(diǎn)會(huì)負(fù)責(zé)選出下一個(gè)區(qū)塊。而在PoS系統(tǒng)當(dāng)中,是不存在挖礦這個(gè)過程的,因此區(qū)塊生產(chǎn)者是基于上述協(xié)議內(nèi)的隨機(jī)性,隨機(jī)地選擇區(qū)塊提出者。
PoW系統(tǒng)的另一個(gè)特性是,區(qū)塊時(shí)間是不規(guī)則的,盡管以太坊的區(qū)塊生成時(shí)間平均約為15秒。相比之下,我們將Beacon鏈的區(qū)塊生成描述為心跳(heartbeat)。以太坊2.0的區(qū)塊是每16秒定期生成一次的(如果測(cè)試可行,也可能減少到8秒)。這個(gè)16秒的周期被稱為“slot”(時(shí)隙);
在每個(gè)時(shí)隙(slot),Beacon鏈所選擇的提出者,會(huì)收集來自先前區(qū)塊的Beacon鏈驗(yàn)證者集的所有協(xié)議投票(證明),并將它們納入其發(fā)布的區(qū)塊。
一旦分片鏈準(zhǔn)備就緒,每個(gè)分片在每個(gè)時(shí)隙(slot)中都會(huì)有自己選擇的提出者,它們將收集該分片的交易,并將它們納入一個(gè)由分片委員會(huì)投票得出的區(qū)塊當(dāng)中;
委員會(huì)
權(quán)益證明(proof-of-stake)區(qū)塊鏈的一個(gè)重要安全來源是委員會(huì),它們負(fù)責(zé)對(duì)構(gòu)成區(qū)塊鏈真實(shí)歷史的區(qū)塊進(jìn)行投票。而 Beacon鏈就依賴于計(jì)算來自其委員會(huì)的投票,我們將其稱為“證明”,以便同意并最終確定其歷史。在理想的情況下,如果能夠快速收集證明,則該委員會(huì)的成員,都可以成為系統(tǒng)中的有效驗(yàn)證者。
此外,Beacon鏈將隨機(jī)為每個(gè)分片指定較小的子委員會(huì),這將在適當(dāng)?shù)臅r(shí)候負(fù)責(zé)確認(rèn)分片的提出者行為是正確的。
獎(jiǎng)勵(lì)和懲罰
Beacon鏈的另一個(gè)管理角色,是跟蹤和更新驗(yàn)證者的存款。
如果驗(yàn)證者表現(xiàn)良好,并發(fā)揮出了自己的作用,則他們會(huì)獲得獎(jiǎng)勵(lì):這是驗(yàn)證者參與以太坊2.0系統(tǒng)的動(dòng)力。但是,如果驗(yàn)證者違反了規(guī)則。那么他們的32個(gè)以太幣存款會(huì)減少(被削減),到達(dá)一定程度的情況下,這些驗(yàn)證者會(huì)被系統(tǒng)剔除。如果驗(yàn)證者出現(xiàn)缺席的狀況(不對(duì)區(qū)塊進(jìn)行投票),系統(tǒng)也會(huì)有小小的懲罰,我們將其稱為“二次泄漏”(quadraTIc leak)。其原因很微妙,即使在大量驗(yàn)證器脫機(jī)時(shí)(例如在發(fā)生災(zāi)難時(shí)),系統(tǒng)也能夠繼續(xù)處理區(qū)塊。
如果驗(yàn)證者的存款低于16以太幣,則Beacon鏈會(huì)把驗(yàn)證者從驗(yàn)證者集當(dāng)中剔除出去;
交聯(lián)(Crosslinks)
最后,Beacon鏈會(huì)執(zhí)行交聯(lián)的處理。交聯(lián)負(fù)責(zé)將整個(gè)分片系統(tǒng)連接在一起,其負(fù)責(zé)將每個(gè)分片錨定在Beacon鏈的脊柱當(dāng)中。
周期性地,每個(gè)分片的當(dāng)前狀態(tài)(“組合數(shù)據(jù)根”)會(huì)被記錄到Beacon鏈當(dāng)中,并作為交聯(lián)。當(dāng)Beacon鏈區(qū)塊完成時(shí),相應(yīng)的分片區(qū)塊就被認(rèn)為是最終確定的,而其它分片則可確信它們可依賴它進(jìn)行跨分片交易。
可視化的Beacon鏈(藍(lán)色部分),它有8個(gè)分片鏈(碧綠色部分)以及相關(guān)交聯(lián)(淺藍(lán)色線)。所有鏈上的完成區(qū)塊都是黃色的,時(shí)間從左到右增加。 (圖片來自Casey Detrio)
構(gòu)建Beacon鏈
很快,我們就要結(jié)束我們的Beacon鏈閃電之旅了!就其本身而言,Beacon鏈可能看起來并不是特別有用。它無法處理任意交易:它沒有智能合約,它沒有 EVM虛擬機(jī)。你沒法用它做任何事情。但是,它作為以太坊2.0的第一個(gè)組成部分,它是整個(gè)系統(tǒng)的基礎(chǔ)。整個(gè)壯觀的以太坊2.0建筑都將以此為基礎(chǔ)。所以,它必須是堅(jiān)實(shí)的。
如果你想深入了解細(xì)節(jié),那么目前有一份正在進(jìn)行當(dāng)中的Beacon鏈規(guī)范。這份規(guī)范的所有創(chuàng)建和維護(hù)過程都是公開進(jìn)行的:歡迎有興趣的人加入。
為了運(yùn)行Beacon鏈,你就需要用到一個(gè)Beacon鏈客戶端。而很多大家所熟知的以太坊客戶端(Geth,Parity,Pantheon等)都在進(jìn)行相關(guān)的開發(fā)。你可以在此處查看我所知道的列表,其中包含指向其GitHub代碼庫的鏈接。 PrysmaTIc和Lighthouse正在定期更新它們的客戶端開發(fā)進(jìn)度,也有一些團(tuán)隊(duì)正在向貢獻(xiàn)者提供獎(jiǎng)勵(lì)。
關(guān)于進(jìn)度…… 在撰寫本文時(shí),Beacon鏈的技術(shù)規(guī)范完成度接近了60%。盡管如此,開發(fā)者們預(yù)計(jì)會(huì)在今年年底前合理地完成這份規(guī)范,并且可能到2019年第一季度末運(yùn)行多客戶端的Beacon鏈測(cè)試網(wǎng)絡(luò)。最近幾周,相關(guān)的開發(fā)非常迅速,關(guān)于以太坊2.0的真正討論正在拉開序幕!