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

 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个前导零的哈希

000000005ed2248f32d7f2509e6291a998a6119b96b1227d27fe03cf21b8c908


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

最佳答案

根据先前的块和您发现的随机数来计算哈希非常容易。不需要循环,只需要进行一次哈希计算即可,这很快。
因此,当您将新块添加到链中时,您还将发布随机数,并且它们仅计算哈希值-这就是工作量的证明。

10-06 09:23