以太坊Sharding詳解

分片背景

Sharding是以太坊提出的一種解決方案泰偿,用于解決區(qū)塊鏈(如Plasma和Raiden網(wǎng)絡(luò))的可擴(kuò)展性問題咽筋。雖然Plasma和Raiden網(wǎng)絡(luò)是脫鏈解決方案迄沫,但Sharding是一種鏈上解決方案,它通過改變主鏈本身的協(xié)議來改善主鏈的性能想诅。

應(yīng)用鏈?zhǔn)浇鉀Q方案需要主網(wǎng)絡(luò)的硬分叉吠卷,而脫鏈解決方案通過在主鏈外添加其他系統(tǒng)來消除對硬分叉的需求锡垄。

此外吉嫩,Sharding是基于Proof of Stake(PoS)算法設(shè)計的云挟,以支持以太坊假設(shè)從工作證明(PoW)到PoS的過渡求厕。

Sharding的發(fā)展路線圖如下:

Sharding的發(fā)展路線圖

關(guān)于Sharding

首先盆耽,Sharding是一種鏈?zhǔn)浇鉀Q方案,它將整個網(wǎng)絡(luò)劃分為按部分存儲事務(wù)勺拣。然后并行處理這些事務(wù)以解決區(qū)塊鏈可伸縮性問題孕似。簡而言之送朱,數(shù)據(jù)被分割并存儲到單獨(dú)的分片中以進(jìn)行處理搞坝。

Sharding結(jié)構(gòu)

“Sharding”這個概念源于數(shù)據(jù)庫領(lǐng)域搔谴。在數(shù)據(jù)庫的上下文中,分片是對表進(jìn)行水平分區(qū)以處理和存儲大量數(shù)據(jù)的過程桩撮。

同時敦第,以太坊Sharding將主鏈分為k個分片。每個分片并行處理網(wǎng)絡(luò)上的整個事務(wù)店量。結(jié)果芜果,通過多個分片提高了網(wǎng)絡(luò)的總吞吐量,這與當(dāng)前主鏈的事務(wù)處理機(jī)制形成對比融师。例如右钾,假設(shè)有100個交易。通過10個分片鏈诬滩,每個分片鏈可以平均同時處理10個事務(wù)霹粥。

分片鏈的特點(diǎn)

為了更好地理解分片灭将,必須注意分片鏈的組件和關(guān)鍵術(shù)語疼鸟。然而,隨著研究的進(jìn)展庙曙,Sharding相關(guān)的組件和術(shù)語將繼續(xù)發(fā)生變化空镜。但同樣,本文基于第1階段規(guī)范。

分片鏈術(shù)語

collation:collation與分片鏈主鏈中的塊具有相同的作用吴攒。排序規(guī)則由排序規(guī)則標(biāo)題和事務(wù)列表組成张抄。排序規(guī)則標(biāo)題包含構(gòu)成排序規(guī)則的信息,并通過提議者的簽名提交給主鏈洼怔。這里署惯,事務(wù)列表是排序規(guī)則中的事務(wù)列表。

collation

proposer:提議器本質(zhì)上收集數(shù)據(jù)镣隶,建立一個建議极谊,然后提交到的整理。此外安岂,提案是未經(jīng)驗證的整理轻猖。

Collator:驗證投標(biāo)人提交的提案。對于每個時段域那,將一個分類器分配給一個分片咙边,該分片在一段時間之前被隨機(jī)選擇。

Executor:將Collation標(biāo)頭傳遞給主鏈中的Sharding Manager Contract(SMC)次员。這會更改分片鏈的實際狀態(tài)败许。(執(zhí)行者出現(xiàn)在Sharding階段3)

Period:分片鏈的整理標(biāo)題到主鏈的提交期。這里的單位是主鏈中的塊數(shù)淑蔚。例如檐束,如果PERIOD_LENGTH = 5,則生成5個塊的是1個周期束倍。

Lookahead period:在他們驗證分片鏈中的整理之前被丧,SMC偽隨機(jī)分配Collator。同樣绪妹,“Lookahead period”表示在某段時間之前每個整理器分配到哪個分片鏈甥桂。例如,如果LOOKAHEAD_PERIODS = 4邮旷,則表示在4個周期之前將collator分配給分片鏈黄选。然后,Collator可以提前花時間下載分片鏈的狀態(tài)信息婶肩。

