寫了一個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的時間記錄:
9個0就需要4天時間了:
我們可以大概預估下:
後面的就不跑了,btc目前前導19個0,可想而知像btc的挖礦難度了。
隨著0的數量的增加,計算的時長就越長:
我電腦的配置:AMD Ryzen 7 8845HS w/ Radeon 780M Graphics 3.80 GHz
這篇分享文章就到這裡啦!如果你對文章內容有疑問或想要深入討論,歡迎在評論區留言,我會盡力回答。同時,如果你覺得這篇文章對你有幫助,不妨點個贊並分享給其他同學,讓更多人受益。
想要了解更多相關知識,可以檢視我以往的文章,其中有許多精彩內容。記得關注我,獲取及時更新,我們可以一起學習、討論技術,共同進步。
感謝你的閱讀與支援,期待在未來的文章中與你再次相遇!
我的微信公眾號:【xdub】,歡迎大家訂閱,我會同步文章到公眾號上。