FISCO-BCOS源码分析(三)

  1. 云栖社区>
  2. 博客>
  3. 正文

FISCO-BCOS源码分析(三)

marsCatXDU_李经纬@西电 2018-02-27 01:59:01 浏览1610

博主才疏学浅,诚请高人指点,将不胜感激

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

GenericFarm

这是一个矿工集体(矿池?)

这个类可以用待封包的数据包设定挖矿任务,开始进行并检查工作状况,并在获得结果后进行验证

 

GenericMiner

管理一或多个矿工

 

GenesisInfo

存储创世区块信息

 

Interface

以太坊接口的主API集,各种操作基本全了

包含接受各种信息(如交易等)、执行给定调用、进行给定创建任务(如合约)、导入RLP数据(如交易、整个区块)、预估gas消耗、各种state查询的API、log的API、安装/卸载/查询监视、区块查询API、杂项API(获取地址,封包,获取各种id)等

 

NodeConnParamsManager

节点配置管理

可以添加/删除节点,发起网络同步、连接节点、断开节点,获取各种数据(公钥、索引、矿工数据、账户类型等)

 

NodeConnParamsManagerApi 管理API集

 

NonceCheck 检查nonce

 

StatLog

用于随时输出log。状态流程中的每一步都有对应的用于输出log的类来处理

PBFT状态流:

start -> seal -> exec -> collectSign -> collectCommit -> blkToChain -> destory

start -> exec -> collectSign -> collectCommit -> blkToChain -> destory

交易状态流:

init -> toChain -> destory

 

SystemContractSystemContractApi

系统合约主API集,SystemContract继承SystemContractApi。

 

Transaction

编码交易,准备 导出 或 刚从RLP导入。

Transaction对象可以从一些事务实例化(如message-call,contract-creaction)也可以从给定的RLP实例化。

 

TransactionQueue

交易的队列。每个交易都以RLP存储。各个交易按nonce难度和gas价格排序。其内包含管理队列的函数和变量,可以获取队列的各种状态,可以对队列中的区块进行优先级排序。定义了已导入交易、未决交易的结构。

 

TransactionReceipt

收据类,获取并存储收据信息。其存储的变量包含 stateRoot、gasUsed、contractAddress、bloom、log。

 

VerfiedBlcok

定义了已验证区块结构,将区块数据和验证的信息/交易一同存储。