博主才疏学浅,诚请高人指点,将不胜感激
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
SystemContract、SystemContractApi
系统合约主API集,SystemContract继承SystemContractApi。
Transaction
编码交易,准备 导出 或 刚从RLP导入。
Transaction对象可以从一些事务实例化(如message-call,contract-creaction)也可以从给定的RLP实例化。
TransactionQueue
交易的队列。每个交易都以RLP存储。各个交易按nonce难度和gas价格排序。其内包含管理队列的函数和变量,可以获取队列的各种状态,可以对队列中的区块进行优先级排序。定义了已导入交易、未决交易的结构。
TransactionReceipt
收据类,获取并存储收据信息。其存储的变量包含 stateRoot、gasUsed、contractAddress、bloom、log。
VerfiedBlcok
定义了已验证区块结构,将区块数据和验证的信息/交易一同存储。