• Bitcoin中的Block 哈希算法


    产生时,你不断地散列Bolck头。该Block也不间断会更新。一个Block头包含以下字段:

    目的

    更新的时候... ...

    大小(字节)

    版本号

    Block的版本号

    您的软件升级,并指定一个新的版本

    4

    上一个哈希值

    上一个哈希Block

    有新的Block加入

    32

    Merkle

    基于所有的交易256位散列

    一个交易是接受

    32

    时间戳

    当前时间戳

    每隔几秒钟

    4

    当前目标大压缩格式

    复杂度自动调整

    4

    随机数

    32位数字(从0开始)

    散列值增量

    4

    Block结构体包含交易信息。这些只能间接通过Merkle根被散列。由于交易没有被直接散列,散列1个交易的Block10,000个交易的Block消耗相同的资源。

    对于所有用户来说,大多数域是相同的。时间戳可能有一些轻微的变化。随机数通常会不同,但它以严格的线性方式增长。随机数从0开始为每次散列递增。每当随机数溢出(它不经常),溢出部分产生的交易会递增,从而改变Merkle根。

    在这些领域,人们经常会产生的相互哈希完全相同的序列,而且最快的CPU几乎总是获胜 。但是,几乎不可能两个人具有相同的Merkle根,因为在你的Block中的第一笔交易是会发送到你一个唯一的Bitcoin地址。由于您的Block地址与其他人不同,你可以保证产生不同的散列。计算每个哈希散列的过程拥有和其他网络上计算拥有同样的获胜机会。

    Bitcoin使用SHA256SHA256Block_Header)),但你必须要小心字节顺序。

    例如,这段Python代码将计算散列20116月,Block125552,生成最小的哈希值。Blcok头是将上述六个域用小字节法排序串联一起为的十六进制表示法的值

      >>> import hashlib

      >>> header_hex = ("01000000" +

        "81cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000" +

        "e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0f1fc122b" +

        "c7f5d74d" +

        "f2b9441a" +

         "42a14695")

      >>> header_bin = header_hex.decode('hex')

      >>> hash = hashlib.sha256(hashlib.sha256(header_bin).digest()).digest()

      >>> hash.encode('hex_codec')

      '1dbd981fe6985776b644b173a4d0385ddc1aa2a829688d1e0000000000000000'

      >>> hash[::-1].encode('hex_codec')

      '00000000000000001e8d6829a8a21adc5d38d0a473b144b6765798e61f98bd1d'

    请注意,实际的哈希有大量的尾数为零的位,解释一个256位的大字节序的数(与SHA - 256的定义的大字节序列常数保持一致,但是当解释为bitcoin使用小字节序列排序,导致哈希头部出现大量的零位,这就如同例子中blockexplorer输出一样。
  • 相关阅读:
    jQuery工具函数
    jqXHR对象
    跨域获取
    Ajax :六个全局事件
    表单序列化
    Ajax : $. get()和$.post() $.getScript $.getJSON
    Ajax : load()
    列队动画
    关于MindManager显示不同级别的控制
    Mybatis 查询传多个参数(3中方法)
  • 原文地址:https://www.cnblogs.com/wcs233/p/Bitcion.html
Copyright © 2020-2023  润新知