区块链-挖矿和算力竞赛

目录:http://www.javashuo.com/article/p-nitsjfvy-ey.html算法

比特币挖矿是一个极富竞争性的行业。自从比特币存在开始,每一年比特币算力都成指数增加。一些年份的增加还体现出技术的变革,好比在2010年和2011年, 不少矿工开始从使用CPU升级到使用GPU,进而使用FGPA(现场可编程门阵列) 挖矿。数据库

在2013年,ASIC挖矿的引入,把SHA256算法直接固化在挖矿专用的硅芯片上,引发了算力的另外一次巨大飞 跃。一台采用这种芯片的矿机能够提供的算力, 比2010年比特币网络的总体算力还要大。编程

咱们能够看到近两年里,矿业和比特币的成长引发了比特币网络算力的指数增加(每秒网络总算力)。服务器

随着比特币挖矿算力的爆炸性增加,与之匹配的难度也相应增加。 下图中的相对难度值显示了当前难度与最小难度 (第一个块的难度)的比例。网络

目前,ASIC制造商的目标是超越通用CPU芯片制造商,设计特征尺寸为14纳米的芯片。对比特币挖矿而言,已经没有更多飞跃的空间,由于这个行业已经触及了摩尔定律的最前沿。摩尔定律指出计算能力每18个月增长一倍。并发

尽管如此,随着更高密度的芯片和数据中心的部署竞赛,网络算力继续保持同步的指数增加。如今的竞争已经再也不是比较单一芯片的能力,而是一个矿场能塞进多少芯片,并处理好散热和供电问题。区块链

矿池

在这个激烈竞争的环境中,个体矿工独立工做(也就是solo挖矿)没有一点机会。 他们找到一个区块以抵消电力和硬件 成本的可能性很是小,以致于能够称得上是赌博,就像是买彩票。就算是最快的消费型ASIC也不能和那些在巨大机房里拥有数万芯片并靠近水电站的商业矿场竞争。.net

如今矿工们合做组成矿池,聚集数以千计参与者们的算力并分享奖励。经过参加矿池,矿工们获得总体回报的一小部分,但一般天天都能获得,于是减小了不肯定性。设计

我的矿工在创建矿池帐号后,设置他们的矿机链接到矿池服务器。 他们的挖矿设备在挖矿时保持和矿池服务器的链接,和其余矿工同步各自的工做。这样,矿池中的矿工分享挖矿任务,以后分享奖励。成功出块的奖励支付到矿池的比特币地址,而不是单个矿工的。一旦奖励达到一个特定的阈值,矿池服务器便会按期支付奖励到矿工的比特币地址。blog

一般状况下,矿池服务器会为提供矿池服务收取一个百分比的费用。参加矿池的矿工把搜寻候选区块的工做量分割,并根据他们挖矿的贡献赚取“份额”。

当矿池中有人成功挖出一块,矿池得到奖励,并和全部矿工按照他们作出贡献的 “份额”数的比例分配。矿池对任何矿工开放,不管大小、专业或业余。一个矿池的参与者中,有人只有一台小矿机,而有些人有一车库高端挖矿硬件。有人只用几十度电挖矿,也有人会用一个数据中心消耗兆瓦级的电量。

矿池如何衡量每一个人的贡献,既能公平分配奖励,又避免做弊的可能?答案是在设置一个较低难度的前提下,使用比特币的工做量证实算法来衡量每一个矿工的贡献。

所以,即便是池中最小的矿工也常常能分得奖励,这足以激励他们为矿池作出贡献。经过设置一个较低的取得份额的难度,矿池能够计量出每一个矿工完成的工做量。每当矿工发现一个小于矿池难度的区块头hash,就证实了它已经完成了寻找结果所需的hash计算。更重要的是,这些为取得份额贡献而作的工做,能以一个统计学上可衡量的方法,总体寻找一个比特币网络的目标散列值。成千上万的矿工尝试较小区间的hash值,最终能够找到符合比特币网络要求的结果。

