比特币的工作证明与挖矿

比特币的工作证明与挖矿

ID:12591119

大小:114.55 KB

页数:7页

时间:2018-07-18

比特币的工作证明与挖矿_第1页
比特币的工作证明与挖矿_第2页
比特币的工作证明与挖矿_第3页
比特币的工作证明与挖矿_第4页
比特币的工作证明与挖矿_第5页
资源描述:

《比特币的工作证明与挖矿》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、比特币的工作证明与挖矿工作证明工作证明(ProofOfWork,简称POW),顾名思义,即工作量的证明。通常来说只能从结果证明,因为监测工作过程通常是繁琐与低效的。比特币在Block的生成过程中使用了POW机制,一个符合要求的BlockHash由N个前导零构成,零的个数取决于网络的难度值。要得到合理的BlockHash需要经过大量尝试计算,计算时间取决于机器的哈希运算速度。当某个节点提供出一个合理的BlockHash值,说明该节点确实经过了大量的尝试计算,当然,并不能得出计算次数的绝对值,因为寻找合理hash是一个概率事件。当节点拥

2、有占全网n%的算力时,该节点即有n/100的概率找到BlockHash。工作证明机制看似很神秘,其实在社会中的应用非常广泛。例如,毕业证、学位证等证书,就是工作证明,拥有证书即表明你在过去投入了学习与工作。生活大部分事情都是通过结果来判断的。挖矿挖矿即不断接入新的Block延续BlockChain的过程。挖矿为整个系统的运转提供原动力,是比特币的发动机,没有挖矿就没有比特币。挖矿有三个重要功能:1.发行新的货币(总量达到之前)2.维系货币的支付功能3.通过算力保障系统安全金矿消耗资源将黄金注入流通经济,比特币通过“挖矿”完成相同的事

3、情,只不过消耗的是CPU时间与电力。当然,比特币的挖矿意义远大于此。BlockHash算法Block头部信息的构成:字段名含义大小(字节)Version版本号4hashPrevBlock上一个blockhash值32hashMerkleRoot上一个block产生之后至新block生成此时间内,交易数据打包形成的Hash32TimeUnix时间戳4Bits目标值,即难度4Nonce随机数4下面采用高度为125552的block数据为例,演示blockhash的计算过程: 12345678910111213141516171819

4、php$header_hex="01000000".//version//previousblockhash"81cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000".//merkleroothashoftransactionsinthisblock"e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0f1fc122b".//Time"c7f5d74d".//Bits(Difficulty)"f2b9

5、441a".//Nonce"42a14695";$header_bin=pack("H*",$header_hex);//hextobin$h=hash('sha256',hash('sha256',$header_bin,true),true);//doublesha256echobin2hex($h),"";//output:1dbd981fe6985776b644b173a4d0385ddc1aa2a829688d1e0000000000000000echobin2hex(strrev($h)),"";//output

6、:00000000000000001e8d6829a8a21adc5d38d0a473b144b6765798e61f98bd1d 该计算过程简单明了:首先将数个字段合并成一块数据,然后对这块数据进行双SHA256运算。产量调节Block的产量为大约每两周2016个,即每10分钟一块。该规则在每个节点的代码里都固定了。 123456//目标时间窗口长度:两周staticconstint64nTargetTimespan=14*24*60*60;//block频率,每10分钟一块staticconstint64nTargetSpaci

7、ng=10*60;//每两周的产量2016,也是调节周期staticconstint64nInterval=nTargetTimespan/nTargetSpacing; 但由于实际算力总是不断变化的(目前一直是快速上升的),所以需根据最近2016个块的耗费时间来调整难度值,维持每10分钟一个block的频率. 12345678910111213141516171819202122232425262728293031//Onlychangeonceperintervalif((pindexLast->nHeight+1)%nInte

8、rval!=0){//未达到周期个数,无需调节returnpindexLast->nBits;}//Gobackbywhatwewanttobe14daysworthofblocksconstCBlockIndex*pindexFir

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

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

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