经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 其他 » 区块链 » 查看文章
Bitcoin区块验证
来源:cnblogs  作者:failymao  时间:2018/10/19 8:59:07  对本文有异议

目录

区块的生成

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

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号