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是一个高性能的异步消息库。