挖矿难度怎么看
1. 从日线看比特币如何确认看涨或看跌位的谢谢!
如何利用三个技术指标看懂比特币涨跌
CoinCola可盈可乐
全球创新的数字资产交易平台
如何利用三个技术指标看懂比特币涨跌
6 人赞同了文章
为你朗读
4 分钟
近期,“比特币突破8000美元”登上热搜。一时间,比特币上涨,瑞波币暴涨,以太坊领涨……一周过去,这场由比特币主导的大戏似乎没有要落下帷幕的意思,交易量一度被推高至上千亿美元。
在投资世界里,“疯狂”与“恐惧”共存。今日的“疯狂”源于去年长时间的“恐惧”,但是,此次CoinCola可盈可乐研究院从上涨行情背后的技术指标进行跟踪和分析,以数据的“理性”,解构市场的“激情”。
(一)挖矿与比特币价格
先从挖矿与比特币关系说起。比特币的核心技术是“区块链”,它是由一个个区块连接起来的,每个区块对应一个账单,比特币所有的交易信息和转账记录都记录在区块链上。每隔一个时间点,比特币系统会在系统节点上生成一个随机代码,由于分布式记账,互联网所有计算机都可以去寻找这个代码,谁找到这个代码,就会产生一个区块,随即得到比特币,这个过程就是挖矿。计算这个随机代码需要大量的GPU运算,于是矿工们需要用有海量显卡的矿机进行挖矿获利。
1. 比特币算力:开始回升
备注:2018.6-2019.5比特币哈希值(Hashrate)
数据来源:bitcoinvisuals,CoinCola可盈可乐研究院
上图是比特币哈希值(Hashrate)表现图。比特币网络的哈希值表示区块链的计算能力(即算力)。算力增长意味着矿工加大挖矿投入或矿工数量增加。2018年下半年以来,哈希值从回落到回升,从年底32EH/s回升到现在的50EH/s,而且近期增长态势显著。比特币哈希值(代表算力)的持续增长表示市场对比特币未来预期持乐观的态度。
2. 挖矿难度:阶梯式上升
备注:2018.6-2019.5比特币挖矿难度(Bitcoin Difficulty)
数据来源:bitcoinvisuals,CoinCola可盈可乐研究院
上图是比特币挖矿难度(Bitcoin Difficulty)图。2019年以来,比特币挖矿难度呈阶梯式上升,从低点的5T上升至现在的7T。可以看出,本轮比特币快速上涨,使得挖矿成本下降,市场进入人员增多。挖矿难度的上升,意味着加密货币市场存在获利机会,市场普遍看好。
(二)链上指标与比特币价格
链上活跃地址数和链上交易数是反映加密货币活跃度地重要指标,跟加密货币的价格有很高的相关性。
1. 链上活跃地址数:直线上升
备注:2018.6-2019.5比特币链上活跃地址数
数据来源:coinmetrics,CoinCola可盈可乐研究院
活跃地址是指每天发生过交易的地址,即每天有多少个独立地址在链上进行转账交易。2019年以来,比特币链上活跃地址数不断上涨,近期更是表现为直线上升。从1月份低点的540.60143K到现在的832.592K。表明加密货币活跃用户的快速增长,是市场向好的非常积极的信号。
2. 链上交易数量:持续回升
备注:2018.6-2019.5比特币链上交易数量
数据来源:bitinfocharts,CoinCola可盈可乐研究院
2019年以来,比特币链上交易数量持续回升,从2019年初的235K上升至现在的374K。而且自4月份和5月份,比特币价格经历两轮大涨之后,链上交易数量一直保持在高位,甚至出现短时冲高的迹象。
(三)闪电网络与比特币价格
本质来讲,闪电网络在比特币区块链的基础层上增加一层,为了使交易变得快捷、便宜。闪电网络的存在,用户可以随时向对方汇款且只需支付极少费用。闪电网络既代表了比特币的技术水平,也是比特币价值体现的重要依据。
1. 闪电网络节点:迅速增长
备注:2018.1-2019.5比特币闪电网络节点
数据来源:bitinfocharts,CoinCola可盈可乐研究院
闪电网络的测试版本是2018年3月15日开始在比特币主网启动,闪电网络节点在2018年初仅为64个,年底则增加至2329个。2019年以来闪电网络节点更是迅速增长,到现在已经达到了4289个,仅仅用不到半年时间,节点翻倍增长。节点的不断扩大,预示着比特币闪电网络技术不断升级发展,是比特币价格的重要指标。
2. 闪电网络容量:增速加快
备注:2018.1-2019.5比特币闪电网络容量
数据来源:bitcoinvisuals,CoinCola可盈可乐研究院
上图数据显示,截至2019年5月15日,比特币闪电网络容量已经增加到了1039 BTC,相当833USD,而在2019年初时,仅为504BTC,闪电网络容量加倍扩大,而且增速加快。这意味着比特币扩容在闪电网络技术中得到较好的解决,将有利于比特币付款通道保持活跃,有效支撑比特币的功能应用。
挖矿、链上交易和闪电网络的表现与比特币价格密切相关。一方面,比特币价格上涨犹如一股催化剂,刺激其在挖矿、链上以及闪电网络方面的表现;另一方面,挖矿、链上交易和闪电网络是比特币价格走势的重要基石,是比特币价格预期的重要依据。
编辑于 2019-05-21
著作权归作者所有 · 申请转载
分享到
可盈可乐
比特币 (Bitcoin)
挖矿
评论
添加评论...
推荐阅读
入门 | 什么是挖矿?
比特币和区块链如此火爆,挖矿早已不是一个新鲜的名词了,很多人都…
比特客的文章 · 123 赞同
3分钟看懂比特币挖矿
很多行外人士对挖矿想不明白,什么哈希,容错、什么拜占庭,什么出块,搞的云里雾里,最后还弄了个挖矿,这都是行内人士故弄玄虚吧。 写这一小段文章,就是阐述几个概念,让行外人士快速理…
元庚的文章 · 70 赞同
排名前20名的各种虚拟货币简析
市值排名第一 BTC比特币人们称为“万币之王”,“数字黄金”真正的…
区块链存...的文章 · 15 赞同
三分钟读懂什么是比特币
1.去中心平时咱们花的钱, 是由国家政府集中发行的, 政府、法律都…
UP链参的文章 · 178 赞同
什么是比特币挖矿?
币全 101将用最为精准、通俗和简洁的语言为大家介绍区块链的相关基…
瘾博士的文章 · 8 赞同
比特币挖矿难度与收益计算
前言近期大家很关心的一个事情,就是BCC分叉后,由于难度调整以及价格上涨,矿工们为了获得更高的收益,开始迁移到BCC挖矿,但由于算力的涌入,下个难度周期又会提高难度,矿工又迁移到BTC…
bibo...的文章 · 42 赞同
关于比特币崩盘时间的预测
昨天和人讨论比特币,然后突然发现期货的上市带来的暴涨可能是一些大机构挖的坑,比特币可能在CME(芝商所)Cboe(芝加哥期权交易所)上市不久后崩盘。在上市后价格会保持一定的平稳在一定
2. 什么是比特币挖矿难度如何调整原理是什么
比特币挖矿难度(Difficulty),是对挖矿困难程度的度量,挖矿难度越大,挖出区块就越困难。目标值(Target)与挖矿难度成反比。难度越高,目标值越小。而难度目标是目标值通过转化得到,是一个只有 4 个字节的字段(为了便于理解,本文将难度目标等同目标值处理)。比特币系统正是通过调整区块头中难度目标来控制挖出区块所需平均时间的。
目标值是个长度为 256 比特的字符串,换句话说目标值约有 2^256 种可能的取值。调整难度目标就是调整目标值在整个输出空间的占比。
举例说明:挖矿就如射击,所有射出去的子弹都会落在一个很大的靶子上。难度目标就是这个大靶子上圈出一个范围,这个范围越小,被射中的难度就越高。调节难度目标,就是调节这个圈在整个靶子上的占比。
挖矿算力增大,单位时间射击的次数就越多,目标范围被射中所需的时间就越短。反之,挖矿算力减小,目标范围被击中所需的时间就越长。而比特币系统追求的平均出块时间为 10 分钟,这时候就需要调整难度目标来实现。
02 如何调整难度目标?
比特币系统是怎样调整难度目标的呢?在《白话区块链入门 080 | 数说比特币,了解 比特币 必须知道这 10 个数字》一文中,我们介绍了比特币系统每过 2016 区块(大约为 14 天时间),会自动调整一次难度目标。所有区块高度为 2016 整数倍的区块,系统就会自动调整难度目标。如果上一个难度目标调整周期(也就是之前 2016 个区块),平均出块时间大于 10 分钟,说明挖矿难度偏高,需要降低挖矿难度,增大难度目标(准确地说是目标值);反之,前一个难度目标调整周期,平均出块时间小于 10 分钟,说明挖矿难度偏低,需要缩小难度目标。
03 难度目标的可调范围
比特币系统设定,难度目标上调和下调的范围都有 4 倍的限制。举例说明:假设上一个难度目标调整周期内的 2016 个区块,由于算力暴涨,只用 7 天就全部挖出来了,通过难度目标调整,将难度目标缩小一倍,可以将平均出块时间维持在 10 分钟左右,但如果算力暴涨,前 2016 个区块全部挖出只用了 1 天,那么难度目标最小只能调整为原来的四分之一。
04 总结
比特币的算力是持续波动的,比特币系统通过难度目标的调整,使得平均出块时间维持在 10 分钟左右。难度目标和挖矿难度成反比,挖矿难度越大,难度目标越小。当区块高度为 2016 的整数倍时,比特币系统就会在该区块上,自动调整难度目标。如果上一个难度目标调整周期内,平均出块时间超过 10 分钟,那么降低挖矿难度,增大难度目标;反之则提高挖矿难度,减小难度目标。难度目标上调和下调的范围都有 4 倍的限制。
比特币每 2016 个区块(大约 14 天)调整一次挖矿难度,相比于 BCH 每个区块都调整(大约 10 分钟调整一次),有明显的滞后性。你认为是哪种调整方式更合理呢?为什么呢?欢迎在留言区分享你的观点。
3. 比特币挖矿的难度和算力
难度是对挖矿困难程度的度量,即指:计算符合给定目标的一个HASH值的困难程度。
difficulty = difficulty_1_target / current_target
difficulty_1_target 的长度为256bit, 前32位为0, 后面全部为1 ,一般显示为HASH值:, 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天
4. 比特币挖矿难度,什么是比特币矿难
大多数商人和投机客们感兴趣的东西永远都是能马上变成钱的东西,比特币就是其中之一,介于asic芯片的专业性,导致了比特币矿业和其它山寨币矿业的市场分离性。
绝大多数显卡矿机,cpu矿机出现矿难的时候,利用asic矿机挖矿的比特币并不会受到影响,作为虚拟货币圈子里的第一位大佬,已经成了币圈里面根深蒂固的信仰,2100万枚总量也决定了比特币的交易型和增值性。
尽管现在比特币已经开始被大多数人认知,它却没能真正替代世界的货币完成它的初衷,可它却成了超越黄金的收藏品,货币的通胀,矿总量减少,加上开采难度加大,都决定了它将来的市场前景,增值已经板上钉钉,所以人们都会挤破头去挖矿,因为挖到的比特币其实就是比黄金还值钱的收藏品
5. 魔兽世界怎么看自己挖矿几级
技能书,专业 ,采矿,就能看了
6. 进币圈必须知道的事:挖矿挖的是什么
这篇文章的主题是币圈挖矿挖的是什么,在本文中我们将通过表象、算法、本质3个不同层次来看这个问题,希望大家能坚持看完三层的看法,如果您对币圈比较熟悉,也可以直接看第三层。
第一层:从表面上看
有人说比特币预计会在2140年挖完,总计2100万枚,其实只要是理解了比特币算法的人,都很清楚,比特币永远不会被挖完1,只是挖到最后可能几年甚至几十年几百年才能挖出一枚来,所以自然就没人去挖了,也就相当于挖没了。同样的道理,总计2100万的比特币数量,最终也只是个大概数字而已。
大家看到的挖矿挖的是什么呢?拿币圈的开创者比特币来说, 挖矿挖的是一个个的数字区块,而这个区块被人们称之为“电子货币” 。这当然不是本文要说的本质。
之所以它能被称为货币,是因为在它的信众之间可以用来实物或者法币交易,所以毫无疑问,大家都认可币圈挖矿挖的是“电子货币”。
第二层:从算法上来看
这一层我们还是用币圈的开创货币比特币说明。
前文已经说过,比特币挖矿会随着时间的推移,越来越难挖到,为什么会这样呢?因为在比特币的算法里,有一个动态调整的难度值,这个难度值会随着时间的推移,不断的增大,以保证比特币越来越难挖到。这里不对难度值怎么调整展开说,读者先知道有难度值这回事。
比特币的挖矿,是用包含前一个区块的hash值(类似这样的一串数据)、随机数、以及一些其他数据进行计算,得到另外一个hash值,如果得到的hash值比用难度值确定的一个hash值小,就算是挖到了矿。
再通俗一点说(通俗就是是不精确
),比如说跟据当前的难度值,我们确定出所有挖矿计算出来的hash值,都需要小于的难度所对应的hash值, 那么如果挖到的hash值前面有更多的0,则算你挖到了矿。
大家现在也看到了,比特币挖矿挖的就是一块儿数据计算出来的hash值,大家可以讨论下这串数字有什么价值了。
有人说挖比特币是在解数学难题 ,我觉得如果挖比特币能把数学难题给解出来了,那确实是给数学界做贡献了。但实际大家应该明白了,根本就没什么数学难题,只是那一些随机的东西,去试通过一定计算得到的hash值够不够小。
到这里大家应该明白了从算法上看, 币圈挖的是也就是计算出来的一串数字 ,这里只是拿比特币做了说明,其他的币可能有着不同的算法,但本质是相同。
第三层:挖矿的实质
2017年币圈着实是火爆了一把,各种币的价值都是几十倍甚至几百倍的增长,就连空气币也能引来不少投资者的跟进。
火爆的币圈市场,让很多连区块链是什么、连比特币是怎么回事的人都冲了进去,因为大家都看到了各种币的疯狂增值,但好景不长,到了17年12月份比特币到达2万美元的峰值后,就开始下挫,导致有一些人可能连2018年的春节都没有过好。
既然想进币圈,我觉得先弄清楚币圈的挖矿的本质为好,不然成为韭菜就一点不冤枉了。
在我看来, 币圈挖矿实质挖的是信众 ,不管是什么币,信众多则价值高,信众少则价值少,信众不足则直接破发。
去年币圈市场的火爆,让很多以前并不怎么关注虚拟货币的人,甚至以前都没听说过比特币的人,看到别人在币圈发了财,也盲目的成了信众,成了先进入者的矿。到了17年12月份,经历了疯狂之后,多少人还敢相信还能继续涨,没有了新的信众进入,则各种币就失去了“矿源”,也就失去了增长的动力。
既然明白了币圈挖矿挖的是信众,那么一种币能坚持存在多久,就要看信众们能坚持多久了。一种带不来实际价值的虚拟货币,如果没有了新的信众,原有的信众就会慢慢失去信心和耐性,当原有的信众也开始放弃,则这种币就离破灭不久了。
以上是个人的一点观点,如果您同意我的看法,请点赞转发,如果有不同的观点,请文明留言,欢迎讨论。
总结
最后一句话总结, 区块链技术有着广阔的应用空间,但是虚拟货币终究是无源之水,“矿”终有一天会挖完 ,具体原因可以期待我的下一篇文章:《区块链的应用场景在哪儿?教你两步找到区块链的应用场景》。
1.比特币永远不会被挖完是相对的,如果能保证挖比特币的算力不会减少,并且永不放弃的前提下,有一天也会挖到最后一枚,但现实情况是当难度增加到一定值,有些算力会放弃,虽然保证一段时间内的能挖出来的数量保持不变,但算力的减少,算法中的挖矿难度有可能会降低,这样就导致能挖到的总量又会增多。
作者简介:
李景晨,子无忧创始人,原网络码农,独立游戏制作人,自研并使用区块链技术的经典互联网人。
7. 自学区块链(六)BTC-挖矿难度
我们来看下挖矿的计算公式
H(block header) target,这个target就是 目标阈值
BTC用的哈希算法是SHA-256,它产生的哈希值是256位,那么就有2^256种取值,这个就是他的输出空间,要增大挖矿难度, 就调节目标值在这个输出空间所占的比例 。
挖矿难度和目标阈值是成反比的, 当算力强时,调节难度,使目标阈值变小 。
不调节难度,随着矿工数量增多,随着算力的上升,那么挖到区块的时间就会变短,从10分钟缩短到1分钟甚至几秒钟,这个会带来什么样的问题呢?可能很多人觉得这不是挺好吗,交易等六个确认就会缩短时间了,交易就会变快了。其实出块时间缩到很短,风险是很大的,因为网络延迟,出块时间变短,不同节点很可能接到不同的区块信息,导致会有很多分叉节点出现。矿工会根据自己认为正确的区块接着挖。这种情况下,恶意节点发动分叉攻击就比较容易成功,因为诚实节点的算力被分散了。
导致不需要51%的算力就能成功,所以缩短出块时间是不利于BTC系统的稳定的。虽然10分钟不一定是最优的时间,但是也算是比较合理的。
下面是 算力增长曲线
下面是 挖矿难度曲线
下面是 平均出矿时间
我们来看下难度公式:每2016个区块调整一次挖矿难度,10分钟出一个平均算下来是两星期调整一次。
previous_difficulty是上一次的挖矿难度,分母是最近2016个区块花费的时间
每个节点挖矿是独立的,BTC的协议也是开源的,会不会有矿工不修改挖矿难度呢?可能性是存在的,但是不影响结果,因为广播给其他节点需要独立验证block header的哈希值, 这个header里面有难度的一个压缩编码,修改难度产生的结果是不会被诚实的节点认可的。
8. 我的世界不同难度挖矿有区别吗
我的世界不同难度挖矿有区别吗?我的世界不同难度挖矿有区别。
9. 详解比特币挖矿原理
可以将区块链看作一本记录所有交易的公开总帐簿(列表),比特币网络中的每个参与者都把它看作一本所有权的权威记录。
比特币没有中心机构,几乎所有的完整节点都有一份公共总帐的备份,这份总帐可以被视为认证过的记录。
至今为止,在主干区块链上,没有发生一起成功的攻击,一次都没有。
通过创造出新区块,比特币以一个确定的但不断减慢的速率被铸造出来。大约每十分钟产生一个新区块,每一个新区块都伴随着一定数量从无到有的全新比特币。每开采210,000个块,大约耗时4年,货币发行速率降低50%。
在2016年的某个时刻,在第420,000个区块被“挖掘”出来之后降低到12.5比特币/区块。在第13,230,000个区块(大概在2137年被挖出)之前,新币的发行速度会以指数形式进行64次“二等分”。到那时每区块发行比特币数量变为比特币的最小货币单位——1聪。最终,在经过1,344万个区块之后,所有的共20,999,999.9769亿聪比特币将全部发行完毕。换句话说, 到2140年左右,会存在接近2,100万比特币。在那之后,新的区块不再包含比特币奖励,矿工的收益全部来自交易费。
在收到交易后,每一个节点都会在全网广播前对这些交易进行校验,并以接收时的相应顺序,为有效的新交易建立一个池(交易池)。
每一个节点在校验每一笔交易时,都需要对照一个长长的标准列表:
交易的语法和数据结构必须正确。
输入与输出列表都不能为空。
交易的字节大小是小于MAX_BLOCK_SIZE的。
每一个输出值,以及总量,必须在规定值的范围内 (小于2,100万个币,大于0)。
没有哈希等于0,N等于-1的输入(coinbase交易不应当被中继)。
nLockTime是小于或等于INT_MAX的。
交易的字节大小是大于或等于100的。
交易中的签名数量应小于签名操作数量上限。
解锁脚本(Sig)只能够将数字压入栈中,并且锁定脚本(Pubkey)必须要符合isStandard的格式 (该格式将会拒绝非标准交易)。
池中或位于主分支区块中的一个匹配交易必须是存在的。
对于每一个输入,如果引用的输出存在于池中任何的交易,该交易将被拒绝。
对于每一个输入,在主分支和交易池中寻找引用的输出交易。如果输出交易缺少任何一个输入,该交易将成为一个孤立的交易。如果与其匹配的交易还没有出现在池中,那么将被加入到孤立交易池中。
对于每一个输入,如果引用的输出交易是一个coinbase输出,该输入必须至少获得COINBASE_MATURITY (100)个确认。
对于每一个输入,引用的输出是必须存在的,并且没有被花费。
使用引用的输出交易获得输入值,并检查每一个输入值和总值是否在规定值的范围内 (小于2100万个币,大于0)。
如果输入值的总和小于输出值的总和,交易将被中止。
如果交易费用太低以至于无法进入一个空的区块,交易将被拒绝。
每一个输入的解锁脚本必须依据相应输出的锁定脚本来验证。
以下挖矿节点取名为 A挖矿节点
挖矿节点时刻监听着传播到比特币网络的新区块。而这些新加入的区块对挖矿节点有着特殊的意义。矿工间的竞争以新区块的传播而结束,如同宣布谁是最后的赢家。对于矿工们来说,获得一个新区块意味着某个参与者赢了,而他们则输了这场竞争。然而,一轮竞争的结束也代表着下一轮竞争的开始。
验证交易后,比特币节点会将这些交易添加到自己的内存池中。内存池也称作交易池,用来暂存尚未被加入到区块的交易记录。
A节点需要为内存池中的每笔交易分配一个优先级,并选择较高优先级的交易记录来构建候选区块。
一个交易想要成为“较高优先级”,需满足的条件:优先值大于57,600,000,这个值的生成依赖于3个参数:一个比特币(即1亿聪),年龄为一天(144个区块),交易的大小为250个字节:
High Priority > 100,000,000 satoshis * 144 blocks / 250 bytes = 57,600,000
区块中用来存储交易的前50K字节是保留给较高优先级交易的。 节点在填充这50K字节的时候,会优先考虑这些最高优先级的交易,不管它们是否包含了矿工费。这种机制使得高优先级交易即便是零矿工费,也可以优先被处理。
然后,A挖矿节点会选出那些包含最小矿工费的交易,并按照“每千字节矿工费”进行排序,优先选择矿工费高的交易来填充剩下的区块。
如区块中仍有剩余空间,A挖矿节点可以选择那些不含矿工费的交易。有些矿工会竭尽全力将那些不含矿工费的交易整合到区块中,而其他矿工也许会选择忽略这些交易。
在区块被填满后,内存池中的剩余交易会成为下一个区块的候选交易。因为这些交易还留在内存池中,所以随着新的区块被加到链上,这些交易输入时所引用UTXO的深度(即交易“块龄”)也会随着变大。由于交易的优先值取决于它交易输入的“块龄”,所以这个交易的优先值也就随之增长了。最后,一个零矿工费交易的优先值就有可能会满足高优先级的门槛,被免费地打包进区块。
UTXO(Unspent Transaction Output) : 每笔交易都有若干交易输入,也就是资金来源,也都有若干笔交易输出,也就是资金去向。一般来说,每一笔交易都要花费(spend)一笔输入,产生一笔输出,而其所产生的输出,就是“未花费过的交易输出”,也就是 UTXO。
块龄:UTXO的“块龄”是自该UTXO被记录到区块链为止所经历过的区块数,即这个UTXO在区块链中的深度。
区块中的第一笔交易是笔特殊交易,称为创币交易或者coinbase交易。这个交易是由挖矿节点构造并用来奖励矿工们所做的贡献的。假设此时一个区块的奖励是25比特币,A挖矿的节点会创建“向A的地址支付25.1个比特币(包含矿工费0.1个比特币)”这样一个交易,把生成交易的奖励发送到自己的钱包。A挖出区块获得的奖励金额是coinbase奖励(25个全新的比特币)和区块中全部交易矿工费的总和。
A节点已经构建了一个候选区块,那么就轮到A的矿机对这个新区块进行“挖掘”,求解工作量证明算法以使这个区块有效。比特币挖矿过程使用的是SHA256哈希函数。
用最简单的术语来说, 挖矿节点不断重复进行尝试,直到它找到的随机调整数使得产生的哈希值低于某个特定的目标。 哈希函数的结果无法提前得知,也没有能得到一个特定哈希值的模式。举个例子,你一个人在屋里打台球,白球从A点到达B点,但是一个人推门进来看到白球在B点,却无论如何是不知道如何从A到B的。哈希函数的这个特性意味着:得到哈希值的唯一方法是不断的尝试,每次随机修改输入,直到出现适当的哈希值。
需要以下参数
• block的版本 version
• 上一个block的hash值: prev_hash
• 需要写入的交易记录的hash树的值: merkle_root
• 更新时间: ntime
• 当前难度: nbits
挖矿的过程就是找到x使得
SHA256(SHA256(version + prev_hash + merkle_root + ntime + nbits + x )) < TARGET
上式的x的范围是0~2^32, TARGET可以根据当前难度求出的。
简单打个比方,想象人们不断扔一对色子以得到小于一个特定点数的游戏。第一局,目标是12。只要你不扔出两个6,你就会赢。然后下一局目标为11。玩家只能扔10或更小的点数才能赢,不过也很简单。假如几局之后目标降低为了5。现在有一半机率以上扔出来的色子加起来点数会超过5,因此无效。随着目标越来越小,要想赢的话,扔色子的次数会指数级的上升。最终当目标为2时(最小可能点数),只有一个人平均扔36次或2%扔的次数中,他才能赢。
如前所述,目标决定了难度,进而影响求解工作量证明算法所需要的时间。那么问题来了:为什么这个难度值是可调整的?由谁来调整?如何调整?
比特币的区块平均每10分钟生成一个。这就是比特币的心跳,是货币发行速率和交易达成速度的基础。不仅是在短期内,而是在几十年内它都必须要保持恒定。在此期间,计算机性能将飞速提升。此外,参与挖矿的人和计算机也会不断变化。为了能让新区块的保持10分钟一个的产生速率,挖矿的难度必须根据这些变化进行调整。事实上,难度是一个动态的参数,会定期调整以达到每10分钟一个新区块的目标。简单地说,难度被设定在,无论挖矿能力如何,新区块产生速率都保持在10分钟一个。
那么,在一个完全去中心化的网络中,这样的调整是如何做到的呢?难度的调整是在每个完整节点中独立自动发生的。每2,016个区块(2周产生的区块)中的所有节点都会调整难度。难度的调整公式是由最新2,016个区块的花费时长与20,160分钟(两周,即这些区块以10分钟一个速率所期望花费的时长)比较得出的。难度是根据实际时长与期望时长的比值进行相应调整的(或变难或变易)。简单来说,如果网络发现区块产生速率比10分钟要快时会增加难度。如果发现比10分钟慢时则降低难度。
为了防止难度的变化过快,每个周期的调整幅度必须小于一个因子(值为4)。如果要调整的幅度大于4倍,则按4倍调整。由于在下一个2,016区块的周期不平衡的情况会继续存在,所以进一步的难度调整会在下一周期进行。因此平衡哈希计算能力和难度的巨大差异有可能需要花费几个2,016区块周期才会完成。
举个例子,当前A节点在挖277,316个区块,A挖矿节点一旦完成计算,立刻将这个区块发给它的所有相邻节点。这些节点在接收并验证这个新区块后,也会继续传播此区块。当这个新区块在网络中扩散时,每个节点都会将它作为第277,316个区块(父区块为277,315)加到自身节点的区块链副本中。当挖矿节点收到并验证了这个新区块后,它们会放弃之前对构建这个相同高度区块的计算,并立即开始计算区块链中下一个区块的工作。
比特币共识机制的第三步是通过网络中的每个节点独立校验每个新区块。当新区块在网络中传播时,每一个节点在将它转发到其节点之前,会进行一系列的测试去验证它。这确保了只有有效的区块会在网络中传播。
每一个节点对每一个新区块的独立校验,确保了矿工无法欺诈。在前面的章节中,我们看到了矿工们如何去记录一笔交易,以获得在此区块中创造的新比特币和交易费。为什么矿工不为他们自己记录一笔交易去获得数以千计的比特币?这是因为每一个节点根据相同的规则对区块进行校验。一个无效的coinbase交易将使整个区块无效,这将导致该区块被拒绝,因此,该交易就不会成为总账的一部分。
比特币去中心化的共识机制的最后一步是将区块集合至有最大工作量证明的链中。一旦一个节点验证了一个新的区块,它将尝试将新的区块连接到到现存的区块链,将它们组装起来。
节点维护三种区块:
· 第一种是连接到主链上的,
· 第二种是从主链上产生分支的(备用链),
· 第三种是在已知链中没有找到已知父区块的。
有时候,新区块所延长的区块链并不是主链,这一点我们将在下面“ 区块链分叉”中看到。
如果节点收到了一个有效的区块,而在现有的区块链中却未找到它的父区块,那么这个区块被认为是“孤块”。孤块会被保存在孤块池中,直到它们的父区块被节点收到。一旦收到了父区块并且将其连接到现有区块链上,节点就会将孤块从孤块池中取出,并且连接到它的父区块,让它作为区块链的一部分。当两个区块在很短的时间间隔内被挖出来,节点有可能会以相反的顺序接收到它们,这个时候孤块现象就会出现。
选择了最大难度的区块链后,所有的节点最终在全网范围内达成共识。随着更多的工作量证明被添加到链中,链的暂时性差异最终会得到解决。挖矿节点通过“投票”来选择它们想要延长的区块链,当它们挖出一个新块并且延长了一个链,新块本身就代表它们的投票。
因为区块链是去中心化的数据结构,所以不同副本之间不能总是保持一致。区块有可能在不同时间到达不同节点,导致节点有不同的区块链视角。解决的办法是, 每一个节点总是选择并尝试延长代表累计了最大工作量证明的区块链,也就是最长的或最大累计难度的链。
当有两个候选区块同时想要延长最长区块链时,分叉事件就会发生。正常情况下,分叉发生在两名矿工在较短的时间内,各自都算得了工作量证明解的时候。两个矿工在各自的候选区块一发现解,便立即传播自己的“获胜”区块到网络中,先是传播给邻近的节点而后传播到整个网络。每个收到有效区块的节点都会将其并入并延长区块链。如果该节点在随后又收到了另一个候选区块,而这个区块又拥有同样父区块,那么节点会将这个区块连接到候选链上。其结果是,一些节点收到了一个候选区块,而另一些节点收到了另一个候选区块,这时两个不同版本的区块链就出现了。
分叉之前
分叉开始
我们看到两个矿工几乎同时挖到了两个不同的区块。为了便于跟踪这个分叉事件,我们设定有一个被标记为红色的、来自加拿大的区块,还有一个被标记为绿色的、来自澳大利亚的区块。
假设有这样一种情况,一个在加拿大的矿工发现了“红色”区块的工作量证明解,在“蓝色”的父区块上延长了块链。几乎同一时刻,一个澳大利亚的矿工找到了“绿色”区块的解,也延长了“蓝色”区块。那么现在我们就有了两个区块:一个是源于加拿大的“红色”区块;另一个是源于澳大利亚的“绿色”。这两个区块都是有效的,均包含有效的工作量证明解并延长同一个父区块。这个两个区块可能包含了几乎相同的交易,只是在交易的排序上有些许不同。
比特币网络中邻近(网络拓扑上的邻近,而非地理上的)加拿大的节点会首先收到“红色”区块,并建立一个最大累计难度的区块,“红色”区块为这个链的最后一个区块(蓝色-红色),同时忽略晚一些到达的“绿色”区块。相比之下,离澳大利亚更近的节点会判定“绿色”区块胜出,并以它为最后一个区块来延长区块链(蓝色-绿色),忽略晚几秒到达的“红色”区块。那些首先收到“红色”区块的节点,会即刻以这个区块为父区块来产生新的候选区块,并尝试寻找这个候选区块的工作量证明解。同样地,接受“绿色”区块的节点会以这个区块为链的顶点开始生成新块,延长这个链。
分叉问题几乎总是在一个区块内就被解决了。网络中的一部分算力专注于“红色”区块为父区块,在其之上建立新的区块;另一部分算力则专注在“绿色”区块上。即便算力在这两个阵营中平均分配,也总有一个阵营抢在另一个阵营前发现工作量证明解并将其传播出去。在这个例子中我们可以打个比方,假如工作在“绿色”区块上的矿工找到了一个“粉色”区块延长了区块链(蓝色-绿色-粉色),他们会立刻传播这个新区块,整个网络会都会认为这个区块是有效的,如上图所示。
所有在上一轮选择“绿色”区块为胜出者的节点会直接将这条链延长一个区块。然而,那些选择“红色”区块为胜出者的节点现在会看到两个链: “蓝色-绿色-粉色”和“蓝色-红色”。 如上图所示,这些节点会根据结果将 “蓝色-绿色-粉色” 这条链设置为主链,将 “蓝色-红色” 这条链设置为备用链。 这些节点接纳了新的更长的链,被迫改变了原有对区块链的观点,这就叫做链的重新共识 。因为“红”区块做为父区块已经不在最长链上,导致了他们的候选区块已经成为了“孤块”,所以现在任何原本想要在“蓝色-红色”链上延长区块链的矿工都会停下来。全网将 “蓝色-绿色-粉色” 这条链识别为主链,“粉色”区块为这条链的最后一个区块。全部矿工立刻将他们产生的候选区块的父区块切换为“粉色”,来延长“蓝色-绿色-粉色”这条链。
从理论上来说,两个区块的分叉是有可能的,这种情况发生在因先前分叉而相互对立起来的矿工,又几乎同时发现了两个不同区块的解。然而,这种情况发生的几率是很低的。单区块分叉每周都会发生,而双块分叉则非常罕见。
比特币将区块间隔设计为10分钟,是在更快速的交易确认和更低的分叉概率间作出的妥协。更短的区块产生间隔会让交易清算更快地完成,也会导致更加频繁地区块链分叉。与之相对地,更长的间隔会减少分叉数量,却会导致更长的清算时间。
10. 比特币挖矿难度和算力有什么关系
2009年1月3日,中本聪(Satoshi Nakamoto)在位于芬兰赫尔辛基的一个小型服务器上,中本聪挖出了 比特币 的第一个区块,并获得了50个比特币的奖励。这标志着加密数字货币时代的来临。
创世区块是区块链技术中的第一个区块,是区块链中非常独特的一环,因为它是第一个区块——整个数字基础设施中唯一没有与前一个区块连接的区块。
比特币最早的挖矿难度只有1个哈希值,可以用最弱的消费者级别的CPU来开采比特币,而且有很大的机会获得比特币。
在随后的几年里,随着交易所建立,比特币持有者之间的交易活动变得更有组织性。挖矿的难度显著增加,它需要越来越强大的处理器,到后来升级到图形处理器。2013年,专门的ASIC挖矿硬件开始出现,性能甚至远远超过最强大的图形处理器。
到2013年底,比特币挖矿难度首次达到了1个Giga hash哈希值。这是创世纪块挖矿难度的1000*1000*1000倍。之后,比特币的挖矿难度又增加了数千倍。
挖矿难度是为了保证让比特币新区块的产生速度在平均每10分钟产生一个而设置的动态参数。
每挖2016个块便会做出一次调整,调整的依据是前面2016个块的出块时间,如果前一个周期平均出块时间小于10分钟,便会加大难度,大于10分钟,则减小难度,目的是为了保证系统稳定的每过10分钟产出一个块,所以难度调整的时间大概是2周(2016 * 10 分钟)。
比特币挖矿形同猜数字谜,矿工要找出一个随机数(Nonce)参与哈希运算 1Hash(Block+Nonce),使得区块哈希值符合难度要求。算力指计算机每秒可执行哈希运算的次数,也称为哈希率(hashrate)。一个矿机每秒钟能做多少次hash碰撞,就是其“算力”的代表,单位写成 hash/s或者H/s。
算力单位:
1 KH/s = 1000 H/s
1 MH/s = 1000 KH/s
1 GH/s = 1000 MH/s
1 TH/s = 1000 GH/s
1 PH/s = 1000 TH/s
1 EH/s = 1000 PH/s
全网算力是btc网络中参与竞争挖矿的所有矿机的算力总和。当前难度周期全网算力会影响下一个周期的难度调整, 如果全网算力增加,挖矿难度增大,单台矿机固定时间的产出就会减少。
那么,已知当前全网算力,下一个周期难度将如何调整呢?
根据公式:
难度 * 2^32 / 全网算力 = 出块时间
出块时间要稳定在10分钟, 也就是600s:
难度 = 600 * 24.42 * 10^18 / 2^32
= 3.46e+12
那么,在3.46e+12的难度下, 一台算力为14TH/s的矿机平均要花多长时间才能出一个块呢?
根据公式:
难度 * 2^32 / 算力 = 出块时间
有:
3.46 * 10^12 * 2^32 / 14 * 10^12
= 1.06e+9 s
结果大概是12270天。
原本中本聪设计的是一个公平的完全去中心化的一个数字货币系统,每个人都可以使用个人电脑进行挖矿。然而,有利可图时大量新算力不断加入,矿工竞争激烈,使得单个矿工的挖矿成功率几乎为零。
2011 年起矿池出现,大量矿工纷纷加入矿池,以稳定收入,摊薄成本。大量算力融入,使得比特币挖矿难度越来越大。数字货币挖矿业形同军事竞备,挖矿设备不断更新迭代,不再遵循摩尔定律。