写了一个python代码用来模拟计算当hash前面有N个0时需要多长时间。
代码如下:
import hashlib
import time
from datetime import timedelta
from plyer import notification
def find_hash_with_prefix_zeros(prefix_length=6):
# 初始字符串
base_text = "Hello, World!"
# 计数器
counter = 0
while True:
# 构建新的字符串
text = f"{base_text}{counter}"
# 计算哈希值
hash_value = hashlib.sha256(text.encode()).hexdigest()
# print(f"hash_value:{hash_value}")
# 检查哈希值前缀是否包含指定数量的0
if hash_value.startswith('0' * prefix_length):
notification.notify(
title="通知",
message="hash计算完成",
app_name="hash计算",
timeout=10 # 通知显示的时间,单位为秒
)
print(f"Found after {counter} attempts:")
print(f"Text: {text}")
print(f"Hash: {hash_value} prefix_length={prefix_length}")
break
# 增加计数器
counter += 1
# print(f"counter:{counter}")
# 计算某个函数需要运行多长时间
def measure_runtime(func, *args, **kwargs):
# 记录开始时间
start_time = time.time()
# 调用函数
func(*args, **kwargs)
# 记录结束时间
end_time = time.time()
# 计算运行时间(秒)
runtime_seconds = end_time - start_time
# 将运行时间转换为 timedelta 对象
runtime = timedelta(seconds=runtime_seconds)
# 打印运行时间,格式为小时:分钟:秒
print(f"函数运行时间: {runtime}")
def main():
# 调用函数,寻找前缀包含N个0的哈希值
measure_runtime(find_hash_with_prefix_zeros, prefix_length=6)
if __name__ == '__main__':
main()
计算过程打印日志如下:
hash前面N个0的时间记录:
hash前面几个0 |
计算的时长 |
1 |
1毫秒 |
2 |
1毫秒 |
3 |
1毫秒 |
4 |
0.24秒 |
5 |
1.35秒 |
6 |
10.97秒 |
7 |
3分31秒 |
8 |
1小时28分 |
9 |
4天 |
9个0就需要4天时间了:
我们可以大概预估下:
10 |
40天 |
11 |
400天 |
后面的就不跑了,btc目前前导19个0,可想而知像btc的挖矿难度了。
随着0的数量的增加,计算的时长就越长:
我电脑的配置:AMD Ryzen 7 8845HS w/ Radeon 780M Graphics 3.80 GHz
这篇分享文章就到这里啦!如果你对文章内容有疑问或想要深入讨论,欢迎在评论区留言,我会尽力回答。同时,如果你觉得这篇文章对你有帮助,不妨点个赞并分享给其他同学,让更多人受益。
想要了解更多相关知识,可以查看我以往的文章,其中有许多精彩内容。记得关注我,获取及时更新,我们可以一起学习、讨论技术,共同进步。
感谢你的阅读与支持,期待在未来的文章中与你再次相遇!
我的微信公众号:【xdub】,欢迎大家订阅,我会同步文章到公众号上。
标签:hash,前面,counter,模拟计算,prefix,time,print,runtime From: https://www.cnblogs.com/shuinanxun/p/18554334