超級賬本原始碼解析之MVCC

2021-10-24 07:16:21 字數 2161 閱讀 9216

本系列目錄:超級賬本原始碼(v1.3)解析目錄

當peer收到leader發來的block後,需要進行vscc、mvcc、commit三步操作。

這個過程,下面分析mvcc的核心**(hlf v1.3)。

gossip/state/state.golisten函式中收到payload(其中有block和private data),通過queuenewmessage將其放入payloads中等待後續處理。

然後在deliverpayloads函式中開始處理payloads中的payload,得到block和pvtdata後,做了一些簡單的檢查,之後呼叫commitblock函式。

commitbblock中,呼叫了gossip/privdata/coordinator.go中的storeblock函式和updateledgerheight函式(todo)。

storeblock函式中,先進行了【vscc】,然後呼叫core/ledger/kvledger/lv_ledger.go中的commitwithpvtdata函式,該函式第一步就是先做mvcc。

commitwithpvtdata主要做了三件事情:1,mvcc(validateandprepare);2,儲存block(commitwithpvtdata);3,更新world state資料庫(l.txtmgmt.commit)。(可選的4,更新history資料庫l.historydb.commit

core/ledger/kvledger/txmgmt/txmgr/lockbasedtxmgr/lockbased_txmgr.govalidateandprepare函式中:

a. 呼叫txmgr.pvtdatapurgemgr.waitforpreparetofinish()(todo)

b. 呼叫core/ledger/kvledger/txmgmt/validator/valimpl/default_impl.govalidateandpreparebatch函式(核心),

c. 呼叫invokenamespacelisteners(todo)

validateandpreparebatch函式中,

a. 先呼叫preprocessprotoblock函式對待驗證的block做了預處理,包括去掉了vscc過程中被標記為無效的tx,驗證了有效tx的write set的有效性;

b. 然後呼叫了core/ledger/kvledger/txmgmt/validator/statebasedval/state_based_validator.go中的validateandpreparebatch函式,該函式對每乙個tx呼叫了validateendorsertx驗證讀寫集,檢查通過的tx將讀寫集合並到batch一起返回,最後更新了txmgr.current = ¤t用於【commit】階段更新world state db.

c. 接著呼叫了validateandpreparepvtbatch驗證了private read/write set 的雜湊的版本

d. 最後根據mvcc的驗證結果更新了block的metadata(tx是否有效)

validateendorsertx函式中,實際呼叫了validatetx進行驗證。validatetx首先檢查了read set的版本,然後檢查了range query的key的版本,最後檢查了private reads的hash的版本。

KCP C 版本 原始碼解析

kcp send 對使用者的資料根據mss值進行分片,然後將分片後的資料放入snd queue。kcp flush,每次被呼叫的時候遍歷出隊snd queue 條件為snd nxt snd una cwnd 對每個seg的sn與una編號,cmd ikcp cmd push,進行初始化後,放入snd...

Spring原始碼解析之 Aop原始碼解析(2)

spring aop 更多的是oop開發模式的乙個補充,幫助oop以更好的方式來解決對於需要解決業務功能模組之上統一管理 的功能 以一副圖來做為aop功能的說明更直觀些。對於類似系統的安全檢查,系統日誌,事務管理等相關功能,物件導向的開發方法並沒有更好的解決方法 aop引入了一些概念。更多的是spr...

原始碼解析 JDK原始碼之LinkedHashMap

linkedhashmap原始碼,基於 jdk1.6.43 他繼承了hashmap,並且實現了插入和訪問的有序功能 public class linkedhashmapextends hashmapimplements map 其也有乙個entry內部類,繼承了 hashmap 的entry 內部類...