Sharding設(shè)計框架

Sharding設(shè)計框架

1) Main chain 主鏈

以太坊2.0的初始部署階段办陷,是不需要對PoW鏈進(jìn)行共識更改的。相反的是律歼,我們會向PoW鏈添加一個注冊合約民镜,以存入ETH。這個注冊合約會通過beacon鏈發(fā)出一個帶有各種參數(shù)的日志险毁。它不會進(jìn)行驗證制圈,而是把注冊邏輯發(fā)送給beacon鏈们童。

2) Beacon chain 信標(biāo)鏈

Beacon鏈?zhǔn)荘oS系統(tǒng)的“主鏈”,beacon鏈的主要職責(zé)是:

  1. 存儲并維護(hù)活躍鲸鹦、列隊等待以及退出驗證者的集合慧库;

  2. 處理交聯(lián)(交聯(lián)是beacon鏈“了解”分片鏈更新狀態(tài)的主要手段);

  3. 處理逐塊一致性馋嗜,以及finality gadget齐板;

  4. 為每個分片指定所選的區(qū)塊提議者;

  5. 組織驗證者進(jìn)入委員會葛菇,對擬議的區(qū)塊進(jìn)行投票覆积;

  6. 用共識規(guī)則對驗證者實施獎勵和處罰;

  7. 作為一個錨點(diǎn)熟呛,其中分片會注冊它們的狀態(tài)宽档,以促進(jìn)跨分片交易;

成為驗證者的唯一機(jī)制庵朝,是往以太坊PoW主鏈發(fā)送一筆包含32 ETH 的交易至一個注冊合約吗冤。

在注冊器合約內(nèi)質(zhì)押的是 PoW 以太,獲得的收據(jù)可以“創(chuàng)造”出PoS 以太九府。因為注冊器合約無法撤銷椎瘟,所以 PoS 以太不能轉(zhuǎn)回 PoW 以太,并且只有在驗證者退出系統(tǒng)之時才能被退回到一個分片地址侄旬,而且 PoS 以太(在初期階段)是不能交易的肺蔚。雙生以太并行的狀況不會持續(xù)太久,除非發(fā)生以下情況[3]:

  1. 狀態(tài)轉(zhuǎn)換即將實現(xiàn)儡羔,參與者可以選擇撤銷注冊器合約宣羊,PoS 以太可以轉(zhuǎn)換成等價值的 PoW 以太。

  2. PoW 鏈變成一個分片或者存儲合約汰蜘,PoW 以太會被逐漸淘汰仇冯,并在匹配地址上自動轉(zhuǎn)換為 PoS 以太(向后兼容)。

3) Shard chain 分片鏈

分片鏈只有一小部分的證明必須記錄在主鏈上族操。 分片鏈上的交易處于自己獨(dú)立的空間中苛坚,分片驗證人只需要驗證他們所關(guān)注的分片。 分片鏈也通過 POS 機(jī)制依附于主鏈色难,以獲得更高層次的共識(higher level ofconsensus)泼舱。

跨分片通信。利用 UTXO 模型枷莉,并通過在主鏈上進(jìn)行交易和創(chuàng)建一個receipt娇昙,用戶可以將以太存入一個指定分片。分片鏈上的用戶可以給定 receipt ID 創(chuàng)建一個消費(fèi) receipt的交易依沮,來花費(fèi)該 receipt涯贞。

交易的執(zhí)行流程

交易的執(zhí)行流程

以太坊主鏈每個時間段新生成的區(qū)塊,都會將在此時間點(diǎn)之前的五個區(qū)塊打包在內(nèi)危喉。這也被成為“LookAhead”宋渔。每個validator都會借由LookAhead來確認(rèn)在未來他們將負(fù)責(zé)驗證的是哪個分片。也就是驗證者是先得知會被劃分到哪個分片的辜限。在指定時間段內(nèi)皇拣,每個區(qū)塊的驗證者都會面臨新一輪的隨機(jī)選擇(共5個區(qū)塊,共五個validator)薄嫡。當(dāng)?shù)竭_(dá)主鏈出塊時間氧急,所有validator都會將已校驗的交易發(fā)送到交易池中。檢驗發(fā)起者需要向交驗者支付激勵毫深。交驗者下載潛在的分片提案吩坝。驗證者驗證數(shù)據(jù)的有效性,并挑選當(dāng)前分片中最新區(qū)塊哑蔫,然后將collation header提交給主鏈钉寝。由礦工負(fù)責(zé)挖礦生成新的主鏈的區(qū)塊。

