Derek解讀Bytom原始碼 孤塊管理

2021-09-30 16:40:24 字數 928 閱讀 1264

本章介紹bytom**孤塊管理

作者使用macos作業系統,其他平台也大同小異

golang version: 1.8

當節點收到了乙個有效的區塊,而在現有的主鏈中卻未找到它的父區塊,那麼這個區塊被認為是「孤塊」。父區塊是指當前區塊的previousblockhash欄位指向上一區塊的hash值。

接收到的孤塊會被儲存在孤塊池中,直到它們的父區塊被節點收到。一旦收到了父區塊,節點就會將孤塊從孤塊池中取出,並且連線到它的父區塊,讓它作為區塊鏈的一部分。

當兩個或多個區塊在很短的時間間隔內被挖出來,節點有可能會以不同的順序接收到它們,這個時候孤塊現象就會出現。

我們假設有三個高度分別為100、101、102的塊,分別以102、101、100的顛倒順序被節點接收。此時節點將102、101放入到孤塊管理快取池中,等待彼此的父塊。當高度為100的區塊被同步進來時,會被驗證區塊和交易,然後儲存到區塊鏈上。這時會對孤塊快取池進行遞迴查詢,根據高度為100的區塊找到101的區塊並儲存到區塊鏈上,再根據高度為101的區塊找到102的區塊並儲存到區塊鏈上。

protocol/orphan_manage.go

type orphanmanage struct 

func neworphanmanage() *orphanmanage

}

func (o *orphanmanage) add(block *types.block) 

o.orphan[blockhash] = block

log.withfields(log.fields).info("add block to orphan")

}

當乙個孤塊被新增到快取池中,還需要記錄該孤塊的父塊hash。用於父塊hash的查詢

Bytom設計結構解讀

設計bytom 資料結構,組合了許多技術點,如 patricia tree,utxo,bvm,account model,protobuf,sql,memcache 等。本文會對一些技術點做以下兩點分析。bytom 為什麼要採用該技術點?bytom 如何應用該技術點?最後介紹綜合這些技術點如何實現b...

Bytom設計結構解讀

設計bytom 資料結構,組合了許多技術點,如 patricia tree,utxo,bvm,account model,protobuf,sql,memcache 等。本文會對一些技術點做以下兩點分析。bytom 為什麼要採用該技術點?bytom 如何應用該技術點?最後介紹綜合這些技術點如何實現b...

Bytom設計結構解讀

設計bytom 資料結構,組合了許多技術點,如 patricia tree,utxo,bvm,account model,protobuf,sql,memcache 等。本文會對一些技術點做以下兩點分析。bytom 為什麼要採用該技術點?bytom 如何應用該技術點?最後介紹綜合這些技術點如何實現b...