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

简介: libethcore是区块链核心数据结构目录。如ABI、密钥管理、区块头、预编译、交易结构等等

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相关的值的获取


相关文章
|
12月前
|
存储 算法
TreadLocal源码分析
TreadLocal源码分析
vivid源码分析
vivid源码分析
76 0
|
存储 SQL 分布式计算
【源码解读】| LiveListenerBus源码解读(下)
【源码解读】| LiveListenerBus源码解读
139 0
【源码解读】| LiveListenerBus源码解读(下)
|
缓存 分布式计算 监控
【源码解读】| LiveListenerBus源码解读(上)
【源码解读】| LiveListenerBus源码解读
151 0
【源码解读】| LiveListenerBus源码解读(上)
|
存储 分布式计算 监控
【源码解读】|SparkEnv源码解读
【源码解读】|SparkEnv源码解读
115 0
|
存储 Java 应用服务中间件
SpringMVC源码分析 RequestContextHolder使用与源码分析
SpringMVC源码分析 RequestContextHolder使用与源码分析
SpringMVC源码分析 RequestContextHolder使用与源码分析
|
存储 算法 测试技术
源码分析 RateLimiter SmoothBursty 实现原理(文末附流程图)
源码分析 RateLimiter SmoothBursty 实现原理(文末附流程图)
源码分析 RateLimiter SmoothBursty 实现原理(文末附流程图)
|
存储 算法
源码分析RateLimiter SmoothWarmingUp 实现原理(文末附流程图)
源码分析RateLimiter SmoothWarmingUp 实现原理(文末附流程图)
源码分析RateLimiter SmoothWarmingUp 实现原理(文末附流程图)
|
iOS开发
fishhook源码分析
最早了解到[fishhook](https://github.com/facebook/fishhook)是看了下面两篇文章之后,顿时让我觉得这是一个非常好的东西。总共210行代码,收获了1500+个star,神作啊。 1. [iOS Lazy Binding](http://www.atatech.org/articles/68014),使用fishhook拦截NSSetUncaughtE
2415 0
|
移动开发 Java 开发者
Stresstester源码分析
stresstester-1.0.jar是早期淘宝的一个压力测试工具,很方便开发人员进行本地代码的压力测试,其他专门压力测试工具也有很多,如:jmeter loadrunner 等等,本篇文章主要讲一下stresstester的源码设计
10594 0