16年全网比特币算力 比特币全网算力历史数据
一、一个比特币要挖多久
我是12年开始挖比特币的,当时用的台式机挖了一上午,有0.002个比特币,一天24小时可以挖0.008个比特币,挖一个得125天,当时的比特币价格是500人民币,也就是一上午挖1块钱的比特币,挖一天应该有5块钱,但是一天的电费要4块8,所以一个电脑挖一天赚2毛,所以要赚钱得规模化,但是还要考虑到投资的电脑成本
目前基本都是矿机,一个蚂蚁矿机是800美元一台,5500人民币的成本,功率1350w,每天24小时挖矿一个月可以挖到0.02个,按照目前比特币8000美金来算,一个月可以赚160美金,也就是1104人民币,电费是777.6人民币,每月可以赚326块,得16个月才能收回矿机的成本,到时候矿机都废掉了
而且5月份比特币第三次奖励减半,得32个月回本
所以挖币最终还是拼电力成本,普通家庭还是老老实实买币吧
现在都是在交易所买
去上火币看看吧
火币全球站
二、比特币全网算力不断攀升,喜提“带货王”称号
比特币全网算力攀升,确实带动了矿机销售,可称为“带货王”。
随着比特币价格的持续上涨,比特币全网算力也在不断攀升。根据区块链浏览器btc.com的数据显示,当前比特币全网算力已经达到了65.39 EH/s。这一数字意味着比特币网络每秒钟能够进行65.39乘以10的18次方次计算,这体现了比特币网络强大的处理能力。
一、算力定义与重要性
算力,也称为哈希率(Hash Rate),是衡量比特币网络处理能力的一种关键指标。它代表了比特币网络每秒钟能够完成的计算次数。算力的大小直接影响到比特币网络的运行效率和安全性。更高的算力意味着网络更难被攻击,从而保障了比特币系统的稳定运行。
二、矿机销售紧俏
比特币全网算力的攀升,离不开大量矿机的贡献。矿机是专门用于挖掘比特币的硬件设备,它们日以继夜地工作,为比特币网络提供庞大的算力。随着比特币价格的上涨,矿机的需求也大幅增加,导致矿机市场供不应求,销售紧俏。
例如,德国比特币矿业公司Northern Bitcoin就宣布从中国的比特大陆和嘉楠耘智购买了近5000台采矿设备。这一购买行为不仅反映了矿机市场的繁荣,也体现了矿业公司对扩大算力的迫切需求。
三、比特币的“带货”效应
由于比特币价格的上涨和全网算力的攀升,比特币在某种程度上成为了“带货王”。这里的“货”指的就是矿机。随着比特币的火爆,越来越多的人开始关注并投资比特币矿业,进而带动了矿机的销售。
矿机的热销不仅为矿业公司带来了可观的收益,也推动了相关产业链的发展。例如,矿机的生产、销售、运输、维护等环节都受益于比特币的火爆行情。
四、算力与能源消耗
然而,矿机在为比特币网络提供算力的同时,也带来了巨大的能源消耗。这一问题一直备受争议,有人认为矿机会加剧环境污染等问题。但另一方面,也有观点认为比特币矿机采用的是可持续能源,并且在工作过程中产生的热能还可以被再次利用。例如,在寒冷的西伯利亚地区,矿机散发的热量就被用来烘烤农作物,实现了能源的再利用。
五、未来展望
随着比特币价格的持续上涨和全网算力的不断攀升,比特币矿业将继续保持繁荣态势。然而,同时也需要关注矿机带来的能源消耗和环境污染等问题。未来,随着技术的不断进步和环保意识的提高,相信比特币矿业将朝着更加绿色、可持续的方向发展。
综上所述,比特币全网算力的攀升确实带动了矿机的销售,使比特币在某种程度上成为了“带货王”。然而,在享受比特币带来的收益的同时,也需要关注其带来的挑战和问题,并积极寻求解决方案以实现可持续发展。
三、比特币挖矿的难度和算力
难度是对挖矿困难程度的度量,即指:计算符合给定目标的一个HASH值的困难程度。
difficulty= difficulty_1_target/ current_target
difficulty_1_target的长度为256bit,前32位为0,后面全部为1,一般显示为HASH值:0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, difficulty_1_target表示btc网络最初的目标HASH。 current_target是当前块的目标HASH,先经过压缩然后存储在区块中,区块的HASH值必须小于给定的目标HASH,区块才成立。
例如:如果区块中存储的压缩目标HASH为 0x1b0404cb,那么未经压缩的十六进制HASH为
所以,目标HASH为0x1b0404cb时,难度为:
比特币的挖矿的过程其实是通过随机的hash碰撞,找到一个解 nonce,使得块hash小于目标HASH值。而一个矿机每秒钟能做多少次hash碰撞,就是其“算力”的代表,单位写成 hash/s或者 H/s
算力单位:
比特币系统的难度是动态调整的,每挖 2016个块便会做出一次调整,调整的依据是前面2016个块的出块时间,如果前一个周期平均出块时间小于10分钟,便会加大难度,大于10分钟,则减小难度,目的是为了保证系统稳定的每过 10分钟产出一个块,所以难度调整的时间大概是2周(2016* 10分钟)
全网算力是btc网络中参与竞争挖矿的所有矿机的算力总和。当前难度周期全网算力会影响下一个周期的难度调整,如果全网算力增加,挖矿难度增大,单台矿机固定时间的产出就会减少。目前全网算力大概是24.42EH/s,一台蚂蚁S9矿机的算力大概是14TH/s
那么,已知当前全网算力,下一个周期难度将如何调整呢?
根据公式:
因为出块时间要稳定在10分钟,也就是600s:
那么,在3.46e+12的难度下,一台算力为14TH/s的矿机平均要花多长时间才能出一个块呢?
根据公式:
有:
结果大概是12270天
四、比特币矿池的协议stratum
转自:
getblocktemplate协议诞生于2012年中叶,此时矿池已经出现。矿池采用getblocktemplate协议与节点客户端交互,采用stratum协议与矿工交互,这是最典型的矿池搭建模式。
与getwork相比,getblocktemplate协议最大的不同点是:getblocktemplate协议让矿工自行构造区块。如此一来,节点和挖矿完全分离。对于getwork来说,区块链是黑暗的,getwork对区块链一无所知,他只知道修改data字段的4个字节。对于getblocktemplate来说,整个区块链是透明的,getblocktemplate掌握区块链上与挖矿有关的所有信息,包括待确认交易池,getblocktemplate可以自己选择包含进区块的交易。
挖矿有两种方式,一种叫SOLO挖矿,另一种是去矿池挖矿。前文所述的在节点客户端直接启动CPU挖矿,以及依靠getwork+cgminer驱动显卡直接连接节点客户端挖矿,都是SOLO挖矿,SOLO好比自己独资买彩票,不轻易中奖,中奖则收益全部归自己所有。去矿池挖矿好比合买彩票,大家一起出钱,能买一堆彩票,中奖后按出资比率分配收益。理论上,矿机可以借助getblocktemplate协议链接节点客户端SOLO挖矿,但其实早已没有矿工会那么做,在写这篇文章时,比特币全网算力1600P+,而当前最先进的矿机算力10T左右,如此算来,单台矿机SOLO挖到一个块的概率不到16万分之一,矿工(人)投入真金白银购买矿机、交付电费,不会做风险那么高的投资,显然投入矿池抱团挖矿以降低风险,获得稳定收益更加适合。因此矿池的出现是必然,也不可消除,无论是否破坏系统的去中心化原则。
矿池的核心工作是给矿工分配任务,统计工作量并分发收益。矿池将区块难度分成很多难度更小的任务下发给矿工计算,矿工完成一个任务后将工作量提交给矿池,叫提交一个share。假如全网区块难度要求Hash运算结果的前70个比特位都是0,那么矿池给矿工分配的任务可能只要求前30位是0(根据矿工算力调节),矿工完成指定难度任务后上交share,矿池再检测在满足前30位为0的基础上,看看是否碰巧前70位都是0。
矿池会根据每个矿工的算力情况分配不同难度的任务,矿池是如何判断矿工算力大小以分配合适的任务难度呢?调节思路和比特币区块难度一样,矿池需要借助矿工的share率,矿池希望给每个矿工分配的任务都足够让矿工运算一定时间,比如说1秒,如果矿工在一秒之内完成了几次任务,说明矿池当前给到的难度低了,需要调高,反之。如此下来,经过一段时间调节,矿池能给矿工分配合理难度,并计算出矿工的算力。
矿池通过getblocktemplate协议与网络节点交互,以获得区块链的最新信息,通过stratum协议与矿工交互。此外,为了让之前用getwork协议挖矿的软件也可以连接到矿池挖矿,矿池一般也支持getwork协议,通过阶层挖矿代理机制实现(Stratum mining proxy)。须知在矿池刚出现时,显卡挖矿还是主力,getwork用起来非常方便,另外早期的FPGA矿机有些是用getwork实现的,stratum与矿池采用TCP方式通信,数据使用JSON封装格式。
先来说一下getblocktemplate遗留下来的几个问题:
矿工驱动:在getblocktemplate协议里,依然是由矿工主动通过HTTP方式调用RPC接口向节点申请挖矿数据,这就意味着,网络最新区块的变动无法及时告知矿工,造成算力损失。
数据负载:如上所述,如今正常的一次getblocktemplate调用节点都会反馈回1.5M左右的数据,其中主要数据是交易列表,矿工与矿池需频繁交互数据,显然不能每次分配工作都要给矿工附带那么多信息。再者巨大的内存需求将大大影响矿机性能,增加成本。
Stratum协议彻底解决了以上问题。
Stratum协议采用主动分配任务的方式,也就是说,矿池任何时候都可以给矿工指派新任务,对于矿工来说,如果收到矿池指派的新任务,应立即无条件转向新任务;矿工也可以主动跟矿池申请新任务。
现在最核心的问题是如何让矿工获得更大的搜索空间,如果参照getwork协议,仅仅给矿工可以改变nNonce和nTime字段,则交互的数据量很少,但这点搜索空间肯定是不够的。想增加搜索空间,只能在hashMerkleroot下功夫,如果让矿工自己构造coinbase,那么搜索空间的问题将迎刃而解,但代价是必要要把区块包含的所有交易都交给矿工,矿工才能构造交易列表的Merkleroot,这对于矿工来说压力更大,对于矿池带宽要求也更高。
Stratum协议巧妙解决了这个问题,成功实现既可以给矿工增加足够的搜索空间,又只需要交互很少的数据量,这也是Stratum协议最具创新的地方。
再来回顾一下区块头的6个字段80字节,这个很关键,nVersion,nBits,hashPrevBlock这3个字段是固定的,nNonce,nTime这两个字段是矿工现在就可以改变的。增加搜索空间只能从hashMerkleroot下手,这个绕不过去。Stratum协议让矿工自己构造coinbase交易,coinbase的scriptSig字段有很多字节可以让矿工自由填充,而coinbase的改动意味着hashMerkleroot的改变。从coinbase构造hashMerkleroot无需全部交易,
如上图所示,假如区块将包含13笔交易,矿池先对这13笔交易进行处理,最后只要把图中的4个黑点(Hash值)交付给矿工,同时将构造coinbase需要的信息交付给矿工,矿工就可以自己构造hashMerkleroot(图中的绿点都是矿工自行计算获得,两两合并Hash时,规定下一个黑点代表的hash值总是放在右边)
。按照这种方式,假如区块包含N笔交易,矿池可以浓缩成log2(N)个hash值交付给矿工,这大大降低了矿池和矿工交互的数据量。
Stratum协议严格规定了矿工和矿池交互的接口数据结构和交互逻辑,具体如下:
1.矿工订阅任务
启动挖矿机器,使用mining.subscribe方法链接矿池
返回数据很重要,矿工需本地记录,在整个挖矿过程中都用到,其中:
Extranonce1,和 Extranonce2对于挖矿很重要,增加的搜索空间就在这里,现在,我们至少有了8个字节的搜索空间,即nNonce的4个字节,以及 Extranonce2的4个字节。
2.矿池授权
在矿池注册一个账号,添加矿工,矿池允许每个账号任意添加矿工数,并取不同名字以区分。矿工使用mining.authorize方法申请授权,只有被矿池授权的矿工才能收到矿池指派任务。
3.矿池分配任务
以上每个字段信息都是必不可少,其中:
有了以上信息,再加上之前拿到的Extranonce1和Extranonce2_size,就可以挖矿了。
4.挖矿
1)构造coinbase交易
用到的信息包括Coinb1, Extranonce1, Extranonce2_size以及Coinb2,构造很简单:
为啥可以这样,因为矿池帮矿工做了很多工作,矿池已经构建了coinbase交易,系列化后在指定位置分割成coinb1和coinb2,coinb1和coinb2包含指定信息,比如coinb1包含区块高度,coinb2包含了矿工的收益地址和收益额等信息,但是这些信息对于矿工来说无关紧要,矿工挖矿的地方只是Extranonce2的4个字节。另外Extranonce1是矿池写入区块的指定信息,一般来说,每个矿池会写入自己矿池的信息,比如矿池名字或者域名,我们就是根据这个信息统计每个矿池在全网的算力比重。
2)构建Merkleroot
利用coinbase和merkle_branch,按照上图方式构造hashMerkleroot字段。
3)构建区块头
填充余下的5个字段,现在,矿池可以在nNonce和Extranonce2里搜索进行挖矿,如果嫌搜索空间还不够,只要增加Extranonce2_size为多几个字节就可轻而易举解决。
5.矿工提交工作量
当矿工找到一个符合难度的shares时,提交给矿池,提交的信息量很少,都是必不可少的字段:
矿池拿到以上5个字段后,首先根据任务号ID找出之前分配任务前存储的信息(主要是构建的coinbase交易以及包含的交易列表等),然后重构区块,再验证shares难度,对于符合难度要求的shares,再检测是否符合全网难度。
6.矿池给矿工调节难度
矿池记录每个矿工的难度,并根据shares率不断调节以指定合适难度。矿池可以随时通过mining.set_difficulty方法给矿工发消息另其改变难度。
如上,Stratum协议核心理念基本解析清楚,在getblocktemplate协议和Stratum协议的配合下,矿池终于可以大声的对矿工说,让算力来的更猛烈些吧。