关于区块链POW的一些疑问

从网络了解到比特币的挖矿是对nonce的枚举,而我在比特币的网上看到的一些新增的区块的nonce都是十亿级的数字,那是不是就意味着他们枚举了几十亿次,但实际计算次数肯定不止那么少吧,所以nonce值或者说工作量证明到底和计算次数有没实际联系呢?

1个回答

特币需要每个block(区块)证明在创建它们的过程中投入了足够都的工作量,从而确保那些想篡改历史区块信息的恶意节点必须要付出更多工作量的代价,而不是只是修改一条记录那么简单——工作量证明。
将区块链在一起(hash相连相扣)使得只修改一个交易而不修改所有后续交易成为不可能。

工作量证明(Proof-of-Work)
使用SHA-256对一个value进行hash,看结果是否拥有所要求数量的前导零,比如我们要求hash得到的值为 0000……,拥有四个前导零。在比特币中,我们是对一个block进行SHA-256哈希,为此我们将一个nonce加入到block中,你可以理解为这个nonce是一个值可以变得整数,这样我们就可以不断递增这个nonce,直到整个block的hash结果拥有所要求的前导零。
这里写图片描述

有人想恶意篡改某一个block上的交易信息,因为这是一个前后相接的区块链,他就不得不把该block之后的所有区块都以他恶意篡改后的block为基准重新计算一遍,代价巨大。与一IP一票不同(恶意攻击者如果掌控大量IP发放权十分危险),比特币是一CPU一票的机制,意味着算力拥有决定权,网络中以最长的那条区块链为合法链,它代表着最大的工作量证明。如果网络中大多数(51%以上)的算力由诚实节点掌控,那么这些诚实节点产生的合法链会增长的最快,超过任何一条与之竞争长度的链,进而防止恶意发生。正如前面所说,如果一个攻击者要修改过去的某一个block,他需要重新做这个block以及它之后所有block的工作量证明,然后需要赶上并超过那条由诚实节点们打造的合法链。但是随着合法连继续添加新的block,该攻击者追上的可能性是指数下降的。

u011606457
_1_1_7_ 回复gu330: 对的
一年多之前 回复
gu330
NAUYNUJUG 回复u011606457: 那就是说算力小的理论上只能碰运气或者加入到大的集团来分成?
一年多之前 回复
u011606457
_1_1_7_ 回复gu330: 意味着算力拥有决定权,网络中以最长的那条区块链为合法链,它代表着最大的工作量证明
一年多之前 回复
u011606457
_1_1_7_ 回复gu330: 因为竞争
一年多之前 回复
gu330
NAUYNUJUG 回复u011606457: 那为何现在很多矿机一秒能作几亿次hash运算了,几十亿的nonce值不是一下就出来了吗,那为何这些矿机一天也才挖到百分之几个比特币
一年多之前 回复
u011606457
_1_1_7_ 回复gu330: pow那段文字已经说明很清楚了,好好体会。可以 理解“pow反映的是枚举的次数”
一年多之前 回复
gu330
NAUYNUJUG 你好,还是没有解决我的问题,我想知道的是pow反映的是枚举的次数吗,如果是的话,几十亿次对计算机显然太少,如果不是,那pow和挖到这个区块计算的次数有什么关系呢?
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!

相似问题

4
java的Math.pow源码看到了这句 if (x != x || y != y),是什么意思呀?
1
(用code blocks)pow函数没有得到100得到的是99?
1
C语言怎么用递归输出2的64次方
0
螺旋方阵的新的程序设计,求助大佬
1
图像清晰度检测,这是我在网上看到的检测图像清晰度的算法, 有没有知道这是根据什么公式得来的啊
3
题目是:请问这个代码哪里要改进,我提交一直显示输入为实数 答案错误。
3
关于float类型在计算机中的二进制表示的疑问
1
程序调试显示run-time check failure #2,stack around the variable 'xxx' was corrupted
1
java 给图片打上水印发现,图片的大小缩小了原来是70KB打完水印变为30KB
2
整数幂计算的一个程序
0
tensorflow中我的网络输出层有4个节点,但最终结果只需要用到第4个节点的输出,现在有如下报错,如何解决?
0
tensorflow报错说我too mnay indices for array 怎么解决?
2
求教大佬,用C语言写出所有三位数的水仙花数,我用了pow函数,结果少输了一个水仙花数
0
leetcode第二题,代码能在本机上正常运行,但提交就会出错!
3
用C语言实现求输入的一串数的平均值,方差和标准差(找错)
1
如何把这个段代码不改变意思 更改成一个跟为简便的方法
2
java中怎么给一个数开三次方?注:math.pow(double a,double b)不准确
0
unity shader实现的水流效果在安卓上变成块状方片在流动,PC和IOS正常
0
按要求输入后没有输出,然后显示Process exited...return value 3221225477,请问是为什么?
2
vs2008+cuda5.0环境下运行cuda代码,在调试时总发生异常(0xC0000005: 读取位置 时发生访问冲突)