• Bitcoin区块验证


    区块的生成

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

      • 将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

  • 相关阅读:
    【JZOJ4244】yi【贪心】
    【JZOJ4244】yi【贪心】
    基本赋值运算符
    自增自减运算符
    字符串的+操作
    算术运算符
    数据类型转换
    键盘输入使用
    基本数据类型长度
    变量
  • 原文地址:https://www.cnblogs.com/failymao/p/9814032.html
Copyright © 2020-2023  润新知