原創(chuàng)內(nèi)容近零,未經(jīng)允許不得轉(zhuǎn)載
本文對(duì)源碼的解讀為個(gè)人理解,歡迎指正
關(guān)聯(lián)github倉庫:FISCO-BCOS
內(nèi)容太多了抄肖,慢慢深入閱讀久信,持續(xù)更新中...(2020-04-30)
各模塊的功能:
可以簡(jiǎn)單分EVM模塊、賬本模塊漓摩、共識(shí)同步模塊裙士、網(wǎng)絡(luò)模塊
EVM模塊:執(zhí)行交易
- libethcore
- block區(qū)塊定義
- transaction定義
- abi定義
- 并行交易定義
- libevm
- EVMC 提供exec接口
- ExtVmFace 提供evm的call get接口
- VMFactory
- libinterpreter EVM的實(shí)現(xiàn)
- VM 虛擬機(jī)匯編操作的定義
- VMCall call操作對(duì)應(yīng)匯編的定義
- VMOpt copyCode, exp256 操作工具類
- libexecutive 執(zhí)行交易
- Executive: call, create,execute
- ExtVM: 生成調(diào)用結(jié)果或部署結(jié)果
- libtxpool 交易池,待確認(rèn)的交易
- TransactionNonceCheck commonTxCheck
- TxPool insert, clear, pending, verify等對(duì)交易池的操作
賬本模塊:
- libstorage 用不同db存儲(chǔ)的數(shù)據(jù)層
- RocksDBStorage, BasicRocksDB: 基本put commit等操作
- LevelDBStorage: commit, select, setDb..基本put commit等操作
- SQLStorage: 是否與AMDB相關(guān)
- ZdbStorage: 在mysql上管毙,創(chuàng)建預(yù)編譯腿椎、系統(tǒng)表等數(shù)據(jù)表
- CachedStorage: 緩存存儲(chǔ)桌硫,具體未知
- ScalableStorage: 可擴(kuò)展存儲(chǔ),與AMDB proxy相關(guān)啃炸?
- MemoryTable 系統(tǒng)表铆隘,如權(quán)限控制,crud等
- BinLog: binlog handler(decode, encode, ), binlog storage
- SQLBasicAccess: buildSQL, buildConditions
- SQLConnectionPool: 連接池
- Table: table的基本操作setEntries
- libstoragestate MPT存儲(chǔ)
- StorageState MPT操作 定義對(duì)state的操作如,createAccount,createContract,rollback, addBalance
- StorageStateFactory 工廠類
- libledger 數(shù)據(jù)層上的賬本層
- DBInitializer: 初始化storage相關(guān)南用,create實(shí)例
- Ledger, LedgerParam:
- 創(chuàng)建consensusEngine, createRaftSealer, createPBFTSealer, initPBFTEngine
- 初始化blockVerifier, eventLogFilter, initBlockChain, initSync, initTxPool, initSync
- LedgerManager: getGroupListForRpc (.h中獲取BlockChainInterface等face接口)
- libmptstate ethereum原生代碼
- Account 賬戶的定義膀钠,nonce, code, balance等, setCode賬戶代碼
- State, MPTState MPTStateFactory
- MPTStateFactory: getState
- State: addAddress, addBalance/subBalance, createAccount, codeHash, addresHash
- MPTState: commit操作,維持MPT State狀態(tài)樹训枢,State為數(shù)據(jù)層的話托修,MPTState為接口層
共識(shí)同步模塊 共識(shí)時(shí)verifier用到到賬本模塊,用到evm執(zhí)行
- libconsensus
- Sealer 定義sealer操作(打包區(qū)塊)恒界, loadTxs, reportNewBlock, isBlockSyncing
- ConsensusEngineBase: 區(qū)塊校驗(yàn)睦刃、
- pbft:待詳讀 PBFT分組共識(shí)算法、HotStuff共識(shí)算法
- raft:待詳讀
- rotating_pbft(RPBFT) 待詳讀 基于pbft的DPOS
- libblockverifier
- BlockVerifier
- executeBlock
- executeTransaction
- parallelExecuteBlock
- DAG, TxDAG 用于并行交易
- ExecutiveContext 執(zhí)行交易的上下文
- BlockVerifier
- libblockchain
- BlockChainImp 區(qū)塊鏈邏輯的實(shí)現(xiàn)十酣,檢查構(gòu)建創(chuàng)世塊涩拙、獲取區(qū)塊和交易等face接口的實(shí)現(xiàn)
- libsync
- DownloadingBlockQueue, DownloadingTxsQueue 與RLP結(jié)合
- GossipBlockStatus 傳遞區(qū)塊狀態(tài)包
- DownloadRequest, RspBlockReq 下載區(qū)塊請(qǐng)求
- SyncMaster 同步操作定義耸采,send,broadcast
- SyncTransaction 廣播交易
- SyncMsgEngine msg監(jiān)聽、收發(fā)
- SyncMsgPacket 廣播的消息包
- SyncTreeTopology 網(wǎng)絡(luò)拓?fù)鋱D nodeList, nodeInfo
與網(wǎng)絡(luò)模塊
- libnetwork
- ASIOInterface boost的網(wǎng)絡(luò)模塊虾宇,用于socket連接, ssl的websocket連接
- Host: 節(jié)點(diǎn)間握手(Server/Client) 與P2P關(guān)聯(lián)
- handshakeServer ssl
- asyncConnect..
- Session session會(huì)話,監(jiān)聽信息
- PeerWhitelist 白名單
- libp2p
- Service
- heartBeat 與updateStaticNodes保持連接
- asyncSendMessageByNodeID, 或broadcast, multicast
- onMessage, onConnect等
- P2PSession
- heartBeat心跳包
- onTopicMessage等監(jiān)聽topic信息
- message: P2PMessage P2PMessageRC2
- StatisticHandler block/tx sync的設(shè)置嘱朽,如updateDownloadedTxsCount
- Service
- librpc
- SafeHttpServer 接收/回復(fù)rpc API的請(qǐng)求
- Rpc 定義rpc的接口
- JsonHelper HttpMessage等解析工具類
- libchannelserver 基于channel的sdk長連接協(xié)議定義旭贬,與web3sdk中定義類似搪泳,此處為server, sdk為client,可參考另一篇sdk的文章
加密岸军、鑒權(quán)模塊
- libdevcrypto:AES(CBC模式), Hash(md, keccak.sha256, secp256k1)
- gm 國密sm2, sm3, sm4, 國密hash, aes等
- libsecurity 落盤加密
- EncryptedLevelDB leveldb文件加密
- EncryptedFile: decryptContents解密文件
- KeyCenter: KeyCenterHttpClient keyServer密鑰管理中心
特性模塊:
- libprecompiled 預(yù)編譯合約的實(shí)現(xiàn)奋刽,包含接口solidity文件。與table直接交互
- libeventfilter event日志的過濾器
- EventLogFilterManager
- EventLogFilterParams
- EventLogFilter: matches
- libdevcore 地址, base64, log, rlp, trie等定義
- libconfig 全局配置 Global configure of the node
- tools shell腳本艰赞,build_chain, get_node_certs等
- test 測(cè)試類
libinitializer
讀取配置文件佣谐,進(jìn)行初始化,包含:
- Initializer方妖,總的初始化台谍,將P2P, RPC, Secure, Ledger, Log等模塊的初始化集中處理。