SMC

可以簡單地這么認(rèn)為闸迷,分片中的交易都會被裝入“校對塊” (collation)嵌纲。 與側(cè)鏈類似,校對器(collator)只有一小部分會被記錄到主鏈

以太坊2.0將以太網(wǎng)絡(luò)分為兩層腥沽,上層為現(xiàn)有的以太坊(也叫主鏈)逮走,基本保持不變;下層為各個分片今阳,他們相互獨(dú)立师溅,擁有不同的賬戶空間。各個分片延生屬于自己的鏈盾舌,并將最新區(qū)塊頭發(fā)給主鏈险胰。主鏈?zhǔn)占鱾€分片的區(qū)塊頭,然后生成主鏈區(qū)塊矿筝。值得注意的是起便,在主鏈上只保存各個分片的區(qū)塊頭,具體交易并不在主鏈上保存窖维。

網(wǎng)絡(luò)分層

Sharding Manager Contract(SMC)

SMC是一個智能合約榆综,在分片鏈中發(fā)揮重要作用。SMC連接主鏈和分片鏈铸史,管理整理器鼻疮,提議器和整理樹。SMC的作用對于分拆鏈參與主鏈?zhǔn)侵陵P(guān)重要的琳轿。SMC的主要作用如下:

SMC
  1. PoS系統(tǒng):SMC管理整理者的存款判沟。如果整理者在分片鏈中做錯了什么耿芹,那么SMC就會削減一個人的存款。

  2. 偽隨機(jī)抽樣:SMC偽隨機(jī)地將整理器分配給整理池中的分片鏈挪哄。通過防止collator知道將分配哪個分片吧秕,可以降低整理器攻擊特定分片的可能性。

偽隨機(jī)抽樣
  1. 歸類頭驗證:驗證分片鏈提交的歸類頭迹炼。SMC通過addHeader函數(shù)進(jìn)行驗證砸彬,并且必須在啟用排序規(guī)則之前進(jìn)行驗證。

  2. 交叉分片通信:對于分片到分片的事務(wù)傳輸斯入,必須在主鏈中創(chuàng)建一個收據(jù)砂碉。并且SMC管理此收據(jù)。當(dāng)分片鏈中的用戶創(chuàng)建收據(jù)時刻两,收據(jù)將通過SMC傳遞到另一個分片鏈增蹭,并用于傳輸分片事務(wù)。這將在Sharding階段4中實施磅摹。

  3. 鏈?zhǔn)街卫恚?/strong> SMC在鏈?zhǔn)街卫碇邪l(fā)揮著核心作用沪铭。Collators的投票通過SMC處理,以便這些投票可以在鏈上進(jìn)行偏瓤。

分片鏈機(jī)制過程

現(xiàn)在讓我們看看分片鏈實際上是如何工作的杀怠。我希望您能夠了解分片鏈的組件和術(shù)語,以了解分片鏈的機(jī)制過程厅克。

分片鏈的機(jī)制過程

(1)首先赔退,想要成為提議者的網(wǎng)絡(luò)參與者通過SMC存入余額。

(2)同樣证舟,希望成為整理者的網(wǎng)絡(luò)參與者通過SMC存款硕旗。

(3)Collators定期檢查SMC狀態(tài),看它們是否被選為collator女责。

(4)SMC將偽隨機(jī)分配給每個分片鏈漆枚。他們在前瞻期間下載了分片的先前狀態(tài)。每個整理者都會從提議者那里收到提議的投標(biāo)書抵知。

(5)然后墙基,Proposer將提案提交給整理者,其中包括交易刷喜。(提案是指尚未驗證的整理残制。當(dāng)Collator選擇提案時,提議者從交易發(fā)起人處收取交易費(fèi)掖疮。

(6)整理者進(jìn)行投票以核實每個提案中的交易是否有效初茶。

(7)如果超過2/3的整理者批準(zhǔn)該提案的交易有效,則該提議是有效的整理浊闪。

Collator調(diào)用add_header函數(shù)恼布,并在投票后將新創(chuàng)建的校對頭發(fā)送給SMC螺戳。通過SMC上傳的校對標(biāo)題連接到主鏈。

Sharding將在階段過程中添加執(zhí)行程序和跨分片事務(wù)等功能折汞。首先倔幼,我們研究了最基本的分片鏈操作流程和激勵結(jié)構(gòu)。讓我們看一下分片鏈的fork-choice規(guī)則字支。

分片鏈的分叉選擇規(guī)則

與主鏈一樣凤藏,選擇在分片鏈中分支的鏈?zhǔn)且粋€問題奸忽。當(dāng)前主鏈具有fork-choice規(guī)則堕伪,當(dāng)分支出現(xiàn)時選擇最長邊。但是栗菜,分片鏈中的Fork-choice規(guī)則更復(fù)雜欠雌。

在分片的情況下,主鏈和分片鏈基本上都很長疙筹。也就是說富俄,1)選擇最長的分片鏈,2)主鏈需要較長的分片鏈而咆。讓我們仔細(xì)看看下圖霍比。

分片在階段1中,分片鏈中的分叉選擇規(guī)則取決于最長的主鏈暴备。也就是說悠瞬,當(dāng)分支發(fā)生時,分片鏈的選擇不應(yīng)該只是最長的分片鏈涯捻,而應(yīng)該是最長主鏈中最長的分片鏈浅妆。

包含塊B3的主鏈?zhǔn)亲铋L鏈。因此障癌,可以看出塊B3有效并且核對C3有效凌外。得分是塊或整理的高度。

當(dāng)添加塊B3'時涛浙,上述鏈和下面的鏈連接在一起康辑。在這種情況下,根據(jù)主鏈中的fork選擇規(guī)則轿亮,隨機(jī)確定相切時的有效塊晾捏。

此時,塊B3被選擇為有效塊哀托,并且屬于B3的核對C3是有效核對惦辛。

新的塊B4'被添加到底鏈。現(xiàn)在底鏈?zhǔn)亲铋L的主鏈仓手。在這種情況下胖齐,當(dāng)我們比較整理C3和整理C2的分?jǐn)?shù)時玻淑,整理C3分?jǐn)?shù)>整理C2分?jǐn)?shù)。這意味著具有排序規(guī)則C3的分片鏈?zhǔn)禽^長的分片鏈呀伙。但是补履,分片鏈的選擇取決于主鏈。包括在最長主鏈中的核對是核對C2剿另,而不是核對C3箫锤。因此,盡管核對C2的分?jǐn)?shù)較低雨女,但核對C2變?yōu)橛行Ш藢Σ⒈贿x擇為有效的分片鏈谚攒。這是分片鏈的Fork-choice規(guī)則。

分片狀態(tài)存儲

當(dāng)一個驗證器被要求在給定的分片上創(chuàng)建一個塊時氛堕,它只會被提前幾分鐘通知馏臭。

在Ethereum 1.0中,創(chuàng)建塊需要訪問整個狀態(tài)才能驗證事務(wù)讼稚。在這里括儒,我們的目標(biāo)是避免要求驗證器存儲整個系統(tǒng)的狀態(tài)。相反锐想,我們允許驗證器創(chuàng)建塊只需要知道狀態(tài)根的排序規(guī)則帮寻,將責(zé)任推送到事務(wù)發(fā)送者以提供“見證數(shù)據(jù)”(即Merkle分支),以證明事務(wù)影響的帳戶的預(yù)先狀態(tài)赠摇,并提供在執(zhí)行事務(wù)后計算后狀態(tài)根的足夠信息固逗。

在無狀態(tài)模型中,節(jié)點(diǎn)永遠(yuǎn)不需要存儲數(shù)據(jù)(無論該數(shù)據(jù)是歷史蝉稳,狀態(tài)還是其他)抒蚜。實際上,提供數(shù)據(jù)的責(zé)任由離線鏈(例如由交易發(fā)送方)承擔(dān)耘戚。
使用非無狀態(tài)范式(non-stateless paradigm)來實現(xiàn)分片嗡髓,理論上是可能的;然而收津,這需要: (i) 租用存儲空間來保持存儲的有界性饿这;并且 (ii) 驗證器需要使用 O(c) 的時間在一個分片中創(chuàng)建區(qū)塊。

無狀態(tài)客戶端狀態(tài)轉(zhuǎn)換函數(shù)

通常撞秋,我們可以將傳統(tǒng)的“有狀態(tài)”客戶端執(zhí)行狀態(tài)轉(zhuǎn)換的函數(shù)描述為: stf(state, tx) -> state'(或 stf(state, block) -> state')长捧。在無狀態(tài)客戶端模型中,節(jié)點(diǎn)不保存狀態(tài)吻贿,所以 apply_transactionapply_block 可以寫為:

apply_block(state_obj, witness, block) -> state_obj', reads, writes 

這里串结,state_obj 是一個數(shù)據(jù)元組,包含了狀態(tài)根和其他 O(1) 大小的狀態(tài)數(shù)據(jù)(已使用的 gas、receipts肌割、bloom filter 等等)卧蜓;witness 就是見證人;block 就是區(qū)塊的余下部分把敞。其返回的輸出是:

  • 一個新的 state_obj 包含了新的狀態(tài)根和其他變量弥奸;
  • 從見證人那里讀取的對象集合(用于區(qū)塊創(chuàng)建);和
  • 為了組成新的狀態(tài)樹(state trie)而被創(chuàng)建的一組新的狀態(tài)對象奋早。

這使得函數(shù)是“單純性的”(pure)盛霎,僅處理小尺寸對象(small-sized objects)(相反的例子就是現(xiàn)行的以太坊狀態(tài)數(shù)據(jù),現(xiàn)在已經(jīng) 數(shù)百G字節(jié) )耽装,從而使他們可以方便地在分片中使用愤炸。

詳細(xì)說明:https://ethresear.ch/t/state-minimised-executions/748

什么是跨分片通信以及如何實現(xiàn)不同分片之間的事務(wù)傳輸?

在以太網(wǎng)上實現(xiàn)分片時剂邮,分片之間以及分片內(nèi)將存在事務(wù)請求摇幻。分片之間的事務(wù)稱為交叉分片通信横侦。交叉分片通信也稱為基于收據(jù)的通信挥萌,因為它是基于事務(wù)產(chǎn)生的收據(jù)實現(xiàn)的。這里的關(guān)鍵是收據(jù)中的merkle證明通過主鏈從一個分片移動到另一個分片枉侧。

讓我們在下圖中了解交叉分片通信的具體過程引瀑。首先,假設(shè)有兩個分片(分片M榨馁,分片N)憨栽,并且它從分片M的帳戶A向分片N的帳戶B發(fā)送交易。

跨分片通信

1)通過將分片M的帳戶A的余額減去100個硬幣來制作收據(jù)翼虫。生成包含收據(jù)的merkle證明屑柔。

2)等待事務(wù)包含在排序規(guī)則中并包含在主鏈的塊中。

3)當(dāng)交易包含在主鏈的塊中時珍剑,SMC將收據(jù)轉(zhuǎn)移到分片N掸宛。分片N收到Receipt,確保收據(jù)未用過招拙,并且將分片N的賬戶B的余額增加100個硬幣唧瘾。 然后花費(fèi)收據(jù)。

4)分片N消耗收據(jù)并通過主鏈將其傳遞給分片M别凤。分片M刪除它持有的交易的收據(jù)饰序。這樣就完成了整個交易。

分片的當(dāng)前狀態(tài)是什么规哪?[代碼審查]

代碼審查將分為六個部分求豫。為了理解它們中的每一個,除核心部分外,其中一些被省略蝠嘉,檢查以太坊github以獲取詳細(xì)代碼猾蒂。

下面描述運(yùn)行分片鏈的過程。

已注冊(Register_notary)

  • Proposer / Collator在特定時間段內(nèi)分配給分片(get_member_of_committee )

  • Collator在由提議者生成的提案上進(jìn)行投票是晨。

  • 當(dāng)收到一個三分之二表決歸類創(chuàng)建(submitvote)

  • 發(fā)送到SMC歸類頭(AddHeader)

  • 投標(biāo)/分頁器關(guān)閉(Deregister_notary)

  • 投標(biāo)/分頁器返回到存款(Release_notary)

代碼審查將遵循上面的分片鏈操作流程肚菠。

分片鏈注冊和偽隨機(jī)抽樣過程

首先,我將在全面的代碼審查之前介紹一些概念罩缴。在這篇評論中蚊逢,公證人的概念出現(xiàn)了。公證人意味著分片的參與者箫章,并且是提議者和整理者的組合烙荷。公證人必須在池和注冊表中注冊才能履行其職責(zé)。

池和注冊表是您應(yīng)該了解的概念檬寂。池和注冊表管理公證人的數(shù)據(jù)终抽。池管理公證人的地址,并且Registry管理三個數(shù)據(jù):Deregistered桶至,pool_index和deposit昼伴。Deregistered是公證人被釋放的期間,pool_index是公證人的索引镣屹,deposit是公證人的存款圃郊。公證人只能在取消注冊期間的一段鎖定期后收回押金。

最后女蜈,委員會是一組在特定時期放置在分片上的公證人持舆。委員會注冊通過SMC的偽隨機(jī)抽樣進(jìn)行。公證人必須在委員會注冊才能參與整理驗證伪窖。

1. Register_notary

分片的公證登記從兩次檢查開始逸寓。首先,一個呼叫者的消息應(yīng)該比指定存款(msg.value)(msg.sender)發(fā)送(NOTARY_DEPOSIT)和(2)其次覆山,需要檢查Msg.sender未在注冊表中注冊的值越大竹伸。(3 )

2. Get_member_of_committee

現(xiàn)在注冊了公證人,必須配置委員會以執(zhí)行實際的整理驗證汹买。

Get_member_of_committee選擇公證人在特定時間段對分片進(jìn)行整理驗證佩伤。Get_member_of_committee開始通過檢查Shard_id的條件(6)的期間委員會的數(shù)目等于正確分片鏈的數(shù)目。

以下創(chuàng)建Sampled_index晦毙,它是SMC的偽隨機(jī)采樣生巡。ethereum的智能合約沒有隨機(jī)功能。所以我們通過這個過程制作隨機(jī)值见妒。Sampled_index由三個值組成(Entropy_block_number孤荣,shard_id,index)。Entropy_block_number是前一時段的最后一個塊盐股。這三個值根據(jù)周期钱豁,分片和公證指數(shù)連續(xù)變化,從而實現(xiàn)偽隨機(jī)抽樣疯汁。(19?30)

合并三個值后牲尺,使用sha3創(chuàng)建一個哈希值并除以sample_size。結(jié)果幌蚊,選擇與sampled_index相對應(yīng)的值作為公證人委員會的成員谤碳。(32)

3. Submit_vote

Submitvote在委員會中對公證人進(jìn)行投票,表明提案中包含的交易和數(shù)據(jù)有效溢豆。提出法定人數(shù)超過三分之二的提案作為整理蜒简,其標(biāo)題提交給SMC。

Submitvote首先檢查幾個條件漩仙。重要的是檢查Msg.sender是否是委員會成員(16)并確認(rèn)Notary尚未投票(21)搓茬。公證人必須是委員會成員,不得重復(fù)投票队他。測試結(jié)束后卷仑,更新公證人的投票數(shù)。(24)這意味著公證人的投票得到反映漱挎。

每次調(diào)用Submitvote時系枪,投票計數(shù)都會增加一雀哨。如果投票計數(shù)增加并且大于或等于法定人數(shù)(QUORUM_SIZE磕谅,委員會的三分之二或更多),則采用排序規(guī)則雾棺。(27~31)采用校對意味著準(zhǔn)備好將校對頭發(fā)送給SMC膊夹。

然后將整理期間更新為當(dāng)前期間。最后捌浩,我們將處理并完成Submitvote事件(34-41)放刨。

4. Add_header

Add_header將投票后生成的排序規(guī)則標(biāo)頭發(fā)送到主鏈中的SMC。公證人投票所采用的整理必須經(jīng)過SMC驗證才能通過驗證尸饺。Add_header首先檢查分片ID进统,句點(diǎn)和第一個提交的標(biāo)題(7-12)

每個句點(diǎn)只能在一個分片中提交一個歸類頭。(12)

排序記錄包含三個排序規(guī)則信息(chunk_root浪听,proposer螟碎,is_elected)。(14-17)Chunk_root與塊的transaction_root概念相同迹栓。Chunk_root包含有關(guān)排序規(guī)則中的事務(wù)的信息掉分。

Records_updated_period記錄當(dāng)前時段。現(xiàn)在您已經(jīng)提交了Collation標(biāo)頭,初始化current_vote(24)最后酥郭,您通過處理Addheader事件(27-30)完成

5. Deregister_notary

如果要停止排序規(guī)則驗證华坦,公證人會調(diào)用deregister_notary。Deregister_notary首先檢查msg.sender是否在注冊表中注冊為公證人(2)

然后從公證人池中刪除公證人不从。在公證池中惜姐,將索引值更改為none,并將公證池的大小減去1.(6到8)Notary注冊表通過注銷記錄取消注冊發(fā)生的時間段椿息。

取消注冊記錄已在當(dāng)前期間取消注冊(10)最后载弄,處理DeregisterNotary事件(12-13)

6. Release_notary

取消注冊公證人后,可以通過調(diào)用release_notary來檢索其實際存款撵颊。通過檢查三個條件來啟動Release_notary宇攻。最重要的是檢查Msg.sender是否已經(jīng)取消注冊(3)只有已經(jīng)取消注冊的公證人才可以發(fā)布。在取消注冊期間(4到5)的至少LOCKUP_LENGTH之后允許釋放倡勇。

發(fā)布后逞刷,msg.sender中的所有信息都將從注冊表中刪除。已取消注冊妻熊,pool_index和Msg.sender的存款均初始化為0(10-13)

記錄了Msg.sender已從注冊表中刪除夸浅,并將存款返回給msg.sender(17)最后,通過處理ReleaseNotary事件(19-21)結(jié)束

參考資料

[1]V神相關(guān)twitter
[2]Beacon chain協(xié)議規(guī)范
[3]以太坊2.0分片鏈的詳細(xì)概述
[4]區(qū)塊鏈可擴(kuò)展性解決方案4-1
[5]區(qū)塊鏈可擴(kuò)展性解決方案4-2
[6]Sharding doc
[7]其他資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末扔役,一起剝皮案震驚了整個濱河市帆喇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌亿胸,老刑警劉巖坯钦,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異侈玄,居然都是意外死亡婉刀,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門序仙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來突颊,“玉大人,你說我怎么就攤上這事潘悼÷赏海” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵治唤,是天一觀的道長棒动。 經(jīng)常有香客問我,道長肝劲,這世上最難降的妖魔是什么迁客? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任郭宝,我火速辦了婚禮,結(jié)果婚禮上掷漱,老公的妹妹穿的比我還像新娘粘室。我一直安慰自己,他們只是感情好卜范,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布衔统。 她就那樣靜靜地躺著,像睡著了一般海雪。 火紅的嫁衣襯著肌膚如雪锦爵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天奥裸,我揣著相機(jī)與錄音险掀,去河邊找鬼。 笑死湾宙,一個胖子當(dāng)著我的面吹牛樟氢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播侠鳄,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼埠啃,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了伟恶?” 一聲冷哼從身側(cè)響起碴开,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎博秫,沒想到半個月后潦牛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡台盯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年罢绽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片静盅。...
    茶點(diǎn)故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖寝殴,靈堂內(nèi)的尸體忽然破棺而出蒿叠,到底是詐尸還是另有隱情,我是刑警寧澤蚣常,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布市咽,位于F島的核電站,受9級特大地震影響抵蚊,放射性物質(zhì)發(fā)生泄漏施绎。R本人自食惡果不足惜溯革,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谷醉。 院中可真熱鬧致稀,春花似錦、人聲如沸俱尼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遇八。三九已至矛绘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間刃永,已是汗流浹背货矮。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留斯够,地道東北人次屠。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像雳刺,于是被迫代替她去往敵國和親劫灶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容