首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >区块链技术如何验证工作证明

区块链技术如何验证工作证明
EN

Stack Overflow用户
提问于 2018-08-06 14:18:51
回答 3查看 565关注 0票数 2

我正在通过一些在线示例学习区块链。我有一个高级代码,其中我正在使用先前的散列创建一个新的块,然后向其添加一个事务,然后生成该块的一个困难的散列(具有8个前导零

代码语言:javascript
复制
 Block block1 = new Block(previousHash);
 block1.addTransaction(new SomeTransaction());
 block1.mineBlock(difficulty);
 blockchain.add(block1);


public void mineBlock(int difficulty) {
    String target = StringUtil.getDificultyString(difficulty); //Create a string with difficulty * "0"
    while(!hash.substring( 0, difficulty).equals(target)) {
        nonce ++;
        hash = calculateHash();
    }
    System.out.println("Block Mined!!! : " + hash);
}

这样做效果很好。但我有一个问题,在将区块添加到区块链之前,如何验证此工作证明。

即假设生成了一个具有8个前导零的散列

代码语言:javascript
复制
000000005ed2248f32d7f2509e6291a998a6119b96b1227d27fe03cf21b8c908

区块链将如何确保此哈希实际上是有效的哈希,而不仅仅是具有8个前导零的随机字符序列?

EN

回答 3

Stack Overflow用户

发布于 2018-08-06 15:50:07

根据之前的块和您发现的nonce计算哈希值非常容易。不需要循环,只需要一次哈希计算,这是很快的。因此,当您将新的块添加到链中时,您还发布了随机数,他们只计算散列--这就是工作的证明。

票数 1
EN

Stack Overflow用户

发布于 2019-05-08 14:09:17

Simple Answer -检查是否

  1. 验证是否为当前数据块正确计算了哈希
  2. 数据块哈希的前缀没有一个大于或等于难度的零。

//验证当前块字符串hash计算是否正确hash = currentBlock.calculateHash();if(!currentBlock.hash.equals(hash)) { System.out.println("hash计算错误“);return false;} //验证是否正确挖掘块如果(!currentBlock.hash.substring(0,难度).equals(HashTarget)){System.out.println(”此块未被挖掘“);返回false;}

我已经在下面的文章和源代码中详细解释了它。请看一下。

Create your first (very) basic blockchain with Proof of Work

票数 0
EN

Stack Overflow用户

发布于 2021-03-09 13:12:01

验证很容易。

这是一个单步过程,验证器获取挖掘器提供的块头,其中包含随机数证明,并将其通过PoW拼图。它检查输出散列是否与挖掘器提供的相同,并且小于有效阈值。

在工作证明中,工作是由挖掘器进行的计算,用于计算尝试不同值的随机数的散列。并且证明是现时值,对于该值,它获得了小于难度阈值的有效散列。

区块链将如何确保此哈希实际上是有效的哈希,而不仅仅是具有8个前导零的随机字符序列?

这很棘手,因为在PoW中,随机数值是由挖掘器完成的计算工作的实际证明,而不是块散列。难度阈值是公开的,所以任何人都可以写下一个数学上小于这个阈值的随机有效散列并发布它,但这不会起作用,因为验证过程仍然需要nonce来验证证据,并且必须由挖掘器提供。因此,矿工别无选择,只能计算随机数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51701579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档