Author

Topic: 【研究会】Bitcoin中的Block 哈希算法(转) (Read 2949 times)

member
Activity: 64
Merit: 10
btc.com
擦,翻译软件搞的吧,语法不通顺。
看原文吧:https://en.bitcoin.it/wiki/Block_hashing_algorithm
newbie
Activity: 55
Merit: 0
sr. member
Activity: 560
Merit: 250
产生时,你不断地散列Bolck头。该Block也不间断会更新。一个Block头包含以下字段:



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输出一样。


转自http://www.cnblogs.com/wcs233/archive/2011/08/26/Bitcion.html
Jump to: