軟件環(huán)境
go:1.9.2
ethereum&GETH:v1.8.11-unstable
名詞解釋:
以太坊有三種同步的模式撤逢,full, fast, light
full 模式
從開始到結(jié)束注竿,獲取區(qū)塊的header压状,獲取區(qū)塊的body,從創(chuàng)始塊開始校驗每一個元素甫窟,需要下載所有區(qū)塊數(shù)據(jù)信息密浑。速度最慢,但是能獲取到所有的歷史數(shù)據(jù)蕴坪。
//命令:
geth --syncmode full
fast模式
獲取區(qū)塊的header肴掷,獲取區(qū)塊的body,在同步到當前塊之前不處理任何事務(wù)背传。下載的數(shù)據(jù)大小約為50GB(截止2018-02-04)呆瞻。然后獲得一個快照,此后径玖,像full節(jié)點一樣進行后面的同步操作痴脾。這種方法用得最多,目的在不要在意歷史數(shù)據(jù)梳星,將歷史數(shù)據(jù)按照快照的方式赞赖,不逐一驗證,沿著區(qū)塊下載最近數(shù)據(jù)庫中的交易冤灾,有可能丟失歷史數(shù)據(jù)前域。此方法可能會對歷史數(shù)據(jù)有部分丟失,但是不影響今后的使用韵吨。
(注意:挖礦節(jié)點必須是 full 匿垄,否則會增加塊廣播給其他人的風(fēng)險)
//命令:
//使用此模式時注意需要設(shè)置–cache,默認16M,建議設(shè)置為1G(1024)到2G(2048)
geth –fast –cache 512
light模式
僅獲取當前狀態(tài)椿疗。驗證元素需要向full節(jié)點發(fā)起相應(yīng)的請求漏峰。
//命令:
geth --light
重點說明:
> geth help
DEPRECATED OPTIONS:
--fast Enable fast syncing through state downloads (replaced by --syncmode)
--light Enable light client mode (replaced by --syncmode)
在Geth1.5以上版本,--fast參數(shù)已經(jīng)改為--syncmode=fast届榄,當然--fast依舊有效浅乔。 大家應(yīng)該注意到?jīng)]有--full選項,因為以太坊同步區(qū)塊默認是full铝条。
--syncmode "fast" Blockchain sync mode ("fast", "full", or "light")
注意:默認情況下full模式靖苇,在以太坊源碼中,如果本地當前塊是number 0 (創(chuàng)始區(qū)塊)攻晒,不管指定的哪種模式都默認是 --fast模式顾复,當geth第二次啟動的時候班挖,默認情況下full模式同步鲁捏。
因此很多小伙伴在沒有指定同步模式的時候,在同步區(qū)塊的前期非诚糗剑快给梅,當再次重啟機器或者斷掉geth再啟動發(fā)現(xiàn)更新區(qū)塊速度非常慢,就是這個原因
此判斷代碼片段位置
handler.go 代碼中 新建以太坊子協(xié)議管理器
func NewProtocolManager()
// Figure out whether to allow fast sync or not
if mode == downloader.FastSync && blockchain.CurrentBlock().NumberU64() > 0 {
log.Warn("Blockchain not empty, fast sync disabled")
mode = downloader.FullSync
}
if mode == downloader.FastSync {
manager.fastSync = uint32(1)
}