天天看點

FISCO-BCOS源碼分析(三)

部落客才疏學淺,誠請高人指點,将不勝感激

Client

Client是與以太坊互動的主API集,具有對區塊鍊執行各種操作的函數

如擷取鍊上資訊,準備區塊進行導入,進行給定的調用,擷取gas相關資料,擷取交易/區塊隊列資訊,擷取/設定網絡id,配置并進行封包操作,并自帶幾種過濾器友善擷取資訊

ClientBase

繼承Interface類,Interface類是接入以太坊的接口集。

其意義正如其名——供Client繼承

ClientTest

用于Client的測試,繼承Client

CodeSizeCache

用于存儲從代碼hash到代碼大小的映射。緩存被裝滿後會随機移除一個元素(中獎元素通過h256::random()選出……)

CommonNet

存了一些規定的最大值(包括會發送的BlockHashes數量、會請求的GetBlockHashes數量、會發送的區塊數量、會接收的區塊數量(使用GetChain)、會發送的最大packet尺寸、會發送的最大節點數量、會發送的最大收據數量)

枚舉了子協定包類型(SubprotocolPacketType),其中的值是一些可能的“種類”。大概是在某地方用做标記。

枚舉了Asking類,裡面包含諸如State、BlockHeader、Receipts這樣存有意義資訊的類

枚舉了SyncState類,裡面有各種同步狀态

還存了個SyncStatus結構,記錄同步狀态資訊。包含起始、目前、最大區塊号等資訊

Defaults

包含建立指向自身的指針、設定資料庫路徑、擷取資料庫路徑的函數。

EthereumHost

以太坊host類。用于和節點們同步,發送新區塊和新交易,管理已連接配接節點的參數配置、設定topic消息、鍊上鍊下通訊、擷取nodeID清單等

(全部方法線程不安全)

EthereumHost類的直接執行個體化是啟動伺服器,但不進行監聽

(.cpp中還定義了EthereumPeerObserver、EthereumHostData、ChannelMessageObserver,這些個類所繼承的類都在EthereumPeer中進行定義)

EthereumPeer

包含:本節點的建立和銷毀,設定節點資訊,從其他節點請求資料,設定topic相關,設定/擷取目前節點屬性,設定節點關注的topics清單等。

另,存儲了一些目前節點的資訊(如本節點最新區塊hash、節點創世hash、鍊高度等)

Executive

資訊調用/合約建立指令執行器。(Message-call/contract-creation)可以執行交易。

Executive可以被建立在給定區塊結尾state,也可以被建立在給定區塊内特定的交易的state。

另,executive對象可以追蹤VM指令的執行,可以收集結果,也可以撤銷交易帶來的改變。

有兩個方式使用此類——作為交易 的執行 或 調用/建立 的執行

第一種:構造完成後依次執行 initialize()、 execute(),并以 finalize() 結束。僅當 finalize() 傳回假時調用 go()(調用所使用的Transaction以給定RLP為參數執行個體化而來)

第二種:構造完成後依次 call()或create() ,并以 accrueSubState() 結束。僅當 call()/create() 傳回假時調用 go()

ExtVM

一個外部接口,為VM提供到世界狀态的連接配接

可以讀存儲位址,可以在存儲中寫入值

擷取位址中的代碼,建立合約,建立資訊調用,讀位址中的餘額

“自殺”掉與給定位址相關的合約(分明是他殺……)

GasPricer

瓦斯計價器

BasicGasPricer繼承GasPricer

<b>GenericFarm</b>

這是一個礦工集體(礦池?) 這個類可以用待封包的資料包設定挖礦任務,開始進行并檢查工作狀況,并在獲得結果後進行驗證

<b>GenericMiner</b>

管理一或多個礦工

<b>GenesisInfo</b>

存儲創世區塊資訊

<b>Interface</b>

以太坊接口的主API集,各種操作基本全了 包含接受各種資訊(如交易等)、執行給定調用、進行給定建立任務(如合約)、導入RLP資料(如交易、整個區塊)、預估gas消耗、各種state查詢的API、log的API、安裝/解除安裝/查詢監視、區塊查詢API、雜項API(擷取位址,封包,擷取各種id)等

<b>NodeConnParamsManager</b>

節點配置管理 可以添加/删除節點,發起網絡同步、連接配接節點、斷開節點,擷取各種資料(公鑰、索引、礦工資料、賬戶類型等)

<b>NodeConnParamsManagerApi</b> 管理API集

<b>NonceCheck</b> 檢查nonce

<b>StatLog</b>

用于随時輸出log。狀态流程中的每一步都有對應的用于輸出log的類來處理 PBFT狀态流: start -&gt; seal -&gt; exec -&gt; collectSign -&gt; collectCommit -&gt; blkToChain -&gt; destory 或 start -&gt; exec -&gt; collectSign -&gt; collectCommit -&gt; blkToChain -&gt; destory 交易狀态流: init -&gt; toChain -&gt; destory

<b>SystemContract</b>、<b>SystemContractApi</b>

系統合約主API集,SystemContract繼承SystemContractApi。

<b>Transaction</b>

編碼交易,準備 導出 或 剛從RLP導入。 Transaction對象可以從一些事務執行個體化(如message-call,contract-creaction)也可以從給定的RLP執行個體化。

<b>TransactionQueue</b>

交易的隊列。每個交易都以RLP存儲。各個交易按nonce難度和gas價格排序。其内包含管理隊列的函數和變量,可以擷取隊列的各種狀态,可以對隊列中的區塊進行優先級排序。定義了已導入交易、未決交易的結構。

<b>TransactionReceipt</b>

收據類,擷取并存儲收據資訊。其存儲的變量包含 stateRoot、gasUsed、contractAddress、bloom、log。

<b>VerfiedBlcok</b>

定義了已驗證區塊結構,将區塊資料和驗證的資訊/交易一同存儲。
上一篇: Office之Word