主页 > 2023年最新imtoken钱包下载安卓 > 比特币区块哈希算法

比特币区块哈希算法

本文主要介绍比特币区块链上各个区块的地址是如何产生的。

block的header主要包括:

比特币使用两个哈希计算:SHA256(SHA256(Block_Header))

以高度为1的区块为例,其地址为00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048:

比特币就是一个算法吗

$ curl https://blockchain.info/rawblock/00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048
{
    "hash":"00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048",
    "ver":1,
    "prev_block":"000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f",
    "mrkl_root":"0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098",
    "time":1231469665,
    "bits":486604799,
    "fee":0,
    "nonce":2573394689,
    "n_tx":1,
    "size":215,
    "block_index":14850,
    "main_chain":true,
    "height":1,
......

首先连接ver、prev_block、mrkl_root、time、bits、nonce得到header_hex。

比特币就是一个算法吗

拼接前需要先将ver、time、bits、nonce转换为16进制字符串,再将这6个属性从big endian转换为little endian比特币就是一个算法吗,最后拼接成字符串。

Big-endian 和 little-endian 是计算机硬件存储地址排列的两个通用规则。简而言之比特币就是一个算法吗,高位字节为大端顺序,符合人类认知;低位字节是小端顺序。 Endian,这是因为电路计算从低位开始,便于计算机计算,也符合人的计算方法。详情请参考阮一峰的《理解字节序》。

比特币就是一个算法吗

# Source: https://livc.io
import hashlib, struct
ver = 1
prev_block = "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f"
mrkl_root = "0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098"
time = 1231469665
bits = 486604799
nonce = 2573394689
def deal_str(big_endian):
    # [::-1] 改变字节序
    return big_endian.decode("hex")[::-1]
def deal_int(n):
    # < 代表小端序
    # L 代表 unsigned long
    return struct.pack("

其中deal_int(time) + deal_int(bits) + deal_int(nonce)也可以通过stack.pack(".

比特币就是一个算法吗

然后进行两次 sha256 计算。这一步就是挖矿要做的:找到一个使结果满足一定条件的nonce(比如前八位都是0)。

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

比特币就是一个算法吗

最后将结果转回大端,即当前块的地址。

cur_block = hash[::-1].encode('hex')
print(cur_block)
> 00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048

参考

区块哈希算法

来源: