當前位置:首頁 > 物聯(lián)網(wǎng) > 區(qū)塊鏈
[導(dǎo)讀] 本篇主要介紹Algorand源碼中關(guān)于agreement的模塊結(jié)構(gòu)及業(yè)務(wù)邏輯架構(gòu),也是源碼中比較難以理解的地方,其它諸如節(jié)點、區(qū)塊、密碼、P2P網(wǎng)絡(luò)的結(jié)構(gòu)與其它區(qū)塊鏈項目都是大同小異,很容易理解

本篇主要介紹Algorand源碼中關(guān)于agreement的模塊結(jié)構(gòu)及業(yè)務(wù)邏輯架構(gòu),也是源碼中比較難以理解的地方,其它諸如節(jié)點、區(qū)塊、密碼、P2P網(wǎng)絡(luò)的結(jié)構(gòu)與其它區(qū)塊鏈項目都是大同小異,很容易理解,這里就不再贅述。

1. 節(jié)點啟動

一切從main開始:

Node模塊中還提供了各種pool,這些pool用于對網(wǎng)絡(luò)中的proposal與vote進行驗證時的任務(wù)隊列。

下面這句開啟我們的agreement協(xié)議:

2. Agreement

協(xié)議是Algorand最重要的一個模塊,在其中用service做一個總的任務(wù)調(diào)試,狀態(tài)機負責對投票進行統(tǒng)計,demux負責具體action的執(zhí)行,從網(wǎng)絡(luò)上收集proposal與vote,是Algorand的二元拜占庭(BBA)實現(xiàn)的部分。

2.1 service

這一個模塊中分為兩大部分:

模塊A:具體的proposal、vote驗證,及轉(zhuǎn)發(fā)

模塊B:狀態(tài)機機制:處理針對每個區(qū)塊共識周期內(nèi)的投票統(tǒng)計

這兩個大模塊之間通過三個chan來進行互相驅(qū)動:

模塊A做完自己的具體工作,會給externalEvent通道寫入event,模塊B從這些通道讀數(shù)據(jù),進行對應(yīng)的統(tǒng)計處理;

模塊B做完自己的統(tǒng)計處理工作,會給acTIon通道寫入對應(yīng)的acTIon,給externalDemuxSignals通道寫入對應(yīng)的signal

這幾個chan促成了模塊A與模塊B之間的互動:

模塊A是input的生產(chǎn)者,是output與ready的消費者;

模塊B正好反過來,是input的消費者,是output與ready的生產(chǎn)者。

2.2 狀態(tài)機

這里的代碼主要是對vote與proposal進行統(tǒng)計,一個區(qū)塊共識周期內(nèi)的兩輪多步投票的統(tǒng)計都是在這里完成的,分為5層狀態(tài)機,每層只負責處理與自己有關(guān)的,上層處理不了的,移交給下層狀態(tài)機,下層狀態(tài)機將處理結(jié)果返回給上層狀態(tài)機,最終發(fā)出對應(yīng)的acTIon。

Player即playmachine實現(xiàn)了整個狀態(tài)機的最頂層功能,負責記錄當前哪個區(qū)塊第幾個階段第幾步的共識環(huán)節(jié),以及超時等基礎(chǔ)信息。

proposalManager是proposal的管理類,在這里監(jiān)測proposal是否已經(jīng)超過閾值,如果超過,向上層發(fā)出proposalCommittable的事件。

voteAggregator是vote的管理類,也是用來監(jiān)測是否vote已經(jīng)超過閾值,向上層發(fā)出threshhold。

proposalStore是round層的主類,主要用來存儲proposal,以存儲的權(quán)重來最終判定proposal是否達到一定數(shù)量。

voteTracker是step層的主類,用來存儲vote,是最初發(fā)出vote超過閾值的地方。

各個類的具體功能,仔細查看代碼并不難理解。

在這一模塊中定義有兩個類,一個是router接口,一個是routerHandle結(jié)構(gòu)體。前者用于真正的event處理,而后者只是為了構(gòu)造一個新的結(jié)構(gòu),加入寫日志功能及標明狀態(tài)機類型,起輔助功能。routerHandle的dispatch最終其實是轉(zhuǎn)到了對應(yīng)的router的dispatch中去執(zhí)行的。

2.3. AcTIon

狀態(tài)機針對vote與proposal進行統(tǒng)計后,會發(fā)出一系統(tǒng)的action,這些都由各個對應(yīng)的類去處理。

在actions.go里會看到不同種類的action,我們只要在對應(yīng)的類里去查就知道如何處理各個action,action就是對應(yīng)我們實際要處理的各個動作。

2.4. 外部消息

在demux.go文件里,next函數(shù)負責從消息通道里獲取消息,轉(zhuǎn)化成對應(yīng)的事件傳給狀態(tài)機

3. MakeProposals與MakeVotes

MakeProposals發(fā)出一個proposal,其實就是提議一個區(qū)塊,同時自己對這個區(qū)塊進行投票。MakeVotes就是對proposal直接進行投票。

pseudonode里MakeProposals,會經(jīng)過pseudonodeVerifier這個service里的這個對象做一個異步隊列:

s.voteVerifier = MakeAsyncVoteVerifier(s.BacklogPool)

verificationPool,是基于backlogpool與POOL來實現(xiàn)的,最后每個任務(wù)的實際執(zhí)行又回到了pseudonode里的execute。兜兜轉(zhuǎn)轉(zhuǎn)一圈,其它都只是工具,主類還是這個pseudonode,在這里makeproposal與makeVote,異步調(diào)用的真正執(zhí)行也是在這個類文件里,對應(yīng)類的execute。。在這個execute里才去做的makeProposal與makeVote.

4. 如何選出領(lǐng)導(dǎo)者

我們知道是對credential,也就是憑證做排序,最小的就是領(lǐng)導(dǎo)者。這些其實發(fā)生在每一個節(jié)點上,在每一個節(jié)點上對所有voteVerified的事件做處理,比較大小得到。

看代碼,在狀態(tài)機proposalMachinePeriod對應(yīng)的主類proposalTracker中,handle處理消息的主函數(shù)

這里的freezer就是proposalSeeker的一個對象,這個類負責記錄credential值最小的那一個,那停止時間是什么呢,就是說這個時間段的結(jié)束時間是什么呢?

proposalFrozenEvent這個消息發(fā)出來后,在狀態(tài)機里

這樣freeze就對leader完成了選定,我們再查什么時候發(fā)出這個事件。這個是由超時函數(shù)來控制的,在主狀態(tài)機里,timeout事件,當step是soft步驟時,超時,就進入cert階段,這時就得終止這個credential最小值的選擇了。

本篇并未對Algorand的每個細節(jié)知識進行深入的闡述,而是從代碼的大框架上做一個簡單說明,希望可以幫助大家理清數(shù)據(jù)流的走向,把握源碼架構(gòu)。
來源;眾享比特?

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