比特币挖矿源代码分析.pdf

比特币挖矿源代码分析.pdf

ID:51122392

大小:292.92 KB

页数:12页

时间:2020-03-09

比特币挖矿源代码分析.pdf_第1页
比特币挖矿源代码分析.pdf_第2页
比特币挖矿源代码分析.pdf_第3页
比特币挖矿源代码分析.pdf_第4页
比特币挖矿源代码分析.pdf_第5页
资源描述:

《比特币挖矿源代码分析.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、比特币挖矿!!挖矿命令!2块结构!4创建块!5奖励比特币!6SHA256算法加密!8检验块!9工作量证明!10计算算力!12比特币网络!12页码:1/12挖矿命令!!!比特币客户端内嵌了挖矿模块,可以使用相关的命令开始挖矿、获取挖矿参数。!!!有2个方式可以挖矿。!!1、-gen!!在配置文件(默认文件名bitcoin.conf)中添加此项,为1时开始挖矿,为0时停止挖矿。!!客户端程序启动过程中,初始化(AppInit2)时获取此命令参数,进行挖矿。!!2、setgenerate命令!!命令格式是:setgenerategenerate(g

2、enproclimit)。!!generate为true时开始挖矿,false时停止挖矿,这个参数是必须有的。!!genproclimit表示挖矿CPU个数,这个参数是可选的,默认是-1,无限制,所有的CPU都运行挖矿。为0时停止挖矿。!!此命令最终会修改参数映射数组mapArgs中”-gen”项,从而决定后续是否进行挖矿。!!如果是regtest模式,此参数表示需要挖出的块个数,直到挖出指定的块数量时退出。!!!获取挖矿命令是:getgenerate。!!返回boolean值,true表示正在挖矿,false表示停止挖矿,默认是false。!!

3、!生产比特币!!!!生产比特币是在GenerateBitcoins函数。!!在GenerateBitcoins函数中,创建、停止挖矿线程,挖矿线程主函数是BitcoinMiner。!!创建指定数量的线程,但如果指定的线程数量为0,则停止挖矿。如果指定的线程数量小于0,则如果是测试网络,则只创建1个线程,否则创建的线程个数为CPU个数。!!挖矿线程保存在线程组中(boost::thread_group类型)。!!如果正在挖矿,即挖矿线程正在运行,则停止挖矿,即中断所有的挖矿线程,重新创建挖矿线程。!!!挖矿时,创建线程数组,创建所有的挖矿线程,每个

4、线程绑定挖矿BitcoinMiner函数,绑定钱包。!!页码:2/12挖矿线程!!!!线程主函数为BitcoinMiner。!!挖矿线程的优先级为THREAD_PRIORITY_LOWEST。!!线程重命名为”bitcoin-miner”。!!每个线程先创建一个基于钱包的KEY(CReserveKey类型),然后开始循环挖矿。!!如果是回归测试模式,则立刻开始挖矿;否则,每隔1秒检验一次网络,直到网络节点连接上才进行挖矿,如果网络节点没有连接,则只能浪费时间挖过期的块。!!基于KEY创建新的块(CreateNewBlockWithKey),保

5、存在块模版中,增加线程自己的计数(IncrementExtraNonce)。!!从堆栈中申请3块空间作为哈希缓冲区,16字节对齐,然后格式化哈希缓存区(FormatHashBuffers)。!缓冲区类型大小(字节)midstate32+16data128+16hash164+16!遍历缓冲区,用SHA256算法加密缓存区(ScanHash_CryptoPP),如果找到一些块,则检验块是否有效(CheckWork),检验之时,线程的优先级必须为THREAD_PRIORITY_NORMAL。统计算力。更新块的时间。!!如果是回归测试,生成1个块后就停

6、止挖矿。!!如果挖矿过程中网络连接失败,则停止挖矿。!!如果是测试网络,修改块的时间来修改需要的POW。!!挖矿过程中会打印日志。!!!页码:3/12块结构!!!!每个节点都会收集新的交易信息添加到块中,并且把交易信息保存到块的哈希树中,通过nonce值扫描块,使块的哈希值满足POW的要求。然后把块广播给每个节点,添加到块链中。块的第一个交易信息是创建了块的创建者拥有的新币的交易信息。!!!块结构主要涉及到CBlockHeader、CBlock、CBlockTemplate。!!类CBlockHeader类包含了块头的基本信息,如:版本、时间

7、戳等。!classCBlockHeader!{!public:!staticconstintCURRENT_VERSION=2;!//当前版本,默认是2!intnVersion;!!!!!!//版本!uint256hashPrevBlock;!!!!//上一个块哈希值!uint256hashMerkleRoot;!!!//Merkle哈希树根节点!unsignedintnTime;!!!!//创建块时的时间!!!!unsignedintnBits;!!!!!//下一个工作需要的POW!unsignedintnNonce;!!!!//Nonce值!

8、};!!nVersion默认是2。!!nNonce用于扫描块,使块的hash满足POW的要求。!!!!!类CBlock继承了CBlock

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。