追趕的兩種模式
引導(bootstrapping)就是從零走到當前版本,做法有兩種,而且根本不同。 重放歷史。 從創世開始往前推進:要嘛把每筆交易重新執行一遍,要嘛套用執行早已產生的輸出。結果是一個持有完整歷史的節點,每個版本、每份證明、每筆交易都在。這條路也很慢,而且這條鏈每多跑一天就更慢。 下載當前狀態。 跳過歷史,直接取最新版本上的狀態鍵與值,對照已提交的根驗證。節點只花一小部分時間就追上了當下,代價是對這條鏈怎麼走到這裡一無所知。新節點
引導模式
重放歷史從創世開始重新執行,或套用已儲存的輸出很慢,而且這條鏈每多跑一天就更慢
下載當前狀態最新版本上的鍵與值,對照已提交的根驗證只花一小部分時間就追上當下
當前版本之後持續同步
兩條路徑並不等價下載當前狀態起來的節點,提供不了歷史查詢,也答不出某個部位是怎麼走到今天這一步的。為索引器或稽核供給資料的節點,需要的正是被跳過的那段歷史。
這是維運決定,不是一個可以不加思索就接受的預設值。節點若是下載當前狀態起來的,就提供不了歷史查詢,也答不出某個部位是怎麼走到今天這一步的:它沒有歷史可讀。為索引器或稽核流程提供服務的節點,需要的正是被跳過的那段歷史。
保持在當前版本
到了當前版本之後,節點靠消費陸續到達的已提交區塊跟上進度,同樣可以選執行交易或套用輸出,驗證強度與速度之間還是同一套取捨。 和引導的差別在於,這裡的落差小而且恆定,不是大而且逐漸縮小。節點落後到一定程度就重新走引導路徑,不會想用增量方式去補一個任意大小的落差。資料如何流動
同步不是一個節點向另一個節點索要一段區塊,而是拆成若干層,好讓任何單一對等節點都不會變成相依對象,也讓任何單點故障都拖不停進度。
值得理解的一個推論是:正在同步的節點並不信任對等節點。每個資料塊到達時都帶著一份證明,對照的是網路已經提交的根;對等節點若給出不一致的資料,直接拒絕,不會採信。選擇對等節點是效能決定,不是信任決定。
驗證
狀態同步裡沒有任何東西是憑發送方是誰就接受的。 狀態值對照已提交的狀態根驗證,交易和輸出對照累加器驗證。節點引導完成之後,狀態的根會和驗證者法定人數所簽署的一致,快速路徑安全就安全在這裡:下載當前狀態跳過的是歷史,不是驗證。後續閱讀
儲存與證明
使同步可驗證的那些結構。
運行節點
節點角色,以及如何諮詢節點營運事宜。
網路拓撲
正在同步的對等節點在和哪一層節點通訊。
索引器
歷史能回答而當前狀態無法回答的問題。