比特币挖矿的目标值是怎么来的
比特币最吸引人的是挖矿。为什么采矿如此迷人?因为挖矿可以得到比特币。在写这篇文章的时候,比特币的价格是3900美元。如果能挖到一个区块,可以获得48750美元的开采收入和大约6000美元的交易费收入。这难道不令人着迷吗?
那么到底什么是采矿呢?矿工如何通过挖矿获得比特币?这需要从比特币区块链系统采用的PoW(工作量证明)共识机制说起。
有一个村子,很多事情需要一起决定。比如有一天村长需要所有村民一起决定今天中午在村食堂包饺子还是卷面条。通常我们能想到的方式是投票——每个村民一票,少数服从多数。但是有些村民不愿意在食堂吃饭,可能会把自己的票让给别人,可能会导致不公平。大竖悔毕部分在食堂吃饭的人,可能都实现不了自己的愿望。
于是村长换了一种方式。10点50分,他用喊话器向全体村民广播:“中午我们在食堂选做饺子还是面条。想去食堂吃饭的,就推食堂门口的巨石。11点整,石头会推到大门东边,他们中午吃饺子;推余芹到大门西边,中午吃面。”
于是想在食堂吃饭的人跑去推石头。贡献多的人最后实现了愿望,贡献少的人心甘情愿,因为村里一直就是这样的规矩。
这个故事讲述了一种在民众中达成共识的方式,我们可以称之为“工作量证明机制”。用努力的多少来证明自己的选择意愿。
在本系列的第一篇文章中,我们讨论了可以保持每个人的账簿一致的区块链系统。这种保持所有节点数据一致的机制称为共识机制。不同的共识算法可以达到不同性能的共识效果,最终目的是保持数据一致。
注意第一个,在任何块中,第一个都没有转出地址,也就是所谓的CoinBase (mining transaction)。没有人付给矿工这些钱,但是矿工只是写着他们得到了12.5个比特币。所有节点都同意矿工这样写,所以矿工获得采矿收入。
不同矿工填块的时候,数据肯定是不一样的,因为每个矿工的第一条规则肯定是不一样的,矿工只会把开采所得转到自己的地址。所以矿工迈克尔的CoinBase是“迈克尔获得了12.5个比特币”,矿工南希的CoinBase是“南希获得了12.5个比特币”。
每个矿工都填好了自己收集的交易和应该得到的收入。那么,谁的记录会得到大家的认可呢?比特币使用工作量证明机制,让矿工相互竞争来解决一个数学问题。谁先解决,谁就得到大家的认可。就像开篇故事中讲述的那个村庄一样,每个矿工都在用力推着巨石。一旦石头压住了他的账户页面,他喊道:“我的工作量证明是成功的。快来看!”所有的矿工都来了,抄下那一页账目,贴在账本后面,然后开始新的记账流程。周而复始,生生不息,账本一页页的增加,账本越来越厚。
当中本聪决定采用工作量认证机制时,出发点是为了避免系统受到攻击。“中本聪”认为,如果攻击者想通过搞乱账本来攻击,他需要足够的计算能力。换句话说,他比大多数推石头的人都厉害。这样他要付出巨大的成本,但回报不足以抵消成本,所以攻击者没有经济动机去攻击比特币系统。
但是,现在由于比特币的价格越来越高,推石头的人已经不满足于自己去推了,而是把家里的大骡子大马都派上去干活了。在“中本聪”最初的设计里,一个CPU一票,用算力来决定哪个矿工记的账成为最终的账目。随着比特币价格的增高,开始出现了GPU挖矿,后来人们又不满足于GPU的速度,开始制造专用芯片挖矿。专用芯片在计算比特币问题的能力上是普通CPU的数万倍,因此现在比特币已经不是“一个CPU一票”了,这也背离了当初“中本聪”的设计,比特币网络已经基本上被几大矿池所垄断,背离了去中心化货币这一初衷。
雷锋网特约稿件,未经授权禁止转载。详情见转载须知。
相关问答:显卡挖矿是什么意思?为什么显卡价格和挖矿有关?
作为一个曾经“梦想一夜暴富,最后血本无归”的“老矿工”,来回答这个问题,本文尽量用通俗的语言来描述一下挖矿、显卡挖矿和显卡价格的一些相关问题。
“挖矿”是什么意思?
简单来讲,挖矿就是产生数字货币的意思,数字货币有很多种,包括我们听到过比特币、莱特币、以太坊、币安币、狗狗币等。
这里,我们以比特币为例,来大致了解一下,比特币就是一种P2P形式的数字货币,P2P的去中心化特性与算法本身可以确保无法通过大量制造比特币来人为操控币值。所以,比特币其总数量有限,该货币系统曾在4年内只有不超过1050万个,之后的总数量将被永久限制在2100万个。
但是,与大多数货币不前手同,比特币不依靠特定货币机构发行,它依据特定算法,通过大量的计算机数据计算而产生,每隔一定时间就会通过“挖矿”产生一部分比特币。
“显卡挖矿”是什么意思?
我们知道了“挖矿”的含义,简单地说,不就是让电脑进行大量计算吗?这不正是电脑的长处吗?
那么,为什么“挖矿”总要拿显卡去挖,更为厉害的CPU,它不能挖吗?毕竟,显卡一般都是用来打游戏的,怎么会和数字货币扯上关系呢?
这里就要提到一个词语:算力。
我们要知道,挖矿最重要的就是电脑硬件的算力大小,相较于CPU的复杂运算,显卡进行的则是通用计算,往往都会堆叠上千甚至几千个流处理器。然而正好,挖矿只需要通用计算就能搞定,复杂运算却完全利用不上,所以,显卡的另外一个用武之地就是挖矿!
相当于什么意思呢?举个例子简单的例子:我们需要在大量的白纸上面写上一个数字1,我们安排10个老师和1000个小学生来做这件事,在相同时间内,这1000个小学生的完成量肯定要比10个老师完成的更多,虽然老师能力更强,但是在处理这种简单事情上,架不住小学生人多啊。
其实,早期的“挖矿”,确实是用CPU来进行的,后来,由于挖矿的难度越来越大,CPU的通用计算你能力已经并无法满足挖矿的需求了,所以就用到显卡来挖矿。反而,对于我们平时注重的电脑性能提升的重点硬件CPU和内存要求并不高,有的时候仅仅需要能够保证运行操系统和相关软件就行。我当初自己配置的小型矿机,使用的CPU和CPU散热都是二手货,内存仅为4GB,使用的硬盘仅为60G,然而搭配的确是6块显卡和可以插6块显卡的主板。
为什么显卡价格和挖矿有关?
关于显卡的价格与挖矿的关系,一般可以从新显卡和二手显卡市场的价格来分别说一下。
第一,新显卡方面。
其实,新显卡的价格上涨,主要是在前两年,最近显卡价格正在逐渐回落。而当初,显卡价格上涨跟当时比特币的市场行情有很大关系。当时的比特币价格可谓是达到了疯狂状态,所以催生了大量的专业“矿工”和“挖矿公司”,当然,也包括大量的像我一样的“挖矿散户”。
当时,有媒体报道,有部分地区的网吧竟然关门歇业,战而进行专业挖矿,其火热程度可想而知。
后来,由于数字货币价格回落,并且相关监管部门对数字货币及挖矿项目的规范化管理,行业正逐步回归理性和正规,加上挖矿行业与环境保护相悖,所以大量的矿工转行、矿机关闭,同时,相关企业也研发出了专用的挖矿机器,造成显卡需求持续下降,显卡价格随之下降。
大量的市场需求,导致显卡的价格一涨再涨;市场需求降低,显卡价格也逐步回落,这与市场的供需关系和价格浮动是相匹配的。
第二,二手显卡方面。
挖矿用的显卡,我们俗称矿卡。随着矿机对显卡的大量需求,二手显卡也被很多矿工所青睐;但又随着大量矿机关闭,大量矿卡肯定流入二手市场,而很多良心人士,是不建议普通用户购买二手矿卡的。所以,显卡二手市场的的价格也就随着挖矿行业的行情变化而变化。
举个真实的例子,AMD曾推出了一款显卡叫Radeon Ⅶ,于2019年2月发布,7月份停产,发布时价格仅为5000多。但是,在停产一年半过后,其二手价格竟高达8000元左右,而这仅仅是由于这块显卡各方面的性能数据更加有利于挖矿。
总体而言,显卡挖矿就是一种利用显卡本身的优势来进行数字货币的生产,而挖矿行业的兴衰,就直接影响了显卡价格的波动。
在此,奉劝还未进入而又想进入“矿圈”的普通玩家,放弃吧,因为有可能,下一个“血本无归”的,就是你!
B. 什么是比特币挖矿难度如何调整原理是什么
比特币挖矿难度(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 分钟调整一次),有明显的滞后性。你认为是哪种调整方式更合理呢?为什么呢?欢迎在留言区分享你的观点。
C. 比特币挖矿的难度和算力
难度是对挖矿困难程度的度量,即指:计算符合给定目标的一个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天
D. 比特币的挖矿到底在计算什么
比特币的挖矿计算其实就是大家一起做数学题,题干是需要被记录的交易,大家通过做题抢夺记账权,抢到的矿工就能获得系统奖励和交易手续费。比特币用的SHA256算法的特点是已知答案验证正确很容易,但是要得到答案非常麻烦,需要一个一个数字去试。最先得到答案的矿工大家就都认可他是抢到了记账权,奖励就归他了。大家继续抢下一题的记账权。简单来说这些计算的意义只在于保证整个系统的稳定安全,并没有更多的意义。
把比特币看作是计算的副产品是不全面的,比特币的产生发行、比特币链上所有的交易流通、比特币系统的稳定性,都是计算的目的,是一体的。当然除了维护这个系统之外,的确并没有产生其他的价值和产物。这也是比特币被指责不环保浪费资源的一个黑点。总的来说,比特币作为一个里程碑式的区块链数字货币,其源于大量的算力投入和用户信任的巨大价值。这一点还是毋庸置疑的。
E. 比特币挖矿的原理是什么
比特币挖矿是利用计算机硬件为比特币网络做数学计算进行交易确认和提高安全性的过程。
F. 比特币挖矿是随机获取到的吗
可以说是随机的,但是如果只是说随机就能获取,这样的说法也不准确。首先来说说如何通过挖矿来获得比特币?
根据比特币基本算法,比特币每10分钟产生1个区块,每个区块里有N个比特币作为报酬,这个区块包含了最近10分钟所有的比特币交易信息。
制造比特币的过程叫做“挖矿”,在这个过程中,计算机吧最近收到的账单打包在刚制造的区块里,这个打包的过程即制作的过程,只有极其稀少的几率被制造成功。一旦制造成功,你就把这个区块广播出去,这就意味着,你获得了这个区块的N个比特币作为报酬。
那么N是多少呢?根据比特币算法,在比特币发布之日起的头4年里,N = 基础报酬(50个比特币) + 交易报酬(过去10分钟内整个比特币网络耗费的交易手续费,前面已经说过,每笔比特币交易会消耗0.001比特币作为报酬给挖矿的人),每隔4年,N的基础奖励将减少一半,也就是说,头4年为50,第5-8年为25,第9-12年为12.5,以此类推。而随着比特币越来越普及,交易越来越频繁,N的交易奖励会逐渐增加。
从2013年5月起,比特币正式进入了第5年,因此到2017年5月之前,每个区块的报酬N为25+交易报酬。
注:实际上,比特币挖矿的用户数量非常庞大,而每10分钟产出的比特币又十分有限,因此挖矿的难度已经是非常非常大了,如果你拥有性能强劲的显卡,那么会有一定的收益,如果你的显卡不好,那么你可能需要耗费N个小时才可以获得一点点比特币。
G. 姣旂壒甯佹庝箞鎸栧嚭鏉ョ殑锛熷垎鏋愭瘮鐗瑰竵鎸栫熆鍘熺悊
浣嗗嚒瀵规瘮鐗瑰竵鏈変竴鐐圭偣鍏磋叮锛屽氨涓瀹氬惉杩囨寲鐭胯繖涓や釜瀛楋紝姣旂壒甯佹寲鐭胯窡灞辫タ鎸栫熆涓嶄竴鏍凤紝浣犱笉鐢ㄦ墰鐫宸ュ叿鍘诲栭潰锛屽湪瀹堕噷浣跨敤鐢佃剳鎴栨寲鐭挎満璁惧囧氨鍙浠ュ紑宸ヤ簡锛岃嫢鏄瓒冲熷垢杩愶紝灏辨湁鏈轰細鎸栧埌涓涓鍖哄潡锛屽苟鑾峰緱12.5涓姣旂壒甯佸栧姳锛岄『甯﹂偅涓鍖哄潡閲屾墍鏈変氦鏄撶殑鎵嬬画璐癸紝杩欐槸骞垮ぇ鐭垮伐搴熷瘽蹇橀熺殑婧愬姩鍔涳紝閭d箞锛屾瘮鐗瑰竵鎬庝箞鎸栧嚭鏉ョ殑鍛锛熶笅闈㈠竵鍦堝瓙灏忕紪灏辨潵缁欏ぇ瀹跺垎鏋愬垎鏋愭瘮鐗瑰竵鎸栫熆鍘熺悊銆
姣旂壒甯佹庝箞鎸栧嚭鏉ョ殑锛
浠讳綍浜哄潎鍙浠ュ湪涓撻棬鐨勭‖浠朵笂杩愯岃蒋浠惰屾垚涓烘瘮鐗瑰竵鐭垮伐銆傛寲鐭胯蒋浠堕氳繃P2P缃戠粶鐩戝惉浜ゆ槗骞挎挱锛屾墽琛屾伆褰撶殑浠诲姟浠ュ勭悊骞剁‘璁よ繖浜涗氦鏄撱傛瘮鐗瑰竵鐭垮伐瀹屾垚杩欎簺宸ヤ綔鑳借禋鍙栫敤鎴锋敮浠樼殑鐢ㄤ簬鍔犻熶氦鏄撳勭悊鐨勪氦鏄撴墜缁璐逛互鍙婃寜鍥哄畾鍏寮忓炲彂鐨勬瘮鐗瑰竵銆
鏂扮殑浜ゆ槗闇瑕佽鍖呭惈鍦ㄤ竴涓鍏锋湁鏁板﹀伐浣滈噺璇佹槑鐨勫尯鍧椾腑鎵嶈兘琚纭璁ゃ傝繖绉嶈瘉鏄庡緢闅剧敓鎴愬洜涓哄畠鍙鑳介氳繃姣忕掑皾璇曟暟鍗佷嚎娆$殑璁$畻鏉ヤ骇鐢熴傜熆宸ヤ滑闇瑕佸湪浠栦滑鐨勫尯鍧楄鎺ュ彈骞舵嬁鍒板栧姳鍓嶈繍琛岃繖浜涜$畻銆傞殢鐫鏇村氱殑浜哄紑濮嬫寲鐭匡紝瀵绘壘鏈夋晥鍖哄潡鐨勯毦搴﹀氨浼氱敱缃戠粶鑷鍔ㄥ炲姞浠ョ‘淇濇壘鍒板尯鍧楃殑骞冲潎鏃堕棿淇濇寔鍦10鍒嗛挓銆傚洜姝わ紝鎸栫熆鐨勭珵浜夐潪甯告縺鐑堬紝娌℃湁涓涓涓浣撶熆宸ヨ兘澶熸帶鍒跺潡閾鹃噷鎵鍖呭惈鐨勫唴瀹广
宸ヤ綔閲忚瘉鏄庤繕琚璁捐℃垚蹇呴』渚濊禆浠ュ線鐨勫尯鍧楋紝杩欐牱渚垮己鍒朵簡鍧楅摼鐨勬椂闂撮『搴忋傝繖绉嶈捐′娇寰楁挙閿浠ュ線鐨勪氦鏄撳彉寰楁瀬鍏跺洶闅撅紝鍥犱负闇瑕侀噸鏂拌$畻鎵鏈夊悗缁鍖哄潡鐨勫伐浣滈噺璇佹槑銆傚綋涓や釜鍖哄潡鍚屾椂琚鎵惧埌锛岀熆宸ヤ細澶勭悊鎺ユ敹鍒扮殑绗涓涓鍖哄潡锛屼竴鏃︽壘鍒颁笅涓涓鍖哄潡渚垮皢鍏惰浆鑷虫渶闀跨殑鍧楅摼銆傝繖鏍峰氨纭淇濋噰鐭胯繃绋嬬淮鎸佷竴涓鍩轰簬澶勭悊鑳藉姏鐨勫叏灞涓鑷存с
姣旂壒甯佺熆宸ユ棦涓嶈兘閫氳繃浣滃紛澧炲姞鑷宸辩殑鎶ラ叕锛屼篃涓嶈兘澶勭悊閭d簺鐮村潖姣旂壒甯佺綉缁滅殑娆鸿瘓浜ゆ槗锛屽洜涓烘墍鏈夌殑姣旂壒甯佽妭鐐归兘浼氭嫆缁濆惈鏈夎繚鍙嶆瘮鐗瑰竵鍗忚瑙勫垯鐨勬棤鏁堟暟鎹鐨勫尯鍧椼傚洜姝わ紝鍗充娇涓嶆槸鎵鏈夋瘮鐗瑰竵鐭垮伐閮藉彲浠ヤ俊浠伙紝姣旂壒甯佺綉缁滀粛鐒舵槸瀹夊叏鐨勩
鐩鍓嶏紝鐩稿逛簬缇庡浗鍜屾ф床鐨勭熆宸ワ紝琚涓鍥戒汉涓诲肩殑鐭挎睜渚濇棫鍗犳嵁鐫浼樺娍銆備腑鍥界熆宸ヤ笉浠呮帶鍒朵簡澶ч儴鍒嗙畻鍔涳紝鑰屼笖浠栦滑鐨勭數璐规垚鏈閫氬父涔熸洿浣庛
1鏈15鏃ワ紝姣旂壒甯侀毦搴﹁涓婅皟浜嗙害7%锛屼富瑕佺殑鍘熷洜灏辨槸鏈杩戞瘮鐗瑰竵绠楀姏鍑虹幇澶у箙搴︾殑鎻愬崌銆傝繖鏄鏈鏈堢洰鍓嶄负姝㈡瘮鐗瑰竵闅惧害绗浜屾¤涓婅皟锛1鏈2鏃ワ紝姣旂壒甯佹寲鐭块毦搴﹀氨鏇捐涓婅皟浜6.6%銆備粠2019骞翠笅鍗婂勾寮濮嬶紝涓嶆柇鎺ㄩ珮鐨勭畻鍔涗篃璁╅毦搴︽寔缁澧炲姞銆傞櫎浜2019骞11鏈18鏃ョ殑渚嬪栨儏鍐(姣旂壒甯佺殑闅惧害鐭鏆備笅璋冭繃7.1%宸﹀彸)锛屽叾瀹冨ぇ閮ㄥ垎鏃堕棿姣旂壒甯侀毦搴﹂兘鍦ㄥ揩閫熷為暱銆
鎸夌収姣旂壒甯佷骇鍑虹殑杩愮畻鍏寮忥紝鍑犱箮姣忛4骞撮兘浼氫骇鍑哄噺鍗婏紝鏈缁堣揪鍒版瀬鍊2100涓囦釜銆傝屾瘡閫㈡ゆ椂锛岄兘浼氬ぇ骞呭崌鍊笺傝繖绉嶆病鏈変腑澶閾惰屾帶鍒剁殑璐у竵锛屼笌涓嶆柇閲忓寲瀹芥澗鐨勭幇瀹炶揣甯佺浉姣旓紝涔熷皢浼氫笉鏂鍗囧笺傚埌2013骞达紝姣旂壒甯佸凡缁忎骇鐢熷嚭浜嗗ぇ绾1100澶氫竾涓銆
鏈鍒濈殑鏃跺欙紝鐢–PU灏卞彲浠ユ寲鍒版瘮鐗瑰竵锛屼腑鏈鑱灏辨槸鐢ㄤ粬鐨勭數鑴慍PU鎸栧嚭浜嗕笘鐣屼笂绗涓涓鍒涗笘鍖哄潡銆傜劧鑰岋紝CPU鎸栫熆鐨勬椂浠f棭宸茶繃鍘伙紝鐜板湪鐨勬瘮鐗瑰竵鎸栫熆鏄疉SIC鎸栫熆鍜屽ぇ瑙勬ā闆嗙兢鎸栫熆鐨勬椂浠c
鎸栫熆閫熷害锛屼笓涓氱殑璇存硶鍙绠楀姏锛屽氨鏄璁$畻鏈烘瘡绉掍骇鐢熷搱甯岀版挒鐨勮兘鍔涖備篃灏辨槸璇达紝鎴戜滑鎵嬮噷鐨勭熆鏈烘瘡绉掕兘鍋氱殑鍝堝笇纰版挒娆℃暟锛屽氨鏄绠楀姏銆傛瘮鐗瑰竵鍦ㄥ畯瑙備笂鐨勫師鐞嗭紝灏卞傚悓榛勯噾涓鏍枫傞粍閲戝湪鍦扮悆涓婄殑鎬婚噺鏄涓瀹氱殑锛岃屼笖姣旇緝绋灏戯紝鍙浠ヤ綔涓轰竴鑸绛変环鐗╂潵浣跨敤锛屽湪绾稿竵澶ч潰绉鍙戣屼箣鍓嶏紝涓鐩翠綔涓鸿揣甯佺殑褰㈠紡鏉ヤ娇鐢ㄣ傛瘮鐗瑰竵涔熸槸涓涓閬撶悊锛屼箣鎵浠ユ瘮鐗瑰竵鍙浠ョ敤鏉ヤ綔涓鸿揣甯佺殑褰㈠紡鏉ヨ繘琛屼拱鍗栵紝涔熸槸鍥犱负鍏舵婚噺鏄涓瀹氱殑锛岃屼笖鎸栫熆闇瑕佽姳璐瑰緢澶х殑鎴愭湰锛屼富瑕佽〃鐜板氨鏄鐢靛姏涓婄殑娑堣椼
宸ヤ綔閲忚瘉鏄庯紝绠鍗曠悊瑙e氨鏄涓浠借瘉鏄庯紝鐢ㄦ潵纭璁や綘鍋氳繃涓瀹氶噺鐨勫伐浣溿傜洃娴嬪伐浣滅殑鏁翠釜杩囩▼閫氬父鏄鏋佷负浣庢晥鐨勶紝鑰岄氳繃瀵瑰伐浣滅殑缁撴灉杩涜岃よ瘉鏉ヨ瘉鏄庡畬鎴愪簡鐩稿簲鐨勫伐浣滈噺锛屽垯鏄涓绉嶉潪甯搁珮鏁堢殑鏂瑰紡銆
鐩樼偣鎸栫熆鎵闇璁惧:
1.鐭挎満锛岄氬父涓婄櫨銆佷笂鍗冩垨鑰呬笂涓囧彴銆
2.鐭垮満锛氶氶庛佹俯搴︽箍搴﹂備腑鐨勪笓涓氬満鍦般
3.鐢靛姏璧勬簮锛氱ǔ瀹氫緵搴斾笖浠锋牸鍚堢悊鐨勭數鍔(閫氬父鐭垮満閮藉缓绔嬪湪鐢靛姏璧勬簮鍚堥傜殑鍦哄湴)锛屼赴姘寸數浠烽氬父鍦0.25鍏冨乏鍙筹紝鍏ㄥ勾鐢典环鍦0.35-0.4鍏冨乏鍙炽
4.缃戠粶璁惧囷細浜ゆ崲鏈恒佽矾鐢卞櫒绛夈
5.鐢垫簮锛氳窡鐭挎満閰嶅楃殑鐢垫簮锛屼笉鍚岀殑鐭挎満瀵圭數婧愮殑鍔熻楄佹眰涓嶄竴锛岄渶瑕佽喘涔板尮閰嶇殑鐢垫簮锛屼互鍏嶇儳鍧忔満鍣ㄦ垨鑰呯數婧愩
6.鐢垫簮绾垮拰缃戠嚎绛夈
7.鐭垮満绠$悊浜哄憳锛氫簡瑙e姞瀵嗘暟瀛楄揣甯佸拰鎸栫熆鐨勭$悊浜哄憳銆
8.鍏朵粬鎶鏈浜哄憳锛氱簿閫氱數鍔涚嚎璺缁存姢銆佺綉缁滅淮鎶ょ殑鎶鏈浜哄憳銆
9.娉ㄥ唽鐭挎睜璐﹀彿銆
10.閽卞寘/浜ゆ槗鎵鍦板潃锛氭敞鍐岄挶鍖呮垨鑰呬氦鏄撴墍璐﹀彿锛岃幏鍙栨墍鎸栧竵绉嶇殑鍦板潃锛屽~鍐欒嚦鐭挎睜銆傝嫢涓嶅~鍐欏湴鍧锛屾敹鐩婂皢鏆傛椂瀛樻斁鐭挎睜銆
閫氳繃浠ヤ笂浠嬬粛锛岀浉淇″ぇ瀹跺逛簬姣旂壒甯佹庝箞鎸栧嚭鏉ョ殑杩欎釜闂棰樺凡缁忔湁鎵浜嗚В锛屽叾瀹炲逛簬鎸栫熆鏉ヨ达紝鏈閲嶈佺殑灏辨槸鎸栫熆鏈猴紝鑰屾瘮鐗瑰竵鎸栫熆鏈虹殑閫夋嫨锛岄櫎浜嗚冭檻浠锋牸鍜岀畻鍔涳紝涔熻秺鏉ヨ秺娉ㄩ噸鐭挎満鐨勭ǔ瀹氭у拰鍏堣繘鎬э紝鍙﹀栧氨鏄瑕佹姄浣忕幇鍦ㄦ敹鐩婇珮涓嶇‘瀹氭т綆鐨勬椂闂寸獥鍙o紝鏃╂寲鏃╄禋鎵嶈兘绔嬩簬涓嶈触涔嬪湴锛屾瘯绔熷彧鏈夊疄瀹炲湪鍦ㄦ寲鍒颁簡甯侊紝鎵嶆湁绛圭爜绛夊緟鏂扮殑鏈轰細鍑虹幇銆
H. 详解比特币挖矿原理
可以将区块链看作一本记录所有交易的公开总帐簿(列表),比特币网络中的每个参与者都把它看作一本所有权的权威记录。
比特币没有中心机构,几乎所有的完整节点都有一份公共总帐的备份,这份总帐可以被视为认证过的记录。
至今为止,在主干区块链上,没有发生一起成功的攻击,一次都没有。
通过创造出新区块,比特币以一个确定的但不断减慢的速率被铸造出来。大约每十分钟产生一个新区块,每一个新区块都伴随着一定数量从无到有的全新比特币。每开采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分钟,是在更快速的交易确认和更低的分叉概率间作出的妥协。更短的区块产生间隔会让交易清算更快地完成,也会导致更加频繁地区块链分叉。与之相对地,更长的间隔会减少分叉数量,却会导致更长的清算时间。