You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何MD5哈希无前置零?比特币挖矿模拟实现技术疑问

你的比特币挖矿模拟思路整体没问题,但关键条件写错啦!

嘿,先给你吃个定心丸:你的核心实现思路是对的——通过拼接交易哈希、加入递增的nonce生成新哈希,直到找到满足前置零数量要求的结果,这完全符合比特币挖矿的核心逻辑。不过你代码里的致命错误导致循环永远不会终止,这也是你跑了几十万次都没结果的原因,咱们一步步拆解:

1. 最致命的错误:循环终止条件的变量引用错误

你已经发现break的条件有问题,咱们具体看:
原代码里的判断条件是:

if len(previousHash) - len(previousHash.lstrip('0')) > leadingZeros:

这里你一直在比较previousHash的前置零数量和leadingZeros(而leadingZeros本身就是previousHash的前置零数),这个条件永远是False,循环自然永远停不下来!

正确的逻辑应该是检查新生成的hashAttempt的前置零数量是否满足要求,比如你想要比前序哈希更多前置零,或者直接指定2个前置零:

# 计算当前尝试哈希的前置零数
current_zeros = len(hashAttempt) - len(hashAttempt.lstrip('0'))
# 两种终止条件选其一:
# 条件1:比前序哈希的前置零更多(原需求)
if current_zeros > leadingZeros:
# 条件2:至少有2个前置零(你原本期望的目标)
# if current_zeros >= 2:
    blockHeader = hashAttempt
    print(f"It took {i} attempts to solve the algorithm. The new block header is {hashAttempt}")
    break

2. 其他可以优化的细节(不影响核心逻辑,但更贴近真实挖矿)

  • 哈希算法选择:比特币实际用的是SHA-256算法,你代码里交易哈希用了SHA-256,但挖矿阶段用了MD5,虽然演示没问题,但统一用SHA-256会更贴合真实场景。
  • 交易哈希拼接方式:你用" "作为拼接前缀,会导致哈希结果包含这个空格的影响,真实场景里是用默克尔根(把交易哈希两两哈希直到得到一个根哈希),不过你用简单拼接作为简化模拟是没问题的。
  • 难度目标的明确性:你传入的previousHash是"01adf44c7d69767585",它的前置零只有1个,所以你的目标应该是找到至少2个前置零的哈希,平均大概256次迭代就能命中(因为每一位十六进制字符是0的概率是1/16,两位就是1/256),这和你原本期望的数百次完全吻合。

修正后的核心循环示例

把你的while循环改成这样,就能正常终止了:

i = 0
leadingZeros = len(previousHash) - len(previousHash.lstrip('0'))
# 可以直接明确目标难度,比如要2个前置零
target_zeros = max(leadingZeros + 1, 2)
while True:
    i += 1
    nonce = hashString + str(i)
    # 统一用SHA-256更贴合真实挖矿
    hashAttempt = hashlib.sha256(nonce.encode()).hexdigest()
    # print(f"Iteration {i}: New hash -> {hashAttempt}")  # 可以注释掉频繁打印,提升速度
    current_zeros = len(hashAttempt) - len(hashAttempt.lstrip('0'))
    if current_zeros >= target_zeros:
        blockHeader = hashAttempt
        print(f"It took {i} attempts to solve the algorithm. The new block header is {hashAttempt}")
        break

总的来说,你的思路完全没问题,只是在条件判断时犯了一个低级的变量引用错误,修正后就能正常运行啦~

内容的提问来源于stack exchange,提问作者78282219

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:43:43