比特币源码研读之二:src目录

版权声明:版权所有声明 版权所有归属作者,未经允许不得转载、复制或用作它途。否则作者将具有追究法律责任的权利。 Copyright Clarify Copyright ownership belongs to the author, shall not be reproduced, copied, or used in other ways without permission. Otherwise, https://blog.csdn.net/qq_27467365/article/details/81571946

src目录下东西很多,我们就比较重要的介绍一下作用:

src目录下有21个目录,分别为:


Bench(make coin selection output pass eligibility filter)可能是添加块组装的标准?


compact:处理文件兼容性相关的细节,较为low level,是指跨平台,大小端,系统适配,大小端,系统适配等,重写了部分字节操作。


config:配置文件,相当于setting,没太大问题。


consensus:交易/块的验证,merkle tree相关的计算,一些共识参数的定义。


crypto:加密HASH函数,SHA256、RIPEMD160等。


index:交易读写

1.查询交易

2.新区块加入同步数据


interface:交互接口

1.event handler接口

2.守护进程bitcoind,调用node功能的接口

3.bitcoin钱包功能接口


leveldb:LevelDB是开源磁盘键值存储。LevelDB 是单进程的服务,性能非常之高。

LevelDB将键和值存储在任意字节数组中,数据按键排序。 它支持批量写入,前向和后向迭代,以及通过Google的Snappy压缩库压缩数据。

LevelDB不是SQL数据库。 与其他NoSQL和Dbm存储一样,它没有关系数据模型,也不支持SQL查询。 此外,它不支持索引。 应用程序使用LevelDB作为库,因为它不提供服务器或命令行界面。

MariaDB 10.0附带一个存储引擎,允许用户从MariaDB查询LevelDB表。


obj:这个是目标文件,不管。


obj-test:同上


policy:与consensus相反,用户可以根据自身的需求定义不同的policy,例如是否转发大小为100k以上的交易等,自己定义一种规则。


primitives:

 1.区块构建;

2.校验交易的输入输出签名


qt:GUI库


rpc:RPC框架就是可以用来调用远程进程上的代码一套工具


script:脚本引擎,定义了操作码,交易签名的生成与验证等

1.交易溯源

2. 密钥验证

3. 交易脚本

4. 签名

5. 签名cache(缓存常用签名及其hash以节约时间)


secp256k1:

secp256k1是指比特币公钥加密中使用的椭圆曲线的参数,并在高效加密标准(SEC)(Certicom Research,http://www.secg.org/sec2-v2.pdf)中定义。目前比特币使用secp256k1和ECDSA算法,尽管具有相同公钥/私钥的相同曲线可用于其他一些算法,例如Schnorr。

在比特币开始流行之前几乎从未使用过secp256k1,但由于它的几个不错的属性,它现在越来越受欢迎。最常用的曲线具有随机结构,但是secp256k1是以特殊的非随机方式构造的,这允许特别有效的计算。因此,如果实施得到充分优化,它通常比其他曲线快30%以上。此外,与流行的NIST曲线不同,secp256k1的常量是以可预测的方式选择的,这大大降低了曲线的创建者将任何类型的后门插入曲线的可能性。


support:内存控制,没有验证的区块是放在内存里,验证了再放进去。


test:各种测试,


univalue:一种数据类型?UniValue is an abstract data type that may be a null, boolean, string, number, array container, or a key/value dictionary container, nested to an arbitrary depth.不知道那个“嵌套到任意深度的键值对字典容器”


zmq是一个高性能的异步消息库。


猜你喜欢

转载自blog.csdn.net/qq_27467365/article/details/81571946