建议和反馈

请填写你的反馈内容

问答 > 比特币 > 问答详情
已解决

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

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


2019-07-19
0
请先登陆或注册

公子不笑2019-07-19

根据前面的块和你发现的nonce计算哈希很容易。不需要循环,只需要一个哈希计算,这很快。因此,当您将新块添加到链中时,您还会发布nonce,它们只是计算哈希 - 这就是工作的证明。

投一票
评论(0)
赞赏(0)
千羽凡尘2019-07-19
  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;
       }

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

使用工作证明创建您的第一个(非常)基本区块链


投一票
评论(0)
赞赏(0)
邀请

感谢您的善举,每一次解答会成为新人的灯塔,回答被采纳后获得20算力和相应的LK币奖励