您的位置:网站首页 > 挖矿(POW/IDO/POS/减半) > 正 文 比特币

Bitcoin中的Block 哈希算法

【作者:fjbit】 来源:未知 日期:2011-9-10 18:23:40 人气: 标签:Bitcoin中的Block 哈希算法 【打印】

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

目的

更新的时候... ...

大小(字节)

版本号

Block的版本号

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

4

上一个哈希值

上一个哈希Block

有新的Block加入

32

Merkle根

基于所有的交易256位散列

一个交易是接受

32

时间戳

当前时间戳

每隔几秒钟

4

“位”

当前目标大压缩格式

复杂度自动调整

4

随机数

32位数字(从0开始)

散列值增量

4

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

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

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

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

例如,这段Python代码将计算散列2011年6月,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输出一样。
返回顶部】【关闭窗口 风险提示:本站分享转载的信息均来自互联网,且仅供阅读参考,不作为具体投资的依据,据此入市,风险自担。本站所有内容涉及到的“货币”字眼需谨慎研判,我们维护各国法币的合法地位,同时数字资产具有货币的某些属性,目前是不能替代任何国家的法定货币的,请谨慎理解投资并严格遵守各国法律法规!详见本站[免责声明]。】
【读完这篇文章后,可否发表您的感受?】
0
0
0
0
0
0
0
0
本文网址:
安全联盟站长平台 互联网举办平台 公共信息安全网监 中国网安 赛门铁克安全响应中心