收藏 分享(赏)

比特币的工作证明与挖矿.docx

上传人:hwpkd79526 文档编号:7187549 上传时间:2019-05-09 格式:DOCX 页数:7 大小:114.55KB
下载 相关 举报
比特币的工作证明与挖矿.docx_第1页
第1页 / 共7页
比特币的工作证明与挖矿.docx_第2页
第2页 / 共7页
比特币的工作证明与挖矿.docx_第3页
第3页 / 共7页
比特币的工作证明与挖矿.docx_第4页
第4页 / 共7页
比特币的工作证明与挖矿.docx_第5页
第5页 / 共7页
点击查看更多>>
资源描述

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

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

3、义远大于此。Block Hash 算法Block 头部信息的构成:字段名含义大小(字节)Version 版本号 4hashPrevBlock 上一个 block hash 值32hashMerkleRoot 上一个 block 产生之后至新 block 生成此时间内,交易数据打包形成的 Hash32TimeUnix 时间戳 4Bits 目标值,即难度 4Nonce 随机数 4下面采用高度为 125552 的 block 数据为例,演示 block hash 的计算过程:12345678910111213141516171819nHeight+1)%nInterval!=0)/ 未达到周期个数,

4、无需调节returnpindexLast-nBits;/ Go back by what we want to be 14 days worth of blocksconstCBlockIndex*pindexFirst=pindexLast;for(inti=0;pindexFirst/ 计算本次 2016 个块的实际产生时间/ Limit adjustment stepint64nActualTimespan=pindexLast-GetBlockTime()-pindexFirst-GetBlockTime();/ 限定幅度,最低为 1/4,最高为 4 倍if(nActualTimesp

5、annTargetTimespan*4)nActualTimespan=nTargetTimespan*4;/ 根据最近 2016 个块的时间,重新计算目标难度 / RetargetCBigNumbnNew;bnNew.SetCompact(pindexLast-nBits);bnNew*=nActualTimespan;bnNew/=nTargetTimespan;if(bnNewbnProofOfWorkLimit)bnNew=bnProofOfWorkLimit;returnbnNew.GetCompact();Block 字段详解 Version,版本号,很少变动,一般用于软件全网升级

6、时做标识 hashPrevBlock,前向 Block Hash 值,该字段强制多个 Block 之间形成链接 hashMerkleRoot,交易 Hash 树的根节点 Hash 值,起校验作用,保障Block 在网络传输过程中的数据一致性,有新交易加入即发生变化 Time,Unix 时间戳,每秒自增一,标记 Block 的生成时间,同时为block hash 探寻引入一个频繁的变动因子 Bits,可以推算出难度值,用于验证 block hash 难度是否达标 Nonce,随机数,在上面数个字段都固定的情况下,不停地更换随机数来探寻最为关键的字段是 hashPrevBlock,该字段使得 Bl

7、ock 之间链接起来,形成一个巨大的“链条”。Block 本是稀松平常的数据结构,但以链式结构组织起来后却使得它们具有非常深远的意义:1. 形成分支博弈,使得算力总是在主分支上角逐2. 算力攻击的概率难度呈指数上升(泊松分布)每个 block 都必须指向前一个 block,否则无法验证通过。追溯至源头,便是高度为零的创世纪块(Genesis Block),这里是 Block Chain 的起点,其前向 block hash 为零,或者说为空。新 block 诞生过程山赛币网址导航网 下面是一个简单的步骤描述,实际矿池运作会有区别,复杂一些:1. 节点监听全网交易,通过验证的交易进入节点的内存池

8、(Tx Mem Pool),并更新交易数据的 Merkle Hash 值2. 更新时间戳3. 尝试不同的随机数(Nonce),进行 hash 计算4. 重复该过程至找到合理的 hash5. 打包 block:先装入 block meta 信息,然后是交易数据6. 对外部广播出新 block7. 其他节点验证通过后,链接至 Block Chain,主链高度加一,然后切换至新 block 后面挖矿由于 hashPrevBlock 字段的存在,使得大家总是在最新的 block 后面开挖,稍后会分析原因。主链分叉从 block hash 算法我们知道,合理的 block 并不是唯一的,同一高度存在多个

9、block 的可能性。那么,当同一个高度出现多个时,主链即出现分叉(Fork)。遇到分叉时,网络会根据下列原则选举出 Best Chain:1. 不同高度的分支,总是接受最高(即最长)的那条分支2. 相同高度的,接受难度最大的3. 高度相同且难度一致的,接受时间最早的4. 若所有均相同,则按照从网络接受的顺序5. 等待 Block Chain 高度增一,则重新选择 Best Chain按照这个规则运作的节点,称为诚实节点(Honest Nodes)。节点可以诚实也可以不诚实。分支博弈我们假设所有的节点:1. 都是理性的,追求收益最大化2. 都是不诚实的,且不惜任何手段获取利益所有节点均独自挖矿

10、不理会其他节点,并将所得收益放入自己口袋,现象就是一个节点挖一个分支。由于机器的配置总是有差别的,那么算力最强的节点挖得的分支必然是最长的,如果一个节点的分支不是最长的,意味其收益存在不被认可的风险(即零收益)。为了降低、逃避此风险,一些节点肯定会联合起来一起挖某个分支,试图成为最长的分支或保持最长分支优势。一旦出现有少量的节点联合,那么其他节点必然会效仿,否则他们收益为零的风险会更大。于是,分支迅速合并汇集,所有节点都会选择算力更强的分支,只有这样才能保持收益风险最小。最终,只会存在一个这样的分支,就是主干分支(Best/Main Chain)。对于不诚实节点来说,结局是无奈的:能且只能加入

11、主干挖矿。不加入即意味被抛弃,零收益;加入就是老实干活,按占比分成。Hash DanceBlock hash 的计算是随机概率事件,当有节点广播出难度更高的 block 后,大家便跑到那个分支。在比特币系统运行过程中,算力经常在分支间跳来跳去,此现象称为 Hash Dance。一般情况下,分支的高度为 12,没有大的故障很难出现高于 2 的分支。Hash Dance 起名源于 Google Dance.算力攻击的概率算力攻击是一个概率问题,这里作简单叙述: p = 诚实节点挖出 block 概率 q = 攻击者挖出 block 概率,q = 1 p qz = 攻击者从 z 个 block 追上

12、的概率我们假设 pq,否则攻击者掌握了一半以上的算力,那么概率上永远是赢的。该事件(攻击者胜出)的概率是固定,且 N 次事件之间是相互独立的,那么这一系列随机过程符合泊松分布(Poisson Distribution)。 Z 个块时,攻击者胜出的期望为 lambda:攻击者在攻击时已经偷偷的计算了 k 个块,那么这 k 个块概率符合泊松分布(下图左侧部分),若 kdoubleAttackerSuccessProbability(doubleq,intz)doublesum=1.0;doublep=1.0-q;doublelambda=z*(q/p);inti,k;for(k=0;k=z;k+)

13、doublepoisson=exp(-lambda);for(i=1;i=k;i+)poisson*=lambda/i;sum-=poisson*(1-pow(q/p,z-k);returnsum;我们选取几个值,结果如下:可以看到,由于 block 的链式形式,随着块数的上升,攻击者赢得的概率呈指数下降。这是很多应用等待六个甚至六个以上确认的原因,一旦超过 N 个确认,攻击者得逞的可能微乎其微,概率值快速趋近零。当攻击者的算力超过 50%时,便可以控制 Block Chain,俗称 51%攻击。算力攻击的危害攻击者算出 block 后,block&Txs 必须能够通过验证,否则其他节点都会拒

14、掉,攻击便无意义。攻击者无法做出下列行为:1. 偷盗他人的币。消费某个地址的币时,需要对应的 ECDSA 私钥签名,而私钥是无法破解的。2. 凭空制造比特币。每个 block 奖励的币值是统一的规则,篡改奖励币值会导致其他节点会拒绝该 block。唯一的益处是可以选择性的收录进入 block 的交易,对自己的币进行多重消费(Double Spending)。过程是这样的:假设现在 block 高度为 100,攻击者给商户发了一个交易10BTC,记作交易 A,通常这笔交易会被收录进高度 101 的 block 中,当商户在 101 块中看到这笔交易后,就把货物给了攻击者。此时,攻击者便开始构造另

15、一个高度为 101 的 block,但用交易 B 替换了交易 A,交易 B 中的输入是同一笔,使得发给商户的那笔钱发给他自己。同时,攻击者需要努力计算 block,使得他的分支能够赶上主分支,并合并(Merge)被大家接受,一旦接受,便成功地完成了一次 Double Spending。攻击难度呈指数上升,所以成功的 Double Spending 通常是一个极小概率事件。算力巨头全网算力的上升对比特币是极其有利的,这是毫无疑问的。但目前大矿池与矿业巨头使得算力高度集中化,这与中本聪所设想的一 CPU 一票(one-CPU-one-vote)的分散局面背道而驰,或许是他未曾预料的。挖矿是一项专业

16、劳动,最后必然会交给最专业的人或团队,因为这样才能实现资源配置最优,效率最高。普通投资人通过购买算力巨头的股票:1. 完成投资;2. 分享算力红利。看似中心化的背后其实依然是分散的:1. 矿业公司的背后是无数分散的投资人2. 矿池背后是无数分散的个体算力既得利益使得算力巨头倾向于维护系统而不是破坏,因其收益均建立在比特币系统之上,既得利益者断然不会搬石头砸自己脚。甚至很多巨头在达到一定算力占比后会主动控制算力增长,使得低于某阈值内。后记本篇几乎都在讲挖矿,因为挖矿对于比特币系统来说实在是太重要了。需要了解:1. block 是基于工作量证明的。2. block 以链式结构存在时的深远意义。更多资讯尽在比特币网址导航网

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报