FISCO-BCOS源碼各模塊的簡(jiǎn)單理解

原創(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í)行交易的上下文
  • 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
  • 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等模塊的初始化集中處理。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市趁蕊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌仔役,老刑警劉巖掷伙,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異又兵,居然都是意外死亡任柜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門沛厨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宙地,“玉大人,你說我怎么就攤上這事逆皮≌啵” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵电谣,是天一觀的道長秽梅。 經(jīng)常有香客問我,道長剿牺,這世上最難降的妖魔是什么企垦? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮晒来,結(jié)果婚禮上钞诡,老公的妹妹穿的比我還像新娘。我一直安慰自己湃崩,他們只是感情好荧降,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著竹习,像睡著了一般誊抛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上整陌,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天拗窃,我揣著相機(jī)與錄音,去河邊找鬼泌辫。 笑死随夸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的震放。 我是一名探鬼主播宾毒,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼殿遂!你這毒婦竟也來了诈铛?” 一聲冷哼從身側(cè)響起乙各,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤耳峦,失蹤者是張志新(化名)和其女友劉穎焕毫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體邑飒,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疙咸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了聚唐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腔召。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖亲桦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情客峭,我是刑警寧澤抡柿,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站备蚓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏郊尝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一流昏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谚鄙,春花似錦刁绒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽互例。三九已至,卻和暖如春媳叨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背糊秆。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痘番,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓伍纫,卻偏偏與公主長得像昂芜,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子泌神,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353