添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
沉着的水龙头  ·  How to handle ...·  10 月前    · 
心软的铁板烧  ·  C# ...·  1 年前    · 

比特币pow难度验证

何为POW

pow的全称为proof of work,即工作量证明。简单的解释为“做了多少工作”。抛开区块链的背景,pow就是对自己做了多少工作的一种说明:比如做了学习了50个小时的汽车驾驶。而他人很容易验证这个结果:你可能50个小时之后拿到了一本驾照。别人就知道你确实在学习驾驶上使用了50个小时。

Block Header

在区块链的世界里,pow的数据可以体现在区块链的区块头中。当然一般来说,讲解POW的难度离不开挖矿问题。本文因为主要讨论方向的问题,不展开讲挖矿,主要从区块头入手。在阅读下面的内容之前,默认读者已经有了如下前置知识

  • 区块链常识
  • 比特币基本概念
  • 挖矿基本概念
  • 抛开前置知识之后,我们来看区块头的数据结构。

    https://en.bitcoin.it/wiki/Protocol_documentation#Block_Headers

    可以直接参考以上链接,当然可以可以直接查看比特币的源码,我们现在把数据列出来。

    1
    2
    3
    4
    5
    6
    7
    8
    struct header_structure {      // BYTES   NAME
    uint32_t nVersion; // 4 version
    uint8_t hashPrevBlock[32]; // 32 previous block header hash
    uint8_t hashMerkleRoot[32]; // 32 merkle root hash
    uint32_t nTime; // 4 time
    uint32_t nBits; // 4 target
    uint32_t nNonce; // 4 nonce
    };

    现在逐条解释block header中的字段。

    nVersion 版本号,主要用来跟踪软件版本(bitcoin core)和协议号 现在固定为2

    hashPrevBlock 前一个节点的hash值,我们知道区块链的链,大致指的是数据链式存储。我们可以简单粗暴的理解为它是指向前置节点的链表。

    hashMerkleRoot 默克尔根,区块中所有交易组合起来生产成本的默克尔树的根。详情可参考数据结构“默克尔树”

    nTime 时间戳,标志块生成的时间

    nBits 和难度有关,本文讨论的重点

    nNonce 随机值,和难度有关,本文讨论的重点

    基本概念

    现在介绍基本概念,方便理解:

  • 挖矿是矿工之间互相竞争的结果,谁先算出有效区块,谁就可以得到块中的比特币奖励,它叫做coinbase,另外块中有交易,交易中蕴含的手续费也是矿工的奖励
  • 有效区块的意思是:区块头的SHA256结果要小于等于一个目标值(target)
  • merkleroot是矿工从内存池取出来的“交易”构建的。
  • 大致上是先构建,再验证
  •