【问题标题】:How Blockchain technology verifies proof of work区块链技术如何验证工作量证明
【发布时间】:2018-08-06 06:18:50
【问题描述】:

我正在通过一些在线示例学习区块链。 我有这个高级代码,我正在使用以前的哈希创建一个新块,然后向它添加一个事务,然后生成该块的一个困难哈希(带有 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 个前导零的随机字符序列?

【问题讨论】:

  • 借助之前的hash和nonce值?

标签: java blockchain bitcoin


【解决方案1】:

根据前一个块和您发现的 nonce 计算哈希非常容易。不需要循环,只需一次哈希计算,速度很快。 因此,当您将新区块添加到链中时,您也发布了 nonce,它们只计算哈希值——这就是工作量证明。

【讨论】:

    【解决方案2】:

    验证很容易。

    这是一个一步的过程,验证者获取矿工提供的包含随机数证明的块头,并将其传递给 PoW 难题。它检查输出哈希是否与矿工提供的相同并且小于有效的阈值。

    在工作量证明中,工作是矿工完成的计算,用于计算哈希值并尝试不同的随机数值。 证明是随机值,它得到的有效哈希值小于难度阈值。

    区块链如何确保这个散列实际上是一个有效的散列,而不仅仅是一个带有 8 个前导零的随机字符序列?

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

    【讨论】:

      【解决方案3】:

      简单答案 - 检查是否

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

        // Validating if hash is computed correctly for current block
            String hash = currentBlock.calculateHash();
            if(!currentBlock.hash.equals(hash)) {
                System.out.println("hash is computed incorrectly");
                return false;
            }
        
        // Validate if block is mined correctly
           if(!currentBlock.hash.substring(0, difficulty).equals(hashTarget)) {
               System.out.println("This block hasn't been mined");
               return false;
           }
        

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-07
        • 1970-01-01
        • 2023-03-15
        相关资源
        最近更新 更多