托管矿池

大部分矿池是“托管的”,意思是有一个公司或者我的经营一个矿池服务器。矿池服务器的全部者叫矿池管理员,同时他从矿工的收入中收取一个百分比的费用。 矿池服务器运行专业软件以及协调池中矿工们活动的矿池采矿协议。矿池服务器同时也链接到一个或更多比特币彻底节点并直接访问一个块链数据库的完整副本。这使得矿池服务器能够代替矿池中的矿工验证区块和交易, 缓解他们运行一个完整节点的负担。

对于池中的矿工,这是一个重要的考量,由于一个完整节点要求一个拥有最少100-150GB的永久储存空间(磁盘)和最少2GB到4GB内存(RAM)的专用计算 机。

此外,运行一个完整节点的比特币软件须要监控、维护和频繁升级。因为缺少维护或资源致使的任何宕机都会伤害到矿工的利润。对于不少矿工来讲,不须要跑一个完整节点就能采矿,也是加入托管矿池的一大好处。

矿工链接到矿池服务器使用一个采矿协议好比 Stratum(STM)或者 GetBlockTemplate(GBT)。一个旧标准 GetWork(GWK) 自从 2012 年末已经基本上过期了,由于它不支持在 hash速度超过4GH/S 时采矿。

STM和GBT协议都建立包含候选区块头模板的区块模板。矿池服务器经过打包交易,添加coinbase 交易 (和额外的随机值空间),计算MERKLE根, 并链接到上一个块hash来创建一 个候选区块。这个候选区块的头部做为模板分发给每一个矿工。矿工用这个区块模板在低于比特币网络的难度下采矿,并发送成功的结果返回矿池服务器赚取份额。

P2P 矿池

托管矿池存在管理人做弊的可能,管理人能够利用矿池进行双重支付或使区块无 效。(参见“共识攻击”) 此外,中心化的矿池服务器表明着单点故障。 若是由于拒绝服务攻击服务器挂了或者被减慢,池中矿工就不能采矿。

在2011年, 为了解决由中心化形成的这些问题,提出和实施了一个新的矿池挖矿方法。P2Pool是一个点对点的矿池,没有中心管理人。P2Pool 经过将矿池服务器的功能去中心化,实现一个并行的相似区块链的系统,名叫份额链(share chain)。

一个份额链是一个难度低于比特币区块链的区块链系统。份额链容许池中矿工在 一个去中心化的池中合做,以每30秒一个份额区块的速度在份额链上采矿,并 得到份额。份额链上的区块记录了贡献工做的矿工的份额,而且继承了以前份额区块上的份额记录。当一个份额区块上还实现了比特币网络的难度目标时,它将被广播并包含到比特币的区块链上,并奖励全部已经在份额链区块中取得份额的池中矿工。

本质上说,比起用一个矿池服务器记录矿工的份额和奖励,份额链容许全部矿工经过相似比特币区块链系统的去中心化的共识机制跟踪全部份额。P2Pool采矿方式比在矿池中采矿要复杂的多,由于它要求矿工运行空间、内存、带宽充足的专用计算机来支持一个比特币的完整节点和 P2Pool 节点软件。

P2Pool矿工链接他们的采矿硬件到本地P2Pool 节点,它经过发送区块模板到矿机来模拟一个矿池 服务器的功能。在 P2Pool中,单独的矿工建立本身的候选区块,打包交易,很是相似于 solo 矿工,可是他们在份额链上合做采矿。

P2Pool 是一种比单独挖矿有更细粒度收入优点的混合方法。可是不须要像托管矿池那样给管理人太多权力。即便P2Pool 减小了采矿池运营商的中心化程度,但也可能容易受到份额链自己的 51%的攻击。 P2Pool 的普遍采用并不能解决比特币自己的 51%攻击问题。 相反,做为多样化采矿生态系统的一 部分,P2Pool总体使得比特币更增强大。