『壹』 持续上涨的比特币,一年一共生产几枚呢
『贰』 详解比特币挖矿原理
可以将区块链看作一本记录所有交易的公开总帐簿(列表),比特币网络中的每个参与者都把它看作一本所有权的权威记录。
比特币没有中心机构,几乎所有的完整节点都有一份公共总帐的备份,这份总帐可以被视为认证过的记录。
至今为止,在主干区块链上,没有发生一起成功的攻击,一次都没有。
通过创造出新区块,比特币以一个确定的但不断减慢的速率被铸造出来。大约每十分钟产生一个新区块,每一个新区块都伴随着一定数量从无到有的全新比特币。每开采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分钟会产生1个区块,矿工完成计算任务,发现新的区块后,会获得约12.5个比特币的奖励,发现新区块又被称为爆块或者报块。
『肆』 比特币不是10分钟一个块吗
比特币是平均10分钟产生一个块,并不是平均分配的。
一个块是块链中的一条记录,包含并确认待处理的交易。平均约每10分钟就有一个包含交易的新块通过挖矿的方式添加到块链中。
普银、莱特币、狗狗币、瑞波币都有自己的区块,交易的信息都会记录到区块链上。
『伍』 关于比特币的几个问题的研究
018年,区块链技术井喷式的发展,同1997年那会儿的互联网何其相像。笔者相信,区块链技术的发展,肯定会快过互联网。如果再不摄入点区块链方面的知识,也许你将落后一个时代。本文将回答关于比特币的几个问题。
问题一:比特币怎么诞生的?
2008年11月1日,一个自称中本聪(Satoshi Nakamoto)的人在一个隐秘的密码学评论组(密码朋克)上贴出了一篇研讨微V-BQ尔无吧疤Y陈述,陈述了他对电子货币的新设想——比特币就此面世。
问题二:比特币如何生产?
比特币网络通过“挖矿”来生成新的比特币。所谓“挖矿”实质上是用计算机解决一项复杂的数学问题,来保证比特币网络分布式记账系统的微V-BQ尔无吧疤Y一致性。比特币每10分钟产生一个区块,包含过去十分钟所有的交易信息。谁能算出数字,谁就获得记账权。获得记账权后,将向全网广播、存储。由谁获得记账权是不确定的,当然,你运算能力越强,获得记账权的几率越高。随后比特币网络会新生成一定量的比特币作为赏金,奖励获得记账权的人。
问题三:比特币的特点?
完全去处中心化,没有发行机构,也就不可能操纵发行数量。比特币不需要第三方机构,彼此信任的点对点交易。信任的建立不再基于大型机构,而是基于密码技术和代码。比特币可以在任意一台接入互联网的电脑上管理。不管身处何方,任何人都可以挖掘、购买、出售或收取比特币。操控比特币需要私钥,它可以被隔离保存在任何存储介质,除了用户自己之外无人可以获取。作为由A到B的支付手段,比特币没有繁琐的额度与手续限制,知道对方比特币地址就可以进行支付。
问题四:比特币能被仿造吗?
山寨者难以生存。由于比特币算法是完全开源的,谁都可以下载到源码,修改些参数,重新编译下,就能创造一种新的p2p货币。但这些山寨货币微V-BQ尔无吧疤Y很脆弱,极易遭到51%攻击。任何个人或组织,只要控制一种p2p货币网络51%的运算能力,就可以随意操纵交易、币值,这会对p2p货币构成毁灭性打击。很多山寨币,就是死在了这一环节上。而比特币网络已经足够健壮,想要控制比特币网络51%的运算力,所需要的cpu/gpu数量将是一个天文数字。
问题五:为什么比特币总量为2100万?
2009年比特币诞生的时候,每笔赏金是50个比特币。诞生10分钟后,第一批50个比特币生成了,而此时的货币总量就是50。随后比特币就以约每10分钟50个的速度增长。当总量达到1050万时(2100万的50%),赏金减半为25个。当总量达到1575万(新产出525万,即1050的50%)时,赏金再减半为12.5个。依此类推。根据其设计原理,比特币的总量会持续增长,直至100多年后达到2100万的那一天。但比特币货币微V-BQ尔无吧疤Y总量后期增长的速度会非常缓慢。简单来说,比特币产量每4年减半,目前每10分钟产生12.5个比特币。事实上,87.5%的比特币都将在头12年内被“挖”出来。而且,2100万也只是理论数据,现实中,由于初期比特币不受重视,不少比特币遗失。
问题六:比特币矿工有哪些收益?
首先是通过运算,获得记账权后,直接奖励比特币。但按照比特币规则,随着时间增长,奖励会越来越少。将来的收益,主要通过收取比特币交易产生的手续费。
问题七:为什么比特币不可修改?
举个例子,假如A和B进行交易,A需要付给B一百个比特币。但如果A想要赖账,只想付给B一个比特币。按照比特币的规则,他就必须要获得下一个10分钟微V-BQ尔无吧疤Y的记账权,才能修改;同样,他也必须要再获得下下个10分钟的记账权,以此类推。所以,修改是几乎不可能的。
问题八:比特币交易速率?
理论上讲,比特币交易速率是每秒7笔。实际上,比特币目前交易速度只有每秒一笔。
问题九:比特币为什么有如此强的生命力?
把比特币比作一个公司,那么他没有股东会、董事会、管理层,没有严厉的领导,没有HR,没有部门经理,没有员工,没有经营场地,没有收入。但比特币公司成功运行了9年时间,从没有出现任何问题,并且市值数千亿,网络的运行时依靠一套数学算法、激励机制和社区来进行管理和治理。
问题十:比特币面临的问题?
一是交易确认时间长。比特币钱包初次安装微V-BQ尔无吧疤Y时,会消耗大量时间下载历史交易数据块。而比特币交易时,为了确认数据准确性,会消耗一些时间,与p2p网络进行交互,得到全网确认后,交易才算完成。
二是大众对原理不理解,以及传统金融从业人员的抵制。懂原理的人,知道比特币无法人为操纵和控制。但大众并不理解,很多人甚至无法分清比特币和Q币的区别。“没有发行者”是比特币的优点,但在传统金融从业人员看来,“没有发行者”的货币毫无价值。
『陆』 一枚比特币卖$64015,家用电脑24小时挖矿,多久才能挖到一枚
从理论上来讲,任何一台可以运转的计算机安装相应软件后即可成为“挖矿机”,这意味着任何拥有电脑的人也都是潜在的矿工。
很多人可能觉得比特币挖矿很容易,只需要下载一个软件,然后在电脑上运行就行了,就像运行炒股软件一样,在这只能说大家是异想天开。
事实上按照目前比特币的挖矿难度来看,普通的家庭电脑根本就吃不消,比特币挖矿其实就是在运算,这种特定的算法是基于加密哈希算法的数学难题,想要解开这一数学难题,则需要这台用于挖矿的计算机具备极强的数据处理能力。
在几年前比特币挖矿难度比较低的时候,家庭电脑或许还可以用到,在最开始的时候,确实有不少人用家庭电脑挖到比特币了。
但是随着比特币挖矿难度越来越大,它所消耗的运力越来越多,特别是最近一段时间,有大量的人群加入到挖矿当中,挖矿的速度比较快,这进一步加大了挖矿的难度。
比特币平均下来大约每十分钟产生一个新区块,每一个新区块都伴随着一定数量从无到有的全新比特币,每开采210,000个块,大约耗时4年,货币发行速率降低50%。
而未了达到平均每10分钟产生一个新区块的平衡,挖矿难度在每2016个区块之后或大约每14天增加或减少一次,具体难度是增加还是减少主要取决于发现之前2016个区块的速度。如果之前的2016年区块发现时间少于14天,则难度增加,而如果发现时间超过14天则难度降低,目标是将平均区块发现时间恢复到10分钟。
而按照最近一段时间参与挖矿的人数来看,事实上发现2016个区块的速度可能要小于14天,这意味着越往后面挖矿难度越大。
如果中本聪把比特币换成法币,需要他的银行账号去接收法币,这家银行将有一批人知道中本聪的真实身份,在这种情况下,我认为全员保守秘密是不可能的,一定会有人通过某种方式将信息泄露出来。这就意味着中本聪完全暴露在世人面前,中本聪长期以来保持匿名的努力毁于一旦。
这么多年来,有无数人声称自己是中本聪,最终没人能证明自己就是中本聪。而他们想证明自己也很简单,用中本聪的地址交易1美元即可。
当然,如果中本聪想把比特币换成其他加密货币,是不会暴露身份的,但这样做的意义是什么?他是比特币世界的上帝,不是以太坊世界的上帝, 一个上帝不能背叛自己的世界 。
更进一步思考,中本聪为什么要把比特币换成美元?在白皮书里,中本聪对比特币的定义是一种“电子现金系统”,毫无疑问他的理想是比特币终有一天变成全世界都认可的“钱”。 如果比特币真成了钱,比美元更普适的钱,还需要换成美元吗?
我们不如去思考一些更有趣的问题,比如:我们让比特币涨到多少,能帮助中本聪成为真正的世界首富?
中本聪的身份,是比特币世界最大的谜团,是构成一个好故事不可缺少的一环。我经常会猜想,如果我是中本聪,我会怎么做,我的目标是什么,我要解决什么问题,等等。思考越多,就发现这个故事越有趣, 有趣程度甚至不输给比特币本身 。
#比特币[超话]# #数字货币# #欧易OKEx#
『柒』 深入了解区块链的共识机制及算法原理
所谓“共识机制”,是通过特殊节点的投票,在很短的时间内完成对交易的验证和确认;对一笔交易,如果利益不相干的若干个节点能够达成共识,我们就可以认为全网对此也能够达成共识。再通俗一点来讲,如果中国一名微博大V、美国一名虚拟币玩家、一名非洲留学生和一名欧洲旅行者互不相识,但他们都一致认为你是个好人,那么基本上就可以断定你这人还不坏。
要想整个区块链网络节点维持一份相同的数据,同时保证每个参与者的公平性,整个体系的所有参与者必须要有统一的协议,也就是我们这里要将的共识算法。比特币所有的节点都遵循统一的协议规范。协议规范(共识算法)由相关的共识规则组成,这些规则可以分为两个大的核心:工作量证明与最长链机制。所有规则(共识)的最终体现就是比特币的最长链。共识算法的目的就是保证比特币不停地在最长链条上运转,从而保证整个记账系统的一致性和可靠性。
区块链中的用户进行交易时不需要考虑对方的信用、不需要信任对方,也无需一个可信的中介机构或中央机构,只需要依据区块链协议即可实现交易。这种不需要可信第三方中介就可以顺利交易的前提是区块链的共识机制,即在互不了解、信任的市场环境中,参与交易的各节点出于对自身利益考虑,没有任何违规作弊的动机、行为,因此各节点会主动自觉遵守预先设定的规则,来判断每一笔交易的真实性和可靠性,并将检验通过的记录写入到区块链中。各节点的利益各不相同,逻辑上将它们没有合谋欺骗作弊的动机产生,而当网络中有的节点拥有公共信誉时,这一点尤为明显。区块链技术运用基于数学原理的共识算法,在节点之间建立“信任”网络,利用技术手段从而实现一种创新式的信用网络。
目前区款连行业内主流的共识算法机制包含:工作量证明机制、权益证明机制、股份授权证明机制和Pool验证池这四大类。
工作量证明机制即对于工作量的证明,是生成要加入到区块链中的一笔新的交易信息(即新区块)时必须满足的要求。在基于工作量证明机制构建的区块链网络中,节点通过计算随机哈希散列的数值解争夺记账权,求得正确的数值解以生成区块的能力是节点算力的具体表现。工作量证明机制具有完全去中心化的优点,在以工作量证明机制为共识的区块链中,节点可以自由进出。大家所熟知的比特币网络就应用工作量证明机制来生产新的货币。然而,由于工作量证明机制在比特币网络中的应用已经吸引了全球计算机大部分的算力,其他想尝试使用该机制的区块链应用很难获得同样规模的算力来维持自身的安全。同时,基于工作量证明机制的挖矿行为还造成了大量的资源浪费,达成共识所需要的周期也较长,因此该机制并不适合商业应用。
2012年,化名Sunny King的网友推出了Peercoin,该加密电子货币采用工作量证明机制发行新币,采用权益证明机制维护网络安全,这是权益证明机制在加密电子货币中的首次应用。与要求证明人执行一定量的计算工作不同,权益证明要求证明人提供一定数量加密货币的所有权即可。权益证明机制的运作方式是,当创造一个新区块时,矿工需要创建一个“币权”交易,交易会按照预先设定的比例把一些币发送给矿工本身。权益证明机制根据每个节点拥有代币的比例和时间,依据算法等比例地降低节点的挖矿难度,从而加快了寻找随机数的速度。这种共识机制可以缩短达成共识所需的时间,但本质上仍然需要网络中的节点进行挖矿运算。因此,PoS机制并没有从根本上解决PoW机制难以应用于商业领域的问题。
股份授权证明机制是一种新的保障网络安全的共识机制。它在尝试解决传统的PoW机制和PoS机制问题的同时,还能通过实施科技式的民主抵消中心化所带来的负面效应。
股份授权证明机制与董事会投票类似,该机制拥有一个内置的实时股权人投票系统,就像系统随时都在召开一个永不散场的股东大会,所有股东都在这里投票决定公司决策。基于DPoS机制建立的区块链的去中心化依赖于一定数量的代表,而非全体用户。在这样的区块链中,全体节点投票选举出一定数量的节点代表,由他们来代理全体节点确认区块、维持系统有序运行。同时,区块链中的全体节点具有随时罢免和任命代表的权力。如果必要,全体节点可以通过投票让现任节点代表失去代表资格,重新选举新的代表,实现实时的民主。
股份授权证明机制可以大大缩小参与验证和记账节点的数量,从而达到秒级的共识验证。然而,该共识机制仍然不能完美解决区块链在商业中的应用问题,因为该共识机制无法摆脱对于代币的依赖,而在很多商业应用中并不需要代币的存在。
Pool验证池基于传统的分布式一致性技术建立,并辅之以数据验证机制,是目前区块链中广泛使用的一种共识机制。
Pool验证池不需要依赖代币就可以工作,在成熟的分布式一致性算法(Pasox、Raft)基础之上,可以实现秒级共识验证,更适合有多方参与的多中心商业模式。不过,Pool验证池也存在一些不足,例如该共识机制能够实现的分布式程度不如PoW机制等
这里主要讲解区块链工作量证明机制的一些算法原理以及比特币网络是如何证明自己的工作量的,希望大家能够对共识算法有一个基本的认识。
工作量证明系统的主要特征是客户端要做一定难度的工作来得到一个结果,验证方则很容易通过结果来检查客户端是不是做了相应的工作。这种方案的一个核心特征是不对称性:工作对于请求方是适中中的,对于验证方是易于验证的。它与验证码不同,验证码是易于被人类解决而不是易于被计算机解决。
下图所示的为工作量证明流程。
举个例子,给个一个基本的字符创“hello,world!”,我们给出的工作量要求是,可以在这个字符创后面添加一个叫做nonce(随机数)的整数值,对变更后(添加nonce)的字符创进行SHA-256运算,如果得到的结果(一十六进制的形式表示)以“0000”开头的,则验证通过。为了达到这个工作量证明的目标,需要不停地递增nonce值,对得到的字符创进行SHA-256哈希运算。按照这个规则,需要经过4251次运算,才能找到前导为4个0的哈希散列。
通过这个示例我们对工作量证明机制有了一个初步的理解。有人或许认为如果工作量证明只是这样一个过程,那是不是只要记住nonce为4521使计算能通过验证就行了,当然不是了,这只是一个例子。
下面我们将输入简单的变更为”Hello,World!+整数值”,整数值取1~1000,也就是说将输入变成一个1~1000的数组:Hello,World!1;Hello,World!2;...;Hello,World!1000。然后对数组中的每一个输入依次进行上面的工作量证明—找到前导为4个0的哈希散列。
由于哈希值伪随机的特性,根据概率论的相关知识容易计算出,预计要进行2的16次方次数的尝试,才能得到前导为4个0的哈希散列。而统计一下刚刚进行的1000次计算的实际结果会发现,进行计算的平均次数为66958次,十分接近2的16次方(65536)。在这个例子中,数学期望的计算次数实际就是要求的“工作量”,重复进行多次的工作量证明会是一个符合统计学规律的概率事件。
统计输入的字符创与得到对应目标结果实际使用的计算次数如下:
对于比特币网络中的任何节点,如果想生成一个新的区块加入到区块链中,则必须解决出比特币网络出的这道谜题。这道题的关键要素是工作量证明函数、区块及难度值。工作量证明函数是这道题的计算方法,区块是这道题的输入数据,难度值决定了解这道题的所需要的计算量。
比特币网络中使用的工作量证明函数正是上文提及的SHA-256。区块其实就是在工作量证明环节产生的。旷工通过不停地构造区块数据,检验每次计算出的结果是否满足要求的工作量,从而判断该区块是不是符合网络难度。区块头即比特币工作量证明函数的输入数据。
难度值是矿工们挖掘的重要参考指标,它决定了旷工需要经过多少次哈希运算才能产生一个合法的区块。比特币网络大约每10分钟生成一个区块,如果在不同的全网算力条件下,新区块的产生基本都保持这个速度,难度值必须根据全网算力的变化进行调整。总的原则即为无论挖矿能力如何,使得网络始终保持10分钟产生一个新区块。
难度值的调整是在每个完整节点中独立自动发生的。每隔2016个区块,所有节点都会按照统一的格式自动调整难度值,这个公式是由最新产生的2016个区块的花费时长与期望时长(按每10分钟产生一个取款,则期望时长为20160分钟)比较得出来的,根据实际时长一期望时长的比值进行调整。也就是说,如果区块产生的速度比10分钟快,则增加难度值;反正,则降低难度值。用公式来表达如下:
新难度值=旧难度值*(20160分钟/过去2016个区块花费时长)。
工作量证明需要有一个目标值。比特币工作量证明的目标值(Target)的计算公式如下:
目标值=最大目标值/难度值,其中最大目标值为一个恒定值
目标值的大小与难度值成反比,比特币工作量证明的达成就是矿中计算出来的区块哈希值必须小于目标值。
我们也可以将比特币工作量的过程简单的理解成,通过不停变更区块头(即尝试不同nonce值)并将其作为输入,进行SHA-256哈希运算,找出一个有特定格式哈希值的过程(即要求有一定数量的前导0),而要求的前导0个数越多,难度越大。
可以把比特币将这道工作量证明谜题的步骤大致归纳如下:
该过程可以用下图表示:
比特币的工作量证明,就是我们俗称“挖矿”所做的主要工作。理解工作量证明机制,将为我们进一步理解比特币区块链的共识机制奠定基础。
『捌』 比特币有被完全挖完的一天吗比特币是如何挖出来的
每10min就会有一块BTC被挖掘出来,因为市场竞争这么剧烈,12.5比特币的区块链奖赏将根据其在这一过程中的哈希率奉献在竞争者中间进行分配。大部分BTC采掘也被挖币大农场和开采池所取代,因而,为了获得一些BTC,你必须加入其中一个或另一个开采池,并奉献你所能贡献的一切哈希率。应用传统的个人计算机,乃至GPU服务平台可能需要好多个月的时间才可以挣到BTC,由于ASIC芯片目前在BTC采掘行业占有主导性。
调整后的难度系数促使每形成一个区块链的预期时间为10min。现今难易度约为480PH/s,约是创世区块的680亿倍左右,换句话说,以现在的算率,各大网站挖矿需要经过约3000万亿元亿个哈希运算才能找到一个符合条件的回答,形成一个新的区块链。即使是能够证明你挖掘出来的BTC或者其他的加密数字货币是真实的,可是只不过是临时存有其他人帐户。一般这种手机上云挖矿方式都是要达到一定的总数之后才可以转币,而达到这一周期时间或是门坎必须很长一段时间,已经足够别人跑路了。
『玖』 銆愬尯鍧楅摼銆戞瘮鐗瑰竵濡備綍纭淇濅笉瓒呭彂锛
姣旂壒甯佹槸涓绉嶉氱缉鍨嬭櫄鎷熻揣甯併
涓轰粈涔堟槸2100涓囧憿锛 鍏充簬杩欎釜鏁扮洰鏉ョ敱鐨勭寽娴嬫湁璁稿氾紝鍏朵腑姣旇緝闈犺氨鐨勭瓟妗堟槸锛
濡傛灉澶у跺圭數鑴戝唴閮ㄥ瓨鍌ㄥ拰浜岃繘鍒跺崄鍏杩涘埗鏈変竴浜涙傚康锛屼細鐭ラ亾涓涓32浣嶆暣鏁帮紝涔熷氨鏄 FFFF FFFF鍙浠ュ瓨鍌ㄧ殑鏈澶ф暣鏁版槸2鐨32娆℃柟鍑1锛屽張鍥犱负棣栦綅瑕佺敤鏉ユ樉绀虹﹀彿锛屾墍浠ユ渶澶ф槸2鐨31娆℃柟鍑1锛屼篃灏辨槸2100涓囧氫竴浜涖
涓轰簡鑳借╂瘮鐗瑰竵鐨勬暟瀛楄兘鐢ㄤ竴涓甯︾﹀彿鐨32浣嶆暣鏁拌〃绀猴紝鎵浠ヨ皟鏁村墠闈㈠嚑涓鍙傛暟锛屾渶鍚庡緱鍑轰簡2100涓囦釜鐨勭粨鏋溿
姣旂壒甯10鍒嗛挓浼氫骇鐢熶竴涓鍖哄潡锛屾瘡灏忔椂6涓鍖哄潡鐨勯熷害涔樹互 24灏忔椂锛堟瘡澶 锛夛紝鍐嶄箻浠365澶╋紙涓骞达級 锛屾渶鍚庝箻涓4骞达紙涓涓鍛ㄦ湡锛夛紝缁撴灉鏄涓涓鍛ㄦ湡鍏变骇鐢21涓囦釜鍖哄潡銆傛墍鏈夊尯鍧楃殑濂栧姳浠50鍒25鍐嶅埌12.5閫愭笎閫掑噺锛屾墍浠ヤ竴鍏辨槸 50 + 25 + 12.5 + 6.25 + 3.125 ...= 100鐨勫栧姳锛屼袱鏁扮浉涔樺垯鍙浠ュ緱鍒2100涓囨瘮鐗瑰竵鐨勬婚噺銆
涓鏈鑱鍦ㄨ捐℃瘮鐗瑰竵鏃惰勫畾姣忎釜姣旂壒甯佸彲浠ョ粏鍒嗗埌灏忔暟鐐瑰悗8浣嶏紝鏈灏忓崟浣嶄负鑱(1鑱鏄0.00000001涓姣旂壒甯)銆
鏈鍒濇瘡涓鍖哄潡鍙戣50涓姣旂壒甯侊紝姣21涓囦釜鍖哄潡鍚庢瘡涓鍖哄潡鐨勪骇閲忓噺鍗娿
鍥犱负姣旂壒甯佹瘡10鍒嗛挓浜х敓涓涓鍖哄潡锛21涓囦釜鍖哄潡澶х害鏄4骞存椂闂达紱涓鑸姣忓埌姣旂壒甯佹暟閲忓噺鍗婃椂涔熶細鏄姣旂壒甯佷环鏍间笂涓涓鍙伴樁鐨勬椂闂淬傝繖涓姣旇緝瀹规槗鐞嗚В鍥犱负浜ч噺鍑忓皯浜嗭紝鑷鐒朵細瀵艰嚧浠锋牸涓婃定鍢涖
鎴姝2017骞存瘮鐗瑰竵宸茬粡缁忓巻涓ゆ″噺鍗婏紝褰撳墠姣忎釜鍖哄潡濂栧姳鐨勬瘮鐗瑰竵鏄12.5鏋氥
澶х害鍦2045骞99.95%鐨勬瘮鐗瑰竵灏嗗彂琛屽畬姣曪紝鍒2140骞存瘮鐗瑰竵鏃犳硶缁х画缁嗗垎锛岃嚦姝ゆ瘮鐗瑰竵瀹屽叏鍙戣屽畬姣曘
鑷2140骞存瘮鐗瑰竵鍙戣屾婚噺涓2100涓囨灇锛屽疄闄呭ぇ绾︽槸20999999.97690000鏋氾紝姣2100涓囧皯涓鐐广
姣旂壒甯佹嫢鏈変笌浼犵粺缁忔祹浣跨敤鐨勮揣甯侊紝濡傜編鍏冩垨榛勯噾绛夛紝涓嶅悓鐨勭壒鎬с備紶缁熺殑璐у竵锛屽傜編鍏冿紝鏄鍩轰簬鍊哄姟锛岃繖鏄娉曞畾璐у竵鐨勫浐鏈夌壒鎬с傜劧鑰岋紝姣旂壒甯佸彲鑳藉逛俊璐锋墿寮犳洿鍏锋湁鎶靛尽鎬э紝鍥犱负瀹冩湰韬骞朵笉涓庡哄姟鎸傞挬銆
鍥犳わ紝鍦ㄥ熀浜庢瘮鐗瑰竵鐨勭粡娴庝綋涓锛屽湪缁忔祹宕╂簝鍜岄氳揣绱х缉鐨勬儏鍐典笅锛屽哄姟瀹為檯浠峰煎為暱鐨勫奖鍝嶅彲鑳戒笉濡備汉浠鎯宠薄鐨勯偅涔堜弗閲嶃
杩欎娇鍩轰簬姣旂壒甯佺殑缁忔祹浣撲腑鐨勫哄姟閫氱缉婕╂丁璁虹偣鍙樺緱涓嶉偅涔堥噸瑕併傚湪鎴戜滑鐪嬫潵锛岃繖鏄寰堝氭瘮鐗瑰竵璇勮哄跺湪璇勪及姣旂壒甯侀氳揣绱х缉璐у竵鏀跨瓥鐨勫姡鍔挎椂蹇界暐鐨勪竴鐐广
灏界℃瘮鐗瑰竵閫氱缉鐨勮揣甯佹斂绛栨槸鍚﹀悎鐞嗭紝鍦ㄨ揣甯佸︿笂浜夎寰堝ぇ锛屼絾杩欎竴鍙戣屾満鍒舵縺鍔辩潃鐭垮伐灏芥棭鎶曞叆鍒版瘮鐗瑰竵鎸栫熆涓锛屼娇寰楁瘮鐗瑰竵绯荤粺鑾峰緱澶ч噺绠楀姏纭淇濅簡绯荤粺鐨勫畨鍏ㄦс
姣旂壒甯佸彂琛屽畬姣曞悗濡備綍缁存寔鐭垮伐缁х画鎸栫熆鐨勭Н鏋佹у憿锛 杩欎釜澶у彲涓嶅繀蹇ц檻锛屾瘮鐗瑰竵闄や簡閫氳繃鈥滄寲鐭库濊幏寰楀栧姳澶栵紝鐭垮伐杩樺彲浠ラ氳繃浜ゆ槗鎵嬬画璐硅幏寰楁敹鐩娿傚叾瀹烇紝浠庢瘮鐗瑰竵鐨勫彂灞曞巻绋嬫潵鐪嬶紝鐪熸e奖鍝嶇熆宸ユ槸鍚︾户缁鎸栫熆鐨勫洜绱狅紝骞堕潪鏄鍚︽湁鐭垮彲鎸栵紝鑰屾槸鎸栫熆鐨勬敹鐩婂備綍銆
鍦ㄦ瘮鐗瑰竵浜ゆ槗閲忓炲姞銆佹墜缁璐瑰崌楂橈紱鎴栬呮瘮鐗瑰竵浠锋牸鍗囬珮鐨勬儏鍐典笅锛屾寲鐭挎敹鐩婂彲瑙傦紝鐭垮伐浠鐨勬姇鍏ョ儹鎯呴兘浼氱浉搴旈珮娑ㄣ傞偅涔堬紝鍙瑕佹瘮鐗瑰竵浠峰艰繕鍦锛屼笉绠′綍鏃舵寲鐭块兘浼氭湁鍒╂鼎锛屾绘湁鐭垮伐涓嶄細鍏冲仠鎵嬩腑鐨勬満鍣ㄣ