1. 概述
????????將網(wǎng)絡(luò)的整個(gè)狀態(tài)分割成一系列被稱為分片的分區(qū)兆龙,其中包含自己獨(dú)立的狀態(tài)片及交易歷史記錄。
解決的問題:
(1) 網(wǎng)絡(luò)分片
????????利用隨機(jī)性將區(qū)塊鏈網(wǎng)絡(luò)中的各個(gè)節(jié)點(diǎn)分割成若干個(gè)小網(wǎng)絡(luò)豺旬,每一個(gè)小網(wǎng)絡(luò)即是一個(gè)分片终抽,這也是分片技術(shù)的第一步溯警。
(2) 交易分片
????????在進(jìn)行網(wǎng)絡(luò)分片后戈抄,根據(jù)網(wǎng)絡(luò)內(nèi)的每一筆交易的獨(dú)特標(biāo)識(shí)(例如哈希值)來決定這筆交易由哪個(gè)分片來處理。
(3) 狀態(tài)分片
????????在一個(gè)狀態(tài)分片的區(qū)塊鏈網(wǎng)絡(luò)中扰楼,某一個(gè)特定的分片只會(huì)保留一部分交易數(shù)據(jù)呀癣,而并非全網(wǎng)所有的交易數(shù)據(jù)。
2. 需要考慮的問題[2]
1.?????跨分片通信- 如何安全地增加跨分片通信灭抑。
2.? ? ?單分片接管攻擊- 在一個(gè)分片中攻擊者接管了大多數(shù)協(xié)調(diào)者
3.?????欺詐檢測(cè)-節(jié)點(diǎn)如何能夠得知一個(gè)無效的排序規(guī)則十艾,以便它們可以驗(yàn)證欺詐行為并且確認(rèn)是欺詐行為之后拒絕這個(gè)排序規(guī)則?
4.?????數(shù)據(jù)可用性問題- 由于某種特定的原因腾节,一些特定的分片遭到了攻擊而導(dǎo)致其脫機(jī)忘嫉。由于分片并沒有復(fù)制系統(tǒng)的全部狀態(tài),所以網(wǎng)絡(luò)不能再驗(yàn)證那些依賴于脫機(jī)分片的交易案腺。
????????解決此問題的方法是維護(hù)存檔或進(jìn)行節(jié)點(diǎn)備份庆冕,這樣就能幫助系統(tǒng)進(jìn)行故障修復(fù)以及恢復(fù)那些不可用的數(shù)據(jù)。但是劈榨,這樣就使得一些節(jié)點(diǎn)將不得不存儲(chǔ)系統(tǒng)的整個(gè)狀態(tài)访递,同時(shí)這還會(huì)引發(fā)一些中心化的風(fēng)險(xiǎn)。
5.?????火車旅館問題-? 假設(shè)用戶想要購(gòu)買一張火車票并預(yù)訂一家旅館同辣,并且想要確保這個(gè)操作是原子的拷姿。如果兩者在不同的分片上,如何保證來自于跨分片的消息可以在固定的周期內(nèi)被包含在另外的分片中旱函。
6.?????隨機(jī)數(shù)產(chǎn)生- A.確定性門限簽名方法是另一種不被少數(shù)群體聯(lián)盟利用的隨機(jī)數(shù)生成方式响巢。B.使用區(qū)塊的哈希作為隨機(jī)種子。C. others
7.? ? ?用戶端保存狀態(tài)- 無狀態(tài)客戶端: 不存儲(chǔ)整個(gè)狀態(tài)樹棒妨,只存儲(chǔ)狀態(tài)樹根踪古。
8.? ? ?分叉選擇規(guī)則- 發(fā)生分叉的選擇規(guī)則
3. 以太坊
3.1 共識(shí)機(jī)制
????????由于POW共識(shí)會(huì)導(dǎo)致算力分散,容易出現(xiàn)單分片接管券腔。以太坊選擇了POS共識(shí)作為分片后的共識(shí)伏穆。但是POS存在兩個(gè)問題:
1.? ? ? 無利害攻擊問題
????????早期的Pos機(jī)制下,只考慮到獎(jiǎng)勵(lì)纷纫,沒有對(duì)應(yīng)的懲罰機(jī)制枕扫,產(chǎn)塊者傾向于兩個(gè)分支都添加,因?yàn)樗挥酶冻鲱~外的代價(jià)辱魁,但是增加了收益概率铡原。
2.? ? ? 遠(yuǎn)程攻擊問題
????????某個(gè)時(shí)刻偷厦,網(wǎng)絡(luò)中的大多數(shù)人從一個(gè)歷史久遠(yuǎn)的塊開始分叉商叹。
????????基于上訴兩個(gè)問題燕刻,以太坊設(shè)計(jì)了Casper共識(shí)[4]。Casper是一種基于保證金的經(jīng)濟(jì)激勵(lì)共識(shí)協(xié)議剖笙,必須先繳納保證金才可以參與出塊和共識(shí)形成卵洗,一個(gè)驗(yàn)證人作出了任何Casper認(rèn)為“無效”的事情,他的保證金將被罰沒弥咪,出塊和參與共識(shí)的權(quán)利也會(huì)被取消过蹂。
????????投注共識(shí):驗(yàn)證人對(duì)每一個(gè)高度上的每一個(gè)候選塊獨(dú)立下注,給每個(gè)塊指定一個(gè)勝出概率并公布聚至。驗(yàn)證人中的絕大多數(shù)以非常高的概率下注某個(gè)塊時(shí)酷勺,任何不包含這個(gè)塊的分叉都不可能勝出,此時(shí)我們說這個(gè)塊已最終確認(rèn)扳躬。
具體細(xì)節(jié)不展開
3.2??設(shè)計(jì)框架
1)? Main chain 主鏈
????????以太坊2.0的初始部署階段脆诉,是不需要對(duì)PoW鏈進(jìn)行共識(shí)更改的。相反的是贷币,我們會(huì)向PoW鏈添加一個(gè)注冊(cè)合約属划,以存入ETH轧叽。這個(gè)注冊(cè)合約會(huì)通過beacon鏈發(fā)出一個(gè)帶有各種參數(shù)的日志。它不會(huì)進(jìn)行驗(yàn)證,而是把注冊(cè)邏輯發(fā)送給beacon鏈菱农。
2)? Beacon chain 信標(biāo)鏈
Beacon鏈?zhǔn)荘oS系統(tǒng)的“主鏈”,beacon鏈的主要職責(zé)是:
1. 存儲(chǔ)并維護(hù)活躍悦污、列隊(duì)等待以及退出驗(yàn)證者的集合代芜;
2. 處理交聯(lián)(交聯(lián)是beacon鏈“了解”分片鏈更新狀態(tài)的主要手段);
3. 處理逐塊一致性瘸味,以及finality gadget宫仗;
4. 為每個(gè)分片指定所選的區(qū)塊提議者;
5. 組織驗(yàn)證者進(jìn)入委員會(huì)硫戈,對(duì)擬議的區(qū)塊進(jìn)行投票锰什;
6. 用共識(shí)規(guī)則對(duì)驗(yàn)證者實(shí)施獎(jiǎng)勵(lì)和處罰;
7. 作為一個(gè)錨點(diǎn)丁逝,其中分片會(huì)注冊(cè)它們的狀態(tài)汁胆,以促進(jìn)跨分片交易;
????????成為驗(yàn)證者的唯一機(jī)制霜幼,是往以太坊PoW主鏈發(fā)送一筆包含32 ETH 的交易至一個(gè)注冊(cè)合約嫩码。
????????在注冊(cè)器合約內(nèi)質(zhì)押的是 PoW 以太,獲得的收據(jù)可以“創(chuàng)造”出PoS 以太罪既。因?yàn)樽?cè)器合約無法撤銷铸题,所以 PoS 以太不能轉(zhuǎn)回 PoW 以太铡恕,并且只有在驗(yàn)證者退出系統(tǒng)之時(shí)才能被退回到一個(gè)分片地址,而且 PoS 以太(在初期階段)是不能交易的丢间。雙生以太并行的狀況不會(huì)持續(xù)太久探熔,除非發(fā)生以下情況[3]:
1. 狀態(tài)轉(zhuǎn)換即將實(shí)現(xiàn),參與者可以選擇撤銷注冊(cè)器合約烘挫,PoS 以太可以轉(zhuǎn)換成等價(jià)值的 PoW 以太诀艰。
2. PoW 鏈變成一個(gè)分片或者存儲(chǔ)合約,PoW 以太會(huì)被逐漸淘汰饮六,并在匹配地址上自動(dòng)轉(zhuǎn)換為 PoS 以太(向后兼容)其垄。
3)? Shard chain 分片鏈
????????分片鏈只有一小部分的證明必須記錄在主鏈上。 分片鏈上的交易處于自己獨(dú)立的空間中卤橄,分片驗(yàn)證人只需要驗(yàn)證他們所關(guān)注的分片绿满。 分片鏈也通過 POS 機(jī)制依附于主鏈,以獲得更高層次的共識(shí)(higher level ofconsensus)窟扑。
????????跨分片通信喇颁。利用 UTXO 模型,并通過在主鏈上進(jìn)行交易和創(chuàng)建一個(gè)receipt辜膝,用戶可以將以太存入一個(gè)指定分片无牵。分片鏈上的用戶可以給定 receipt ID 創(chuàng)建一個(gè)消費(fèi) receipt的交易,來花費(fèi)該 receipt厂抖。
3.1 細(xì)節(jié)補(bǔ)充
1) 節(jié)點(diǎn)類型:
A. Proposer
????????Proposer是交易池的維護(hù)者茎毁。負(fù)責(zé)為proposal(collation
header)做準(zhǔn)備而收集交易,并負(fù)責(zé)廣播collation body忱辅。任何人都可以成為proposer七蜘。
B. Collator
????????Collator是由為隨機(jī)函數(shù)選出的合法collator,其身份的合法性只在指定時(shí)間段和指定分片內(nèi)有效墙懂。它的主要作用就是collates the proposal以建立collation橡卤。Collator從所有分片的collator pool中選出。
C. Executor
????????Executor執(zhí)行狀態(tài)交易函數(shù)损搬。其實(shí)proposer也應(yīng)該是executor碧库,都是擁有獲取交易所花費(fèi)gas和選擇高手續(xù)費(fèi)的交易等能力的身份。
?
2) 交易的執(zhí)行流程
? ? ? ? 以太坊主鏈每個(gè)時(shí)間段新生成的區(qū)塊巧勤,都會(huì)將在此時(shí)間點(diǎn)之前的五個(gè)區(qū)塊打包在內(nèi)嵌灰。這也被成為“LookAhead”。每個(gè)validator都會(huì)借由LookAhead來確認(rèn)在未來他們將負(fù)責(zé)驗(yàn)證的是哪個(gè)分片颅悉。也就是驗(yàn)證者是先得知會(huì)被劃分到哪個(gè)分片的沽瞭。在指定時(shí)間段內(nèi),每個(gè)區(qū)塊的驗(yàn)證者都會(huì)面臨新一輪的隨機(jī)選擇(共5個(gè)區(qū)塊剩瓶,共五個(gè)validator)驹溃。當(dāng)?shù)竭_(dá)主鏈出塊時(shí)間城丧,所有validator都會(huì)將已校驗(yàn)的交易發(fā)送到交易池中。檢驗(yàn)發(fā)起者需要向交驗(yàn)者支付激勵(lì)豌鹤。交驗(yàn)者下載潛在的分片提案亡哄。驗(yàn)證者驗(yàn)證數(shù)據(jù)的有效性,并挑選當(dāng)前分片中最新區(qū)塊傍药,然后將collation header提交給主鏈磺平。由礦工負(fù)責(zé)挖礦生成新的主鏈的區(qū)塊。
????????可以簡(jiǎn)單地這么認(rèn)為拐辽,分片中的交易都會(huì)被裝入“校對(duì)塊” (collation)。 與側(cè)鏈類似擦酌,校對(duì)器(collator)只有一小部分會(huì)被記錄到主鏈
????????以太坊2.0將以太網(wǎng)絡(luò)分為兩層俱诸,上層為現(xiàn)有的以太坊(也叫主鏈),基本保持不變赊舶;下層為各個(gè)分片睁搭,他們相互獨(dú)立,擁有不同的賬戶空間笼平。各個(gè)分片延生屬于自己的鏈园骆,并將最新區(qū)塊頭發(fā)給主鏈。主鏈?zhǔn)占鱾€(gè)分片的區(qū)塊頭寓调,然后生成主鏈區(qū)塊锌唾。值得注意的是,在主鏈上只保存各個(gè)分片的區(qū)塊頭夺英,具體交易并不在主鏈上保存晌涕。
4. Zilliqa[5]
????????Zilliqa通過Pow算法完成網(wǎng)絡(luò)節(jié)點(diǎn)的劃分過程:選出1個(gè)Boss分片和多個(gè)工作分片,每個(gè)分片有不低于600個(gè)節(jié)點(diǎn)痛悯。其設(shè)計(jì)思想來源于谷歌提出的Map-reduce編程模型的思想余黎。
????????1) Map:網(wǎng)絡(luò)上的每一筆交易會(huì)根據(jù)發(fā)送者的地址被映射到工作分片中,工作分片通過pBFT共識(shí)算法在各自的分片當(dāng)中驗(yàn)證交易载萌,最終形成當(dāng)前工作分片中的子區(qū)塊惧财。
????????2)Reduce(Merge):工作分片將子區(qū)塊發(fā)送到Boss分片,Boss分片將多個(gè)子區(qū)塊進(jìn)行驗(yàn)證扭仁、打包垮衷,合并生成最終區(qū)塊,保存在各個(gè)節(jié)點(diǎn)當(dāng)中斋枢。
????????在Zilliqa的設(shè)計(jì)中帘靡,每600-800個(gè)節(jié)點(diǎn)就會(huì)被分配為一個(gè)網(wǎng)絡(luò)分片,而由多個(gè)分片形成的并行網(wǎng)絡(luò)就是分片網(wǎng)絡(luò)瓤帚。通過多重簽名協(xié)議讓PBTF共識(shí)更高效描姚,理論上在pBTF共識(shí)下涩赢,只有分片數(shù)量小于50個(gè)節(jié)點(diǎn)的時(shí)候,它的效率才能達(dá)到最佳轩勘。通過多重簽名優(yōu)化和壓縮通信的次數(shù)和數(shù)據(jù)的大小筒扒,而從達(dá)到優(yōu)化通信成本的目的。
????????節(jié)點(diǎn)通過pow驗(yàn)證的方式才準(zhǔn)許其節(jié)點(diǎn)進(jìn)入網(wǎng)絡(luò)绊寻,PoW來防止女巫節(jié)點(diǎn)攻擊花墩、確認(rèn)節(jié)點(diǎn)身份并隨機(jī)進(jìn)行分片。參與共識(shí)協(xié)議的每個(gè)礦工都可以獲得對(duì)應(yīng)的獎(jiǎng)勵(lì)澄步。每個(gè)節(jié)點(diǎn)依然保持所有歷史記錄冰蘑,并沒有解決存儲(chǔ)空間的擴(kuò)展性問題。
5.?QuarkChain
????????QuarkChain由兩層區(qū)塊鏈結(jié)構(gòu)組成村缸,第一層為分片層(可以理解為子鏈層)祠肥,用于交易記賬;第二層為一條根鏈梯皿,用于確認(rèn)分片中的交易仇箱。在不影響根鏈的情況下,分片層的分片數(shù)量可以動(dòng)態(tài)增加东羹,從而來提高系統(tǒng)的整體吞吐量剂桥。
????????QuarkChain的分片技術(shù)沒有采取任何的隨機(jī)機(jī)制來合理分配分片上的節(jié)點(diǎn),因此安全性方面存在潛在的隱患属提∪ǘ海跨分片交易過多,或者網(wǎng)絡(luò)中存在大量的跨分片交易垒拢,QuarkChain 網(wǎng)絡(luò)中的吞吐量也會(huì)下降旬迹。
QuarkChain中跨分片交易的流程分為三步:
????????① 發(fā)送方所屬分片內(nèi)記錄交易信息,分片內(nèi)打包成小塊求类,10秒一個(gè)區(qū)塊
????????② 發(fā)送方所屬分片提交區(qū)塊信息到根鏈奔垦,60秒一個(gè)區(qū)塊。
????????③ 根鏈確認(rèn)之后接收方分片進(jìn)行同步信息尸疆,10秒一個(gè)區(qū)塊椿猎。
????????QuarkChain上采用了分片和根鏈層的協(xié)同挖礦,協(xié)同挖礦的目標(biāo)是通過激勵(lì)機(jī)制和難度算法使得算力能均勻的分配到網(wǎng)絡(luò)上寿弱。在實(shí)際的區(qū)塊鏈網(wǎng)絡(luò)和pow共識(shí)機(jī)制中犯眠,僅靠難度算法和激勵(lì)機(jī)制并不能完全杜絕礦工聯(lián)合作惡的問題,而QuarkChain在此問題上沒有提供更好的解決方案症革。
????????QuarkChain提供了一個(gè)簡(jiǎn)單的賬戶管理系統(tǒng)筐咧。用戶只需要一個(gè)帳戶即可管理所有分片上的地址。在QuarkChain的設(shè)計(jì)中,每個(gè)分片中都會(huì)存在著一個(gè)賬戶的地址量蕊,其中一個(gè)擁有私鑰的帳戶可以在任何分片上執(zhí)行交易铺罢。實(shí)質(zhì)上當(dāng)一個(gè)用戶在沒有余額的分片上進(jìn)行交易時(shí),首先需要由擁有余額的分片賬戶轉(zhuǎn)到目標(biāo)賬戶残炮,然后用戶才能進(jìn)一步進(jìn)行操作韭赘。根本的結(jié)構(gòu)上還是需要對(duì)不同分片上的地址進(jìn)行跨分片交易才能做到金額調(diào)動(dòng)。