主页 > 2023年最新imtoken钱包下载安卓 > 比特币区块哈希算法
比特币区块哈希算法
2023年最新imtoken钱包下载安卓 2023-05-05 05:35:50
本文主要介绍比特币区块链上各个区块的地址是如何产生的。
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
参考
区块哈希算法
来源: