国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

以太坊源碼分析:共識(shí)(1)礦工

tylin / 2270人閱讀

摘要:接下來(lái)我們將從以下角度介紹礦工角色。我們分別使用礦長(zhǎng)副礦長(zhǎng)礦工進(jìn)行類(lèi)比。副礦長(zhǎng),負(fù)責(zé)具體挖礦工作的安排,把挖礦任務(wù)安排給。礦工的主要函數(shù)介紹和的主要函數(shù),他們是礦工的具體運(yùn)作機(jī)制。負(fù)責(zé)處理外部事件。

前言

礦工在PoW中負(fù)責(zé)了產(chǎn)生區(qū)塊的工作,把一大堆交易交給它,它生成一個(gè)證明自己做了很多工作的區(qū)塊,然后將這個(gè)區(qū)塊加入到本地區(qū)塊鏈并且廣播給其他節(jié)點(diǎn)。

接下來(lái)我們將從以下角度介紹礦工:

角色。礦工不是一個(gè)人,而是一類(lèi)人,可以把這一類(lèi)人分成若干角色。

通過(guò)了解一個(gè)區(qū)塊產(chǎn)生的主要流程,掌握礦工的工作流。

通過(guò)了解礦工的主要函數(shù)介紹,掌握礦工的主要挖礦機(jī)制。

介紹礦工由哪些部分組成,會(huì)和哪些其他模塊進(jìn)行交互,這些部分是如何協(xié)作產(chǎn)生區(qū)塊的。

角色

有3種角色:miner、worker、agent。我們分別使用礦長(zhǎng)、副礦長(zhǎng)、礦工進(jìn)行類(lèi)比。

miner:是礦長(zhǎng),負(fù)責(zé)管理整個(gè)礦場(chǎng)的運(yùn)作,比如:?jiǎn)?dòng)、停止挖礦,處理外部請(qǐng)求,設(shè)置挖礦獲得的獎(jiǎng)勵(lì)的錢(qián)包地址等等。

worker:副礦長(zhǎng),負(fù)責(zé)具體挖礦工作的安排,把挖礦任務(wù)(Work)安排給agent。

agent:真實(shí)的礦工,他們負(fù)責(zé)挖礦,把自己的勞動(dòng)成果(Result)交給worker,agent默認(rèn)只有1個(gè),可以通過(guò)API創(chuàng)建多個(gè)。

一個(gè)區(qū)塊產(chǎn)生的主要流程

實(shí)際的挖礦過(guò)程基本不涉及miner,只涉及worker、agent和engine,engine是共識(shí)引擎模塊,我們利用下圖介紹生成一個(gè)區(qū)塊的主要流程。

挖礦過(guò)程中只涉及engine的3個(gè)接口:1)Prepare()挖礦前的準(zhǔn)備工作,2)Finalize()形成一個(gè)基本定型的區(qū)塊,3)Seal()形成最終的區(qū)塊。

worker把區(qū)塊頭、交易、交易執(zhí)行的收據(jù)等傳遞給engine.Finalize。

engine.Finalize返回一個(gè)block,該block的header中缺少NonceMixDigest,這兩個(gè)值是挖礦獲取的。

worker把block封裝到work,把work發(fā)送給所有的agent。

agent.update把work傳遞給agent.mine。

agent.mine把work傳遞給engine.Seal,調(diào)用engine.Seal挖礦。

engine.Seal把NonceMixDigest填到區(qū)塊頭,生成一個(gè)new block交給agent.mine.

agent.mine把new block封裝成Result,發(fā)送給worker。

礦工的主要函數(shù)

介紹miner、worker和agent的主要函數(shù),他們是礦工的具體運(yùn)作機(jī)制。

miner的主要函數(shù)

主要關(guān)注2個(gè)函數(shù):

New():負(fù)責(zé)創(chuàng)建miner。還創(chuàng)建1個(gè)worker和1個(gè)agent,但agent還可以通過(guò)API創(chuàng)建,然后啟動(dòng)update函數(shù)。

update():負(fù)責(zé)關(guān)注downloader的3個(gè)事件:StartEvent、DoneEvent、FailedEvent。StartEvent是開(kāi)始同步區(qū)塊,必須停止挖礦,DoneEvent和FailedEvent是同步成功或者失敗,是同步的結(jié)束,已經(jīng)可以挖礦了。表明:挖礦和同步區(qū)塊不可同時(shí)進(jìn)行,盡量降低了區(qū)塊沖突的可能。

worker的主要函數(shù)

主要是3個(gè)函數(shù):

commitNewWork():負(fù)責(zé)生成work,分配agent。這個(gè)階段做了很多工作,調(diào)用Engine.Prepare進(jìn)行準(zhǔn)備工作,創(chuàng)建Header,執(zhí)行交易,獲取Uncle,使用Engine.Finalize形成“基本定型”的臨時(shí)區(qū)塊,創(chuàng)建Work,最后把work傳遞給agent。另外commitNewWork存在多處調(diào)用,并且worker有waitupdate另外2個(gè)協(xié)程,他們都會(huì)調(diào)用commitNewWork,所以存在臨界區(qū)需要謹(jǐn)慎加鎖。

update():負(fù)責(zé)處理外部事件。它是死循環(huán),主要處理3種事件:1)ChainHeadEvent,有了新區(qū)塊頭,所以得切換到挖下一個(gè)高度的區(qū)塊,2)ChainSideEvent,收到了uncle區(qū)塊,緩存起來(lái),3)TxPreEvent,預(yù)處理交易,如果在挖礦執(zhí)行commitNewWork,如果未挖礦,則交易設(shè)置為未決狀態(tài)。

wait():負(fù)責(zé)處理agent挖礦的結(jié)果。它是死循環(huán),一直等待接收agent發(fā)回的result,然后把區(qū)塊加入到本地?cái)?shù)據(jù)庫(kù),如果沒(méi)有問(wèn)題,就發(fā)布NewMinedBlockEvent事件,通告其他節(jié)點(diǎn)挖到了一個(gè)新塊。

agent的主要函數(shù)

主要2個(gè)函數(shù):

update():負(fù)責(zé)接收worker發(fā)來(lái)的任務(wù)(work)。它是死循環(huán),把work交給mine去挖礦。

mine():負(fù)責(zé)挖礦。它擁有挖礦的能力,調(diào)用Engine.Seal挖礦,如果挖礦成功則生成result,發(fā)送給worker。

最后兩張圖片來(lái)源網(wǎng)絡(luò),侵刪。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/24398.html

相關(guān)文章

  • 以太POA共識(shí)機(jī)制Clique源碼分析

    摘要:以太坊中除了基于運(yùn)算能力的外,還有基于權(quán)利證明的共識(shí)機(jī)制,是以太坊的共識(shí)算法的實(shí)現(xiàn),這里主要對(duì)的相關(guān)源碼做一個(gè)解讀分析。檢查包頭中包含的簽名是否滿(mǎn)足共識(shí)協(xié)議 以太坊中除了基于運(yùn)算能力的POW(Ethash)外,還有基于權(quán)利證明的POA共識(shí)機(jī)制,Clique是以太坊的POA共識(shí)算法的實(shí)現(xiàn),這里主要對(duì)POA的Clique相關(guān)源碼做一個(gè)解讀分析。 Clique的初始化在 Ethereum.S...

    Stardustsky 評(píng)論0 收藏0
  • 以太源碼分析—挖礦與共識(shí)

    摘要:下面來(lái)看看具體是怎么實(shí)現(xiàn)接口的可以看到,啟動(dòng)了多個(gè)線(xiàn)程調(diào)用函數(shù),當(dāng)有線(xiàn)程挖到時(shí),會(huì)通過(guò)傳入的通道傳出結(jié)果。可以看到在主要循環(huán)中,不斷遞增的值,調(diào)用函數(shù)計(jì)算上面公式中的左邊,而則是公式的右邊。 前言 挖礦(mine)是指礦工節(jié)點(diǎn)互相競(jìng)爭(zhēng)生成新區(qū)塊以寫(xiě)入整個(gè)區(qū)塊鏈獲得獎(jiǎng)勵(lì)的過(guò)程.共識(shí)(consensus)是指區(qū)塊鏈各個(gè)節(jié)點(diǎn)對(duì)下一個(gè)區(qū)塊的內(nèi)容形成一致的過(guò)程在以太坊中, miner包向外提供挖...

    walterrwu 評(píng)論0 收藏0
  • 以太源碼分析共識(shí)(3)Ethash

    摘要:在中,該隨機(jī)數(shù)稱(chēng)為,它需要滿(mǎn)足一個(gè)公式其中,去除區(qū)塊頭中生成的哈希值,見(jiàn)。固定值,生成的哈希值的最大取值。哈希值滿(mǎn)足條件的概率是,礦工需要進(jìn)行次的判斷,才有可能找到一個(gè)符合條件的,當(dāng)前以太坊難度為。 前言 Ethash實(shí)現(xiàn)了PoW,PoW的精妙在于通過(guò)一個(gè)隨機(jī)數(shù)確定,礦工確實(shí)做了大量的工作,并且是沒(méi)有辦法作弊的。接下來(lái)將介紹: Ethash的挖礦本質(zhì)。 Ethash是如何挖礦的。 如...

    huashiou 評(píng)論0 收藏0
  • Nervos CKB 共識(shí)協(xié)議 NC-Max:突破 Nakamoto Consensus 吞吐量的極

    摘要:最后,在中采用了一個(gè)的變體作為共識(shí)協(xié)議,擁有更高的吞吐量。知識(shí)點(diǎn),在比特幣改進(jìn)協(xié)議中提出,能夠減少網(wǎng)絡(luò)節(jié)點(diǎn)廣播區(qū)塊所需的帶寬數(shù)量。下面我們來(lái)進(jìn)一步分析這些協(xié)議的安全性功能性和吞吐量。當(dāng)這些安全性假設(shè)被違反,會(huì)為這些協(xié)議帶來(lái)災(zāi)難性的后果。 帶寬實(shí)際上是區(qū)塊鏈吞吐量的最大限制,在美國(guó)舊金山舉辦的 Scaling Bitcoin Meetup 中,Nervos & Cryptape 研究員...

    用戶(hù)83 評(píng)論0 收藏0
  • 突破中本聰共識(shí)!公鏈 CKB 公布 NC-Max 共識(shí)協(xié)議

    摘要:最后,在中采用了一個(gè)的變體作為共識(shí)協(xié)議,擁有更高的吞吐量。知識(shí)點(diǎn),在比特幣改進(jìn)協(xié)議中提出,能夠減少網(wǎng)絡(luò)節(jié)點(diǎn)廣播區(qū)塊所需的帶寬數(shù)量。 本期秘猿科技區(qū)塊鏈小課堂將會(huì)就 PoW 共識(shí)的突破進(jìn)行展開(kāi)。帶寬實(shí)際上是區(qū)塊鏈吞吐量的最大限制,在美國(guó)舊金山舉辦的 Scaling Bitcoin Meetup 中,秘猿科技研究員張韌從「帶寬利用率」角度分析了諸多共識(shí)協(xié)議的效率和可行性。理解本文需要以下知...

    zhonghanwen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<