FISCO-BCOS源码分析(四)——libethcore

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

FISCO-BCOS源码分析(四)——libethcore

marsCatXDU_李经纬@西电 2018-03-09 01:17:33 浏览2313
展开阅读全文

ABI

ABI=Application Binary Interface

包含了用于序列化和反序列化的函数

基本上用于在合约中调用函数和获取返回的数据。以太坊智能合约是以字节码形式部署在区块链上的,而一个合约中可包含数个函数,ABI就可以用来具体指定你想要调用合约中的哪一个函数,且ABI还能把返回的数据转化成所需要的格式 


BasicAuthority

BasicAuthority继承SealEngineBase,SealEngineBase继承SealEngineFace

此为PoA所使用的封包引擎,重写了SealEngineBase中的一些函数

PoA=Proof of Authority,由预先设定好的Authority Nodes产生Block


BlockHeader

包含一个区块头的所有数据

可以生成、解析、用给出的区块序列化数据填充区块头。可以手动对填充数据进行验证。

也可以以父区块的区块头对象为模板生成。

可以在没有nonce的情况下确定头hash以进行封包

其中信息包含:

parentHash, sha3Uncles, author, stateRoot, transactionsRoot, receiptsRoot, logBloom, difficulity, number, gasLimit, gasUsed, timestamp, extraData, gen_idx, node_list

其中,gen_idx是“挖矿者索引”,node_list是参与共识的公钥列表。(EOA账户由地址作索引,地址为公钥的后20位)

此外,还有额外的RLP编码header域(private)


ChainOperationParams(区块链操作参数)

其中包含一个“预编译合约”类(PrecompiledContract);

在ChainOperationParams类中,存储了:封包器(sealEngine,也叫sealer)名称、通用的区块链参数(区块回报、最大额外数据尺寸、账户起始nonce等)、链参数中指定的预编译合约、额外参数(如Ethash的具体参数:min/maxGasLimit、gasLimitBounddDivisor、minimumDifficulty、difficultyBoundDivisor、durationLimit)以及各种其他(大概是)与合约本身相关的参数(日志要求、加密相关、端口配置、钱包、密钥/数据目录、logFileConf)还有网络id、区块间隔时间、对非记账者是否广播等


Common

定义了各种“普通而通用”的:变量、别名、结构、枚举类

变量包含诸如:协议版本、组件版本、一些区块的区块号

别名如nonce、区块号、logBloom等

枚举如检查场景、ImportResult

结构、类有:transaction、导入需求、交易的骨架、节点配置信息、挖矿工作进展、要是炸了咋办(IfDropped)


CommonJS

包含字符串到Public(h512)、Secret(h256)、Address(h160)的转换函数、u256到人类友好字符串的转换函数、js到区块号的转换函数


Exceptions

异常


ICAP(Inter exchange Client Address Protocol,交换客户端地址协议)

封装了一个ICAP地址。可以被编码、解码、查询和检查

ICAP是一个与IBAN(International Bank Account Number)兼容的系统,用于引用、进行以太坊客户端账户的交易,可以简化资金转移过程。另可有效方便KYC(Know Your Customer)和AML(Anti Money Laundering,反洗钱)


KeyManager

以太坊密码加密密钥高级管理器

如果已存在数据库,就直接接受用户输入的主密码。如果没有,就让用户设置一个


Precompiled

与预编译有关


SealEngine

封包引擎

包含了封包所需要的函数

初始化、验证、从父填充、验证交易、创建 SealEngineFace、创建evmSchedule


Transaction

TransactionBase:用于编码一个交易,准备好进行导出 或 是【刚刚从RLP导入的】

1.创建交易

可以基于“交易骨架(transaction skeleton)”和“optional secret”创建交易;

可创建信息调用交易、合约创建交易;

可根据给定RLP创建交易;

对交易进行签名;

2.检查两个交易是否相同

3.可通过签名+hash确定交易发送者(transaction sender)地址

4.强制指定sender

5.将自己序列化为RLP流

6.与转移eth、使用gas相关的值的获取


网友评论

登录后评论
0/500
评论
marsCatXDU_李经纬@西电
+ 关注