码迷,mamicode.com
首页 > 其他好文 > 详细

Bitcoin区块验证

时间:2018-10-19 02:25:38      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:ref   roo   二叉树   --   哈希   href   nba   难度   ash   

目录

区块的生成

  • 矿工在挖矿前要组建区块

    • 将coinbase交易打包进区块

    • 将交易池中高优先级的交易打包进区块

      • 优先级 = 交易的额度 * UTXO的深度/交易的size
      • 防粉尘攻击
    • 创建区块的头部

      版本号|父区块哈希|Merkle树根|时间戳|难度值|Nonce

      ?

  • 挖矿成功后,将计算出来的随机数noncet填入区块头部,向临近节点传播

区块的验证链接

验证过程

  • 相邻节点收到新区快后,立即做以下检查
    • 验证Pow的nonce值是否符合难度值
    • 检查时间戳是否小于当前时间2小时(10分钟一个块)
    • 检查Merkle树根是否正确
    • 检查区块size要小于区块size的上限
    • 第一笔交易必须是coinbase的交易
    • 验证每笔交易

Merkle Tree结构

二叉树

  • 树--由多个节点组成的一种数据结构

    • 每个节点存储数据
    • 根节点root
    • 父节点,子节点,兄弟节点
  • 构建二叉搜索数

    • 12 5 2 18 19 15 17 16 9

      ?

    技术分享图片

Merkle Tree

  • 防止数据篡改

  • 快速验证某个交易是否存在

  • 节点存储Hash值

  • 从子节点构造树

    技术分享图片

Merkle Path - 验证路径

  • 只需log2(N)个已知数,即可验证K是否被包含在区块中

    • H[^K]为查找交易

    • H[^ABCDEFGH]和H[^MNOP]及H[^IJ] 为临近已知父节点

    • H[^L]为相邻节点交易Hash

      技术分享图片

      ?

Bitcoin区块验证

标签:ref   roo   二叉树   --   哈希   href   nba   难度   ash   

原文地址:https://www.cnblogs.com/failymao/p/9814032.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!